github.com/jpetazzo/etcd@v0.2.1-0.20140113055439-97f1363afac5/mod/leader/v2/delete_handler.go (about) 1 package v2 2 3 import ( 4 "fmt" 5 "io" 6 "net/http" 7 "net/url" 8 9 "github.com/gorilla/mux" 10 ) 11 12 // deleteHandler remove a given leader leader. 13 func (h *handler) deleteHandler(w http.ResponseWriter, req *http.Request) { 14 vars := mux.Vars(req) 15 name := req.FormValue("name") 16 if name == "" { 17 http.Error(w, "leader name required", http.StatusInternalServerError) 18 return 19 } 20 21 // Proxy the request to the the lock service. 22 u, err := url.Parse(fmt.Sprintf("%s/mod/v2/lock/%s", h.addr, vars["key"])) 23 if err != nil { 24 http.Error(w, err.Error(), http.StatusInternalServerError) 25 return 26 } 27 q := u.Query() 28 q.Set("value", name) 29 u.RawQuery = q.Encode() 30 31 r, err := http.NewRequest("DELETE", u.String(), nil) 32 if err != nil { 33 http.Error(w, err.Error(), http.StatusInternalServerError) 34 return 35 } 36 37 // Read from the leader lock. 38 resp, err := h.client.Do(r) 39 if err != nil { 40 http.Error(w, "delete leader http error: " + err.Error(), http.StatusInternalServerError) 41 return 42 } 43 defer resp.Body.Close() 44 w.WriteHeader(resp.StatusCode) 45 if resp.StatusCode != http.StatusOK { 46 w.Write([]byte("delete leader error: ")) 47 } 48 io.Copy(w, resp.Body) 49 }