From 5357fb431e89e9ec9351f0520d6fcbc7f0afae90 Mon Sep 17 00:00:00 2001 From: Xiang Li Date: Sat, 17 Aug 2013 20:55:52 -0700 Subject: [PATCH] Pull deeply nested logic into functions --- raft_server.go | 90 ++++++++++++++++++++++++-------------------------- 1 file changed, 43 insertions(+), 47 deletions(-) diff --git a/raft_server.go b/raft_server.go index bad3732c8..1bd190f56 100644 --- a/raft_server.go +++ b/raft_server.go @@ -67,55 +67,10 @@ func (r *raftServer) ListenAndServe() { // start as a leader in a new cluster if len(cluster) == 0 { + startAsLeader() - time.Sleep(time.Millisecond * 20) - - // leader need to join self as a peer - for { - _, err := r.Do(newJoinCommand()) - if err == nil { - break - } - } - debugf("%s start as a leader", r.name) - - // start as a follower in a existing cluster } else { - - time.Sleep(time.Millisecond * 20) - - var err error - - for i := 0; i < retryTimes; i++ { - - success := false - for _, machine := range cluster { - if len(machine) == 0 { - continue - } - err = joinCluster(r.Server, machine, r.tlsConf.Scheme) - if err != nil { - if _, ok := err.(etcdErr.Error); ok { - fatal(err) - } - debugf("cannot join to cluster via machine %s %s", machine, err) - } else { - success = true - break - } - } - - if success { - break - } - - warnf("cannot join to cluster via given machines, retry in %d seconds", RetryInterval) - time.Sleep(time.Second * RetryInterval) - } - if err != nil { - fatalf("Cannot join the cluster via given machines after %x retries", retryTimes) - } - debugf("%s success join to the cluster", r.name) + startAsFollower() } } else { @@ -133,6 +88,47 @@ func (r *raftServer) ListenAndServe() { } +func startAsLeader() { + // leader need to join self as a peer + for { + _, err := r.Do(newJoinCommand()) + if err == nil { + break + } + } + debugf("%s start as a leader", r.name) +} + +func startAsFollower() { + // start as a follower in a existing cluster + for i := 0; i < retryTimes; i++ { + + for _, machine := range cluster { + + if len(machine) == 0 { + continue + } + + err := joinCluster(r.Server, machine, r.tlsConf.Scheme) + if err == nil { + debugf("%s success join to the cluster via machine %s", r.name, machine) + return + + } else { + if _, ok := err.(etcdErr.Error); ok { + fatal(err) + } + debugf("cannot join to cluster via machine %s %s", machine, err) + } + } + + warnf("cannot join to cluster via given machines, retry in %d seconds", RetryInterval) + time.Sleep(time.Second * RetryInterval) + } + + fatalf("Cannot join the cluster via given machines after %x retries", retryTimes) +} + // Start to listen and response raft command func (r *raftServer) startTransport(scheme string, tlsConf tls.Config) { u, _ := url.Parse(r.url)