change command api to support expiration feature
parent
e832f143db
commit
e4eb808434
|
@ -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)
|
||||
}
|
||||
|
||||
|
|
19
handlers.go
19
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)
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue