From 4e4d380b32105c3ff7641661120da876bca060de Mon Sep 17 00:00:00 2001 From: Krzysztof Siedlecki Date: Thu, 24 Jan 2019 16:30:47 +0100 Subject: [PATCH 1/2] adding trace to reflector initialization --- .../k8s.io/client-go/tools/cache/reflector.go | 84 +++++++++++-------- 1 file changed, 48 insertions(+), 36 deletions(-) diff --git a/staging/src/k8s.io/client-go/tools/cache/reflector.go b/staging/src/k8s.io/client-go/tools/cache/reflector.go index e6be23084cf..2a0f70022f8 100644 --- a/staging/src/k8s.io/client-go/tools/cache/reflector.go +++ b/staging/src/k8s.io/client-go/tools/cache/reflector.go @@ -41,6 +41,7 @@ import ( "k8s.io/apimachinery/pkg/util/wait" "k8s.io/apimachinery/pkg/watch" "k8s.io/klog" + "k8s.io/utils/trace" ) // Reflector watches a specified resource and causes all changes to be reflected in the given store. @@ -176,45 +177,56 @@ func (r *Reflector) ListAndWatch(stopCh <-chan struct{}) error { r.metrics.numberOfLists.Inc() start := r.clock.Now() - var list runtime.Object - var err error - listCh := make(chan struct{}, 1) - panicCh := make(chan interface{}, 1) - go func() { - defer func() { - if r := recover(); r != nil { - panicCh <- r - } + if err := func() error { + initTrace := trace.New("Reflector " + r.name + " ListAndWatch") + defer initTrace.LogIfLong(10 * time.Second) + var list runtime.Object + var err error + listCh := make(chan struct{}, 1) + panicCh := make(chan interface{}, 1) + go func() { + defer func() { + if r := recover(); r != nil { + panicCh <- r + } + }() + list, err = r.listerWatcher.List(options) + close(listCh) }() - list, err = r.listerWatcher.List(options) - close(listCh) - }() - select { - case <-stopCh: + select { + case <-stopCh: + return nil + case r := <-panicCh: + panic(r) + case <-listCh: + } + if err != nil { + return fmt.Errorf("%s: Failed to list %v: %v", r.name, r.expectedType, err) + } + initTrace.Step("Objects listed") + r.metrics.listDuration.Observe(time.Since(start).Seconds()) + listMetaInterface, err := meta.ListAccessor(list) + if err != nil { + return fmt.Errorf("%s: Unable to understand list result %#v: %v", r.name, list, err) + } + resourceVersion = listMetaInterface.GetResourceVersion() + initTrace.Step("Resource version extracted") + items, err := meta.ExtractList(list) + if err != nil { + return fmt.Errorf("%s: Unable to understand list result %#v (%v)", r.name, list, err) + } + initTrace.Step("Objects extracted") + r.metrics.numberOfItemsInList.Observe(float64(len(items))) + if err := r.syncWith(items, resourceVersion); err != nil { + return fmt.Errorf("%s: Unable to sync list result: %v", r.name, err) + } + initTrace.Step("SyncWith done") + r.setLastSyncResourceVersion(resourceVersion) + initTrace.Step("Resource version updated") return nil - case r := <-panicCh: - panic(r) - case <-listCh: + }(); err != nil { + return err } - if err != nil { - return fmt.Errorf("%s: Failed to list %v: %v", r.name, r.expectedType, err) - } - - r.metrics.listDuration.Observe(time.Since(start).Seconds()) - listMetaInterface, err := meta.ListAccessor(list) - if err != nil { - return fmt.Errorf("%s: Unable to understand list result %#v: %v", r.name, list, err) - } - resourceVersion = listMetaInterface.GetResourceVersion() - items, err := meta.ExtractList(list) - if err != nil { - return fmt.Errorf("%s: Unable to understand list result %#v (%v)", r.name, list, err) - } - r.metrics.numberOfItemsInList.Observe(float64(len(items))) - if err := r.syncWith(items, resourceVersion); err != nil { - return fmt.Errorf("%s: Unable to sync list result: %v", r.name, err) - } - r.setLastSyncResourceVersion(resourceVersion) resyncerrc := make(chan error, 1) cancelCh := make(chan struct{}) From 91d9f7f0c0052ee67253e7d1afe2a51a848cb5d6 Mon Sep 17 00:00:00 2001 From: Krzysztof Siedlecki Date: Fri, 25 Jan 2019 12:53:24 +0100 Subject: [PATCH 2/2] adding dependencies --- staging/src/k8s.io/client-go/Godeps/Godeps.json | 4 ++++ staging/src/k8s.io/client-go/tools/cache/BUILD | 1 + staging/src/k8s.io/cloud-provider/Godeps/Godeps.json | 4 ++++ staging/src/k8s.io/csi-api/Godeps/Godeps.json | 4 ++++ staging/src/k8s.io/node-api/Godeps/Godeps.json | 4 ++++ staging/src/k8s.io/sample-controller/Godeps/Godeps.json | 4 ++++ 6 files changed, 21 insertions(+) diff --git a/staging/src/k8s.io/client-go/Godeps/Godeps.json b/staging/src/k8s.io/client-go/Godeps/Godeps.json index fba6a23de66..69318cbc89b 100644 --- a/staging/src/k8s.io/client-go/Godeps/Godeps.json +++ b/staging/src/k8s.io/client-go/Godeps/Godeps.json @@ -622,6 +622,10 @@ "ImportPath": "k8s.io/utils/integer", "Rev": "8a87304934321b4b0ad72a7cb3cbc715d67d38c7" }, + { + "ImportPath": "k8s.io/utils/trace", + "Rev": "8a87304934321b4b0ad72a7cb3cbc715d67d38c7" + }, { "ImportPath": "sigs.k8s.io/yaml", "Rev": "fd68e9863619f6ec2fdd8625fe1f02e7c877e480" diff --git a/staging/src/k8s.io/client-go/tools/cache/BUILD b/staging/src/k8s.io/client-go/tools/cache/BUILD index 8609439e558..888eb267008 100644 --- a/staging/src/k8s.io/client-go/tools/cache/BUILD +++ b/staging/src/k8s.io/client-go/tools/cache/BUILD @@ -84,6 +84,7 @@ go_library( "//staging/src/k8s.io/client-go/util/retry:go_default_library", "//vendor/k8s.io/klog:go_default_library", "//vendor/k8s.io/utils/buffer:go_default_library", + "//vendor/k8s.io/utils/trace:go_default_library", ], ) diff --git a/staging/src/k8s.io/cloud-provider/Godeps/Godeps.json b/staging/src/k8s.io/cloud-provider/Godeps/Godeps.json index e09d9befdf5..c976b07d2b8 100644 --- a/staging/src/k8s.io/cloud-provider/Godeps/Godeps.json +++ b/staging/src/k8s.io/cloud-provider/Godeps/Godeps.json @@ -958,6 +958,10 @@ "ImportPath": "k8s.io/utils/integer", "Rev": "8a87304934321b4b0ad72a7cb3cbc715d67d38c7" }, + { + "ImportPath": "k8s.io/utils/trace", + "Rev": "8a87304934321b4b0ad72a7cb3cbc715d67d38c7" + }, { "ImportPath": "sigs.k8s.io/yaml", "Rev": "fd68e9863619f6ec2fdd8625fe1f02e7c877e480" diff --git a/staging/src/k8s.io/csi-api/Godeps/Godeps.json b/staging/src/k8s.io/csi-api/Godeps/Godeps.json index c476ce1dfcd..1218aa5cc2e 100644 --- a/staging/src/k8s.io/csi-api/Godeps/Godeps.json +++ b/staging/src/k8s.io/csi-api/Godeps/Godeps.json @@ -554,6 +554,10 @@ "ImportPath": "k8s.io/utils/integer", "Rev": "8a87304934321b4b0ad72a7cb3cbc715d67d38c7" }, + { + "ImportPath": "k8s.io/utils/trace", + "Rev": "8a87304934321b4b0ad72a7cb3cbc715d67d38c7" + }, { "ImportPath": "sigs.k8s.io/yaml", "Rev": "fd68e9863619f6ec2fdd8625fe1f02e7c877e480" diff --git a/staging/src/k8s.io/node-api/Godeps/Godeps.json b/staging/src/k8s.io/node-api/Godeps/Godeps.json index 9607b15f758..945acb3adc9 100644 --- a/staging/src/k8s.io/node-api/Godeps/Godeps.json +++ b/staging/src/k8s.io/node-api/Godeps/Godeps.json @@ -554,6 +554,10 @@ "ImportPath": "k8s.io/utils/integer", "Rev": "8a87304934321b4b0ad72a7cb3cbc715d67d38c7" }, + { + "ImportPath": "k8s.io/utils/trace", + "Rev": "8a87304934321b4b0ad72a7cb3cbc715d67d38c7" + }, { "ImportPath": "sigs.k8s.io/yaml", "Rev": "fd68e9863619f6ec2fdd8625fe1f02e7c877e480" diff --git a/staging/src/k8s.io/sample-controller/Godeps/Godeps.json b/staging/src/k8s.io/sample-controller/Godeps/Godeps.json index d3f4b12e983..9f77150d79d 100644 --- a/staging/src/k8s.io/sample-controller/Godeps/Godeps.json +++ b/staging/src/k8s.io/sample-controller/Godeps/Godeps.json @@ -1162,6 +1162,10 @@ "ImportPath": "k8s.io/utils/integer", "Rev": "8a87304934321b4b0ad72a7cb3cbc715d67d38c7" }, + { + "ImportPath": "k8s.io/utils/trace", + "Rev": "8a87304934321b4b0ad72a7cb3cbc715d67d38c7" + }, { "ImportPath": "sigs.k8s.io/yaml", "Rev": "fd68e9863619f6ec2fdd8625fe1f02e7c877e480"