diff --git a/go/vt/servenv/liveness.go b/go/vt/servenv/liveness.go index 1b3365501a1..aab5a68afab 100644 --- a/go/vt/servenv/liveness.go +++ b/go/vt/servenv/liveness.go @@ -18,6 +18,7 @@ package servenv import ( "net/http" + "os" ) // This file registers a handler that immediately responds with HTTP 200 OK. @@ -30,6 +31,9 @@ import ( func init() { http.HandleFunc("/debug/liveness", func(rw http.ResponseWriter, r *http.Request) { - // Do nothing. Return success immediately. + if _, err := os.Stat("/etc/etsy/depool"); !os.IsNotExist(err) { + rw.WriteHeader(http.StatusServiceUnavailable) + return + } }) } diff --git a/go/vt/servenv/liveness_test.go b/go/vt/servenv/liveness_test.go index 38662e9150a..d53fe29ba4e 100644 --- a/go/vt/servenv/liveness_test.go +++ b/go/vt/servenv/liveness_test.go @@ -20,13 +20,15 @@ import ( "io" "net/http" "net/http/httptest" + "os" "testing" + + "github.com/stretchr/testify/assert" ) func TestLivenessHandler(t *testing.T) { server := httptest.NewServer(nil) defer server.Close() - resp, err := http.Get(server.URL + "/debug/liveness") if err != nil { t.Fatalf("http.Get: %v", err) @@ -40,3 +42,42 @@ func TestLivenessHandler(t *testing.T) { } t.Logf("body: %q", body) } + +func TestLivenessHandlerDepool(t *testing.T) { + assert := assert.New(t) + server := httptest.NewServer(nil) + defer server.Close() + + var resp, err = http.Get(server.URL + "/debug/liveness") + if err != nil { + t.Fatalf("http.Get: %v", err) + } + assert.Equal( + http.StatusOK, + resp.StatusCode, + "should return 200 response code when depool file is not present", + ) + + // requires + // ``` + // sudo mkdir -p /etc/etsy + // sudo chmod 777 /etc/etsy + // ``` + var path = "/etc/etsy/depool" + _, err = os.Create(path) + if err != nil { + t.Error(err) + } + defer os.Remove(path) + + resp, err = http.Get(server.URL + "/debug/liveness") + if err != nil { + t.Fatalf("http.Get: %v", err) + } + assert.Equal( + http.StatusServiceUnavailable, + resp.StatusCode, + "should return 503 response code when depool file is present", + ) + defer resp.Body.Close() +}