Skip to content

Commit 3ea74de

Browse files
authored
Merge pull request #44 from KestrelAI/fix-event-update-filter
Fix event ingester re-syncing stale K8s events every 5 minutes
2 parents a828287 + 70189b6 commit 3ea74de

1 file changed

Lines changed: 18 additions & 13 deletions

File tree

pkg/ingestion/event_ingester.go

Lines changed: 18 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -83,29 +83,34 @@ func (ei *EventIngester) setupEventInformer() {
8383
_, err := eventInformer.AddEventHandler(cache.ResourceEventHandlerFuncs{
8484
AddFunc: func(obj interface{}) {
8585
if event, ok := obj.(*corev1.Event); ok {
86-
// Send Warning events for incident detection
8786
if event.Type == corev1.EventTypeWarning {
8887
ei.sendEvent(event, "CREATE")
8988
}
9089
}
9190
},
9291
UpdateFunc: func(oldObj, newObj interface{}) {
93-
if event, ok := newObj.(*corev1.Event); ok {
94-
// Send updates for Warning events (count increases indicate repeated issues)
95-
if event.Type == corev1.EventTypeWarning {
96-
ei.sendEvent(event, "UPDATE")
97-
}
92+
newEvent, ok := newObj.(*corev1.Event)
93+
if !ok || newEvent.Type != corev1.EventTypeWarning {
94+
return
9895
}
99-
},
100-
DeleteFunc: func(obj interface{}) {
101-
obj = unwrapDeletedObject(obj)
102-
if event, ok := obj.(*corev1.Event); ok {
103-
// Track deletion of warning events
104-
if event.Type == corev1.EventTypeWarning {
105-
ei.sendEvent(event, "DELETE")
96+
// The informer re-sync (every 5 min) fires UpdateFunc for ALL cached objects,
97+
// including stale K8s events that haven't changed. Detect and skip these:
98+
// if the ResourceVersion is unchanged, it's a no-op re-sync, not a real update.
99+
if oldEvent, ok := oldObj.(*corev1.Event); ok {
100+
if oldEvent.ResourceVersion == newEvent.ResourceVersion {
101+
ei.logger.Debug("Skipping re-synced event (unchanged ResourceVersion)",
102+
zap.String("reason", newEvent.Reason),
103+
zap.String("involvedObject", fmt.Sprintf("%s/%s", newEvent.InvolvedObject.Kind, newEvent.InvolvedObject.Name)),
104+
zap.String("namespace", newEvent.InvolvedObject.Namespace),
105+
zap.String("resourceVersion", newEvent.ResourceVersion))
106+
return
106107
}
107108
}
109+
ei.sendEvent(newEvent, "UPDATE")
108110
},
111+
// DeleteFunc intentionally omitted: K8s event deletion is garbage collection
112+
// (default 1-hour TTL), not an incident signal. Sending deleted events would
113+
// inject stale signals into the server's incident detection pipeline.
109114
})
110115
if err != nil {
111116
ei.logger.Error("Failed to add event event handler", zap.Error(err))

0 commit comments

Comments
 (0)