Merge "Add new 'storage': {'production_ready': True} capability"
This commit is contained in:
commit
c3448c6714
|
@ -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):
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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(
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue