Commit a1c3d266 authored by Kubernetes Submit Queue's avatar Kubernetes Submit Queue Committed by GitHub

Merge pull request #36496 from wojtek-t/debug_long_etcd_requests

Automatic merge from submit-queue Add traces to etcd3 code This is to confirm that long PUT nodes we observe are really on the etcd "server+client" side and not somewhere in the middle in apiserver side.
parents 467a1cd2 f5cac346
...@@ -27,6 +27,7 @@ go_library( ...@@ -27,6 +27,7 @@ go_library(
"//pkg/runtime:go_default_library", "//pkg/runtime:go_default_library",
"//pkg/storage:go_default_library", "//pkg/storage:go_default_library",
"//pkg/storage/etcd:go_default_library", "//pkg/storage/etcd:go_default_library",
"//pkg/util:go_default_library",
"//pkg/watch:go_default_library", "//pkg/watch:go_default_library",
"//vendor:github.com/coreos/etcd/clientv3", "//vendor:github.com/coreos/etcd/clientv3",
"//vendor:github.com/coreos/etcd/etcdserver/api/v3rpc/rpctypes", "//vendor:github.com/coreos/etcd/etcdserver/api/v3rpc/rpctypes",
......
...@@ -23,6 +23,7 @@ import ( ...@@ -23,6 +23,7 @@ import (
"path" "path"
"reflect" "reflect"
"strings" "strings"
"time"
"k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api"
"k8s.io/kubernetes/pkg/api/meta" "k8s.io/kubernetes/pkg/api/meta"
...@@ -30,6 +31,7 @@ import ( ...@@ -30,6 +31,7 @@ import (
"k8s.io/kubernetes/pkg/runtime" "k8s.io/kubernetes/pkg/runtime"
"k8s.io/kubernetes/pkg/storage" "k8s.io/kubernetes/pkg/storage"
"k8s.io/kubernetes/pkg/storage/etcd" "k8s.io/kubernetes/pkg/storage/etcd"
"k8s.io/kubernetes/pkg/util"
"k8s.io/kubernetes/pkg/watch" "k8s.io/kubernetes/pkg/watch"
"github.com/coreos/etcd/clientv3" "github.com/coreos/etcd/clientv3"
...@@ -214,6 +216,9 @@ func (s *store) conditionalDelete(ctx context.Context, key string, out runtime.O ...@@ -214,6 +216,9 @@ func (s *store) conditionalDelete(ctx context.Context, key string, out runtime.O
func (s *store) GuaranteedUpdate( func (s *store) GuaranteedUpdate(
ctx context.Context, key string, out runtime.Object, ignoreNotFound bool, ctx context.Context, key string, out runtime.Object, ignoreNotFound bool,
precondtions *storage.Preconditions, tryUpdate storage.UpdateFunc, suggestion ...runtime.Object) error { precondtions *storage.Preconditions, tryUpdate storage.UpdateFunc, suggestion ...runtime.Object) error {
trace := util.NewTrace(fmt.Sprintf("GuaranteedUpdate etcd3: %s", reflect.TypeOf(out).String()))
defer trace.LogIfLong(500 * time.Millisecond)
v, err := conversion.EnforcePtr(out) v, err := conversion.EnforcePtr(out)
if err != nil { if err != nil {
panic("unable to convert output object to pointer") panic("unable to convert output object to pointer")
...@@ -236,6 +241,7 @@ func (s *store) GuaranteedUpdate( ...@@ -236,6 +241,7 @@ func (s *store) GuaranteedUpdate(
return err return err
} }
} }
trace.Step("initial value restored")
for { for {
if err := checkPreconditions(key, precondtions, origState.obj); err != nil { if err := checkPreconditions(key, precondtions, origState.obj); err != nil {
...@@ -259,6 +265,7 @@ func (s *store) GuaranteedUpdate( ...@@ -259,6 +265,7 @@ func (s *store) GuaranteedUpdate(
if err != nil { if err != nil {
return err return err
} }
trace.Step("Transaction prepared")
txnResp, err := s.client.KV.Txn(ctx).If( txnResp, err := s.client.KV.Txn(ctx).If(
clientv3.Compare(clientv3.ModRevision(key), "=", origState.rev), clientv3.Compare(clientv3.ModRevision(key), "=", origState.rev),
...@@ -270,6 +277,7 @@ func (s *store) GuaranteedUpdate( ...@@ -270,6 +277,7 @@ func (s *store) GuaranteedUpdate(
if err != nil { if err != nil {
return err return err
} }
trace.Step("Transaction committed")
if !txnResp.Succeeded { if !txnResp.Succeeded {
getResp := (*clientv3.GetResponse)(txnResp.Responses[0].GetResponseRange()) getResp := (*clientv3.GetResponse)(txnResp.Responses[0].GetResponseRange())
glog.V(4).Infof("GuaranteedUpdate of %s failed because of a conflict, going to retry", key) glog.V(4).Infof("GuaranteedUpdate of %s failed because of a conflict, going to retry", key)
...@@ -277,6 +285,7 @@ func (s *store) GuaranteedUpdate( ...@@ -277,6 +285,7 @@ func (s *store) GuaranteedUpdate(
if err != nil { if err != nil {
return err return err
} }
trace.Step("Retry value restored")
continue continue
} }
putResp := txnResp.Responses[0].GetResponsePut() putResp := txnResp.Responses[0].GetResponsePut()
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment