From 8939c19281f8351a5d37a48104fc2c6c70126447 Mon Sep 17 00:00:00 2001 From: Aliaksandr Valialkin <valyala@gmail.com> Date: Tue, 10 Mar 2020 23:51:50 +0200 Subject: [PATCH] app/vmstorage: return 500 status code instead of 200 status code on internal errors inside `/snapshot/*` handlers --- app/vmstorage/main.go | 31 ++++++++++++++++--------------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/app/vmstorage/main.go b/app/vmstorage/main.go index bec5350611..04917f17cb 100644 --- a/app/vmstorage/main.go +++ b/app/vmstorage/main.go @@ -116,9 +116,8 @@ func requestHandler(w http.ResponseWriter, r *http.Request, strg *storage.Storag w.Header().Set("Content-Type", "application/json") snapshotPath, err := strg.CreateSnapshot() if err != nil { - msg := fmt.Sprintf("cannot create snapshot: %s", err) - logger.Errorf("%s", msg) - fmt.Fprintf(w, `{"status":"error","msg":%q}`, msg) + err = fmt.Errorf("cannot create snapshot: %s", err) + jsonResponseError(w, err) return true } fmt.Fprintf(w, `{"status":"ok","snapshot":%q}`, snapshotPath) @@ -127,9 +126,8 @@ func requestHandler(w http.ResponseWriter, r *http.Request, strg *storage.Storag w.Header().Set("Content-Type", "application/json") snapshots, err := strg.ListSnapshots() if err != nil { - msg := fmt.Sprintf("cannot list snapshots: %s", err) - logger.Errorf("%s", msg) - fmt.Fprintf(w, `{"status":"error","msg":%q}`, msg) + err = fmt.Errorf("cannot list snapshots: %s", err) + jsonResponseError(w, err) return true } fmt.Fprintf(w, `{"status":"ok","snapshots":[`) @@ -145,9 +143,8 @@ func requestHandler(w http.ResponseWriter, r *http.Request, strg *storage.Storag w.Header().Set("Content-Type", "application/json") snapshotName := r.FormValue("snapshot") if err := strg.DeleteSnapshot(snapshotName); err != nil { - msg := fmt.Sprintf("cannot delete snapshot %q: %s", snapshotName, err) - logger.Errorf("%s", msg) - fmt.Fprintf(w, `{"status":"error","msg":%q}`, msg) + err = fmt.Errorf("cannot delete snapshot %q: %s", snapshotName, err) + jsonResponseError(w, err) return true } fmt.Fprintf(w, `{"status":"ok"}`) @@ -156,16 +153,14 @@ func requestHandler(w http.ResponseWriter, r *http.Request, strg *storage.Storag w.Header().Set("Content-Type", "application/json") snapshots, err := strg.ListSnapshots() if err != nil { - msg := fmt.Sprintf("cannot list snapshots: %s", err) - logger.Errorf("%s", msg) - fmt.Fprintf(w, `{"status":"error","msg":%q}`, msg) + err = fmt.Errorf("cannot list snapshots: %s", err) + jsonResponseError(w, err) return true } for _, snapshotName := range snapshots { if err := strg.DeleteSnapshot(snapshotName); err != nil { - msg := fmt.Sprintf("cannot delete snapshot %q: %s", snapshotName, err) - logger.Errorf("%s", msg) - fmt.Fprintf(w, `{"status":"error","msg":%q}`, msg) + err = fmt.Errorf("cannot delete snapshot %q: %s", snapshotName, err) + jsonResponseError(w, err) return true } } @@ -517,3 +512,9 @@ func registerStorageMetrics(strg *storage.Storage) { return float64(m().MetricNameCacheCollisions) }) } + +func jsonResponseError(w http.ResponseWriter, err error) { + logger.Errorf("%s", err) + w.WriteHeader(http.StatusInternalServerError) + fmt.Fprintf(w, `{"status":"error","msg":%q}`, err) +}