Browse Source

Merge pull request #360 from philips/fix-peerurl

fix(server/v2): redirect to ClientURL not PeerURL
Xiang Li 12 years ago
parent
commit
7875ba28c9
4 changed files with 12 additions and 1 deletions
  1. 5 0
      server/server.go
  2. 1 1
      server/v2/get_handler.go
  3. 1 0
      server/v2/v2.go
  4. 5 0
      tests/mock/server_v2.go

+ 5 - 0
server/server.go

@@ -96,6 +96,11 @@ func (s *Server) PeerURL(name string) (string, bool) {
 	return s.registry.PeerURL(name)
 }
 
+// ClientURL retrieves the Client URL for a given node name.
+func (s *Server) ClientURL(name string) (string, bool) {
+	return s.registry.ClientURL(name)
+}
+
 // Returns a reference to the Store.
 func (s *Server) Store() store.Store {
 	return s.store

+ 1 - 1
server/v2/get_handler.go

@@ -23,7 +23,7 @@ func GetHandler(w http.ResponseWriter, req *http.Request, s Server) error {
 	// Help client to redirect the request to the current leader
 	if req.FormValue("consistent") == "true" && s.State() != raft.Leader {
 		leader := s.Leader()
-		hostname, _ := s.PeerURL(leader)
+		hostname, _ := s.ClientURL(leader)
 		url := hostname + req.URL.Path
 		log.Debugf("Redirect consistent get to %s", url)
 		http.Redirect(w, req, url, http.StatusTemporaryRedirect)

+ 1 - 0
server/v2/v2.go

@@ -13,6 +13,7 @@ type Server interface {
 	CommitIndex() uint64
 	Term() uint64
 	PeerURL(string) (string, bool)
+	ClientURL(string) (string, bool)
 	Store() store.Store
 	Dispatch(raft.Command, http.ResponseWriter, *http.Request) error
 }

+ 5 - 0
tests/mock/server_v2.go

@@ -45,6 +45,11 @@ func (s *ServerV2) PeerURL(name string) (string, bool) {
 	return args.String(0), args.Bool(1)
 }
 
+func (s *ServerV2) ClientURL(name string) (string, bool) {
+	args := s.Called(name)
+	return args.String(0), args.Bool(1)
+}
+
 func (s *ServerV2) Store() store.Store {
 	return s.store
 }