Reset only metrics configured in collector before the createPodsOp

This commit is contained in:
Maciej Skoczeń 2024-09-05 13:39:32 +00:00
parent fbaeab34f9
commit 3047ab73f5
2 changed files with 19 additions and 12 deletions

View File

@ -1139,7 +1139,10 @@ func runWorkload(tCtx ktesting.TContext, tc *testCase, w *workload, informerFact
for _, collector := range collectors { for _, collector := range collectors {
// Need loop-local variable for function below. // Need loop-local variable for function below.
collector := collector collector := collector
collector.init() err = collector.init()
if err != nil {
tCtx.Fatalf("op %d: Failed to initialize data collector: %v", opIndex, err)
}
collectorWG.Add(1) collectorWG.Add(1)
go func() { go func() {
defer collectorWG.Done() defer collectorWG.Done()
@ -1205,13 +1208,6 @@ func runWorkload(tCtx ktesting.TContext, tc *testCase, w *workload, informerFact
}() }()
} }
if !concreteOp.SkipWaitToCompletion {
// SkipWaitToCompletion=false indicates this step has waited for the Pods to be scheduled.
// So we reset the metrics in global registry; otherwise metrics gathered in this step
// will be carried over to next step.
legacyregistry.Reset()
}
case *churnOp: case *churnOp:
var namespace string var namespace string
if concreteOp.Namespace != nil { if concreteOp.Namespace != nil {
@ -1376,7 +1372,7 @@ func createNamespaceIfNotPresent(tCtx ktesting.TContext, namespace string, podsP
} }
type testDataCollector interface { type testDataCollector interface {
init() init() error
run(tCtx ktesting.TContext) run(tCtx ktesting.TContext)
collect() []DataItem collect() []DataItem
} }

View File

@ -263,9 +263,19 @@ func newMetricsCollector(config *metricsCollectorConfig, labels map[string]strin
} }
} }
func (mc *metricsCollector) init() { func (mc *metricsCollector) init() error {
// Reset the metrics so that the measurements do not interfere with those collected during the previous steps. // Reset the metrics so that the measurements do not interfere with those collected during the previous steps.
legacyregistry.Reset() m, err := legacyregistry.DefaultGatherer.Gather()
if err != nil {
return fmt.Errorf("failed to gather metrics to reset: %w", err)
}
for _, mFamily := range m {
// Reset only metrics defined in the collector.
if _, ok := mc.Metrics[mFamily.GetName()]; ok {
mFamily.Reset()
}
}
return nil
} }
func (*metricsCollector) run(tCtx ktesting.TContext) { func (*metricsCollector) run(tCtx ktesting.TContext) {
@ -381,7 +391,8 @@ func newThroughputCollector(podInformer coreinformers.PodInformer, labels map[st
} }
} }
func (tc *throughputCollector) init() { func (tc *throughputCollector) init() error {
return nil
} }
func (tc *throughputCollector) run(tCtx ktesting.TContext) { func (tc *throughputCollector) run(tCtx ktesting.TContext) {