mirror of
https://github.com/kubernetes/kubernetes.git
synced 2026-10-28 13:45:38 +08:00
Merge pull request #143352 from serathius/etcd-refactor
Decouple updateState and updateOnce from store and span
This commit is contained in:
1 file changed
+13
-9
@@ -416,6 +416,9 @@ func (s *store) Delete(
|
||||
if utilfeature.DefaultFeatureGate.Enabled(features.AllowUnsafeMalformedObjectDeletion) {
|
||||
expectTransformOrDecodeError = opts.ExpectTransformOrDecodeError
|
||||
}
|
||||
if expectTransformOrDecodeError {
|
||||
cachedExistingObject = nil
|
||||
}
|
||||
return s.conditionalDelete(ctx, preparedKey, out, v, preconditions, validateDeletion, cachedExistingObject, expectTransformOrDecodeError)
|
||||
}
|
||||
|
||||
@@ -426,7 +429,7 @@ func (s *store) conditionalDelete(
|
||||
|
||||
var origState *objState
|
||||
var err error
|
||||
if cachedExistingObject != nil && !expectTransformOrDecodeError {
|
||||
if cachedExistingObject != nil {
|
||||
origState, err = s.getStateFromObject(cachedExistingObject, false)
|
||||
} else {
|
||||
origState, err = getCurrentState()
|
||||
@@ -533,7 +536,7 @@ func (s *store) GuaranteedUpdate(
|
||||
continue
|
||||
}
|
||||
|
||||
ret, ttl, err := s.updateState(origState, tryUpdate)
|
||||
ret, ttl, err := updateState(origState, tryUpdate)
|
||||
if err != nil {
|
||||
origState, err = refreshOnError(origState, err, getCurrentState)
|
||||
if err != nil {
|
||||
@@ -543,7 +546,7 @@ func (s *store) GuaranteedUpdate(
|
||||
}
|
||||
|
||||
var success bool
|
||||
origState, success, err = s.updateOnce(ctx, span, preparedKey, destination, origState, ret, ttl, v, ignoreNotFound, getCurrentState)
|
||||
origState, success, err = s.updateOnce(ctx, preparedKey, destination, origState, ret, ttl, v, ignoreNotFound, getCurrentState)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -553,7 +556,12 @@ func (s *store) GuaranteedUpdate(
|
||||
}
|
||||
}
|
||||
|
||||
func (s *store) updateOnce(ctx context.Context, span *tracing.Span, preparedKey string, destination runtime.Object, origState *objState, ret runtime.Object, ttl uint64, v reflect.Value, ignoreNotFound bool, getCurrentState func() (*objState, error)) (state *objState, success bool, err error) {
|
||||
func (s *store) updateOnce(ctx context.Context, preparedKey string, destination runtime.Object, origState *objState, ret runtime.Object, ttl uint64, v reflect.Value, ignoreNotFound bool, getCurrentState func() (*objState, error)) (state *objState, success bool, err error) {
|
||||
if err := s.versioner.PrepareObjectForStorage(ret); err != nil {
|
||||
return origState, false, fmt.Errorf("PrepareObjectForStorage failed: %v", err)
|
||||
}
|
||||
|
||||
span := tracing.SpanFromContext(ctx)
|
||||
span.AddEvent("About to Encode")
|
||||
data, err := runtime.Encode(s.codec, ret)
|
||||
if err != nil {
|
||||
@@ -1266,15 +1274,11 @@ func (s *store) getStateFromObject(obj runtime.Object, current bool) (*objState,
|
||||
return state, nil
|
||||
}
|
||||
|
||||
func (s *store) updateState(st *objState, userUpdate storage.UpdateFunc) (runtime.Object, uint64, error) {
|
||||
func updateState(st *objState, userUpdate storage.UpdateFunc) (runtime.Object, uint64, error) {
|
||||
ret, ttlPtr, err := userUpdate(st.obj, *st.meta)
|
||||
if err != nil {
|
||||
return nil, 0, err
|
||||
}
|
||||
|
||||
if err := s.versioner.PrepareObjectForStorage(ret); err != nil {
|
||||
return nil, 0, fmt.Errorf("PrepareObjectForStorage failed: %v", err)
|
||||
}
|
||||
var ttl uint64
|
||||
if ttlPtr != nil {
|
||||
ttl = *ttlPtr
|
||||
|
||||
Reference in new issue
Block a user