Wednesday, April 16, 2014

Multiple Sessions in VMware Horizon View

When connecting to a floating pool using the View client, a user ended up receiving a new session despite having an existing session on another VM.

Analysis showed two desktop launch requests that came in from the same client connection in quick succession, spaced two seconds apart. Client log files imply the most likely scenario is that the user requested the desktop, immediately hit cancel on the wait dialog after the request was dispatched, and then launched it a second time. The View Connection Server correctly identified an existing disconnected session for the user while processing the first request at 13:18:57 for example, and provided the client with details to reconnect. The client dropped the Connection Server's response and sent a second request at 13:18:59. This in turn was routed to the same VM, but the request was rejected as the first connection was still being set up by the View Agent. At this point the Connection Server then fell back to providing the user with a new session as the original was unavailable.

Solution:
View 5.1.1 and onwards contains a hidden configuration option that will inform the Connection Server to not fall back and allocate a new session if it knows the user already has one, even if reconnecting to the session failed. In the specific case analyzed, if this was toggled the user would have received a connection error on the second launch request with the option to retry. Retrying a few seconds later would have succeeded.

VMware recommends that the option to disable the default fallback behaviour is enabled. Instructions for this are below:
  • Ensure connection servers are running 5.1.1 or later
  • Follow the steps to connect to the ADAM database at http://kb.vmware.com/kb/2012377
  • Navigate to the object CN=Common,OU=Global,OU=Properties,DC=vdi,DC=vmware,DC=int
  • In the Attribute Editor for the object, edit pae-NameValuePair attribute
  • Making sure not to adjust any other values, add a new string to the attribute with value "cs-allowfallbackfromexistingsession=0" (no quotes)
  • Click OK to close the editor dialog, your change is applied with no need to restart the servers
  • To reverse the change, edit the attribute again and remove the above line
Verification:
To verify the fix has been applied, you may find the allowFallback value in a debug level line on any desktop launch. The line will have the following format:
 
  DEBUG getSessionForApplication, userDn: , appMap: {=, [...], allowFallback=false, [...]}

No comments: