Avoid unnecessary GET of existing alarm for update

The existing alarm representation is retrieved prior to update,
which is uneccessary as the API merges the new and existing
state in any case.

This change saves the threshold eval logic one unnecessary API
call per state transition.

Change-Id: If21c53d6f43164315e1e70e62b0c70520fb5a45c
This commit is contained in:
Eoghan Glynn
2013-06-24 18:36:13 +00:00
parent ff77aeea56
commit 52e3f6ffe1
2 changed files with 3 additions and 7 deletions

View File

@@ -64,11 +64,8 @@ class AlarmManager(base.Manager):
return self._create(self._path(), new)
def update(self, alarm_id, **kwargs):
existing = self.get(alarm_id)
updated = existing.to_dict()
for (key, value) in kwargs.items():
if key in updated and key in UPDATABLE_ATTRIBUTES:
updated[key] = value
updated = dict((key, value) for (key, value) in kwargs.items()
if key in UPDATABLE_ATTRIBUTES)
return self._update(self._path(alarm_id), updated)
def delete(self, alarm_id):

View File

@@ -146,8 +146,7 @@ class AlarmManagerTest(unittest.TestCase):
def test_update(self):
alarm = self.mgr.update(alarm_id='alarm-id', **DELTA_ALARM)
expect = [
('GET', '/v2/alarms/alarm-id', {}, None),
('PUT', '/v2/alarms/alarm-id', {}, UPDATED_ALARM),
('PUT', '/v2/alarms/alarm-id', {}, DELTA_ALARM),
]
self.assertEqual(self.api.calls, expect)
self.assertTrue(alarm)