diff --git a/etcd.go b/etcd.go index 0357b108b..7d34cdc3a 100644 --- a/etcd.go +++ b/etcd.go @@ -168,8 +168,14 @@ func main() { fatal("%v", err) } - server.LoadSnapshot() - debug("%s finished load snapshot", server.Name()) + err = server.LoadSnapshot() + + if err == nil { + debug("%s finished load snapshot", server.Name()) + } else { + fmt.Println(err) + debug("%s bad snapshot", server.Name()) + } server.Initialize() debug("%s finished init", server.Name()) server.SetElectionTimeout(ELECTIONTIMTOUT) diff --git a/handlers.go b/handlers.go index 8809ce814..1fb429019 100644 --- a/handlers.go +++ b/handlers.go @@ -163,6 +163,12 @@ func excute(c Command, w *http.ResponseWriter, req *http.Request) { return } } else { + // current no leader + if server.Leader() == "" { + (*w).WriteHeader(http.StatusInternalServerError) + return + } + // tell the client where is the leader debug("Redirect to the leader %s", server.Leader()) @@ -176,7 +182,7 @@ func excute(c Command, w *http.ResponseWriter, req *http.Request) { url := scheme + leaderClient() + path - debug("redirect to ", url) + debug("redirect to %s", url) http.Redirect(*w, req, url, http.StatusTemporaryRedirect) return }