diff --git a/gnocchi/storage/_carbonara.py b/gnocchi/storage/_carbonara.py index d59032da..e53f1f0a 100644 --- a/gnocchi/storage/_carbonara.py +++ b/gnocchi/storage/_carbonara.py @@ -96,6 +96,8 @@ class CarbonaraBasedStorage(storage.StorageDriver): self._get_unaggregated_timeserie( metric) ) + if not raw_measures: + return LOG.debug( "Retrieve unaggregated measures " "for %s in %.2fs", diff --git a/gnocchi/storage/redis.py b/gnocchi/storage/redis.py index fe9fbc42..fc2c63ad 100644 --- a/gnocchi/storage/redis.py +++ b/gnocchi/storage/redis.py @@ -55,7 +55,7 @@ class RedisStorage(_carbonara.CarbonaraBasedStorage): key = self._metric_key(metric) if self._client.exists(key): raise storage.MetricAlreadyExists(metric) - self._client.hset(key, self._unaggregated_field(), None) + self._client.hset(key, self._unaggregated_field(), '') def _store_unaggregated_timeserie(self, metric, data, version=3): self._client.hset(self._metric_key(metric), diff --git a/gnocchi/tests/test_storage.py b/gnocchi/tests/test_storage.py index 21fbe248..69adc5a8 100644 --- a/gnocchi/tests/test_storage.py +++ b/gnocchi/tests/test_storage.py @@ -76,6 +76,26 @@ class TestStorageDriver(tests_base.TestCase): self.assertIn((utils.datetime_utc(2014, 1, 1, 13), 3600.0, 1), m) self.assertIn((utils.datetime_utc(2014, 1, 1, 13), 300.0, 1), m) + def test_aborted_initial_processing(self): + self.storage.incoming.add_measures(self.metric, [ + storage.Measure(utils.dt_to_unix_ns(2014, 1, 1, 12, 0, 1), 5), + ]) + with mock.patch.object(self.storage, '_store_unaggregated_timeserie', + side_effect=Exception): + try: + self.trigger_processing() + except Exception: + pass + + with mock.patch('gnocchi.storage._carbonara.LOG') as LOG: + self.trigger_processing() + self.assertFalse(LOG.error.called) + + m = self.storage.get_measures(self.metric) + self.assertIn((utils.datetime_utc(2014, 1, 1), 86400.0, 5.0), m) + self.assertIn((utils.datetime_utc(2014, 1, 1, 12), 3600.0, 5.0), m) + self.assertIn((utils.datetime_utc(2014, 1, 1, 12), 300.0, 5.0), m) + def test_list_metric_with_measures_to_process(self): metrics = self.storage.incoming.list_metric_with_measures_to_process( None, None, full=True)