From 10c61daee45303501e333ff6b2f937e455c4acc9 Mon Sep 17 00:00:00 2001 From: stefanprodan Date: Sun, 7 Jul 2019 12:52:32 +0300 Subject: [PATCH] Exit when losing leadership --- Makefile | 9 ++++++++- cmd/flagger/main.go | 8 +++++++- pkg/controller/controller.go | 9 --------- 3 files changed, 15 insertions(+), 11 deletions(-) diff --git a/Makefile b/Makefile index fbca7d9c..eb575eb6 100644 --- a/Makefile +++ b/Makefile @@ -8,7 +8,14 @@ TS=$(shell date +%Y-%m-%d_%H-%M-%S) run: GO111MODULE=on go run cmd/flagger/* -kubeconfig=$$HOME/.kube/config -log-level=info -mesh-provider=istio -namespace=test \ - -metrics-server=https://prometheus.istio.weavedx.com + -metrics-server=https://prometheus.istio.weavedx.com \ + -enable-leader-election=true + +run2: + GO111MODULE=on go run cmd/flagger/* -kubeconfig=$$HOME/.kube/config -log-level=info -mesh-provider=istio -namespace=test \ + -metrics-server=https://prometheus.istio.weavedx.com \ + -enable-leader-election=true \ + -port=9092 run-appmesh: GO111MODULE=on go run cmd/flagger/* -kubeconfig=$$HOME/.kube/config -log-level=info -mesh-provider=appmesh \ diff --git a/cmd/flagger/main.go b/cmd/flagger/main.go index 1aabb4a8..9a17aaba 100644 --- a/cmd/flagger/main.go +++ b/cmd/flagger/main.go @@ -203,22 +203,27 @@ func main() { } } + // leader election context ctx, cancel := context.WithCancel(context.Background()) defer cancel() + // prevents new requests when leadership is lost cfg.Wrap(transport.ContextCanceller(ctx, fmt.Errorf("the leader is shutting down"))) + // cancel leader election context on shutdown signals go func() { <-stopCh cancel() }() + // wrap controller run runController := func() { if err := c.Run(threadiness, stopCh); err != nil { logger.Fatalf("Error running controller: %v", err) } } + // run controller when this instance wins the leader election if enableLeaderElection { ns := leaderElectionNamespace if namespace != "" { @@ -265,7 +270,8 @@ func startLeaderElection(ctx context.Context, run func(), ns string, kubeClient run() }, OnStoppedLeading: func() { - logger.Infof("Leader election lost") + logger.Infof("Leadership lost") + os.Exit(1) }, OnNewLeader: func(identity string) { if identity != id { diff --git a/pkg/controller/controller.go b/pkg/controller/controller.go index 80dec4a8..16a0b8a3 100644 --- a/pkg/controller/controller.go +++ b/pkg/controller/controller.go @@ -216,15 +216,6 @@ func (c *Controller) syncHandler(key string) error { } c.canaries.Store(fmt.Sprintf("%s.%s", cd.Name, cd.Namespace), cd) - - //if cd.Spec.TargetRef.Kind == "Deployment" { - // err = c.bootstrapDeployment(cd) - // if err != nil { - // c.logger.Warnf("%s.%s bootstrap error %v", cd.Name, cd.Namespace, err) - // return err - // } - //} - c.logger.Infof("Synced %s", key) return nil