From d01fe93dfc267024b0086eef40c5bf12c54bc3ab Mon Sep 17 00:00:00 2001 From: Bryan Beaudreault Date: Wed, 6 Sep 2017 08:56:20 -0400 Subject: [PATCH 1/4] only verify health for serving types. return 500 status in api response if not ok --- go/vt/vttablet/tabletserver/tabletserver.go | 30 ++++++++++++--------- 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/go/vt/vttablet/tabletserver/tabletserver.go b/go/vt/vttablet/tabletserver/tabletserver.go index 57e63e96d3a..1a11797c591 100644 --- a/go/vt/vttablet/tabletserver/tabletserver.go +++ b/go/vt/vttablet/tabletserver/tabletserver.go @@ -557,19 +557,24 @@ func (tsv *TabletServer) setTimeBomb() chan struct{} { return done } -// IsHealthy returns nil if the query service is healthy (able to -// connect to the database and serving traffic) or an error explaining +// IsHealthy returns nil for non-serving types or if the query service is healthy (able to +// connect to the database and serving traffic), or an error explaining // the unhealthiness otherwise. func (tsv *TabletServer) IsHealthy() error { - _, err := tsv.Execute( - tabletenv.LocalContext(), - nil, - "select 1 from dual", - nil, - 0, - nil, - ) - return err + switch tsv.target.TabletType { + case topodatapb.TabletType_MASTER, topodatapb.TabletType_REPLICA, topodatapb.TabletType_BATCH: + _, err := tsv.Execute( + tabletenv.LocalContext(), + nil, + "/* health */ select 1 from dual", + nil, + 0, + nil, + ) + return err + default: + return nil + } } // CheckMySQL initiates a check to see if MySQL is reachable. @@ -1738,7 +1743,8 @@ func (tsv *TabletServer) registerDebugHealthHandler() { } w.Header().Set("Content-Type", "text/plain") if err := tsv.IsHealthy(); err != nil { - w.Write([]byte("not ok")) + w.WriteHeader(500) + w.Write([]byte(fmt.Sprintf("not ok: %v", err))) return } w.Write([]byte("ok")) From bc56d8a90e8be504a7d93c8a6584d96b6d8e797e Mon Sep 17 00:00:00 2001 From: Bryan Beaudreault Date: Wed, 6 Sep 2017 09:18:05 -0400 Subject: [PATCH 2/4] use http.Error --- go/vt/vttablet/tabletserver/tabletserver.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/go/vt/vttablet/tabletserver/tabletserver.go b/go/vt/vttablet/tabletserver/tabletserver.go index 1a11797c591..fa92747dd1c 100644 --- a/go/vt/vttablet/tabletserver/tabletserver.go +++ b/go/vt/vttablet/tabletserver/tabletserver.go @@ -1743,8 +1743,7 @@ func (tsv *TabletServer) registerDebugHealthHandler() { } w.Header().Set("Content-Type", "text/plain") if err := tsv.IsHealthy(); err != nil { - w.WriteHeader(500) - w.Write([]byte(fmt.Sprintf("not ok: %v", err))) + http.Error(w, fmt.Sprintf("not ok: %v", err), http.StatusInternalServerError) return } w.Write([]byte("ok")) From 9d4dab6be57c00455511250682f5cc8014241899 Mon Sep 17 00:00:00 2001 From: Bryan Beaudreault Date: Wed, 6 Sep 2017 09:19:40 -0400 Subject: [PATCH 3/4] lock --- go/vt/vttablet/tabletserver/tabletserver.go | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/go/vt/vttablet/tabletserver/tabletserver.go b/go/vt/vttablet/tabletserver/tabletserver.go index fa92747dd1c..777e5b0cb4b 100644 --- a/go/vt/vttablet/tabletserver/tabletserver.go +++ b/go/vt/vttablet/tabletserver/tabletserver.go @@ -561,7 +561,10 @@ func (tsv *TabletServer) setTimeBomb() chan struct{} { // connect to the database and serving traffic), or an error explaining // the unhealthiness otherwise. func (tsv *TabletServer) IsHealthy() error { - switch tsv.target.TabletType { + tsv.mu.Lock() + tabletType := tsv.target.TabletType + tsv.mu.Unlock() + switch tabletType { case topodatapb.TabletType_MASTER, topodatapb.TabletType_REPLICA, topodatapb.TabletType_BATCH: _, err := tsv.Execute( tabletenv.LocalContext(), From 26ed8da270b695e4e9fadba97733f8ae1c49af45 Mon Sep 17 00:00:00 2001 From: Bryan Beaudreault Date: Wed, 6 Sep 2017 10:34:34 -0400 Subject: [PATCH 4/4] add experimental --- go/vt/vttablet/tabletserver/tabletserver.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/go/vt/vttablet/tabletserver/tabletserver.go b/go/vt/vttablet/tabletserver/tabletserver.go index 777e5b0cb4b..5635d018981 100644 --- a/go/vt/vttablet/tabletserver/tabletserver.go +++ b/go/vt/vttablet/tabletserver/tabletserver.go @@ -565,7 +565,7 @@ func (tsv *TabletServer) IsHealthy() error { tabletType := tsv.target.TabletType tsv.mu.Unlock() switch tabletType { - case topodatapb.TabletType_MASTER, topodatapb.TabletType_REPLICA, topodatapb.TabletType_BATCH: + case topodatapb.TabletType_MASTER, topodatapb.TabletType_REPLICA, topodatapb.TabletType_BATCH, topodatapb.TabletType_EXPERIMENTAL: _, err := tsv.Execute( tabletenv.LocalContext(), nil,