diff --git a/neutron/agent/metadata_agent.py b/neutron/agent/metadata_agent.py index 11135aec95e..8c06a37f976 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 1a314c00e6c..4d14d38b73d 100644 --- a/neutron/tests/unit/test_metadata_agent.py +++ b/neutron/tests/unit/test_metadata_agent.py @@ -585,6 +585,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 4820c7ad9a1..da116ece392 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 a24d3a63d90..cbb3292536d 100644 --- a/neutron/wsgi.py +++ b/neutron/wsgi.py @@ -99,9 +99,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)