From e4eb808434ded636c49e3ed162c88d47fcd2356a Mon Sep 17 00:00:00 2001 From: Xiang Li Date: Sun, 16 Jun 2013 15:07:45 -0700 Subject: [PATCH] change command api to support expiration feature --- command.go | 3 ++- handlers.go | 19 ++++++++++++++++++- store.go | 2 +- 3 files changed, 21 insertions(+), 3 deletions(-) diff --git a/command.go b/command.go index ba8c140f6..322b7186c 100644 --- a/command.go +++ b/command.go @@ -26,6 +26,7 @@ type Command interface { type SetCommand struct { Key string `json:"key"` Value string `json:"value"` + ExpireTime time.Time `json:"expireTime"` } // The name of the command in the log @@ -35,7 +36,7 @@ func (c *SetCommand) CommandName() string { // Set the value of key to value func (c *SetCommand) Apply(server *raft.Server) ([]byte, error) { - res := s.Set(c.Key, c.Value, time.Unix(0, 0)) + res := s.Set(c.Key, c.Value, c.ExpireTime) return json.Marshal(res) } diff --git a/handlers.go b/handlers.go index 3a8010e5d..e82c32a99 100644 --- a/handlers.go +++ b/handlers.go @@ -7,6 +7,9 @@ import ( "fmt" "io/ioutil" "bytes" + "time" + "strings" + "strconv" ) @@ -103,7 +106,21 @@ func SetHttpHandler(w http.ResponseWriter, req *http.Request) { command := &SetCommand{} command.Key = key - command.Value = string(content) + values := strings.Split(string(content), " ") + + command.Value = values[0] + + if len(values) == 2 { + duration, err := strconv.Atoi(values[1]) + if err != nil { + warn("raftd: Bad duration: %v", err) + w.WriteHeader(http.StatusInternalServerError) + return + } + command.ExpireTime = time.Now().Add(time.Second * (time.Duration)(duration)) + } else { + command.ExpireTime = time.Unix(0,0) + } Dispatch(server, command, w) } diff --git a/store.go b/store.go index dabbc2a54..bb553df0c 100644 --- a/store.go +++ b/store.go @@ -82,7 +82,7 @@ func (s *Store) Set(key string, value string, expireTime time.Time) Response { } } - return Response{SET, key, node.Value, value, true, time.Unix(0, 0)} + return Response{SET, key, node.Value, value, true, expireTime} } else { update := make(chan time.Time)