From 4b8f9d897074eee96224446a2910e88b6b20f7bf Mon Sep 17 00:00:00 2001 From: David Norton Date: Wed, 28 Jan 2015 14:27:05 -0500 Subject: [PATCH] fix CREATE RETENTION POLICY ... DEFAULT --- httpd/handler_test.go | 23 +++++++++++++++++++++++ server.go | 14 +++++++++++++- 2 files changed, 36 insertions(+), 1 deletion(-) diff --git a/httpd/handler_test.go b/httpd/handler_test.go index 105cc42a64..95440cc901 100644 --- a/httpd/handler_test.go +++ b/httpd/handler_test.go @@ -184,6 +184,29 @@ func TestHandler_CreateRetentionPolicy(t *testing.T) { } } +func TestHandler_CreateRetentionPolicyAsDefault(t *testing.T) { + srvr := OpenServer(NewMessagingClient()) + srvr.CreateDatabase("foo") + s := NewHTTPServer(srvr) + defer s.Close() + + query := map[string]string{"q": "CREATE RETENTION POLICY bar ON foo DURATION 1h REPLICATION 1 DEFAULT"} + status, body := MustHTTP("GET", s.URL+`/query`, query, nil, "") + + if status != http.StatusOK { + t.Fatalf("unexpected status: %d", status) + } else if body != `{"results":[{}]}` { + t.Fatalf("unexpected body: %s", body) + } + + rp, err := srvr.DefaultRetentionPolicy("foo") + if err != nil { + t.Fatal(err) + } else if rp.Name != "bar" { + t.Fatalf("default retention policy mismatch:\n exp=%s\n got=%s\n", "bar", rp.Name) + } +} + func TestHandler_CreateRetentionPolicy_DatabaseNotFound(t *testing.T) { srvr := OpenServer(NewMessagingClient()) s := NewHTTPServer(srvr) diff --git a/server.go b/server.go index 5afd180a32..45cb815be8 100644 --- a/server.go +++ b/server.go @@ -1917,7 +1917,19 @@ func (s *Server) executeCreateRetentionPolicyStatement(q *influxql.CreateRetenti rp := NewRetentionPolicy(q.Name) rp.Duration = q.Duration rp.ReplicaN = uint32(q.Replication) - return &Result{Err: s.CreateRetentionPolicy(q.Database, rp)} + + // Create new retention policy. + err := s.CreateRetentionPolicy(q.Database, rp) + if err != nil { + return &Result{Err: s.CreateRetentionPolicy(q.Database, rp)} + } + + // If requested, set new policy as the default. + if q.Default { + err = s.SetDefaultRetentionPolicy(q.Database, q.Name) + } + + return &Result{Err: err} } func (s *Server) executeAlterRetentionPolicyStatement(q *influxql.AlterRetentionPolicyStatement, user *User) *Result {