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.source = source
|
||||||
self.target = target
|
self.target = target
|
||||||
self.replace = replace
|
self.replace = replace
|
||||||
self.preserved = None
|
self.preserved = []
|
||||||
LOG.debug(_('scaling conversion transformer with source:'
|
LOG.debug(_('scaling conversion transformer with source:'
|
||||||
' %(source)s target: %(target)s replace:'
|
' %(source)s target: %(target)s replace:'
|
||||||
' %(replace)s') % locals())
|
' %(replace)s') % locals())
|
||||||
@ -106,7 +106,7 @@ class ScalingTransformer(transformer.TransformerBase):
|
|||||||
if self.replace:
|
if self.replace:
|
||||||
counter = transformed
|
counter = transformed
|
||||||
else:
|
else:
|
||||||
self.preserved = transformed
|
self.preserved.append(transformed)
|
||||||
return counter
|
return counter
|
||||||
|
|
||||||
def handle_sample(self, context, counter, source):
|
def handle_sample(self, context, counter, source):
|
||||||
@ -124,8 +124,8 @@ class ScalingTransformer(transformer.TransformerBase):
|
|||||||
"""
|
"""
|
||||||
counters = []
|
counters = []
|
||||||
if self.preserved:
|
if self.preserved:
|
||||||
counters.append(self.preserved)
|
counters.extend(self.preserved)
|
||||||
self.preserved = None
|
self.preserved = []
|
||||||
return counters
|
return counters
|
||||||
|
|
||||||
|
|
||||||
|
@ -782,6 +782,18 @@ class TestPipeline(base.TestCase):
|
|||||||
resource_metadata={'cpu_number': 4,
|
resource_metadata={'cpu_number': 4,
|
||||||
'user_metadata': um},
|
'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(
|
counter.Counter(
|
||||||
name='cpu',
|
name='cpu',
|
||||||
type=type,
|
type=type,
|
||||||
@ -794,6 +806,18 @@ class TestPipeline(base.TestCase):
|
|||||||
resource_metadata={'cpu_number': 4,
|
resource_metadata={'cpu_number': 4,
|
||||||
'user_metadata': um},
|
'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,
|
pipeline_manager = pipeline.PipelineManager(self.pipeline_cfg,
|
||||||
@ -802,17 +826,24 @@ class TestPipeline(base.TestCase):
|
|||||||
|
|
||||||
pipe.publish_counters(None, counters, None)
|
pipe.publish_counters(None, counters, None)
|
||||||
publisher = pipeline_manager.pipelines[0].publishers[0]
|
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
|
# original counters are passed thru' unmolested
|
||||||
self.assertEquals(publisher.counters[0], counters[0])
|
for i in xrange(4):
|
||||||
self.assertEquals(publisher.counters[1], counters[1])
|
self.assertEquals(publisher.counters[i], counters[i])
|
||||||
pipe.flush(None, None)
|
pipe.flush(None, None)
|
||||||
self.assertEqual(len(publisher.counters), 3)
|
self.assertEqual(len(publisher.counters), 6)
|
||||||
cpu_util = publisher.counters[-1]
|
cpu_util = publisher.counters[4]
|
||||||
self.assertEquals(getattr(cpu_util, 'name'), 'cpu_util')
|
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, 'unit'), '%')
|
||||||
self.assertEquals(getattr(cpu_util, 'type'), counter.TYPE_GAUGE)
|
self.assertEquals(getattr(cpu_util, 'type'), counter.TYPE_GAUGE)
|
||||||
self.assertEquals(getattr(cpu_util, 'volume'), expected)
|
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):
|
def test_rate_of_change_conversion(self):
|
||||||
self._do_test_rate_of_change_conversion(120000000000,
|
self._do_test_rate_of_change_conversion(120000000000,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user