| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- package lock
- import (
- "net/http"
- "path"
- "strconv"
- "github.com/gorilla/mux"
- )
- // acquireHandler attempts to acquire a lock on the given key.
- func (h *handler) acquireHandler(w http.ResponseWriter, req *http.Request) {
- vars := mux.Vars(req)
- keypath := path.Join(prefix, vars["key"])
- ttl, err := strconv.Atoi(vars["ttl"])
- if err != nil {
- http.Error(w, "invalid ttl: " + err.Error(), http.StatusInternalServerError)
- return
- }
- // Create an incrementing id for the lock.
- resp, err := h.client.AddChild(keypath, "X", ttl)
- if err != nil {
- http.Error(w, "add lock index error: " + err.Error(), http.StatusInternalServerError)
- return
- }
- // Extract the lock index.
- index, _ := strconv.Atoi(path.Base(resp.Key))
- // Read all indices.
- resp, err = h.client.GetAll(key)
- if err != nil {
- http.Error(w, "lock children lookup error: " + err.Error(), http.StatusInternalServerError)
- return
- }
- indices := extractResponseIndices(resp)
- // TODO: child_keys := parse_and_sort_child_keys
- // TODO: if index == min(child_keys) then return 200
- // TODO: else:
- // TODO: h.client.WatchAll(key)
- // TODO: if next_lowest_key is deleted
- // TODO: get_all_keys
- // TODO: if index == min(child_keys) then return 200
- // TODO: rinse_and_repeat until we're the lowest.
- // TODO:
- }
|