Avoid dropping cpu_util for multiple instances.
Fixes bug 1202756 When multiple instances exist, the ordering of pipleline handle_sample() and flush() calls on the transformer caused cpu_util samples for subsequent instances to be dropped. Change-Id: I1d8198c0c12d99a2ffde11e4321d29723c947178
This commit is contained in:
parent
8539cfbd90
commit
879a4cc032
@ -66,7 +66,7 @@ class ScalingTransformer(transformer.TransformerBase):
|
||||
self.source = source
|
||||
self.target = target
|
||||
self.replace = replace
|
||||
self.preserved = None
|
||||
self.preserved = []
|
||||
LOG.debug(_('scaling conversion transformer with source:'
|
||||
' %(source)s target: %(target)s replace:'
|
||||
' %(replace)s') % locals())
|
||||
@ -106,7 +106,7 @@ class ScalingTransformer(transformer.TransformerBase):
|
||||
if self.replace:
|
||||
counter = transformed
|
||||
else:
|
||||
self.preserved = transformed
|
||||
self.preserved.append(transformed)
|
||||
return counter
|
||||
|
||||
def handle_sample(self, context, counter, source):
|
||||
@ -124,8 +124,8 @@ class ScalingTransformer(transformer.TransformerBase):
|
||||
"""
|
||||
counters = []
|
||||
if self.preserved:
|
||||
counters.append(self.preserved)
|
||||
self.preserved = None
|
||||
counters.extend(self.preserved)
|
||||
self.preserved = []
|
||||
return counters
|
||||
|
||||
|
||||
|
@ -782,6 +782,18 @@ class TestPipeline(base.TestCase):
|
||||
resource_metadata={'cpu_number': 4,
|
||||
'user_metadata': um},
|
||||
),
|
||||
counter.Counter(
|
||||
name='cpu',
|
||||
type=type,
|
||||
volume=prev,
|
||||
unit='ns',
|
||||
user_id='test_user',
|
||||
project_id='test_proj',
|
||||
resource_id='test_resource2',
|
||||
timestamp=now.isoformat(),
|
||||
resource_metadata={'cpu_number': 2,
|
||||
'user_metadata': um},
|
||||
),
|
||||
counter.Counter(
|
||||
name='cpu',
|
||||
type=type,
|
||||
@ -794,6 +806,18 @@ class TestPipeline(base.TestCase):
|
||||
resource_metadata={'cpu_number': 4,
|
||||
'user_metadata': um},
|
||||
),
|
||||
counter.Counter(
|
||||
name='cpu',
|
||||
type=type,
|
||||
volume=curr,
|
||||
unit='ns',
|
||||
user_id='test_user',
|
||||
project_id='test_proj',
|
||||
resource_id='test_resource2',
|
||||
timestamp=later.isoformat(),
|
||||
resource_metadata={'cpu_number': 2,
|
||||
'user_metadata': um},
|
||||
),
|
||||
]
|
||||
|
||||
pipeline_manager = pipeline.PipelineManager(self.pipeline_cfg,
|
||||
@ -802,17 +826,24 @@ class TestPipeline(base.TestCase):
|
||||
|
||||
pipe.publish_counters(None, counters, None)
|
||||
publisher = pipeline_manager.pipelines[0].publishers[0]
|
||||
self.assertEqual(len(publisher.counters), 2)
|
||||
self.assertEqual(len(publisher.counters), 4)
|
||||
# original counters are passed thru' unmolested
|
||||
self.assertEquals(publisher.counters[0], counters[0])
|
||||
self.assertEquals(publisher.counters[1], counters[1])
|
||||
for i in xrange(4):
|
||||
self.assertEquals(publisher.counters[i], counters[i])
|
||||
pipe.flush(None, None)
|
||||
self.assertEqual(len(publisher.counters), 3)
|
||||
cpu_util = publisher.counters[-1]
|
||||
self.assertEqual(len(publisher.counters), 6)
|
||||
cpu_util = publisher.counters[4]
|
||||
self.assertEquals(getattr(cpu_util, 'name'), 'cpu_util')
|
||||
self.assertEquals(getattr(cpu_util, 'resource_id'), 'test_resource')
|
||||
self.assertEquals(getattr(cpu_util, 'unit'), '%')
|
||||
self.assertEquals(getattr(cpu_util, 'type'), counter.TYPE_GAUGE)
|
||||
self.assertEquals(getattr(cpu_util, 'volume'), expected)
|
||||
cpu_util = publisher.counters[5]
|
||||
self.assertEquals(getattr(cpu_util, 'name'), 'cpu_util')
|
||||
self.assertEquals(getattr(cpu_util, 'resource_id'), 'test_resource2')
|
||||
self.assertEquals(getattr(cpu_util, 'unit'), '%')
|
||||
self.assertEquals(getattr(cpu_util, 'type'), counter.TYPE_GAUGE)
|
||||
self.assertEquals(getattr(cpu_util, 'volume'), expected * 2)
|
||||
|
||||
def test_rate_of_change_conversion(self):
|
||||
self._do_test_rate_of_change_conversion(120000000000,
|
||||
|
Loading…
x
Reference in New Issue
Block a user