Merge "Add new 'storage': {'production_ready': True} capability"

This commit is contained in:
Jenkins 2014-06-06 06:35:45 +00:00 committed by Gerrit Code Review
commit c3448c6714
10 changed files with 82 additions and 4 deletions

View File

@ -2451,12 +2451,14 @@ def _flatten_capabilities(capabilities):
class Capabilities(_Base):
"""A representation of the API capabilities, usually constrained
by restrictions imposed by the storage driver.
"""A representation of the API and storage capabilities, usually
constrained by restrictions imposed by the storage driver.
"""
api = {wtypes.text: bool}
"A flattened dictionary of API capabilities"
storage = {wtypes.text: bool}
"A flattened dictionary of storage capabilities"
@classmethod
def sample(cls):
@ -2495,7 +2497,8 @@ class Capabilities(_Base):
'history': {'query': {'simple': True,
'complex': True}}},
'events': {'query': {'simple': True}},
})
}),
storage=_flatten_capabilities({'production_ready': True}),
)
@ -2511,7 +2514,9 @@ class CapabilitiesController(rest.RestController):
# variation in API capabilities is effectively determined by
# the lack of strict feature parity across storage drivers
driver_capabilities = pecan.request.storage_conn.get_capabilities()
return Capabilities(api=_flatten_capabilities(driver_capabilities))
driver_perf = pecan.request.storage_conn.get_storage_capabilities()
return Capabilities(api=_flatten_capabilities(driver_capabilities),
storage=_flatten_capabilities(driver_perf))
class V2Controller(object):

View File

@ -144,6 +144,10 @@ class Connection(object):
'events': {'query': {'simple': False}},
}
STORAGE_CAPABILITIES = {
'storage': {'production_ready': False},
}
def __init__(self, url):
"""Constructor."""
pass
@ -372,3 +376,11 @@ class Connection(object):
"""Return an dictionary representing the capabilities of each driver.
"""
return cls.CAPABILITIES
@classmethod
def get_storage_capabilities(cls):
"""Return a dictionary representing the performance capabilities.
This is needed to evaluate the performance of each driver.
"""
return cls.STORAGE_CAPABILITIES

View File

@ -55,6 +55,11 @@ AVAILABLE_CAPABILITIES = {
}
AVAILABLE_STORAGE_CAPABILITIES = {
'storage': {'production_ready': True},
}
class Connection(base.Connection):
"""Put the data into a HBase database
@ -113,6 +118,10 @@ class Connection(base.Connection):
CAPABILITIES = utils.update_nested(base.Connection.CAPABILITIES,
AVAILABLE_CAPABILITIES)
STORAGE_CAPABILITIES = utils.update_nested(
base.Connection.STORAGE_CAPABILITIES,
AVAILABLE_STORAGE_CAPABILITIES,
)
_memory_instance = None
RESOURCE_TABLE = "resource"

View File

@ -110,6 +110,11 @@ AVAILABLE_CAPABILITIES = {
}
AVAILABLE_STORAGE_CAPABILITIES = {
'storage': {'production_ready': True},
}
def apply_metaquery_filter(session, query, metaquery):
"""Apply provided metaquery filter to existing query.
@ -216,6 +221,10 @@ class Connection(base.Connection):
"""
CAPABILITIES = utils.update_nested(base.Connection.CAPABILITIES,
AVAILABLE_CAPABILITIES)
STORAGE_CAPABILITIES = utils.update_nested(
base.Connection.STORAGE_CAPABILITIES,
AVAILABLE_STORAGE_CAPABILITIES,
)
def __init__(self, url):
self._engine_facade = sqlalchemy_session.EngineFacade.from_config(

View File

@ -169,12 +169,22 @@ COMMON_AVAILABLE_CAPABILITIES = {
}
AVAILABLE_STORAGE_CAPABILITIES = {
'storage': {'production_ready': True},
}
class Connection(base.Connection):
"""Base Connection class for MongoDB and DB2 drivers.
"""
CAPABILITIES = utils.update_nested(base.Connection.CAPABILITIES,
COMMON_AVAILABLE_CAPABILITIES)
STORAGE_CAPABILITIES = utils.update_nested(
base.Connection.STORAGE_CAPABILITIES,
AVAILABLE_STORAGE_CAPABILITIES,
)
def get_meters(self, user=None, project=None, resource=None, source=None,
metaquery=None, pagination=None):
"""Return an iterable of models.Meter instances

View File

@ -33,5 +33,8 @@ class TestCapabilitiesController(tests_api.FunctionalTest,
def test_capabilities(self):
data = self.get_json(self.url)
# check that capabilities data contains both 'api' and 'storage' fields
self.assertIsNotNone(data)
self.assertNotEqual({}, data)
self.assertIn('api', data)
self.assertIn('storage', data)

View File

@ -71,3 +71,10 @@ class CapabilitiesTest(test_base.BaseTestCase):
actual_capabilities = impl_db2.Connection.get_capabilities()
self.assertEqual(expected_capabilities, actual_capabilities)
def test_storage_capabilities(self):
expected_capabilities = {
'storage': {'production_ready': True},
}
actual_capabilities = impl_db2.Connection.get_storage_capabilities()
self.assertEqual(expected_capabilities, actual_capabilities)

View File

@ -100,3 +100,10 @@ class CapabilitiesTest(test_base.BaseTestCase):
actual_capabilities = hbase.Connection.get_capabilities()
self.assertEqual(expected_capabilities, actual_capabilities)
def test_storage_capabilities(self):
expected_capabilities = {
'storage': {'production_ready': True},
}
actual_capabilities = hbase.Connection.get_storage_capabilities()
self.assertEqual(expected_capabilities, actual_capabilities)

View File

@ -186,3 +186,11 @@ class CapabilitiesTest(test_base.BaseTestCase):
actual_capabilities = impl_mongodb.Connection.get_capabilities()
self.assertEqual(expected_capabilities, actual_capabilities)
def test_storage_capabilities(self):
expected_capabilities = {
'storage': {'production_ready': True},
}
actual_capabilities = impl_mongodb.Connection.\
get_storage_capabilities()
self.assertEqual(expected_capabilities, actual_capabilities)

View File

@ -238,3 +238,11 @@ class CapabilitiesTest(test_base.BaseTestCase):
actual_capabilities = impl_sqlalchemy.Connection.get_capabilities()
self.assertEqual(expected_capabilities, actual_capabilities)
def test_storage_capabilities(self):
expected_capabilities = {
'storage': {'production_ready': True},
}
actual_capabilities = impl_sqlalchemy.Connection.\
get_storage_capabilities()
self.assertEqual(expected_capabilities, actual_capabilities)