diff options
author | Jenkins <jenkins@review.openstack.org> | 2017-08-11 14:38:18 +0000 |
---|---|---|
committer | Gerrit Code Review <review@openstack.org> | 2017-08-11 14:38:18 +0000 |
commit | 8534c18ecdc3f3619024af849b0c0654ceccb988 (patch) | |
tree | 84dd35ab77a873789033df95fbe71ab56493f6ca | |
parent | acafc0e5a25a34b8e6e81f93b6c514b5d79695cf (diff) | |
parent | 40b36e0e2e075ff796603fd1f89a36524e8f616f (diff) | |
download | ceilometer-8534c18ecdc3f3619024af849b0c0654ceccb988.tar.gz |
Merge "Fixed ceilometer arithmetic transformer bug" into stable/ocata
-rw-r--r-- | ceilometer/transformer/arithmetic.py | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/ceilometer/transformer/arithmetic.py b/ceilometer/transformer/arithmetic.py index d0bbccb7..9d688ccd 100644 --- a/ceilometer/transformer/arithmetic.py +++ b/ceilometer/transformer/arithmetic.py @@ -14,6 +14,7 @@ # under the License. import collections +import copy import keyword import math import re @@ -101,14 +102,16 @@ class ArithmeticTransformer(transformer.TransformerBase): def flush(self): new_samples = [] - cache_clean_list = [] if not self.misconfigured: - for resource_id in self.cache: + # When loop self.cache, the dict could not be change by others. + # If changed, will raise "RuntimeError: dictionary changed size + # during iteration". so we make a tmp copy and just loop it. + tmp_cache = copy.copy(self.cache) + for resource_id in tmp_cache: if self._check_requirements(resource_id): new_samples.append(self._calculate(resource_id)) - cache_clean_list.append(resource_id) - for res_id in cache_clean_list: - self.cache.pop(res_id) + if resource_id in self.cache: + self.cache.pop(resource_id) return new_samples @classmethod |