Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 13 additions & 2 deletions pkg/controllers/rolloutrun/webhook/worker.go
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,7 @@ func newWorker(m *manager, key types.UID, webhook rolloutv1alpha1.RolloutWebhook
Name: w.review.Name,
HookType: w.review.Spec.HookType,
State: rolloutv1alpha1.WebhookRunning,
StartTime: ptr.To(metav1.NewTime(m.clock.Now())),
StartTime: ptr.To(w.now()),
CodeReasonMessage: rolloutv1alpha1.CodeReasonMessage{
Code: rolloutv1alpha1.WebhookReviewCodeProcessing,
Reason: "Processing",
Expand Down Expand Up @@ -212,7 +212,7 @@ func (w *worker) doProbe() (keepGoing bool) {
}

if result.State == rolloutv1alpha1.WebhookCompleted {
result.FinishTime = ptr.To(metav1.NewTime(w.webhookManager.clock.Now()))
result.FinishTime = ptr.To(w.now())
}

// shorten long message
Expand All @@ -228,6 +228,17 @@ func (w *worker) doProbe() (keepGoing bool) {
return keepGoing
}

// We need special handling for time. The worker Result contains metav1.Time which serializes
// using time.RFC3339 format, losing nanoseconds precision. If we use metav1.Now() directly, it
// would cause inconsistency in precision between locally saved time and serialized time from
// cluster, leading to unnecessary updates
func (w *worker) now() metav1.Time {
now := metav1.NewTime(w.webhookManager.clock.Now())
data, _ := now.MarshalJSON()
now.UnmarshalJSON(data)
return now
}

func newProber(webhook rolloutv1alpha1.RolloutWebhook) probe.WebhookProber {
provider := ptr.Deref(webhook.Provider, "")
if len(provider) > 0 {
Expand Down