Insertion in HBase should be fixed
* All data inserted to HBase should be String or Unicode * Data stored in HBase is flatten Fixes bug 1240474 Change-Id: Ic36f5460275de3c829a7b27932bde284d71bd806
This commit is contained in:
parent
bb52834a55
commit
ecd62e833a
|
@ -505,14 +505,15 @@ def _get_query_timestamps(args={}):
|
|||
|
||||
|
||||
def _flatten_metadata(metadata):
|
||||
"""Return flattened resource metadata without nested structures
|
||||
and with all values converted to unicode strings.
|
||||
"""Return flattened resource metadata with flattened nested
|
||||
structures (except nested sets) and with all values converted
|
||||
to unicode strings.
|
||||
"""
|
||||
if metadata:
|
||||
return dict((k, unicode(v))
|
||||
for k, v in utils.recursive_keypairs(metadata,
|
||||
separator='.')
|
||||
if type(v) not in set([list, set]))
|
||||
if type(v) is not set)
|
||||
return {}
|
||||
|
||||
|
||||
|
|
|
@ -35,6 +35,7 @@ from ceilometer.openstack.common import network_utils
|
|||
from ceilometer.openstack.common import timeutils
|
||||
from ceilometer.storage import base
|
||||
from ceilometer.storage import models
|
||||
from ceilometer import utils
|
||||
|
||||
LOG = log.getLogger(__name__)
|
||||
|
||||
|
@ -174,10 +175,11 @@ class Connection(base.Connection):
|
|||
|
||||
# store metadata fields with prefix "r_"
|
||||
resource_metadata = {}
|
||||
if data['resource_metadata']:
|
||||
resource_metadata = dict(('f:r_%s' % k, v)
|
||||
for (k, v)
|
||||
in data['resource_metadata'].iteritems())
|
||||
res_meta_copy = data['resource_metadata']
|
||||
if res_meta_copy:
|
||||
for key, v in utils.recursive_keypairs(res_meta_copy,
|
||||
separator='.'):
|
||||
resource_metadata['f:r_%s' % key] = unicode(v)
|
||||
|
||||
# Make sure we know about the user and project
|
||||
if data['user_id']:
|
||||
|
|
|
@ -52,7 +52,7 @@ class TestListEvents(FunctionalTest,
|
|||
resource_metadata={'display_name': 'test-server',
|
||||
'tag': 'self.sample',
|
||||
'dict_properties': {'key': 'value'},
|
||||
'ignored_list': ['not-returned'],
|
||||
'not_ignored_list': ['returned'],
|
||||
},
|
||||
source='test_source',
|
||||
)
|
||||
|
@ -170,5 +170,6 @@ class TestListEvents(FunctionalTest,
|
|||
list(sorted(sample['resource_metadata'].iteritems())),
|
||||
[('dict_properties.key', 'value'),
|
||||
('display_name', 'test-server'),
|
||||
('not_ignored_list', "['returned']"),
|
||||
('tag', 'self.sample'),
|
||||
])
|
||||
|
|
|
@ -466,7 +466,7 @@ class TestListResources(FunctionalTest,
|
|||
resource_metadata={'display_name': 'test-server',
|
||||
'tag': 'self.sample',
|
||||
'dict_properties': {'key': 'value'},
|
||||
'ignored_list': ['not-returned'],
|
||||
'not_ignored_list': ['returned'],
|
||||
},
|
||||
source='test',
|
||||
)
|
||||
|
@ -481,6 +481,7 @@ class TestListResources(FunctionalTest,
|
|||
self.assertEqual(
|
||||
[(u'dict_properties.key', u'value'),
|
||||
(u'display_name', u'test-server'),
|
||||
(u'not_ignored_list', u"['returned']"),
|
||||
(u'tag', u'self.sample')
|
||||
],
|
||||
list(sorted(metadata.iteritems())))
|
||||
|
|
Loading…
Reference in New Issue