NSX: Make conn_idle_timeout configurable

If there is a loadbalancer that sits between NSX and neutron usually it has
a default http_timeout on long lived http_connections. This can cause
connections that have not been used from neutron to nsx to be reset after
sometime. This patch makes the amount time we wait to reconnect the connection
configurable so one can set it to match the balancer timeout to avoid having
to try the connection if the loadbalaner has already timed it out.

closes-bug #1382000

Change-Id: Ifca76ca6c24a2002b46b1935fbb4fc63f15c5af1
This commit is contained in:
Aaron Rosen 2014-10-16 04:11:42 -07:00
parent 10674db127
commit 0b0fe134c3
4 changed files with 11 additions and 3 deletions

View File

@ -41,6 +41,9 @@
# interface name was not specified
# default_interface_name = breth0
# Reconnect connection to nsx if not used within this amount of time.
# conn_idle_timeout = 900
[quotas]
# number of network gateways allowed per tenant, -1 means unlimited
# quota_network_gateway = 5

View File

@ -19,6 +19,8 @@ import httplib
import six
import time
from oslo.config import cfg
from neutron.openstack.common import log as logging
from neutron.plugins.vmware import api_client
@ -33,8 +35,6 @@ DEFAULT_CONNECT_TIMEOUT = 5
class ApiClientBase(object):
"""An abstract baseclass for all API client implementations."""
CONN_IDLE_TIMEOUT = 60 * 15
def _create_connection(self, host, port, is_ssl):
if is_ssl:
return httplib.HTTPSConnection(host, port,
@ -106,7 +106,7 @@ class ApiClientBase(object):
LOG.debug(_("[%d] Waiting to acquire API client connection."), rid)
priority, conn = self._conn_pool.get()
now = time.time()
if getattr(conn, 'last_used', now) < now - self.CONN_IDLE_TIMEOUT:
if getattr(conn, 'last_used', now) < now - cfg.CONF.conn_idle_timeout:
LOG.info(_("[%(rid)d] Connection %(conn)s idle for %(sec)0.2f "
"seconds; reconnecting."),
{'rid': rid, 'conn': api_client.ctrl_conn_to_str(conn),

View File

@ -124,6 +124,10 @@ connection_opts = [
cfg.ListOpt('nsx_controllers',
deprecated_name='nvp_controllers',
help=_("Lists the NSX controllers in this cluster")),
cfg.IntOpt('conn_idle_timeout',
default=900,
help=_('Reconnect connection to nsx if not used within this '
'amount of time.')),
]
cluster_opts = [

View File

@ -129,6 +129,7 @@ class ConfigurationTest(base.BaseTestCase):
self.assertIsNone(cfg.CONF.default_l3_gw_service_uuid)
self.assertIsNone(cfg.CONF.default_l2_gw_service_uuid)
self.assertEqual('breth0', cfg.CONF.default_interface_name)
self.assertEqual(900, cfg.CONF.conn_idle_timeout)
def test_load_api_extensions(self):
self.config_parse(args=['--config-file', BASE_CONF_PATH,