Change ssh_utils parameter to correctly sends keepalive packets
The current implementation of ssh_utils never sends keepalive packets. In ssh_utils.SSHPool, the socket timeout parameter is set to None intending to keep ssh connections open. However, when the parameter is set to None, ssh_utils does not run the code to compare idle duration and keepalive interval. This patch reverts the socket timeout parameter to default (0.1 sec). The ssh_utils compares them every 0.1 seconds, and sends a keepalive packet if idle duration > keepalive interval (= self.conn_timeout). Change-Id: I8234083107207b9ebc0849947e8de92b5cf3e36e Closes-Bug: #1673662
This commit is contained in:
		| @@ -136,16 +136,8 @@ class SSHPool(pools.Pool): | ||||
|                 msg = _("Specify a password or private_key") | ||||
|                 raise exception.CinderException(msg) | ||||
|  | ||||
|             # Paramiko by default sets the socket timeout to 0.1 seconds, | ||||
|             # ignoring what we set through the sshclient. This doesn't help for | ||||
|             # keeping long lived connections. Hence we have to bypass it, by | ||||
|             # overriding it after the transport is initialized. We are setting | ||||
|             # the sockettimeout to None and setting a keepalive packet so that, | ||||
|             # the server will keep the connection open. All that does is send | ||||
|             # a keepalive packet every ssh_conn_timeout seconds. | ||||
|             if self.conn_timeout: | ||||
|                 transport = ssh.get_transport() | ||||
|                 transport.sock.settimeout(None) | ||||
|                 transport.set_keepalive(self.conn_timeout) | ||||
|             return ssh | ||||
|         except Exception as e: | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Shunei Shiono
					Shunei Shiono