mirror of https://github.com/k3s-io/k3s
track poststarthook registration stacks for debugging
parent
6c31101257
commit
b75e93d8bb
|
@ -20,6 +20,7 @@ import (
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
"runtime/debug"
|
||||||
|
|
||||||
"k8s.io/klog"
|
"k8s.io/klog"
|
||||||
|
|
||||||
|
@ -58,6 +59,9 @@ type PostStartHookProvider interface {
|
||||||
|
|
||||||
type postStartHookEntry struct {
|
type postStartHookEntry struct {
|
||||||
hook PostStartHookFunc
|
hook PostStartHookFunc
|
||||||
|
// originatingStack holds the stack that registered postStartHooks. This allows us to show a more helpful message
|
||||||
|
// for duplicate registration.
|
||||||
|
originatingStack string
|
||||||
|
|
||||||
// done will be closed when the postHook is finished
|
// done will be closed when the postHook is finished
|
||||||
done chan struct{}
|
done chan struct{}
|
||||||
|
@ -85,8 +89,9 @@ func (s *GenericAPIServer) AddPostStartHook(name string, hook PostStartHookFunc)
|
||||||
if s.postStartHooksCalled {
|
if s.postStartHooksCalled {
|
||||||
return fmt.Errorf("unable to add %q because PostStartHooks have already been called", name)
|
return fmt.Errorf("unable to add %q because PostStartHooks have already been called", name)
|
||||||
}
|
}
|
||||||
if _, exists := s.postStartHooks[name]; exists {
|
if postStartHook, exists := s.postStartHooks[name]; exists {
|
||||||
return fmt.Errorf("unable to add %q because it is already registered", name)
|
// this is programmer error, but it can be hard to debug
|
||||||
|
return fmt.Errorf("unable to add %q because it was already registered by: %s", name, postStartHook.originatingStack)
|
||||||
}
|
}
|
||||||
|
|
||||||
// done is closed when the poststarthook is finished. This is used by the health check to be able to indicate
|
// done is closed when the poststarthook is finished. This is used by the health check to be able to indicate
|
||||||
|
@ -95,7 +100,7 @@ func (s *GenericAPIServer) AddPostStartHook(name string, hook PostStartHookFunc)
|
||||||
if err := s.AddHealthzChecks(postStartHookHealthz{name: "poststarthook/" + name, done: done}); err != nil {
|
if err := s.AddHealthzChecks(postStartHookHealthz{name: "poststarthook/" + name, done: done}); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
s.postStartHooks[name] = postStartHookEntry{hook: hook, done: done}
|
s.postStartHooks[name] = postStartHookEntry{hook: hook, originatingStack: string(debug.Stack()), done: done}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue