Skip to content

Commit

Permalink
V2 RpcApi should register when db pool is enabled
Browse files Browse the repository at this point in the history
The rpc api controller registers the public methods of db_api
But, use_tpool is True, the thread pool wrapper's methods are
used which would lead to failures.

Fixes Bug #1221037

Change-Id: Iaba10178c7da1548257e2180658c2dc8ba3e048b
  • Loading branch information
sridevikoushik31 committed Oct 1, 2013
1 parent 7d7bf3f commit 52ab24b
Show file tree
Hide file tree
Showing 4 changed files with 41 additions and 3 deletions.
8 changes: 8 additions & 0 deletions glance/db/__init__.py
Expand Up @@ -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'])
Expand Down Expand Up @@ -286,3 +291,6 @@ def wrapper(*args, **kwargs):
output = tpool.execute(original, *args, **kwargs)
return output
return wrapper

def unwrap(self):
return self.wrapped
2 changes: 1 addition & 1 deletion glance/registry/api/v2/rpc.py
Expand Up @@ -48,7 +48,7 @@ def __init__(self, raise_exc=False):
# 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():
Expand Down
24 changes: 22 additions & 2 deletions glance/tests/functional/db/test_db_api.py
Expand Up @@ -20,6 +20,7 @@
import testtools

from glance import db as db_api
import glance.db
from glance.openstack.common import importutils

CONF = cfg.CONF
Expand All @@ -39,15 +40,25 @@ def test_get_dbapi_when_db_pool_is_disabled(self):
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


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')
Expand All @@ -59,6 +70,15 @@ def test_thread_pool(self):
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)
10 changes: 10 additions & 0 deletions glance/tests/unit/v2/test_registry_api.py
Expand Up @@ -1256,3 +1256,13 @@ def test_get_image_members(self):

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)

0 comments on commit 52ab24b

Please sign in to comment.