Treat replaced events that didn't change resourceVersion as resync events

Kubernetes-commit: a6caa0a4726ba97737056175494516367cf98cae
This commit is contained in:
Jordan Liggitt
2020-02-08 16:30:01 -05:00
committed by Kubernetes Publisher
parent af50d22222
commit 08cc53159f
2 changed files with 21 additions and 6 deletions

View File

@@ -21,6 +21,7 @@ import (
"sync"
"time"
"k8s.io/apimachinery/pkg/api/meta"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/util/clock"
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
@@ -486,7 +487,21 @@ func (s *sharedIndexInformer) HandleDeltas(obj interface{}) error {
if err := s.indexer.Update(d.Object); err != nil {
return err
}
isSync := d.Type == Sync
isSync := false
switch {
case d.Type == Sync:
// Sync events are only propagated to listeners that requested resync
isSync = true
case d.Type == Replaced:
if accessor, err := meta.Accessor(d.Object); err == nil {
if oldAccessor, err := meta.Accessor(old); err == nil {
// Replaced events that didn't change resourceVersion are treated as resync events
// and only propagated to listeners that requested resync
isSync = accessor.GetResourceVersion() == oldAccessor.GetResourceVersion()
}
}
}
s.processor.distribute(updateNotification{oldObj: old, newObj: d.Object}, isSync)
} else {
if err := s.indexer.Add(d.Object); err != nil {