add snapshot feature

release-0.4
Xiang Li 2013-06-12 09:46:53 -07:00
parent acb66f3428
commit 4b4a7c4976
2 changed files with 19 additions and 7 deletions

View File

@ -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)

View File

@ -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()