Browse Source

refactor(Server): Use a config struct in Server

Brian Waldon 12 years ago
parent
commit
c47760382e
3 changed files with 29 additions and 13 deletions
  1. 6 1
      etcd.go
  2. 15 11
      server/server.go
  3. 8 1
      tests/server_utils.go

+ 6 - 1
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)
 	}

+ 15 - 11
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

+ 8 - 1
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.