Browse Source

clean up etcd.go

Xiang Li 12 years ago
parent
commit
f5796244b4
3 changed files with 61 additions and 59 deletions
  1. 61 32
      etcd.go
  2. 0 4
      util.go
  3. 0 23
      web/web.go

+ 61 - 32
etcd.go

@@ -101,6 +101,14 @@ type Info struct {
 	ServerPort int    `json:"serverPort"`
 	ServerPort int    `json:"serverPort"`
 	ClientPort int    `json:"clientPort"`
 	ClientPort int    `json:"clientPort"`
 	WebPort    int    `json:"webPort"`
 	WebPort    int    `json:"webPort"`
+
+	ServerCertFile string `json:"serverCertFile"`
+	ServerKeyFile  string `json:"serverKeyFile"`
+	ServerCAFile   string `json:"serverCAFile"`
+
+	ClientCertFile string `json:"clientCertFile"`
+	ClientKeyFile  string `json:"clientKeyFile"`
+	ClientCAFile   string `json:"clientCAFile"`
 }
 }
 
 
 //------------------------------------------------------------------------------
 //------------------------------------------------------------------------------
@@ -112,6 +120,7 @@ type Info struct {
 var raftServer *raft.Server
 var raftServer *raft.Server
 var raftTransporter transporter
 var raftTransporter transporter
 var etcdStore *store.Store
 var etcdStore *store.Store
+var info *Info
 
 
 //------------------------------------------------------------------------------
 //------------------------------------------------------------------------------
 //
 //
@@ -124,7 +133,6 @@ var etcdStore *store.Store
 //--------------------------------------
 //--------------------------------------
 
 
 func main() {
 func main() {
-	var err error
 	flag.Parse()
 	flag.Parse()
 
 
 	// Setup commands.
 	// Setup commands.
@@ -134,9 +142,8 @@ func main() {
 	if err := os.MkdirAll(dirPath, 0744); err != nil {
 	if err := os.MkdirAll(dirPath, 0744); err != nil {
 		fatal("Unable to create path: %v", err)
 		fatal("Unable to create path: %v", err)
 	}
 	}
-	var info *Info = getInfo(dirPath)
 
 
-	name := fmt.Sprintf("%s:%d", info.Address, info.ServerPort)
+	info = getInfo(dirPath)
 
 
 	// secrity type
 	// secrity type
 	st := securityType(SERVER)
 	st := securityType(SERVER)
@@ -147,14 +154,32 @@ func main() {
 		fatal("Please specify cert and key file or cert and key file and CAFile or none of the three")
 		fatal("Please specify cert and key file or cert and key file and CAFile or none of the three")
 	}
 	}
 
 
-	// Create transporter for raft
-	raftTransporter = createTransporter(st)
-
 	// Create etcd key-value store
 	// Create etcd key-value store
 	etcdStore = store.CreateStore(maxSize)
 	etcdStore = store.CreateStore(maxSize)
 
 
+	startRaft(st)
+
+	if webPort != -1 {
+		// start web
+		etcdStore.SetMessager(&storeMsg)
+		go webHelper()
+		go web.Start(raftServer, webPort)
+	}
+
+	startClientTransport(info.ClientPort, clientSt)
+
+}
+
+// Start the raft server
+func startRaft(securityType int) {
+
+	raftName := fmt.Sprintf("%s:%d", info.Address, info.ServerPort)
+
+	// Create transporter for raft
+	raftTransporter = createTransporter(securityType)
+
 	// Create raft server
 	// Create raft server
-	raftServer, err = raft.NewServer(name, dirPath, raftTransporter, etcdStore, nil)
+	raftServer, err := raft.NewServer(raftName, dirPath, raftTransporter, etcdStore, nil)
 
 
 	if err != nil {
 	if err != nil {
 		fmt.Println(err)
 		fmt.Println(err)
@@ -213,16 +238,8 @@ func main() {
 	// open the snapshot
 	// open the snapshot
 	// go server.Snapshot()
 	// go server.Snapshot()
 
 
-	if webPort != -1 {
-		// start web
-		etcdStore.SetMessager(&storeMsg)
-		go webHelper()
-		go web.Start(raftServer, webPort)
-	}
-
-	go startRaftTransport(info.ServerPort, st)
-
-	startClientTransport(info.ClientPort, clientSt)
+	// start to response to raft requests
+	go startRaftTransport(info.ServerPort, securityType)
 
 
 }
 }
 
 
@@ -276,11 +293,11 @@ func startRaftTransport(port int, st int) {
 	switch st {
 	switch st {
 
 
 	case HTTP:
 	case HTTP:
-		fmt.Println("raft server [%s] listen on http port %v", address, port)
+		fmt.Printf("raft server [%s] listen on http port %v\n", address, port)
 		log.Fatal(http.ListenAndServe(fmt.Sprintf(":%d", port), nil))
 		log.Fatal(http.ListenAndServe(fmt.Sprintf(":%d", port), nil))
 
 
 	case HTTPS:
 	case HTTPS:
-		fmt.Println("raft server [%s] listen on https port %v", address, port)
+		fmt.Printf("raft server [%s] listen on https port %v\n", address, port)
 		log.Fatal(http.ListenAndServeTLS(fmt.Sprintf(":%d", port), serverCertFile, serverKeyFile, nil))
 		log.Fatal(http.ListenAndServeTLS(fmt.Sprintf(":%d", port), serverCertFile, serverKeyFile, nil))
 
 
 	case HTTPSANDVERIFY:
 	case HTTPSANDVERIFY:
@@ -292,7 +309,7 @@ func startRaftTransport(port int, st int) {
 			},
 			},
 			Addr: fmt.Sprintf(":%d", port),
 			Addr: fmt.Sprintf(":%d", port),
 		}
 		}
-		fmt.Println("raft server [%s] listen on https port %v", address, port)
+		fmt.Printf("raft server [%s] listen on https port %v\n", address, port)
 		err := server.ListenAndServeTLS(serverCertFile, serverKeyFile)
 		err := server.ListenAndServeTLS(serverCertFile, serverKeyFile)
 
 
 		if err != nil {
 		if err != nil {
@@ -314,11 +331,11 @@ func startClientTransport(port int, st int) {
 	switch st {
 	switch st {
 
 
 	case HTTP:
 	case HTTP:
-		fmt.Println("etcd [%s] listen on http port %v", address, clientPort)
+		fmt.Printf("etcd [%s] listen on http port %v\n", address, clientPort)
 		log.Fatal(http.ListenAndServe(fmt.Sprintf(":%d", port), nil))
 		log.Fatal(http.ListenAndServe(fmt.Sprintf(":%d", port), nil))
 
 
 	case HTTPS:
 	case HTTPS:
-		fmt.Println("etcd [%s] listen on https port %v", address, clientPort)
+		fmt.Printf("etcd [%s] listen on https port %v\n", address, clientPort)
 		http.ListenAndServeTLS(fmt.Sprintf(":%d", port), clientCertFile, clientKeyFile, nil)
 		http.ListenAndServeTLS(fmt.Sprintf(":%d", port), clientCertFile, clientKeyFile, nil)
 
 
 	case HTTPSANDVERIFY:
 	case HTTPSANDVERIFY:
@@ -330,7 +347,7 @@ func startClientTransport(port int, st int) {
 			},
 			},
 			Addr: fmt.Sprintf(":%d", port),
 			Addr: fmt.Sprintf(":%d", port),
 		}
 		}
-		fmt.Println("etcd [%s] listen on https port %v", address, clientPort)
+		fmt.Printf("etcd [%s] listen on https port %v\n", address, clientPort)
 		err := server.ListenAndServeTLS(clientCertFile, clientKeyFile)
 		err := server.ListenAndServeTLS(clientCertFile, clientKeyFile)
 
 
 		if err != nil {
 		if err != nil {
@@ -344,6 +361,7 @@ func startClientTransport(port int, st int) {
 // Config
 // Config
 //--------------------------------------
 //--------------------------------------
 
 
+// Get the security type
 func securityType(source int) int {
 func securityType(source int) int {
 
 
 	var keyFile, certFile, CAFile string
 	var keyFile, certFile, CAFile string
@@ -351,14 +369,14 @@ func securityType(source int) int {
 	switch source {
 	switch source {
 
 
 	case SERVER:
 	case SERVER:
-		keyFile = serverKeyFile
-		certFile = serverCertFile
-		CAFile = serverCAFile
+		keyFile = info.ServerKeyFile
+		certFile = info.ServerCertFile
+		CAFile = info.ServerCAFile
 
 
 	case CLIENT:
 	case CLIENT:
-		keyFile = clientKeyFile
-		certFile = clientCertFile
-		CAFile = clientCAFile
+		keyFile = info.ClientKeyFile
+		certFile = info.ClientCertFile
+		CAFile = info.ClientCAFile
 	}
 	}
 
 
 	// If the user do not specify key file, cert file and
 	// If the user do not specify key file, cert file and
@@ -385,13 +403,15 @@ func securityType(source int) int {
 	return -1
 	return -1
 }
 }
 
 
+// Get the server info from previous conf file
+// or from the user
 func getInfo(path string) *Info {
 func getInfo(path string) *Info {
 	info := &Info{}
 	info := &Info{}
 
 
 	// Read in the server info if available.
 	// Read in the server info if available.
 	infoPath := fmt.Sprintf("%s/info", path)
 	infoPath := fmt.Sprintf("%s/info", path)
 
 
-	// delete the old configuration if exist
+	// Delete the old configuration if exist
 	if ignore {
 	if ignore {
 		logPath := fmt.Sprintf("%s/log", path)
 		logPath := fmt.Sprintf("%s/log", path)
 		snapshotPath := fmt.Sprintf("%s/snapshotPath", path)
 		snapshotPath := fmt.Sprintf("%s/snapshotPath", path)
@@ -411,8 +431,8 @@ func getInfo(path string) *Info {
 		}
 		}
 		file.Close()
 		file.Close()
 
 
-		// Otherwise ask user for info and write it to file.
 	} else {
 	} else {
+		// Otherwise ask user for info and write it to file.
 
 
 		if address == "" {
 		if address == "" {
 			fatal("Please give the address of the local machine")
 			fatal("Please give the address of the local machine")
@@ -426,6 +446,14 @@ func getInfo(path string) *Info {
 		info.ClientPort = clientPort
 		info.ClientPort = clientPort
 		info.WebPort = webPort
 		info.WebPort = webPort
 
 
+		info.ClientCAFile = clientCAFile
+		info.ClientCertFile = clientCertFile
+		info.ClientKeyFile = clientKeyFile
+
+		info.ServerCAFile = serverCAFile
+		info.ServerKeyFile = serverKeyFile
+		info.ServerCertFile = serverCertFile
+
 		// Write to file.
 		// Write to file.
 		content, _ := json.Marshal(info)
 		content, _ := json.Marshal(info)
 		content = []byte(string(content) + "\n")
 		content = []byte(string(content) + "\n")
@@ -437,6 +465,7 @@ func getInfo(path string) *Info {
 	return info
 	return info
 }
 }
 
 
+// Create client auth certpool
 func createCertPool(CAFile string) *x509.CertPool {
 func createCertPool(CAFile string) *x509.CertPool {
 	pemByte, _ := ioutil.ReadFile(CAFile)
 	pemByte, _ := ioutil.ReadFile(CAFile)
 
 
@@ -491,7 +520,7 @@ func joinCluster(s *raft.Server, serverName string) error {
 	return fmt.Errorf("Unable to join: %v", err)
 	return fmt.Errorf("Unable to join: %v", err)
 }
 }
 
 
-// register commands to raft server
+// Register commands to raft server
 func registerCommands() {
 func registerCommands() {
 	raft.RegisterCommand(&JoinCommand{})
 	raft.RegisterCommand(&JoinCommand{})
 	raft.RegisterCommand(&SetCommand{})
 	raft.RegisterCommand(&SetCommand{})

+ 0 - 4
util.go

@@ -63,10 +63,6 @@ func debug(msg string, v ...interface{}) {
 	}
 	}
 }
 }
 
 
-func info(msg string, v ...interface{}) {
-	logger.Printf("INFO  "+msg+"\n", v...)
-}
-
 func warn(msg string, v ...interface{}) {
 func warn(msg string, v ...interface{}) {
 	logger.Printf("WARN  "+msg+"\n", v...)
 	logger.Printf("WARN  "+msg+"\n", v...)
 }
 }

+ 0 - 23
web/web.go

@@ -4,7 +4,6 @@ import (
 	"code.google.com/p/go.net/websocket"
 	"code.google.com/p/go.net/websocket"
 	"fmt"
 	"fmt"
 	"github.com/coreos/go-raft"
 	"github.com/coreos/go-raft"
-	//"github.com/xiangli-cmu/raft-etcd/store"
 	"html/template"
 	"html/template"
 	"net/http"
 	"net/http"
 	//"time"
 	//"time"
@@ -18,28 +17,6 @@ type MainPage struct {
 	Address string
 	Address string
 }
 }
 
 
-func handler(w http.ResponseWriter, r *http.Request) {
-	fmt.Fprintf(w, "Leader:\n%s\n", s.Leader())
-	fmt.Fprintf(w, "Peers:\n")
-
-	for peerName, _ := range s.Peers() {
-		fmt.Fprintf(w, "%s\n", peerName)
-	}
-
-	fmt.Fprintf(w, "Data\n")
-
-	//s := store.GetStore()
-
-	// for key, node := range s.Nodes {
-	// 	if node.ExpireTime.Equal(time.Unix(0, 0)) {
-	// 		fmt.Fprintf(w, "%s %s\n", key, node.Value)
-	// 	} else {
-	// 		fmt.Fprintf(w, "%s %s %s\n", key, node.Value, node.ExpireTime)
-	// 	}
-	// }
-
-}
-
 func mainHandler(c http.ResponseWriter, req *http.Request) {
 func mainHandler(c http.ResponseWriter, req *http.Request) {
 
 
 	p := &MainPage{Leader: s.Leader(),
 	p := &MainPage{Leader: s.Leader(),