diff --git a/staging/src/k8s.io/apiserver/pkg/storage/etcd3/store.go b/staging/src/k8s.io/apiserver/pkg/storage/etcd3/store.go index 425590aa886..f065872b52b 100644 --- a/staging/src/k8s.io/apiserver/pkg/storage/etcd3/store.go +++ b/staging/src/k8s.io/apiserver/pkg/storage/etcd3/store.go @@ -274,7 +274,20 @@ func (s *store) GuaranteedUpdate( transformContext := authenticatedDataString(key) for { if err := preconditions.Check(key, origState.obj); err != nil { - return err + // If our data is already up to date, return the error + if !mustCheckData { + return err + } + + // It's possible we were working with stale data + // Actually fetch + origState, err = getCurrentState() + if err != nil { + return err + } + mustCheckData = false + // Retry + continue } ret, ttl, err := s.updateState(origState, tryUpdate)