fix(go.d/sd/net_listeners): exit if local-listeners constantly times out (#18757)
Ilya Mashchenko committed
Oct 11, 2024 at 20:33 UTC
ad8365e4af2782c2573af1a4989f264227f27eba
1 file changed
+12
-1
src/go/plugin/go.d/agent/discovery/sd/discoverer/netlisteners/netlisteners.go
+12
-1
@@ -84,6 +84,9 @@ type (
84
cache map[uint64]*cacheItem // [target.Hash]
85
86
started chan struct{}
87
+
88
+ successRuns int64
89
+ timeoutRuns int64
90
}
91
cacheItem struct {
92
lastSeenTime time.Time
@@ -118,7 +121,7 @@ func (d *Discoverer) Discover(ctx context.Context, in chan<- []model.TargetGroup
121
return
122
case <-tk.C:
123
if err := d.discoverLocalListeners(ctx, in); err != nil {
121
- d.Warning(err)
124
+ d.Error(err)
125
return
126
}
127
}
@@ -129,11 +132,19 @@ func (d *Discoverer) discoverLocalListeners(ctx context.Context, in chan<- []mod
132
bs, err := d.ll.discover(ctx)
133
if err != nil {
134
if errors.Is(err, context.Canceled) {
135
+ // there is no point in continuing pointless attempts/use cpu
136
+ // https://github.com/netdata/netdata/discussions/18751#discussioncomment-10908472
137
+ if d.timeoutRuns++; d.timeoutRuns > 5 && d.successRuns == 0 {
138
+ return err
139
+ }
140
+ d.Warning(err)
141
return nil
142
}
143
return err
144
}
145
146
+ d.successRuns++
147
+
148
tgts, err := d.parseLocalListeners(bs)
149
if err != nil {
150
return err