Merge pull request #8272 from gyuho/health

/health reports unhealthy when alarm is raised
This commit is contained in:
Gyu-Ho Lee 2017-07-18 16:15:08 -07:00 committed by GitHub
commit 608df0fc90
3 changed files with 13 additions and 0 deletions

View File

@ -52,6 +52,11 @@ func alarmTest(cx ctlCtx) {
cx.t.Fatal(err)
}
// '/health' handler should return 'false'
if err := cURLGet(cx.epc, cURLReq{endpoint: "/health", expected: `{"health": "false"}`}); err != nil {
cx.t.Fatalf("failed get with curl (%v)", err)
}
// check that Put is rejected when alarm is on
if err := ctlV3Put(cx, "3rd_test", smallbuf, ""); err != nil {
if !strings.Contains(err.Error(), "etcdserver: mvcc: database space exceeded") {

View File

@ -67,6 +67,10 @@ func healthHandler(server *etcdserver.EtcdServer) http.HandlerFunc {
http.Error(w, `{"health": "false"}`, http.StatusServiceUnavailable)
return
}
if len(server.Alarms()) > 0 {
w.Write([]byte(`{"health": "false"}`))
return
}
ctx, cancel := context.WithTimeout(context.Background(), time.Second)
defer cancel()
if _, err := server.Do(ctx, etcdserverpb.Request{Method: "QGET"}); err != nil {

View File

@ -1667,3 +1667,7 @@ func (s *EtcdServer) goAttach(f func()) {
f()
}()
}
func (s *EtcdServer) Alarms() []*pb.AlarmMember {
return s.alarmStore.Get(pb.AlarmType_NONE)
}