use message id to generate hbase unique key

We currently can disable computing signature for metering message,
but HBase still uses signature as a dimension to generate unique row
key, this will lead to different samples treated as same one.

Message id should be used in stead of message signature, because
id will always exist and also unique.

Change-Id: I47cdce59c9934573076cf609ce1a0c37aea75c44
Closes-Bug: #1445227
This commit is contained in:
ZhiQiang Fan 2015-04-17 17:06:13 +08:00
parent c9a42be186
commit 15a92ec1ef
2 changed files with 5 additions and 6 deletions

View File

@ -55,7 +55,7 @@ class Connection(hbase_base.Connection, base.Connection):
- meter (describes sample actually):
- row-key: consists of reversed timestamp, meter and a message signature
- row-key: consists of reversed timestamp, meter and a message uuid
for purposes of uniqueness
- Column Families:
@ -175,9 +175,9 @@ class Connection(hbase_base.Connection, base.Connection):
resource, ts)
# Rowkey consists of reversed timestamp, meter and a
# message signature for purposes of uniqueness
# message uuid for purposes of uniqueness
row = hbase_utils.prepare_key(data['counter_name'], rts,
data['message_signature'])
data['message_id'])
record = hbase_utils.serialize_entry(
data, **{'source': data['source'], 'rts': rts,
'message': data, 'recorded_at': timeutils.utcnow()})

View File

@ -553,9 +553,8 @@ class RawSampleTest(DBTestBase,
def test_get_samples_by_resource(self):
f = storage.SampleFilter(user='user-id', resource='resource-id')
results = list(self.conn.get_samples(f))
self.assertIsNotEmpty(results)
meter = results[1]
d = meter.as_dict()
self.assertEqual(2, len(results))
d = results[1].as_dict()
self.assertEqual(timeutils.utcnow(), d['recorded_at'])
del d['recorded_at']
self.assertEqual(self.msgs[0], d)