]> review.fuel-infra Code Review - openstack-build/neutron-build.git/commitdiff
NSX: Make conn_idle_timeout configurable
authorAaron Rosen <aaronorosen@gmail.com>
Thu, 16 Oct 2014 11:11:42 +0000 (04:11 -0700)
committerAaron Rosen <aaronorosen@gmail.com>
Thu, 16 Oct 2014 11:20:06 +0000 (04:20 -0700)
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

etc/neutron/plugins/vmware/nsx.ini
neutron/plugins/vmware/api_client/base.py
neutron/plugins/vmware/common/config.py
neutron/tests/unit/vmware/test_nsx_opts.py

index baca73b86931c1659f302dcc6328dca54683f2a2..a9bf5c5e0000d54113ea0dd0673468ef066ac0d1 100644 (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
index e8998b5cdc9517c0af80bf76a7680d12d188c823..c1c5da3c84b6cd2a0e89846aefb07da6c9b1192d 100644 (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),
index 6fde0b402a826754a3a534eb1c4377de6ef3b015..01735ae101a81fee1943bbc7bc93ce85ae8c704d 100644 (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 = [
index 2b15373845b4229b6918b205c13d9439d3994a80..2f0e65d4ad9a711b2b05718b0933c28019a767ba 100644 (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,