delete only time based views, and handle inverse views

This commit is contained in:
Michael Baird 2017-08-18 17:08:13 -05:00
parent 753d89d45e
commit 80ab4cd193
2 changed files with 27 additions and 5 deletions

View file

@ -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 {

View file

@ -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")
}
}