From 88f0be6e59aa56570deaa2a9163d0eb3a3ae20f8 Mon Sep 17 00:00:00 2001 From: Haowei Cai Date: Tue, 3 Sep 2019 17:26:39 -0700 Subject: [PATCH] in GuaranteedUpdate, retry on precondition check failure if we are working with cached data --- .../k8s.io/apiserver/pkg/storage/etcd3/store.go | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) 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)