Merge "Fixes dict metadata query issue of HBase"
This commit is contained in:
commit
047e5daf6a
@ -449,8 +449,18 @@ class Connection(base.Connection):
|
|||||||
for k, v in metaquery.iteritems():
|
for k, v in metaquery.iteritems():
|
||||||
message = json.loads(meter['f:message'])
|
message = json.loads(meter['f:message'])
|
||||||
metadata = message['resource_metadata']
|
metadata = message['resource_metadata']
|
||||||
if metadata[k.split('.', 1)[1]] != v:
|
keys = k.split('.')
|
||||||
break # if one metaquery doesn't match, break
|
# Support the dictionary type of metadata
|
||||||
|
for key in keys[1:]:
|
||||||
|
if key in metadata:
|
||||||
|
metadata = metadata[key]
|
||||||
|
else:
|
||||||
|
break
|
||||||
|
# NOTE (flwang) For multiple level searching, the matadata
|
||||||
|
# object will be drilled down to check if it's matched
|
||||||
|
# with the searched value.
|
||||||
|
if metadata != v:
|
||||||
|
break
|
||||||
else:
|
else:
|
||||||
if limit:
|
if limit:
|
||||||
limit -= 1
|
limit -= 1
|
||||||
|
@ -108,7 +108,12 @@ class TestListMeters(FunctionalTest,
|
|||||||
'resource-id4',
|
'resource-id4',
|
||||||
timestamp=datetime.datetime(2012, 7, 2, 10, 43),
|
timestamp=datetime.datetime(2012, 7, 2, 10, 43),
|
||||||
resource_metadata={'display_name': 'test-server',
|
resource_metadata={'display_name': 'test-server',
|
||||||
'tag': 'self.counter4'},
|
'tag': 'self.counter4',
|
||||||
|
'properties': {
|
||||||
|
'prop_1': 'prop_value',
|
||||||
|
'prop_2': {'sub_prop_1':
|
||||||
|
'sub_prop_value'}}
|
||||||
|
},
|
||||||
source='test_source')]:
|
source='test_source')]:
|
||||||
msg = rpc.meter_message_from_counter(
|
msg = rpc.meter_message_from_counter(
|
||||||
cnt,
|
cnt,
|
||||||
@ -127,6 +132,22 @@ class TestListMeters(FunctionalTest,
|
|||||||
set(['meter.test',
|
set(['meter.test',
|
||||||
'meter.mine']))
|
'meter.mine']))
|
||||||
|
|
||||||
|
def test_list_meters_with_dict_metadata(self):
|
||||||
|
data = self.get_json('/meters/meter.mine',
|
||||||
|
q=[{'field':
|
||||||
|
'metadata.properties.prop_2.sub_prop_1',
|
||||||
|
'op': 'eq',
|
||||||
|
'value': 'sub_prop_value',
|
||||||
|
}])
|
||||||
|
self.assertEquals(1, len(data))
|
||||||
|
self.assertEquals('resource-id4', data[0]['resource_id'])
|
||||||
|
metadata = data[0]['resource_metadata']
|
||||||
|
self.assertIsNotNone(metadata)
|
||||||
|
# FIXME (flwang): Based on current implement, the metadata of
|
||||||
|
# dictionary type can't be shown in the output. See bug 1203699.
|
||||||
|
# Will add more asserts in the fix of 1203699.
|
||||||
|
self.assertEqual('self.counter4', metadata['tag'])
|
||||||
|
|
||||||
def test_list_meters_metadata_query(self):
|
def test_list_meters_metadata_query(self):
|
||||||
data = self.get_json('/meters/meter.test',
|
data = self.get_json('/meters/meter.test',
|
||||||
q=[{'field': 'metadata.tag',
|
q=[{'field': 'metadata.tag',
|
||||||
|
Loading…
x
Reference in New Issue
Block a user