From 52e3f6ffe188a82a67fdd573bb03ab1d9b0b95b4 Mon Sep 17 00:00:00 2001 From: Eoghan Glynn Date: Mon, 24 Jun 2013 18:36:13 +0000 Subject: [PATCH] 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 --- ceilometerclient/v2/alarms.py | 7 ++----- tests/v2/test_alarms.py | 3 +-- 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/ceilometerclient/v2/alarms.py b/ceilometerclient/v2/alarms.py index 6524c8d..6a8529b 100644 --- a/ceilometerclient/v2/alarms.py +++ b/ceilometerclient/v2/alarms.py @@ -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): diff --git a/tests/v2/test_alarms.py b/tests/v2/test_alarms.py index ac1d2dc..726434d 100644 --- a/tests/v2/test_alarms.py +++ b/tests/v2/test_alarms.py @@ -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)