From 4b4a7c49764bde703e097eeb8b595d825c245123 Mon Sep 17 00:00:00 2001 From: Xiang Li Date: Wed, 12 Jun 2013 09:46:53 -0700 Subject: [PATCH] add snapshot feature --- handlers.go | 3 ++- raftd.go | 23 +++++++++++++++++------ 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/handlers.go b/handlers.go index 286f8e97c..c1aad8a77 100644 --- a/handlers.go +++ b/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) diff --git a/raftd.go b/raftd.go index e07a1e948..c03018599 100644 --- a/raftd.go +++ b/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()