github.com/ghodss/etcd@v0.3.1-0.20140417172404-cc329bfa55cb/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  	etcdErr "github.com/coreos/etcd/error"
    10  	"github.com/coreos/etcd/third_party/github.com/gorilla/mux"
    11  )
    12  
    13  // deleteHandler remove a given leader.
    14  func (h *handler) deleteHandler(w http.ResponseWriter, req *http.Request) error {
    15  	vars := mux.Vars(req)
    16  	name := req.FormValue("name")
    17  	if name == "" {
    18  		return etcdErr.NewError(etcdErr.EcodeNameRequired, "Delete", 0)
    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  		return err
    25  	}
    26  	q := u.Query()
    27  	q.Set("value", name)
    28  	u.RawQuery = q.Encode()
    29  
    30  	r, err := http.NewRequest("DELETE", u.String(), nil)
    31  	if err != nil {
    32  		return err
    33  	}
    34  
    35  	// Read from the leader lock.
    36  	resp, err := h.client.Do(r)
    37  	if err != nil {
    38  		return err
    39  	}
    40  	defer resp.Body.Close()
    41  	w.WriteHeader(resp.StatusCode)
    42  	io.Copy(w, resp.Body)
    43  
    44  	return nil
    45  }