diff --git a/glance/db/__init__.py b/glance/db/__init__.py index 73f5dfa135..e8e3010970 100644 --- a/glance/db/__init__.py +++ b/glance/db/__init__.py @@ -42,6 +42,11 @@ def get_api(): return ThreadPoolWrapper(CONF.data_api) +def unwrap(db_api): + if not CONF.use_tpool: + return db_api + return db_api.unwrap() + # attributes common to all models BASE_MODEL_ATTRS = set(['id', 'created_at', 'updated_at', 'deleted_at', 'deleted']) @@ -286,3 +291,6 @@ class ThreadPoolWrapper(object): output = tpool.execute(original, *args, **kwargs) return output return wrapper + + def unwrap(self): + return self.wrapped diff --git a/glance/registry/api/v2/rpc.py b/glance/registry/api/v2/rpc.py index 9f60b788d4..920e4b59ec 100644 --- a/glance/registry/api/v2/rpc.py +++ b/glance/registry/api/v2/rpc.py @@ -48,7 +48,7 @@ class Controller(rpc.Controller): # db_api as a resource to expose. db_api = glance.db.get_api() db_api.setup_db_env() - self.register(db_api) + self.register(glance.db.unwrap(db_api)) def create_resource(): diff --git a/glance/tests/functional/db/test_db_api.py b/glance/tests/functional/db/test_db_api.py index 3f43a947a0..9a081baf4b 100644 --- a/glance/tests/functional/db/test_db_api.py +++ b/glance/tests/functional/db/test_db_api.py @@ -20,6 +20,7 @@ from oslo.config import cfg import testtools from glance import db as db_api +import glance.db from glance.openstack.common import importutils CONF = cfg.CONF @@ -39,6 +40,18 @@ class DbApiTest(testtools.TestCase): self.assertFalse(isinstance(dbapi, db_api.ThreadPoolWrapper)) self.assertEqual(importutils.import_module(CONF.data_api), dbapi) + def test_unwrap_dbapi_when_db_pool_is_enabled(self): + CONF.set_override('use_tpool', False) + dbapi = db_api.get_api() + self.assertEqual(importutils.import_module(CONF.data_api), + glance.db.unwrap(dbapi)) + + def test_unwrap_dbapi_when_db_pool_is_disabled(self): + CONF.set_override('use_tpool', True) + dbapi = db_api.get_api() + self.assertEqual(importutils.import_module(CONF.data_api), + glance.db.unwrap(dbapi)) + def method_for_test_1(*args, **kwargs): return args, kwargs @@ -46,8 +59,6 @@ def method_for_test_1(*args, **kwargs): class ThreadPoolWrapper(testtools.TestCase): def test_thread_pool(self): - module = importutils.import_module('glance.tests.functional.db.' - 'test_db_api') CONF.set_override('use_tpool', True) CONF.set_override('data_api', 'glance.tests.functional.db.' 'test_db_api') @@ -59,6 +70,15 @@ class ThreadPoolWrapper(testtools.TestCase): dbapi.method_for_test_1(1, 2, kwarg='arg') tpool.execute.assert_called_with(method_for_test_1, 1, 2, kwarg='arg') + def test_unwrap(self): + CONF.set_override('use_tpool', True) + CONF.set_override('data_api', 'glance.tests.functional.db.' + 'test_db_api') + + dbapi = db_api.get_api() + self.assertEqual(importutils.import_module(CONF.data_api), + dbapi.unwrap()) + def tearDown(self): super(ThreadPoolWrapper, self).tearDown() CONF.set_override('use_tpool', False) diff --git a/glance/tests/unit/v2/test_registry_api.py b/glance/tests/unit/v2/test_registry_api.py index 492b3c009b..9eaafbfaa0 100644 --- a/glance/tests/unit/v2/test_registry_api.py +++ b/glance/tests/unit/v2/test_registry_api.py @@ -1256,3 +1256,13 @@ class TestRegistryRPC(base.IsolatedUnitTest): memb_list = json.loads(res.body)[0] self.assertEquals(len(memb_list), 0) + + +class TestRegistryRPCDBPoolEnabled(TestRegistryRPC): + def setUp(self): + CONF.set_override('use_tpool', True) + super(TestRegistryRPCDBPoolEnabled, self).setUp() + + def tearDown(self): + super(TestRegistryRPCDBPoolEnabled, self).tearDown() + CONF.set_override('use_tpool', False)