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  }