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:
Nadya Privalova 2013-10-18 20:42:21 +04:00 committed by Gerrit Code Review
parent bb52834a55
commit ecd62e833a
4 changed files with 14 additions and 9 deletions

View File

@ -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 {}

View File

@ -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']:

View File

@ -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'),
])

View File

@ -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())))