update scheduler to return structured errors instead of process exit

This commit is contained in:
David Eads 2017-08-29 11:20:06 -04:00
parent 28f6b3fcc0
commit 539fc6ec95
2 changed files with 25 additions and 17 deletions

View File

@ -30,6 +30,7 @@ go_library(
"//vendor/k8s.io/api/core/v1:go_default_library",
"//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
"//vendor/k8s.io/apimachinery/pkg/runtime:go_default_library",
"//vendor/k8s.io/apimachinery/pkg/util/runtime:go_default_library",
"//vendor/k8s.io/apiserver/pkg/server/healthz:go_default_library",
"//vendor/k8s.io/apiserver/pkg/util/feature:go_default_library",
"//vendor/k8s.io/client-go/informers:go_default_library",

View File

@ -28,6 +28,7 @@ import (
"k8s.io/apiserver/pkg/server/healthz"
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
"k8s.io/client-go/informers"
"k8s.io/client-go/tools/leaderelection"
"k8s.io/client-go/tools/leaderelection/resourcelock"
@ -103,14 +104,14 @@ func Run(s *options.SchedulerServer) error {
informerFactory.WaitForCacheSync(stop)
controller.WaitForCacheSync("scheduler", stop, podInformer.Informer().HasSynced)
run := func(_ <-chan struct{}) {
run := func(stopCh <-chan struct{}) {
sched.Run()
select {}
<-stopCh
}
if !s.LeaderElection.LeaderElect {
run(nil)
panic("unreachable")
run(stop)
return fmt.Errorf("finished without leader elect")
}
id, err := os.Hostname()
@ -127,10 +128,11 @@ func Run(s *options.SchedulerServer) error {
EventRecorder: recorder,
})
if err != nil {
glog.Fatalf("error creating lock: %v", err)
return fmt.Errorf("error creating lock: %v", err)
}
leaderelection.RunOrDie(leaderelection.LeaderElectionConfig{
leaderElector, err := leaderelection.NewLeaderElector(
leaderelection.LeaderElectionConfig{
Lock: rl,
LeaseDuration: s.LeaderElection.LeaseDuration.Duration,
RenewDeadline: s.LeaderElection.RenewDeadline.Duration,
@ -138,12 +140,17 @@ func Run(s *options.SchedulerServer) error {
Callbacks: leaderelection.LeaderCallbacks{
OnStartedLeading: run,
OnStoppedLeading: func() {
glog.Fatalf("lost master")
utilruntime.HandleError(fmt.Errorf("lost master"))
},
},
})
if err != nil {
return err
}
panic("unreachable")
leaderElector.Run()
return fmt.Errorf("lost lease")
}
func startHTTP(s *options.SchedulerServer) {