summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2017-08-11 14:38:18 +0000
committerGerrit Code Review <review@openstack.org>2017-08-11 14:38:18 +0000
commit8534c18ecdc3f3619024af849b0c0654ceccb988 (patch)
tree84dd35ab77a873789033df95fbe71ab56493f6ca
parentacafc0e5a25a34b8e6e81f93b6c514b5d79695cf (diff)
parent40b36e0e2e075ff796603fd1f89a36524e8f616f (diff)
downloadceilometer-8534c18ecdc3f3619024af849b0c0654ceccb988.tar.gz
Merge "Fixed ceilometer arithmetic transformer bug" into stable/ocata
-rw-r--r--ceilometer/transformer/arithmetic.py13
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