@@ -36,6 +36,9 @@ import (
3636 "kubecube-webconsole/handler"
3737)
3838
39+ // leader flag
40+ var leader = false
41+
3942func init () {
4043 clients .InitCubeClientSetWithOpts (nil )
4144}
@@ -55,11 +58,7 @@ func main() {
5558 return
5659 }
5760
58- // provide api for livenessProbe
59- http .HandleFunc ("/healthz" , func (response http.ResponseWriter , request * http.Request ) {
60- logger .Debug ("Health check" )
61- response .WriteHeader (http .StatusOK )
62- })
61+ runAPIServer ()
6362
6463 rl , err := resourcelock .New (resourcelock .ConfigMapsResourceLock ,
6564 handler .LeaderElectionNamespace ,
@@ -79,9 +78,10 @@ func main() {
7978 RetryPeriod : 2 * time .Second ,
8079 Callbacks : leaderelection.LeaderCallbacks {
8180 OnStartedLeading : func (ctx context.Context ) {
82- run ()
81+ leader = true
8382 },
8483 OnStoppedLeading : func () {
84+ leader = false
8585 glog .Infoln ("leader election lost" )
8686 },
8787 },
@@ -90,20 +90,29 @@ func main() {
9090 glog .Errorf ("leader election fail, be member" )
9191 }
9292 le .Run (context .Background ())
93-
9493}
9594
96- func run () {
95+ func runAPIServer () {
96+ // provide api for livenessProbe
97+ http .HandleFunc ("/healthz" , func (response http.ResponseWriter , request * http.Request ) {
98+ logger .Debug ("Health check" )
99+ response .WriteHeader (http .StatusOK )
100+ })
97101 http .Handle ("/api/" , handler .CreateHTTPAPIHandler ())
98102 http .Handle ("/api/sockjs/" , handler .CreateAttachHandler ("/api/sockjs" ))
99103 // provide api for readinessProbe,avoid service flow into in-leader pod
100104 http .HandleFunc ("/leader" , func (response http.ResponseWriter , request * http.Request ) {
101- logger .Debug ("This is leader" )
102- response .WriteHeader (http .StatusOK )
105+ statusCode := http .StatusOK
106+ if ! leader {
107+ statusCode = http .StatusBadRequest
108+ }
109+ response .WriteHeader (statusCode )
103110 })
104111
105- err := http .ListenAndServe (fmt .Sprintf (":%d" , * handler .ServerPort ), nil )
106- if err != nil {
107- logger .Critical ("ListenAndServe failed,error msg: %s" , err .Error ())
108- }
112+ go func () {
113+ err := http .ListenAndServe (fmt .Sprintf (":%d" , * handler .ServerPort ), nil )
114+ if err != nil {
115+ logger .Critical ("ListenAndServe failed,error msg: %s" , err .Error ())
116+ }
117+ }()
109118}
0 commit comments