From 413f83d79530140280eacc3c25ba980fbcc3c1f9 Mon Sep 17 00:00:00 2001 From: ZhiQiang Fan <aji.zqfan@gmail.com> Date: Wed, 11 May 2016 08:55:24 +0800 Subject: [PATCH] remove alarm name unique constraint in each project alarm_id can be the unique key to identify each other. The unique constraint for alarm name can benefit end user because literal name is more human friendly than UUID, but now it limits downstream like Vitrage. If end user does want this constraint, it can apply in portal like Horizon, Aodh should be more open to satisfy different use cases. Change-Id: I4abf2654135aa9d45c25d0284c2cf18fe31166be --- aodh/api/controllers/v2/alarms.py | 16 ------------- .../functional/api/v2/test_alarm_scenarios.py | 24 +++++++++++-------- ...me-unique-constraint-4fb0b14f3ad46f0b.yaml | 3 +++ 3 files changed, 17 insertions(+), 26 deletions(-) create mode 100644 releasenotes/notes/remove-alarm-name-unique-constraint-4fb0b14f3ad46f0b.yaml diff --git a/aodh/api/controllers/v2/alarms.py b/aodh/api/controllers/v2/alarms.py index 287f5bfa1..1d1f4d2d5 100644 --- a/aodh/api/controllers/v2/alarms.py +++ b/aodh/api/controllers/v2/alarms.py @@ -592,15 +592,6 @@ class AlarmController(rest.RestController): else: data.state_timestamp = alarm_in.state_timestamp - # make sure alarms are unique by name per project. - if alarm_in.name != data.name: - alarms = list(pecan.request.storage.get_alarms( - name=data.name, project=data.project_id)) - if alarms: - raise base.ClientSideError( - _("Alarm with name='%s' exists") % data.name, - status_code=409) - ALARMS_RULES[data.type].plugin.update_hook(data) old_data = Alarm.from_db_model(alarm_in) @@ -763,13 +754,6 @@ class AlarmsController(rest.RestController): change = data.as_dict(models.Alarm) data.update_actions() - # make sure alarms are unique by name per project. - alarms = list(conn.get_alarms(name=data.name, - project=data.project_id)) - if alarms: - raise base.ClientSideError( - _("Alarm with name='%s' exists") % data.name, - status_code=409) try: alarm_in = models.Alarm(**change) diff --git a/aodh/tests/functional/api/v2/test_alarm_scenarios.py b/aodh/tests/functional/api/v2/test_alarm_scenarios.py index 2858b1d94..8a6e13612 100644 --- a/aodh/tests/functional/api/v2/test_alarm_scenarios.py +++ b/aodh/tests/functional/api/v2/test_alarm_scenarios.py @@ -816,10 +816,10 @@ class TestAlarms(TestAlarmsBase): else: self.fail("Alarm not found") - def test_post_conflict(self): + def test_post_alarm_with_same_name(self): json = { 'enabled': False, - 'name': 'added_alarm', + 'name': 'dup_alarm_name', 'state': 'ok', 'type': 'threshold', 'ok_actions': ['http://something/ok'], @@ -840,10 +840,17 @@ class TestAlarms(TestAlarmsBase): } } - self.post_json('/alarms', params=json, status=201, - headers=self.auth_headers) - self.post_json('/alarms', params=json, status=409, - headers=self.auth_headers) + resp1 = self.post_json('/alarms', params=json, status=201, + headers=self.auth_headers) + resp2 = self.post_json('/alarms', params=json, status=201, + headers=self.auth_headers) + self.assertEqual(resp1.json['name'], resp2.json['name']) + self.assertNotEqual(resp1.json['alarm_id'], resp2.json['alarm_id']) + alarms = self.get_json('/alarms', + headers=self.auth_headers, + q=[{'field': 'name', + 'value': 'dup_alarm_name'}]) + self.assertEqual(2, len(alarms)) def _do_test_post_alarm(self, exclude_outliers=None): json = { @@ -1521,12 +1528,9 @@ class TestAlarms(TestAlarmsBase): alarm_id = data[0]['alarm_id'] resp = self.put_json('/alarms/%s' % alarm_id, - expect_errors=True, status=409, params=json, headers=self.auth_headers) - self.assertEqual( - "Alarm with name='name1' exists", - resp.json['error_message']['faultstring']) + self.assertEqual(200, resp.status_code) def test_put_invalid_alarm_actions(self): json = { diff --git a/releasenotes/notes/remove-alarm-name-unique-constraint-4fb0b14f3ad46f0b.yaml b/releasenotes/notes/remove-alarm-name-unique-constraint-4fb0b14f3ad46f0b.yaml new file mode 100644 index 000000000..1cc14e4c4 --- /dev/null +++ b/releasenotes/notes/remove-alarm-name-unique-constraint-4fb0b14f3ad46f0b.yaml @@ -0,0 +1,3 @@ +--- +other: + - Alarm name unique constraint for each project has been removed.