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

This capability is needed to be used in the Tempest tests
to have the difference between Icehouse version (where tests
won't pass due to *really* huge running time) and new Juno
version, where this performance issue has been fixed.

Change-Id: I83bf184a58bfba0e48e09a754237a8b0a4dceb25
This commit is contained in:
Dina Belova 2014-05-30 16:50:19 +04:00
parent 5a78832251
commit a7f54275dc
10 changed files with 82 additions and 4 deletions

View File

@ -2450,12 +2450,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):
@ -2494,7 +2496,8 @@ class Capabilities(_Base):
'history': {'query': {'simple': True,
'complex': True}}},
'events': {'query': {'simple': True}},
})
}),
storage=_flatten_capabilities({'production_ready': True}),
)
@ -2510,7 +2513,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

@ -140,12 +140,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)