diff --git a/handler.go b/handler.go index 89f18a20b..d355213db 100644 --- a/handler.go +++ b/handler.go @@ -803,12 +803,33 @@ func (h *Handler) handleDeleteView(w http.ResponseWriter, r *http.Request) { return } - if err := f.DeleteView(viewName); err != nil { + // Check that the view name is an integer. + if _, err := strconv.Atoi(viewName); err != nil { + http.Error(w, "only time based views can be deleted", http.StatusBadRequest) + return + } + + // Check the frame for time quantum. + if f.TimeQuantum() == "" { + http.Error(w, "frame does not contain a Time Quantum", http.StatusBadRequest) + return + } + + // Delete the standard view. + if err := f.DeleteView(ViewStandard + "_" + viewName); err != nil { http.Error(w, err.Error(), http.StatusBadRequest) return } - // TODO: Send the delete frame message to all nodes. + // Delete the inverse view. + if f.InverseEnabled() { + if err := f.DeleteView(ViewInverse + "_" + viewName); err != nil { + http.Error(w, err.Error(), http.StatusBadRequest) + return + } + } + + // TODO: Send the delete view message to all nodes. // Encode response. if err := json.NewEncoder(w).Encode(deleteViewResponse{}); err != nil { diff --git a/handler_test.go b/handler_test.go index 2947fd1b8..c8e0d949c 100644 --- a/handler_test.go +++ b/handler_test.go @@ -1516,18 +1516,19 @@ func TestHandler_GetTimeStamp(t *testing.T) { func TestHandler_DeleteView(t *testing.T) { hldr := test.MustOpenHolder() defer hldr.Close() - hldr.MustCreateFragmentIfNotExists("i0", "f0", "v0", 1).MustSetBits(30, (1*SliceWidth)+1) + hldr.MustCreateFragmentIfNotExists("i0", "f0", pilosa.ViewStandard+"_2017", 1).MustSetBits(30, (1*SliceWidth)+1) + hldr.Index("i0").Frame("f0").SetTimeQuantum("YMD") h := test.NewHandler() h.Holder = hldr.Holder h.Cluster = test.NewCluster(1) w := httptest.NewRecorder() - h.ServeHTTP(w, test.MustNewHTTPRequest("DELETE", "/index/i0/frame/f0/view/v0", strings.NewReader(""))) + h.ServeHTTP(w, test.MustNewHTTPRequest("DELETE", "/index/i0/frame/f0/view/2017", strings.NewReader(""))) if w.Code != http.StatusOK { t.Fatalf("unexpected status code: %d", w.Code) } else if body := w.Body.String(); body != `{}`+"\n" { t.Fatalf("unexpected body: %s", body) - } else if f := hldr.Index("i0").Frame("f0").View("v0"); f != nil { + } else if f := hldr.Index("i0").Frame("f0").View(pilosa.ViewStandard + "_2017"); f != nil { t.Fatal("expected nil view") } }