mirror of
https://github.com/etcd-io/etcd.git
synced 2024-09-27 06:25:44 +00:00
50 lines
1.1 KiB
Go
50 lines
1.1 KiB
Go
package v2
|
|
|
|
import (
|
|
"fmt"
|
|
"io"
|
|
"net/http"
|
|
"net/url"
|
|
|
|
"github.com/gorilla/mux"
|
|
)
|
|
|
|
// deleteHandler remove a given leader leader.
|
|
func (h *handler) deleteHandler(w http.ResponseWriter, req *http.Request) {
|
|
vars := mux.Vars(req)
|
|
name := req.FormValue("name")
|
|
if name == "" {
|
|
http.Error(w, "leader name required", http.StatusInternalServerError)
|
|
return
|
|
}
|
|
|
|
// Proxy the request to the the lock service.
|
|
u, err := url.Parse(fmt.Sprintf("%s/mod/v2/lock/%s", h.addr, vars["key"]))
|
|
if err != nil {
|
|
http.Error(w, err.Error(), http.StatusInternalServerError)
|
|
return
|
|
}
|
|
q := u.Query()
|
|
q.Set("value", name)
|
|
u.RawQuery = q.Encode()
|
|
|
|
r, err := http.NewRequest("DELETE", u.String(), nil)
|
|
if err != nil {
|
|
http.Error(w, err.Error(), http.StatusInternalServerError)
|
|
return
|
|
}
|
|
|
|
// Read from the leader lock.
|
|
resp, err := h.client.Do(r)
|
|
if err != nil {
|
|
http.Error(w, "delete leader http error: " + err.Error(), http.StatusInternalServerError)
|
|
return
|
|
}
|
|
defer resp.Body.Close()
|
|
w.WriteHeader(resp.StatusCode)
|
|
if resp.StatusCode != http.StatusOK {
|
|
w.Write([]byte("delete leader error: "))
|
|
}
|
|
io.Copy(w, resp.Body)
|
|
}
|