diff --git a/etcdserver/api/etcdhttp/base.go b/etcdserver/api/etcdhttp/base.go index 283b32dbf956..e81d0bb62941 100644 --- a/etcdserver/api/etcdhttp/base.go +++ b/etcdserver/api/etcdhttp/base.go @@ -67,6 +67,10 @@ func healthHandler(server *etcdserver.EtcdServer) http.HandlerFunc { http.Error(w, `{"health": "false"}`, http.StatusServiceUnavailable) return } + if len(server.ListAlarms()) > 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 { diff --git a/etcdserver/server.go b/etcdserver/server.go index 151138953d22..eb79336ec17e 100644 --- a/etcdserver/server.go +++ b/etcdserver/server.go @@ -1667,3 +1667,7 @@ func (s *EtcdServer) goAttach(f func()) { f() }() } + +func (s *EtcdServer) ListAlarms() []*pb.AlarmMember { + return s.alarmStore.Get(pb.AlarmType_NONE) +}