combine set and testandset command

release-0.4
Xiang Li 2013-07-14 16:19:30 -07:00
parent 1f4cb8f5c1
commit 8309c235d9
2 changed files with 18 additions and 51 deletions

View File

@ -37,23 +37,20 @@ func SetHttpHandler(w *http.ResponseWriter, req *http.Request) {
debug("[recv] POST http://%v/v1/keys/%s", raftServer.Name(), key) debug("[recv] POST http://%v/v1/keys/%s", raftServer.Name(), key)
command := &SetCommand{} value := req.FormValue("value")
command.Key = key
command.Value = req.FormValue("value") if len(value) == 0 {
if len(command.Value) == 0 {
(*w).WriteHeader(http.StatusBadRequest) (*w).WriteHeader(http.StatusBadRequest)
(*w).Write(newJsonError(200, "Set")) (*w).Write(newJsonError(200, "Set"))
return return
} }
prevValue := req.FormValue("prevValue")
strDuration := req.FormValue("ttl") strDuration := req.FormValue("ttl")
var err error expireTime, err := durationToExpireTime(strDuration)
command.ExpireTime, err = durationToExpireTime(strDuration)
if err != nil { if err != nil {
@ -62,51 +59,22 @@ func SetHttpHandler(w *http.ResponseWriter, req *http.Request) {
(*w).Write(newJsonError(202, "Set")) (*w).Write(newJsonError(202, "Set"))
} }
dispatch(command, w, req, true) if len(prevValue) != 0 {
command := &TestAndSetCommand{}
command.Key = key
command.Value = value
command.PrevValue = prevValue
command.ExpireTime = expireTime
dispatch(command, w, req, true)
} } else {
command := &SetCommand{}
// TestAndSet handler command.Key = key
func TestAndSetHttpHandler(w http.ResponseWriter, req *http.Request) { command.Value = value
key := req.URL.Path[len("/v1/testAndSet/"):] command.ExpireTime = expireTime
dispatch(command, w, req, true)
debug("[recv] POST http://%v/v1/testAndSet/%s", raftServer.Name(), key)
command := &TestAndSetCommand{}
command.Key = key
command.PrevValue = req.FormValue("prevValue")
command.Value = req.FormValue("value")
if len(command.Value) == 0 {
w.WriteHeader(http.StatusBadRequest)
w.Write(newJsonError(200, "TestAndSet"))
return
} }
if len(command.PrevValue) == 0 {
w.WriteHeader(http.StatusBadRequest)
w.Write(newJsonError(201, "TestAndSet"))
return
}
strDuration := req.FormValue("ttl")
var err error
command.ExpireTime, err = durationToExpireTime(strDuration)
if err != nil {
w.WriteHeader(http.StatusBadRequest)
w.Write(newJsonError(202, "TestAndSet"))
}
dispatch(command, &w, req, true)
} }
// Delete Handler // Delete Handler

View File

@ -372,7 +372,6 @@ func startClientTransport(port int, st int) {
// external commands // external commands
http.HandleFunc("/"+version+"/keys/", Multiplexer) http.HandleFunc("/"+version+"/keys/", Multiplexer)
http.HandleFunc("/"+version+"/watch/", WatchHttpHandler) http.HandleFunc("/"+version+"/watch/", WatchHttpHandler)
http.HandleFunc("/"+version+"/testAndSet/", TestAndSetHttpHandler)
http.HandleFunc("/leader", LeaderHttpHandler) http.HandleFunc("/leader", LeaderHttpHandler)
http.HandleFunc("/machines", MachinesHttpHandler) http.HandleFunc("/machines", MachinesHttpHandler)