mirror of https://github.com/k3s-io/k3s
Merge pull request #73071 from krzysied/reflector_trace
Adding trace to reflector initializationpull/564/head
commit
fd0df59f5b
|
@ -60,6 +60,7 @@
|
||||||
allowedImports:
|
allowedImports:
|
||||||
- k8s.io/api
|
- k8s.io/api
|
||||||
- k8s.io/apimachinery
|
- k8s.io/apimachinery
|
||||||
|
- k8s.io/apiserver/pkg/util/trace
|
||||||
- k8s.io/client-go
|
- k8s.io/client-go
|
||||||
- k8s.io/klog
|
- k8s.io/klog
|
||||||
|
|
||||||
|
@ -82,6 +83,7 @@
|
||||||
- "./vendor/k8s.io/client-go/tools/remotecommand"
|
- "./vendor/k8s.io/client-go/tools/remotecommand"
|
||||||
allowedImports:
|
allowedImports:
|
||||||
- k8s.io/apimachinery
|
- k8s.io/apimachinery
|
||||||
|
- k8s.io/apiserver/pkg/util/trace
|
||||||
- k8s.io/client-go
|
- k8s.io/client-go
|
||||||
- k8s.io/klog
|
- k8s.io/klog
|
||||||
|
|
||||||
|
|
|
@ -610,6 +610,10 @@
|
||||||
"ImportPath": "k8s.io/apimachinery/third_party/forked/golang/reflect",
|
"ImportPath": "k8s.io/apimachinery/third_party/forked/golang/reflect",
|
||||||
"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
|
"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"ImportPath": "k8s.io/apiserver/pkg/util/trace",
|
||||||
|
"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/klog",
|
"ImportPath": "k8s.io/klog",
|
||||||
"Rev": "8139d8cb77af419532b33dfa7dd09fbc5f1d344f"
|
"Rev": "8139d8cb77af419532b33dfa7dd09fbc5f1d344f"
|
||||||
|
|
|
@ -79,6 +79,7 @@ go_library(
|
||||||
"//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library",
|
"//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library",
|
||||||
"//staging/src/k8s.io/apimachinery/pkg/util/wait:go_default_library",
|
"//staging/src/k8s.io/apimachinery/pkg/util/wait:go_default_library",
|
||||||
"//staging/src/k8s.io/apimachinery/pkg/watch:go_default_library",
|
"//staging/src/k8s.io/apimachinery/pkg/watch:go_default_library",
|
||||||
|
"//staging/src/k8s.io/apiserver/pkg/util/trace:go_default_library",
|
||||||
"//staging/src/k8s.io/client-go/rest:go_default_library",
|
"//staging/src/k8s.io/client-go/rest:go_default_library",
|
||||||
"//staging/src/k8s.io/client-go/tools/pager:go_default_library",
|
"//staging/src/k8s.io/client-go/tools/pager:go_default_library",
|
||||||
"//staging/src/k8s.io/client-go/util/buffer:go_default_library",
|
"//staging/src/k8s.io/client-go/util/buffer:go_default_library",
|
||||||
|
|
|
@ -40,6 +40,7 @@ import (
|
||||||
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
|
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
|
||||||
"k8s.io/apimachinery/pkg/util/wait"
|
"k8s.io/apimachinery/pkg/util/wait"
|
||||||
"k8s.io/apimachinery/pkg/watch"
|
"k8s.io/apimachinery/pkg/watch"
|
||||||
|
utiltrace "k8s.io/apiserver/pkg/util/trace"
|
||||||
"k8s.io/klog"
|
"k8s.io/klog"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -175,46 +176,56 @@ func (r *Reflector) ListAndWatch(stopCh <-chan struct{}) error {
|
||||||
options := metav1.ListOptions{ResourceVersion: "0"}
|
options := metav1.ListOptions{ResourceVersion: "0"}
|
||||||
r.metrics.numberOfLists.Inc()
|
r.metrics.numberOfLists.Inc()
|
||||||
start := r.clock.Now()
|
start := r.clock.Now()
|
||||||
|
if err := func() error {
|
||||||
var list runtime.Object
|
trace := utiltrace.New("Reflector_" + r.name + "_ListAndWatch")
|
||||||
var err error
|
defer trace.LogIfLong(10 * time.Second)
|
||||||
listCh := make(chan struct{}, 1)
|
var list runtime.Object
|
||||||
panicCh := make(chan interface{}, 1)
|
var err error
|
||||||
go func() {
|
listCh := make(chan struct{}, 1)
|
||||||
defer func() {
|
panicCh := make(chan interface{}, 1)
|
||||||
if r := recover(); r != nil {
|
go func() {
|
||||||
panicCh <- r
|
defer func() {
|
||||||
}
|
if r := recover(); r != nil {
|
||||||
|
panicCh <- r
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
list, err = r.listerWatcher.List(options)
|
||||||
|
close(listCh)
|
||||||
}()
|
}()
|
||||||
list, err = r.listerWatcher.List(options)
|
select {
|
||||||
close(listCh)
|
case <-stopCh:
|
||||||
}()
|
return nil
|
||||||
select {
|
case r := <-panicCh:
|
||||||
case <-stopCh:
|
panic(r)
|
||||||
|
case <-listCh:
|
||||||
|
}
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("%s: Failed to list %v: %v", r.name, r.expectedType, err)
|
||||||
|
}
|
||||||
|
trace.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()
|
||||||
|
trace.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)
|
||||||
|
}
|
||||||
|
trace.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)
|
||||||
|
}
|
||||||
|
trace.Step("SyncWith done")
|
||||||
|
r.setLastSyncResourceVersion(resourceVersion)
|
||||||
|
trace.Step("Resource version updated")
|
||||||
return nil
|
return nil
|
||||||
case r := <-panicCh:
|
}(); err != nil {
|
||||||
panic(r)
|
return err
|
||||||
case <-listCh:
|
|
||||||
}
|
}
|
||||||
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)
|
resyncerrc := make(chan error, 1)
|
||||||
cancelCh := make(chan struct{})
|
cancelCh := make(chan struct{})
|
||||||
|
@ -285,7 +296,6 @@ func (r *Reflector) ListAndWatch(stopCh <-chan struct{}) error {
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := r.watchHandler(w, &resourceVersion, resyncerrc, stopCh); err != nil {
|
if err := r.watchHandler(w, &resourceVersion, resyncerrc, stopCh); err != nil {
|
||||||
if err != errorStopRequested {
|
if err != errorStopRequested {
|
||||||
klog.Warningf("%s: watch of %v ended with: %v", r.name, r.expectedType, err)
|
klog.Warningf("%s: watch of %v ended with: %v", r.name, r.expectedType, err)
|
||||||
|
|
|
@ -446,6 +446,10 @@
|
||||||
"ImportPath": "k8s.io/apimachinery/third_party/forked/golang/reflect",
|
"ImportPath": "k8s.io/apimachinery/third_party/forked/golang/reflect",
|
||||||
"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
|
"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"ImportPath": "k8s.io/apiserver/pkg/util/trace",
|
||||||
|
"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/client-go/discovery",
|
"ImportPath": "k8s.io/client-go/discovery",
|
||||||
"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
|
"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
|
||||||
|
|
|
@ -462,6 +462,10 @@
|
||||||
"ImportPath": "k8s.io/apimachinery/third_party/forked/golang/reflect",
|
"ImportPath": "k8s.io/apimachinery/third_party/forked/golang/reflect",
|
||||||
"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
|
"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"ImportPath": "k8s.io/apiserver/pkg/util/trace",
|
||||||
|
"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/client-go/discovery",
|
"ImportPath": "k8s.io/client-go/discovery",
|
||||||
"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
|
"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
|
||||||
|
|
|
@ -462,6 +462,10 @@
|
||||||
"ImportPath": "k8s.io/apimachinery/third_party/forked/golang/reflect",
|
"ImportPath": "k8s.io/apimachinery/third_party/forked/golang/reflect",
|
||||||
"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
|
"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"ImportPath": "k8s.io/apiserver/pkg/util/trace",
|
||||||
|
"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/client-go/discovery",
|
"ImportPath": "k8s.io/client-go/discovery",
|
||||||
"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
|
"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
|
||||||
|
|
|
@ -474,6 +474,10 @@
|
||||||
"ImportPath": "k8s.io/apimachinery/third_party/forked/golang/reflect",
|
"ImportPath": "k8s.io/apimachinery/third_party/forked/golang/reflect",
|
||||||
"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
|
"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"ImportPath": "k8s.io/apiserver/pkg/util/trace",
|
||||||
|
"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/client-go/discovery",
|
"ImportPath": "k8s.io/client-go/discovery",
|
||||||
"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
|
"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
|
||||||
|
|
Loading…
Reference in New Issue