]> review.fuel-infra Code Review - openstack-build/neutron-build.git/commitdiff
Only call get_engine().pool.dispose if _FACADE
authorKevin Benton <blak111@gmail.com>
Wed, 18 Mar 2015 11:13:11 +0000 (04:13 -0700)
committerKevin Benton <blak111@gmail.com>
Mon, 30 Mar 2015 16:58:09 +0000 (09:58 -0700)
Avoid calling neutron.db.api.get_engine().pool.dispose() if
an engine facade has not yet been created since there won't
be any connections to get rid of. Calling it on services
that do not use the DB (e.g. agents) unnecessarily creates
a database connection engine that will never be used.

Change-Id: I3dbad1bef5da7b3765898e7d539b4d119b89e73a
Closes-Bug: #1433536

neutron/agent/metadata_agent.py
neutron/db/api.py
neutron/service.py
neutron/tests/unit/agent/metadata/test_agent.py
neutron/tests/unit/test_wsgi.py
neutron/wsgi.py

index b6e27914bd18209c233af97aa4213b1b8911e64a..b392ed1f3ce4b186ba91cef4f95813934ba9d71c 100644 (file)
@@ -37,7 +37,5 @@ 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()
index 3957de91a41b7bb6af002636c16ef65ee747022c..4418bbc28258e1541bfd59bcd25f310531a95d26 100644 (file)
@@ -40,6 +40,12 @@ def get_engine():
     return facade.get_engine()
 
 
+def dispose():
+    # Don't need to do anything if an enginefacade hasn't been created
+    if _FACADE is not None:
+        get_engine().pool.dispose()
+
+
 def get_session(autocommit=True, expire_on_commit=False):
     """Helper method to grab session."""
     facade = _create_facade_lazily()
index 448251c383a7ee3353f90c573958a89217305933..02221282309752d603163ce54a9b4b0db894b361 100644 (file)
@@ -119,7 +119,7 @@ class RpcWorker(object):
         # We may have just forked from parent process.  A quick disposal of the
         # existing sql connections avoids producing errors later when they are
         # discovered to be broken.
-        session.get_engine().pool.dispose()
+        session.dispose()
         self._servers = self._plugin.start_rpc_listeners()
 
     def wait(self):
index e5bbe9b3791f5913fade249ba36ed79a96af8982..3f328a241239b8f68eedcc481a8804005f477e4b 100644 (file)
@@ -587,8 +587,6 @@ 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'):
index da116ece392fbe0be35e85fd84bfbcf34fe69b6f..b0e57d34814861480bed1e804f7eaaca6cc09431 100644 (file)
@@ -25,6 +25,7 @@ import webob
 import webob.exc
 
 from neutron.common import exceptions as exception
+from neutron.db import api
 from neutron.tests import base
 from neutron import wsgi
 
@@ -52,18 +53,17 @@ def open_no_proxy(*args, **kwargs):
 class TestWorkerService(base.BaseTestCase):
     """WorkerService tests."""
 
-    @mock.patch('neutron.db.api')
+    @mock.patch('neutron.db.api.get_engine')
     def test_start_withoutdb_call(self, apimock):
+        # clear engine from other tests
+        api._FACADE = None
         _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)
+        self.assertFalse(apimock.called)
 
 
 class TestWSGIServer(base.BaseTestCase):
index cbb3292536d6f65063cefca5c2ce7959b1767e49..a526fb824b622998d25711d43dd54fc81d9f51dd 100644 (file)
@@ -101,8 +101,7 @@ class WorkerService(object):
         # We may have just forked from parent process.  A quick disposal of the
         # existing sql connections avoids producing 500 errors later when they
         # are discovered to be broken.
-        if CONF.database.connection:
-            api.get_engine().pool.dispose()
+        api.dispose()
         self._server = self._service.pool.spawn(self._service._run,
                                                 self._application,
                                                 self._service._socket)