Browse Source

add snapshot feature

Xiang Li 12 years ago
parent
commit
4b4a7c4976
2 changed files with 19 additions and 7 deletions
  1. 2 1
      handlers.go
  2. 17 6
      raftd.go

+ 2 - 1
handlers.go

@@ -188,7 +188,8 @@ func Dispatch(server *raft.Server, command Command, w http.ResponseWriter) {
 
 			if leaderName =="" {
 				// no luckey, during the voting process
-				continue
+				w.WriteHeader(http.StatusInternalServerError)
+				return
 			} 
 
 			fmt.Println("forward to ", leaderName)

+ 17 - 6
raftd.go

@@ -91,11 +91,13 @@ func main() {
 	t := transHandler{}
 
 	// Setup new raft server.
-	server, err = raft.NewServer(name, path, t, nil)
+	server, err = raft.NewServer(name, path, t, s, nil)
 	//server.DoHandler = DoHandler;
 	if err != nil {
 		fatal("%v", err)
 	}
+
+	server.LoadSnapshot()
 	server.Initialize()
 	fmt.Println("1 join as ", server.State(), " term ",  server.Term())
 	// Join to another server if we don't have a log.
@@ -108,29 +110,38 @@ func main() {
 		fmt.Println("3 join as ", server.State(), " term ",  server.Term())
 		if leaderHost == "" {
 			fmt.Println("init")
-			server.SetElectionTimeout(10 * time.Second)
+			//server.SetElectionTimeout(300 * time.Millisecond)
+			//server.SetHeartbeatTimeout(100 * time.Millisecond)
+			server.SetElectionTimeout(3 * time.Second)
 			server.SetHeartbeatTimeout(1 * time.Second)
+			server.StartHeartbeatTimeout()
 			server.StartLeader()
-
 			// join self 
 			command := &JoinCommand{}
 			command.Name = server.Name()
 
 			server.Do(command)
 		} else {
-			server.SetElectionTimeout(10 * time.Second)
+			//server.SetElectionTimeout(300 * time.Millisecond)
+			//server.SetHeartbeatTimeout(100 * time.Millisecond)
+			server.SetElectionTimeout(3 * time.Second)
 			server.SetHeartbeatTimeout(1 * time.Second)
+			server.StartElectionTimeout()
 			server.StartFollower()
+
 			fmt.Println("4 join as ", server.State(), " term ",  server.Term())
 			Join(server, leaderHost)
 			fmt.Println("success join")
 		}
 	} else {
-		server.SetElectionTimeout(10 * time.Second)
+		//server.SetElectionTimeout(300 * time.Millisecond)
+		//server.SetHeartbeatTimeout(100 * time.Millisecond)
+		server.SetElectionTimeout(3 * time.Second)
 		server.SetHeartbeatTimeout(1 * time.Second)
+		server.StartElectionTimeout()
 		server.StartFollower()
 	}
-
+	go server.Snapshot()
 	// open snapshot
 	//go server.Snapshot()