Skip to content

Commit

Permalink
Ignore time in ManagedFields when processing events from dependent re…
Browse files Browse the repository at this point in the history
…sources (#59)

Signed-off-by: Fabian von Feilitzsch <fabian@fabianism.us>
  • Loading branch information
fabianvf authored Apr 29, 2021
1 parent 0449c0c commit 064486c
Show file tree
Hide file tree
Showing 2 changed files with 45 additions and 0 deletions.
16 changes: 16 additions & 0 deletions predicate/dependent.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ package predicate
import (
"reflect"

metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
"sigs.k8s.io/controller-runtime/pkg/event"
logf "sigs.k8s.io/controller-runtime/pkg/log"
Expand Down Expand Up @@ -91,6 +92,9 @@ func (DependentPredicate) Update(e event.UpdateEvent) bool {
old.SetResourceVersion("")
new.SetResourceVersion("")

old.SetManagedFields(removeTimeFromManagedFields(old.GetManagedFields()))
new.SetManagedFields(removeTimeFromManagedFields(new.GetManagedFields()))

if reflect.DeepEqual(old.Object, new.Object) {
return false
}
Expand All @@ -99,3 +103,15 @@ func (DependentPredicate) Update(e event.UpdateEvent) bool {
new.GroupVersionKind().GroupVersion(), "kind", new.GroupVersionKind().Kind)
return true
}

func removeTimeFromManagedFields(fields []metav1.ManagedFieldsEntry) []metav1.ManagedFieldsEntry {
if fields == nil {
return nil
}
newFields := []metav1.ManagedFieldsEntry{}
for _, field := range fields {
field.Time = nil
newFields = append(newFields, field)
}
return newFields
}
29 changes: 29 additions & 0 deletions predicate/dependent_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,11 @@
package predicate

import (
"time"

. "github.com/onsi/ginkgo"
. "github.com/onsi/gomega"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
)

Expand Down Expand Up @@ -66,6 +69,32 @@ var _ = Describe("DependentPredicate", func() {
Expect(pred.Update(e)).To(BeFalse())
})
})

When("except time in managedFields is different", func() {
BeforeEach(func() {
curTime := time.Now()
oldTime := metav1.NewTime(curTime)
oldObj.SetManagedFields([]metav1.ManagedFieldsEntry{{
Manager: "test",
Operation: "Update",
APIVersion: "v1",
Time: &oldTime,
}})

duration, _ := time.ParseDuration("4h")
newTime := metav1.NewTime(curTime.Add(duration))
newObj.SetManagedFields([]metav1.ManagedFieldsEntry{{
Manager: "test",
Operation: "Update",
APIVersion: "v1",
Time: &newTime,
}})
})
It("should return false", func() {
e := makeUpdateEventFor(oldObj, newObj)
Expect(pred.Update(e)).To(BeFalse())
})
})
})

When("objects are different", func() {
Expand Down

0 comments on commit 064486c

Please sign in to comment.