Convert bandwidth_usage related timestamp to UTC native datetime

In sqlalchemy DB API, convert timestamp string related to
bandwidth_usage operations into UTC native datetime.

Closes-Bug: #1442795
Change-Id: Icbf9ff73b867a5cc3bb9f5eb6a13ad954d7c44f6
This commit is contained in:
Lianhao Lu 2015-04-17 09:28:14 +08:00
parent 9d77ab1290
commit 35c0fefd6a
2 changed files with 28 additions and 17 deletions

View File

@ -5084,9 +5084,11 @@ def agent_build_update(context, agent_build_id, values):
@require_context
def bw_usage_get(context, uuid, start_period, mac, use_slave=False):
values = {'start_period': start_period}
values = convert_objects_related_datetimes(values, 'start_period')
return model_query(context, models.BandwidthUsage, read_deleted="yes",
use_slave=use_slave).\
filter_by(start_period=start_period).\
filter_by(start_period=values['start_period']).\
filter_by(uuid=uuid).\
filter_by(mac=mac).\
first()
@ -5094,11 +5096,13 @@ def bw_usage_get(context, uuid, start_period, mac, use_slave=False):
@require_context
def bw_usage_get_by_uuids(context, uuids, start_period, use_slave=False):
values = {'start_period': start_period}
values = convert_objects_related_datetimes(values, 'start_period')
return (
model_query(context, models.BandwidthUsage, read_deleted="yes",
use_slave=use_slave).
filter(models.BandwidthUsage.uuid.in_(uuids)).
filter_by(start_period=start_period).
filter_by(start_period=values['start_period']).
all()
)
@ -5117,14 +5121,18 @@ def bw_usage_update(context, uuid, mac, start_period, bw_in, bw_out,
# creating records. Optimize accordingly, trying to update existing
# records. Fall back to creation when no rows are updated.
with session.begin():
values = {'last_refreshed': last_refreshed,
ts_values = {'last_refreshed': last_refreshed,
'start_period': start_period}
ts_keys = ('start_period', 'last_refreshed')
ts_values = convert_objects_related_datetimes(ts_values, *ts_keys)
values = {'last_refreshed': ts_values['last_refreshed'],
'last_ctr_in': last_ctr_in,
'last_ctr_out': last_ctr_out,
'bw_in': bw_in,
'bw_out': bw_out}
rows = model_query(context, models.BandwidthUsage,
session=session, read_deleted="yes").\
filter_by(start_period=start_period).\
filter_by(start_period=ts_values['start_period']).\
filter_by(uuid=uuid).\
filter_by(mac=mac).\
update(values, synchronize_session=False)
@ -5132,10 +5140,10 @@ def bw_usage_update(context, uuid, mac, start_period, bw_in, bw_out,
return
bwusage = models.BandwidthUsage()
bwusage.start_period = start_period
bwusage.start_period = ts_values['start_period']
bwusage.uuid = uuid
bwusage.mac = mac
bwusage.last_refreshed = last_refreshed
bwusage.last_refreshed = ts_values['last_refreshed']
bwusage.bw_in = bw_in
bwusage.bw_out = bw_out
bwusage.last_ctr_in = last_ctr_in

View File

@ -7314,7 +7314,9 @@ class BwUsageTestCase(test.TestCase, ModelsObjectComparatorMixin):
def test_bw_usage_get_by_uuids(self):
now = timeutils.utcnow()
start_period = now - datetime.timedelta(seconds=10)
start_period_str = timeutils.strtime(start_period)
uuid3_refreshed = now - datetime.timedelta(seconds=5)
uuid3_refreshed_str = timeutils.strtime(uuid3_refreshed)
expected_bw_usages = {
'fake_uuid1': {'uuid': 'fake_uuid1',
@ -7344,29 +7346,29 @@ class BwUsageTestCase(test.TestCase, ModelsObjectComparatorMixin):
}
bw_usages = db.bw_usage_get_by_uuids(self.ctxt,
['fake_uuid1', 'fake_uuid2'], start_period)
['fake_uuid1', 'fake_uuid2'], start_period_str)
# No matches
self.assertEqual(len(bw_usages), 0)
# Add 3 entries
db.bw_usage_update(self.ctxt, 'fake_uuid1',
'fake_mac1', start_period,
'fake_mac1', start_period_str,
100, 200, 12345, 67890)
db.bw_usage_update(self.ctxt, 'fake_uuid2',
'fake_mac2', start_period,
'fake_mac2', start_period_str,
100, 200, 42, 42)
# Test explicit refreshed time
db.bw_usage_update(self.ctxt, 'fake_uuid3',
'fake_mac3', start_period,
'fake_mac3', start_period_str,
400, 500, 32345, 87890,
last_refreshed=uuid3_refreshed)
last_refreshed=uuid3_refreshed_str)
# Update 2nd entry
db.bw_usage_update(self.ctxt, 'fake_uuid2',
'fake_mac2', start_period,
'fake_mac2', start_period_str,
200, 300, 22345, 77890)
bw_usages = db.bw_usage_get_by_uuids(self.ctxt,
['fake_uuid1', 'fake_uuid2', 'fake_uuid3'], start_period)
['fake_uuid1', 'fake_uuid2', 'fake_uuid3'], start_period_str)
self.assertEqual(len(bw_usages), 3)
for usage in bw_usages:
self._assertEqualObjects(expected_bw_usages[usage['uuid']], usage,
@ -7375,6 +7377,7 @@ class BwUsageTestCase(test.TestCase, ModelsObjectComparatorMixin):
def test_bw_usage_get(self):
now = timeutils.utcnow()
start_period = now - datetime.timedelta(seconds=10)
start_period_str = timeutils.strtime(start_period)
expected_bw_usage = {'uuid': 'fake_uuid1',
'mac': 'fake_mac1',
@ -7385,17 +7388,17 @@ class BwUsageTestCase(test.TestCase, ModelsObjectComparatorMixin):
'last_ctr_out': 67890,
'last_refreshed': now}
bw_usage = db.bw_usage_get(self.ctxt, 'fake_uuid1', start_period,
bw_usage = db.bw_usage_get(self.ctxt, 'fake_uuid1', start_period_str,
'fake_mac1')
self.assertIsNone(bw_usage)
db.bw_usage_update(self.ctxt, 'fake_uuid1',
'fake_mac1', start_period,
'fake_mac1', start_period_str,
100, 200, 12345, 67890)
bw_usage = db.bw_usage_get(self.ctxt, 'fake_uuid1', start_period,
bw_usage = db.bw_usage_get(self.ctxt, 'fake_uuid1', start_period_str,
'fake_mac1')
self._assertEqualObjects(bw_usage, expected_bw_usage,
self._assertEqualObjects(expected_bw_usage, bw_usage,
ignored_keys=self._ignored_keys)