From 731504eaa44ab0cb916375889ba58c2bc16bc477 Mon Sep 17 00:00:00 2001 From: xuriwuyun Date: Tue, 21 Jan 2025 11:52:51 +0800 Subject: [PATCH] fix: use eventime as the event version to improve the granularity (#8822) (cherry picked from commit ee38f3ec6e4b92ce63b831a234229aed7e7d1bed) --- controllers/k8score/event_controller_test.go | 1 + pkg/controller/instanceset/pod_role_event_handler.go | 2 +- pkg/kbagent/util/event.go | 5 ++++- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/controllers/k8score/event_controller_test.go b/controllers/k8score/event_controller_test.go index 6d105276a68..bdcc45515e0 100644 --- a/controllers/k8score/event_controller_test.go +++ b/controllers/k8score/event_controller_test.go @@ -225,6 +225,7 @@ var _ = Describe("Event Controller", func() { role = "follower" sndValidEvent := createRoleChangedEvent(podName, role, uid) sndValidEvent.LastTimestamp = metav1.NewTime(afterLastTS) + sndValidEvent.EventTime = metav1.NewMicroTime(afterLastTS) Expect(testCtx.CreateObj(ctx, sndValidEvent)).Should(Succeed()) Eventually(func() string { event := &corev1.Event{} diff --git a/pkg/controller/instanceset/pod_role_event_handler.go b/pkg/controller/instanceset/pod_role_event_handler.go index f3db61f4402..2e329202bdd 100644 --- a/pkg/controller/instanceset/pod_role_event_handler.go +++ b/pkg/controller/instanceset/pod_role_event_handler.go @@ -195,7 +195,7 @@ func parseGlobalRoleSnapshot(role string, event *corev1.Event) *common.GlobalRol if err := json.Unmarshal([]byte(role), snapshot); err == nil { return snapshot } - snapshot.Version = strconv.FormatInt(event.LastTimestamp.UnixMicro(), 10) + snapshot.Version = strconv.FormatInt(event.EventTime.UnixMicro(), 10) pair := common.PodRoleNamePair{ PodName: event.InvolvedObject.Name, RoleName: role, diff --git a/pkg/kbagent/util/event.go b/pkg/kbagent/util/event.go index 4ebfb708aaf..3e7742ff347 100644 --- a/pkg/kbagent/util/event.go +++ b/pkg/kbagent/util/event.go @@ -106,7 +106,10 @@ func createOrUpdateEvent(reason, message string) error { if err == nil { // update event.Count++ - event.LastTimestamp = metav1.Now() + // the granularity of lastTimestamp is second and it is not enough for the event. + // there may multiple events in the same second, so we need to use EventTime here. + // event.LastTimestamp = metav1.Now() + event.EventTime = metav1.NowMicro() _, err = eventsClient.Update(context.Background(), event, metav1.UpdateOptions{}) if err == nil { return nil