diff --git a/gnocchi/indexer/sqlalchemy.py b/gnocchi/indexer/sqlalchemy.py index 6fabbfae6..1cb8d6888 100644 --- a/gnocchi/indexer/sqlalchemy.py +++ b/gnocchi/indexer/sqlalchemy.py @@ -783,7 +783,8 @@ class SQLAlchemyIndexer(indexer.IndexerDriver): def delete_metric(self, id): with self.facade.writer() as session: if session.query(Metric).filter( - Metric.id == id).update({"status": "delete"}) == 0: + Metric.id == id, Metric.status == 'active').update( + {"status": "delete"}) == 0: raise indexer.NoSuchMetric(id) diff --git a/gnocchi/tests/gabbi/gabbits/metric.yaml b/gnocchi/tests/gabbi/gabbits/metric.yaml index 735dd7c78..e9ef78bcd 100644 --- a/gnocchi/tests/gabbi/gabbits/metric.yaml +++ b/gnocchi/tests/gabbi/gabbits/metric.yaml @@ -278,6 +278,10 @@ tests: method: DELETE status: 204 + - name: delete metric again + DELETE: $LAST_URL + status: 404 + - name: delete non existent metric url: /v1/metric/foo method: DELETE diff --git a/gnocchi/tests/test_indexer.py b/gnocchi/tests/test_indexer.py index ec4b6ea6a..7cfdb3e4a 100644 --- a/gnocchi/tests/test_indexer.py +++ b/gnocchi/tests/test_indexer.py @@ -584,13 +584,7 @@ class TestIndexerDriver(tests_base.TestCase): rc = self.index.create_resource('generic', r1, user, project, metrics={'foo': e1, 'bar': e2}) self.index.delete_metric(e1) - # It can be called twice - try: - self.index.delete_metric(e1) - except indexer.NoSuchMetric: - # It's possible that the metric has been expunged by another - # parallel test. No worry. - pass + self.assertRaises(indexer.NoSuchMetric, self.index.delete_metric, e1) r = self.index.get_resource('generic', r1, with_metrics=True) self.assertIsNotNone(r.started_at) self.assertIsNotNone(r.revision_start) diff --git a/setup.cfg b/setup.cfg index fa9a61ea1..2aba8a3e7 100644 --- a/setup.cfg +++ b/setup.cfg @@ -58,7 +58,7 @@ doc = Jinja2 test = pifpaf>=0.1.0 - gabbi>=0.101.2 + gabbi>=1.19.0 coverage>=3.6 fixtures mock