Skip to content

Commit 26c24fd

Browse files
argo-cd-cherry-pick-bot[bot]jswxstwoninowang
authored
fix: dedupe realtime metrics and handle delete tombstone (cherry-pick #15216 for 3.7) (#15224)
Signed-off-by: oninowang <oninowang@tencent.com> Co-authored-by: jswxstw <jswxstw@gmail.com> Co-authored-by: oninowang <oninowang@tencent.com>
1 parent ce81da3 commit 26c24fd

2 files changed

Lines changed: 21 additions & 14 deletions

File tree

workflow/controller/controller.go

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1014,8 +1014,14 @@ func (wfc *WorkflowController) addWorkflowInformerHandlers(ctx context.Context)
10141014
}
10151015
_, err = wfc.wfInformer.AddEventHandler(cache.ResourceEventHandlerFuncs{
10161016
DeleteFunc: func(obj interface{}) {
1017-
wf, ok := obj.(*unstructured.Unstructured)
1018-
if ok { // maybe cache.DeletedFinalStateUnknown
1017+
var wf *unstructured.Unstructured
1018+
switch x := obj.(type) {
1019+
case *unstructured.Unstructured:
1020+
wf = x
1021+
case cache.DeletedFinalStateUnknown:
1022+
wf, _ = x.Obj.(*unstructured.Unstructured)
1023+
}
1024+
if wf != nil {
10191025
wfc.metrics.DeleteRealtimeMetricsForWfUID(string(wf.GetUID()))
10201026
}
10211027
},

workflow/metrics/metrics_custom.go

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -227,20 +227,21 @@ func (m *Metrics) UpsertCustomMetric(ctx context.Context, metricSpec *wfv1.Prome
227227
}
228228

229229
func (m *Metrics) attachCustomMetricToWorkflow(metricSpec *wfv1.Prometheus, ownerKey string) {
230-
if metricSpec.IsRealtime() {
231-
m.realtimeMutex.Lock()
232-
defer m.realtimeMutex.Unlock()
233-
// Must move to run each workflowkey
234-
for key := range m.realtimeWorkflows {
235-
if key == ownerKey {
236-
return
237-
}
230+
if !metricSpec.IsRealtime() {
231+
return
232+
}
233+
m.realtimeMutex.Lock()
234+
defer m.realtimeMutex.Unlock()
235+
metricKey := metricSpec.GetKey()
236+
for _, tracker := range m.realtimeWorkflows[ownerKey] {
237+
if tracker.key == metricKey {
238+
return
238239
}
239-
m.realtimeWorkflows[ownerKey] = append(m.realtimeWorkflows[ownerKey], realtimeTracker{
240-
inst: m.GetInstrument(metricSpec.Name),
241-
key: metricSpec.GetKey(),
242-
})
243240
}
241+
m.realtimeWorkflows[ownerKey] = append(m.realtimeWorkflows[ownerKey], realtimeTracker{
242+
inst: m.GetInstrument(metricSpec.Name),
243+
key: metricSpec.GetKey(),
244+
})
244245
}
245246

246247
func (m *Metrics) createCustomMetric(metricSpec *wfv1.Prometheus) error {

0 commit comments

Comments
 (0)