]> review.fuel-infra Code Review - openstack-build/neutron-build.git/commitdiff
Change metadata-agent to have a configurable backlog
authorBrian Haley <brian.haley@hp.com>
Thu, 30 Jan 2014 20:05:49 +0000 (15:05 -0500)
committerJakub Libosvar <libosvar@redhat.com>
Mon, 3 Feb 2014 16:05:35 +0000 (17:05 +0100)
The metadata agent currently runs with a default socket backlog
of 128.  This isn't enough on a busy network node, even when
spawning multiple worker processes.

This change addes a new "metadata_backlog = XX" to the ini file
to support a configurable value to help improve performance.

Change-Id: Ibea398f3b65a56deb1418f39810d87d8360ea9f3
Closes-bug: #1274536

etc/metadata_agent.ini
neutron/agent/metadata/agent.py
neutron/tests/unit/test_metadata_agent.py

index 98a0b50530615cfd6ae1d708eb1249ecd7be6d96..38909233e7b6d9210b097335c25ccbdc60e12af5 100644 (file)
@@ -29,3 +29,6 @@ admin_password = %SERVICE_PASSWORD%
 
 # Number of separate worker processes for metadata server
 # metadata_workers = 0
+
+# Number of backlog requests to configure the metadata server socket with
+# metadata_backlog = 128
index 699aa59ce6c79d3d2bec4c2030b7d8c15d1daf11..c8d61873917ad2d80ce71060e6e223eef9bcf92d 100644 (file)
@@ -207,7 +207,7 @@ class UnixDomainWSGIServer(wsgi.Server):
         self._server = None
         super(UnixDomainWSGIServer, self).__init__(name)
 
-    def start(self, application, file_socket, workers, backlog=128):
+    def start(self, application, file_socket, workers, backlog):
         self._socket = eventlet.listen(file_socket,
                                        family=socket.AF_UNIX,
                                        backlog=backlog)
@@ -240,7 +240,11 @@ class UnixDomainMetadataProxy(object):
         cfg.IntOpt('metadata_workers',
                    default=0,
                    help=_('Number of separate worker processes for metadata '
-                          'server'))
+                          'server')),
+        cfg.IntOpt('metadata_backlog',
+                   default=128,
+                   help=_('Number of backlog requests to configure the '
+                          'metadata server socket with'))
     ]
 
     def __init__(self, conf):
@@ -299,7 +303,8 @@ class UnixDomainMetadataProxy(object):
         server = UnixDomainWSGIServer('neutron-metadata-agent')
         server.start(MetadataProxyHandler(self.conf),
                      self.conf.metadata_proxy_socket,
-                     workers=self.conf.metadata_workers)
+                     workers=self.conf.metadata_workers,
+                     backlog=self.conf.metadata_backlog)
         server.wait()
 
 
index 3437bbbd47edb7f0a5380aa79024a94725ce9f1f..7b5fab2c1367ba2014c2ae5cc3ed7ff667f2985b 100644 (file)
@@ -275,7 +275,7 @@ class TestUnixDomainWSGIServer(base.BaseTestCase):
     def test_start(self):
         mock_app = mock.Mock()
         with mock.patch.object(self.server, 'pool') as pool:
-            self.server.start(mock_app, '/the/path', workers=0)
+            self.server.start(mock_app, '/the/path', workers=0, backlog=128)
             self.eventlet.assert_has_calls([
                 mock.call.listen(
                     '/the/path',
@@ -294,7 +294,7 @@ class TestUnixDomainWSGIServer(base.BaseTestCase):
         launcher = process_launcher.return_value
 
         mock_app = mock.Mock()
-        self.server.start(mock_app, '/the/path', workers=2)
+        self.server.start(mock_app, '/the/path', workers=2, backlog=128)
         launcher.running = True
         launcher.launch_service.assert_called_once_with(self.server._server,
                                                         workers=2)
@@ -330,6 +330,7 @@ class TestUnixDomainMetadataProxy(base.BaseTestCase):
         self.addCleanup(mock.patch.stopall)
         self.cfg.CONF.metadata_proxy_socket = '/the/path'
         self.cfg.CONF.metadata_workers = 0
+        self.cfg.CONF.metadata_backlog = 128
 
     def test_init_doesnot_exists(self):
         with mock.patch('os.path.isdir') as isdir:
@@ -393,7 +394,8 @@ class TestUnixDomainMetadataProxy(base.BaseTestCase):
                         server.assert_has_calls([
                             mock.call('neutron-metadata-agent'),
                             mock.call().start(handler.return_value,
-                                              '/the/path', workers=0),
+                                              '/the/path', workers=0,
+                                              backlog=128),
                             mock.call().wait()]
                         )