Skip to content

Commit 43cb394

Browse files
authored
Make unregisterForwarder idempotent and send to debug when forwarder already removed (#2479)
1 parent a7e0780 commit 43cb394

File tree

2 files changed

+35
-1
lines changed

2 files changed

+35
-1
lines changed

pkg/controller/utils/datadog/forwarders_manager.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,10 @@ func (f *ForwardersManager) unregisterForwarder(id string) error {
166166
f.Lock()
167167
defer f.Unlock()
168168
if _, found := f.metricsForwarders[id]; !found {
169-
return fmt.Errorf("%s not found", id)
169+
// Idempotency: deletion/finalization paths can call Unregister multiple times due to requeues.
170+
// If the forwarder is already removed, treat it as a success to avoid noisy error logs.
171+
log.V(1).Info("Metrics forwarder already unregistered", "ID", id)
172+
return nil
170173
}
171174
f.metricsForwarders[id].stop()
172175
delete(f.metricsForwarders, id)
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
// Unless explicitly stated otherwise all files in this repository are licensed
2+
// under the Apache License Version 2.0.
3+
// This product includes software developed at Datadog (https://www.datadoghq.com/).
4+
// Copyright 2016-present Datadog, Inc.
5+
6+
package datadog
7+
8+
import "testing"
9+
10+
func TestForwardersManager_unregisterForwarder_Idempotent(t *testing.T) {
11+
t.Parallel()
12+
13+
fm := &ForwardersManager{
14+
metricsForwarders: make(map[string]*metricsForwarder),
15+
}
16+
17+
id := "DatadogAgentInternal/foo/test"
18+
fm.metricsForwarders[id] = &metricsForwarder{
19+
stopChan: make(chan struct{}),
20+
}
21+
22+
// First unregister removes it.
23+
if err := fm.unregisterForwarder(id); err != nil {
24+
t.Fatalf("expected no error when unregistering existing forwarder, got: %v", err)
25+
}
26+
27+
// Second unregister should still be a no-op.
28+
if err := fm.unregisterForwarder(id); err != nil {
29+
t.Fatalf("expected no error when unregistering already-unregistered forwarder, got: %v", err)
30+
}
31+
}

0 commit comments

Comments
 (0)