From 458ff52c61ce7b6755df56fc2a940e4f04a6170b Mon Sep 17 00:00:00 2001 From: gong yong sheng Date: Thu, 26 Feb 2015 16:09:54 +0800 Subject: [PATCH] Start metadata agent without trying to connect db We set conf.database.connection into empty in agent, and tell wsgi does not to connect db in this case. Change-Id: Icb83157ef6f1157068f3d4238b946fdbb890083f Closes-bug: #1425844 --- neutron/agent/metadata_agent.py | 2 ++ neutron/tests/unit/test_metadata_agent.py | 2 ++ neutron/tests/unit/test_wsgi.py | 17 +++++++++++++++++ neutron/wsgi.py | 5 +++-- 4 files changed, 24 insertions(+), 2 deletions(-) diff --git a/neutron/agent/metadata_agent.py b/neutron/agent/metadata_agent.py index a6cec3a28..36935bc37 100644 --- a/neutron/agent/metadata_agent.py +++ b/neutron/agent/metadata_agent.py @@ -36,5 +36,7 @@ def main(): config.init(sys.argv[1:]) config.setup_logging() utils.log_opt_values(LOG) + # metadata agent need not connect DB + cfg.CONF.set_override("connection", "", "database") proxy = agent.UnixDomainMetadataProxy(cfg.CONF) proxy.run() diff --git a/neutron/tests/unit/test_metadata_agent.py b/neutron/tests/unit/test_metadata_agent.py index b85ce2d60..296e44527 100644 --- a/neutron/tests/unit/test_metadata_agent.py +++ b/neutron/tests/unit/test_metadata_agent.py @@ -634,6 +634,8 @@ class TestUnixDomainMetadataProxy(base.BaseTestCase): mock.call(cfg.CONF), mock.call().run()] ) + cfg.CONF.set_override.assert_called_once_with( + "connection", "", "database") def test_init_state_reporting(self): with mock.patch('os.makedirs'): diff --git a/neutron/tests/unit/test_wsgi.py b/neutron/tests/unit/test_wsgi.py index 38b407071..7b55d014b 100644 --- a/neutron/tests/unit/test_wsgi.py +++ b/neutron/tests/unit/test_wsgi.py @@ -49,6 +49,23 @@ def open_no_proxy(*args, **kwargs): return opener.open(*args, **kwargs) +class TestWorkerService(base.BaseTestCase): + """WorkerService tests.""" + + @mock.patch('neutron.db.api') + def test_start_withoutdb_call(self, apimock): + _service = mock.Mock() + _service.pool = mock.Mock() + _service.pool.spawn = mock.Mock() + _service.pool.spawn.return_value = None + + _app = mock.Mock() + cfg.CONF.set_override("connection", "", "database") + workerservice = wsgi.WorkerService(_service, _app) + workerservice.start() + self.assertFalse(apimock.get_engine.called) + + class TestWSGIServer(base.BaseTestCase): """WSGI server tests.""" diff --git a/neutron/wsgi.py b/neutron/wsgi.py index d99cdaafc..fed3b2881 100644 --- a/neutron/wsgi.py +++ b/neutron/wsgi.py @@ -98,9 +98,10 @@ class WorkerService(object): def start(self): # We may have just forked from parent process. A quick disposal of the - # existing sql connections avoids producting 500 errors later when they + # existing sql connections avoids producing 500 errors later when they # are discovered to be broken. - api.get_engine().pool.dispose() + if CONF.database.connection: + api.get_engine().pool.dispose() self._server = self._service.pool.spawn(self._service._run, self._application, self._service._socket) -- 2.45.2