From c47760382e28a15ab6615cbfcc04005d6b118668 Mon Sep 17 00:00:00 2001 From: Brian Waldon Date: Wed, 15 Jan 2014 23:24:14 -0800 Subject: [PATCH] refactor(Server): Use a config struct in Server --- etcd.go | 7 ++++++- server/server.go | 26 +++++++++++++++----------- tests/server_utils.go | 9 ++++++++- 3 files changed, 29 insertions(+), 13 deletions(-) diff --git a/etcd.go b/etcd.go index 800dcb1f3..c60577085 100644 --- a/etcd.go +++ b/etcd.go @@ -117,7 +117,12 @@ func main() { ps := server.NewPeerServer(psConfig, &peerTLSConfig, &info.RaftTLS, registry, store, &mb) // Create client server. - s := server.New(info.Name, info.EtcdURL, info.EtcdListenHost, &tlsConfig, &info.EtcdTLS, ps, registry, store, &mb) + sConfig := server.ServerConfig{ + Name: info.Name, + URL: info.EtcdURL, + BindAddr: info.EtcdListenHost, + } + s := server.New(sConfig, &tlsConfig, &info.EtcdTLS, ps, registry, store, &mb) if err := s.AllowOrigins(config.CorsOrigins); err != nil { panic(err) } diff --git a/server/server.go b/server/server.go index 0674a2b5e..a660bc593 100644 --- a/server/server.go +++ b/server/server.go @@ -22,15 +22,20 @@ import ( "github.com/gorilla/mux" ) +type ServerConfig struct { + Name string + URL string + BindAddr string +} + // This is the default implementation of the Server interface. type Server struct { http.Server + Config ServerConfig peerServer *PeerServer registry *Registry listener net.Listener store store.Store - name string - url string tlsConf *TLSConfig tlsInfo *TLSInfo router *mux.Router @@ -39,20 +44,19 @@ type Server struct { } // Creates a new Server. -func New(name string, urlStr string, bindAddr string, tlsConf *TLSConfig, tlsInfo *TLSInfo, peerServer *PeerServer, registry *Registry, store store.Store, mb *metrics.Bucket) *Server { +func New(sConfig ServerConfig, tlsConf *TLSConfig, tlsInfo *TLSInfo, peerServer *PeerServer, registry *Registry, store store.Store, mb *metrics.Bucket) *Server { r := mux.NewRouter() cors := &corsHandler{router: r} s := &Server{ + Config: sConfig, Server: http.Server{ Handler: cors, TLSConfig: &tlsConf.Server, - Addr: bindAddr, + Addr: sConfig.BindAddr, }, - name: name, store: store, registry: registry, - url: urlStr, tlsConf: tlsConf, tlsInfo: tlsInfo, peerServer: peerServer, @@ -96,7 +100,7 @@ func (s *Server) Term() uint64 { // The server URL. func (s *Server) URL() string { - return s.url + return s.Config.URL } // Retrives the Peer URL for a given node name. @@ -143,7 +147,7 @@ func (s *Server) installV2() { func (s *Server) installMod() { r := s.router - r.PathPrefix("/mod").Handler(http.StripPrefix("/mod", mod.HttpHandler(s.url))) + r.PathPrefix("/mod").Handler(http.StripPrefix("/mod", mod.HttpHandler(s.Config.URL))) } func (s *Server) installDebug() { @@ -176,7 +180,7 @@ func (s *Server) handleFunc(path string, f func(http.ResponseWriter, *http.Reque // Wrap the standard HandleFunc interface to pass in the server reference. return r.HandleFunc(path, func(w http.ResponseWriter, req *http.Request) { // Log request. - log.Debugf("[recv] %s %s %s [%s]", req.Method, s.url, req.URL.Path, req.RemoteAddr) + log.Debugf("[recv] %s %s %s [%s]", req.Method, s.Config.URL, req.URL.Path, req.RemoteAddr) // Execute handler function and return error if necessary. if err := f(w, req); err != nil { @@ -193,7 +197,7 @@ func (s *Server) handleFunc(path string, f func(http.ResponseWriter, *http.Reque // Start to listen and response etcd client command func (s *Server) ListenAndServe() error { - log.Infof("etcd server [name %s, listen on %s, advertised url %s]", s.name, s.Server.Addr, s.url) + log.Infof("etcd server [name %s, listen on %s, advertised url %s]", s.Config.Name, s.Server.Addr, s.Config.URL) if s.tlsConf.Scheme == "http" { return s.listenAndServe() @@ -353,7 +357,7 @@ func (s *Server) GetLeaderHandler(w http.ResponseWriter, req *http.Request) erro // Handler to return all the known peers in the current cluster. func (s *Server) GetPeersHandler(w http.ResponseWriter, req *http.Request) error { - peers := s.registry.ClientURLs(s.peerServer.RaftServer().Leader(), s.name) + peers := s.registry.ClientURLs(s.peerServer.RaftServer().Leader(), s.Config.Name) w.WriteHeader(http.StatusOK) w.Write([]byte(strings.Join(peers, ", "))) return nil diff --git a/tests/server_utils.go b/tests/server_utils.go index 5a3c05b35..cc785d2e7 100644 --- a/tests/server_utils.go +++ b/tests/server_utils.go @@ -37,7 +37,14 @@ func RunServer(f func(*server.Server)) { MaxClusterSize: 9, } ps := server.NewPeerServer(psConfig, &server.TLSConfig{Scheme: "http"}, &server.TLSInfo{}, registry, store, nil) - s := server.New(testName, "http://"+testClientURL, testClientURL, &server.TLSConfig{Scheme: "http"}, &server.TLSInfo{}, ps, registry, store, nil) + + sConfig := server.ServerConfig{ + Name: testName, + URL: "http://"+testClientURL, + BindAddr: testClientURL, + } + s := server.New(sConfig, &server.TLSConfig{Scheme: "http"}, &server.TLSInfo{}, ps, registry, store, nil) + ps.SetServer(s) // Start up peer server.