Made get_capabilities a classmethod instead of object method

Capabilities are the same for all objects so there is no need for them
to be nonstatic. Another benefit is that we can check capabilities of
the Connection without the need to create an object and open real
connection.

Change-Id: Ie9314cb49b4c2bffb2bae4d5eeca6f5d8e2637ce
This commit is contained in:
Alexei Kornienko
2014-04-16 19:45:09 +03:00
parent fa7a9733dc
commit 053411ef64
11 changed files with 33 additions and 33 deletions

View File

@@ -27,7 +27,6 @@ from six import moves
from ceilometer.openstack.common.gettextutils import _ # noqa from ceilometer.openstack.common.gettextutils import _ # noqa
from ceilometer.openstack.common import timeutils from ceilometer.openstack.common import timeutils
from ceilometer import utils
def iter_period(start, end, period): def iter_period(start, end, period):
@@ -121,7 +120,7 @@ class Connection(object):
"""A dictionary representing the capabilities of this driver. """A dictionary representing the capabilities of this driver.
""" """
DEFAULT_CAPABILITIES = { CAPABILITIES = {
'meters': {'pagination': False, 'meters': {'pagination': False,
'query': {'simple': False, 'query': {'simple': False,
'metadata': False, 'metadata': False,
@@ -157,10 +156,9 @@ class Connection(object):
'events': {'query': {'simple': False}}, 'events': {'query': {'simple': False}},
} }
def __init__(self, conf, AVAILABLE_CAPABILITIES): def __init__(self, conf):
"""Constructor.""" """Constructor."""
self._CAPABILITIES = utils.update_nested(self.DEFAULT_CAPABILITIES, pass
AVAILABLE_CAPABILITIES)
@staticmethod @staticmethod
def upgrade(): def upgrade():
@@ -397,7 +395,8 @@ class Connection(object):
raise NotImplementedError('Complex query for alarms ' raise NotImplementedError('Complex query for alarms '
'history is not implemented.') 'history is not implemented.')
def get_capabilities(self): @classmethod
def get_capabilities(cls):
"""Return an dictionary representing the capabilities of each driver. """Return an dictionary representing the capabilities of each driver.
""" """
return self._CAPABILITIES return cls.CAPABILITIES

View File

@@ -38,6 +38,7 @@ from ceilometer import storage
from ceilometer.storage import base from ceilometer.storage import base
from ceilometer.storage import models from ceilometer.storage import models
from ceilometer.storage import pymongo_base from ceilometer.storage import pymongo_base
from ceilometer import utils
LOG = log.getLogger(__name__) LOG = log.getLogger(__name__)
@@ -88,6 +89,8 @@ class Connection(pymongo_base.Connection):
"""DB2 connection. """DB2 connection.
""" """
CAPABILITIES = utils.update_nested(pymongo_base.Connection.CAPABILITIES,
AVAILABLE_CAPABILITIES)
CONNECTION_POOL = pymongo_base.ConnectionPool() CONNECTION_POOL = pymongo_base.ConnectionPool()
GROUP = {'_id': '$counter_name', GROUP = {'_id': '$counter_name',
@@ -112,7 +115,6 @@ class Connection(pymongo_base.Connection):
SECONDS_IN_A_DAY = 86400 SECONDS_IN_A_DAY = 86400
def __init__(self, conf): def __init__(self, conf):
super(Connection, self).__init__(conf, AVAILABLE_CAPABILITIES)
url = conf.database.connection url = conf.database.connection
# Since we are using pymongo, even though we are connecting to DB2 # Since we are using pymongo, even though we are connecting to DB2

View File

@@ -110,6 +110,8 @@ AVAILABLE_CAPABILITIES = {
class Connection(base.Connection): class Connection(base.Connection):
"""HBase connection. """HBase connection.
""" """
CAPABILITIES = utils.update_nested(base.Connection.CAPABILITIES,
AVAILABLE_CAPABILITIES)
_memory_instance = None _memory_instance = None
@@ -122,7 +124,6 @@ class Connection(base.Connection):
def __init__(self, conf): def __init__(self, conf):
"""Hbase Connection Initialization.""" """Hbase Connection Initialization."""
super(Connection, self).__init__(conf, AVAILABLE_CAPABILITIES)
opts = self._parse_connection_url(conf.database.connection) opts = self._parse_connection_url(conf.database.connection)
if opts['host'] == '__test__': if opts['host'] == '__test__':

View File

@@ -39,9 +39,6 @@ class Connection(base.Connection):
"""Base class for storage system connections. """Base class for storage system connections.
""" """
def __init__(self, conf):
super(Connection, self).__init__(conf, {})
def upgrade(self): def upgrade(self):
pass pass

View File

@@ -42,6 +42,7 @@ from ceilometer import storage
from ceilometer.storage import base from ceilometer.storage import base
from ceilometer.storage import models from ceilometer.storage import models
from ceilometer.storage import pymongo_base from ceilometer.storage import pymongo_base
from ceilometer import utils
cfg.CONF.import_opt('time_to_live', 'ceilometer.storage', cfg.CONF.import_opt('time_to_live', 'ceilometer.storage',
group="database") group="database")
@@ -101,6 +102,8 @@ AVAILABLE_CAPABILITIES = {
class Connection(pymongo_base.Connection): class Connection(pymongo_base.Connection):
"""MongoDB connection. """MongoDB connection.
""" """
CAPABILITIES = utils.update_nested(pymongo_base.Connection.CAPABILITIES,
AVAILABLE_CAPABILITIES)
CONNECTION_POOL = pymongo_base.ConnectionPool() CONNECTION_POOL = pymongo_base.ConnectionPool()
@@ -407,7 +410,6 @@ class Connection(pymongo_base.Connection):
hour=23, minute=59, second=59) hour=23, minute=59, second=59)
def __init__(self, conf): def __init__(self, conf):
super(Connection, self).__init__(conf, AVAILABLE_CAPABILITIES)
url = conf.database.connection url = conf.database.connection
# NOTE(jd) Use our own connection pooling on top of the Pymongo one. # NOTE(jd) Use our own connection pooling on top of the Pymongo one.

View File

@@ -239,9 +239,10 @@ def make_query_from_filter(session, query, sample_filter, require_meter=True):
class Connection(base.Connection): class Connection(base.Connection):
"""SqlAlchemy connection.""" """SqlAlchemy connection."""
CAPABILITIES = utils.update_nested(base.Connection.CAPABILITIES,
AVAILABLE_CAPABILITIES)
def __init__(self, conf): def __init__(self, conf):
super(Connection, self).__init__(conf, AVAILABLE_CAPABILITIES)
self._engine_facade = sqlalchemy_session.EngineFacade.from_config( self._engine_facade = sqlalchemy_session.EngineFacade.from_config(
conf.database.connection, cfg.CONF) conf.database.connection, cfg.CONF)

View File

@@ -143,12 +143,8 @@ COMMON_AVAILABLE_CAPABILITIES = {
class Connection(base.Connection): class Connection(base.Connection):
"""Base Connection class for MongoDB and DB2 drivers. """Base Connection class for MongoDB and DB2 drivers.
""" """
CAPABILITIES = utils.update_nested(base.Connection.CAPABILITIES,
def __init__(self, conf, AVAILABLE_CAPABILITIES): COMMON_AVAILABLE_CAPABILITIES)
super(Connection, self).__init__(
conf,
utils.update_nested(COMMON_AVAILABLE_CAPABILITIES,
AVAILABLE_CAPABILITIES))
def get_users(self, source=None): def get_users(self, source=None):
"""Return an iterable of user id strings. """Return an iterable of user id strings.

View File

@@ -24,14 +24,11 @@
""" """
from ceilometer.tests import db as tests_db from ceilometer.storage import impl_db2
from ceilometer.tests import base as test_base
class DB2EngineTestBase(tests_db.TestBase): class CapabilitiesTest(test_base.BaseTestCase):
db_manager = tests_db.DB2Manager()
class CapabilitiesTest(DB2EngineTestBase):
# Check the returned capabilities list, which is specific to each DB # Check the returned capabilities list, which is specific to each DB
# driver # driver
@@ -72,5 +69,5 @@ class CapabilitiesTest(DB2EngineTestBase):
'events': {'query': {'simple': False}} 'events': {'query': {'simple': False}}
} }
actual_capabilities = self.conn.get_capabilities() actual_capabilities = impl_db2.Connection.get_capabilities()
self.assertEqual(expected_capabilities, actual_capabilities) self.assertEqual(expected_capabilities, actual_capabilities)

View File

@@ -27,6 +27,7 @@
from mock import patch from mock import patch
from ceilometer.storage import impl_hbase as hbase from ceilometer.storage import impl_hbase as hbase
from ceilometer.tests import base as test_base
from ceilometer.tests import db as tests_db from ceilometer.tests import db as tests_db
@@ -58,7 +59,7 @@ class ConnectionTest(HBaseEngineTestBase):
self.assertIsInstance(conn.conn_pool, TestConn) self.assertIsInstance(conn.conn_pool, TestConn)
class CapabilitiesTest(HBaseEngineTestBase): class CapabilitiesTest(test_base.BaseTestCase):
# Check the returned capabilities list, which is specific to each DB # Check the returned capabilities list, which is specific to each DB
# driver # driver
@@ -99,5 +100,5 @@ class CapabilitiesTest(HBaseEngineTestBase):
'events': {'query': {'simple': False}} 'events': {'query': {'simple': False}}
} }
actual_capabilities = self.conn.get_capabilities() actual_capabilities = hbase.Connection.get_capabilities()
self.assertEqual(expected_capabilities, actual_capabilities) self.assertEqual(expected_capabilities, actual_capabilities)

View File

@@ -26,6 +26,7 @@
from ceilometer.storage import base from ceilometer.storage import base
from ceilometer.storage import impl_mongodb from ceilometer.storage import impl_mongodb
from ceilometer.tests import base as test_base
from ceilometer.tests import db as tests_db from ceilometer.tests import db as tests_db
from ceilometer.tests.storage import test_storage_scenarios from ceilometer.tests.storage import test_storage_scenarios
@@ -145,7 +146,7 @@ class AlarmTestPagination(test_storage_scenarios.AlarmTestBase,
self.assertTrue(True) self.assertTrue(True)
class CapabilitiesTest(MongoDBEngineTestBase): class CapabilitiesTest(test_base.BaseTestCase):
# Check the returned capabilities list, which is specific to each DB # Check the returned capabilities list, which is specific to each DB
# driver # driver
@@ -186,5 +187,5 @@ class CapabilitiesTest(MongoDBEngineTestBase):
'events': {'query': {'simple': False}} 'events': {'query': {'simple': False}}
} }
actual_capabilities = self.conn.get_capabilities() actual_capabilities = impl_mongodb.Connection.get_capabilities()
self.assertEqual(expected_capabilities, actual_capabilities) self.assertEqual(expected_capabilities, actual_capabilities)

View File

@@ -29,8 +29,11 @@ import repr
from mock import patch from mock import patch
from ceilometer.openstack.common import timeutils from ceilometer.openstack.common import timeutils
from ceilometer.storage import impl_sqlalchemy
from ceilometer.storage import models from ceilometer.storage import models
from ceilometer.storage.sqlalchemy import models as sql_models from ceilometer.storage.sqlalchemy import models as sql_models
from ceilometer.tests import base as test_base
from ceilometer.tests import db as tests_db from ceilometer.tests import db as tests_db
from ceilometer.tests.storage import test_storage_scenarios as scenarios from ceilometer.tests.storage import test_storage_scenarios as scenarios
@@ -214,7 +217,7 @@ class RelationshipTest(scenarios.DBTestBase):
)).count()) )).count())
class CapabilitiesTest(EventTestBase): class CapabilitiesTest(test_base.BaseTestCase):
# Check the returned capabilities list, which is specific to each DB # Check the returned capabilities list, which is specific to each DB
# driver # driver
@@ -255,5 +258,5 @@ class CapabilitiesTest(EventTestBase):
'events': {'query': {'simple': True}} 'events': {'query': {'simple': True}}
} }
actual_capabilities = self.conn.get_capabilities() actual_capabilities = impl_sqlalchemy.Connection.get_capabilities()
self.assertEqual(expected_capabilities, actual_capabilities) self.assertEqual(expected_capabilities, actual_capabilities)