Skip to content

Commit

Permalink
Fix lost leader
Browse files Browse the repository at this point in the history
  • Loading branch information
zhangxu19830126 committed Apr 13, 2020
1 parent a928ce1 commit 9290669
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 17 deletions.
24 changes: 16 additions & 8 deletions prophet_leader.go
Original file line number Diff line number Diff line change
Expand Up @@ -73,14 +73,7 @@ func (p *defaultProphet) disableLeader() {
atomic.StoreInt64(&p.leaderFlag, 0)
log.Infof("********become to follower now********")

value, err := p.elector.CurrentLeader(math.MaxUint64)
if err != nil {
log.Errorf("get current leader failed with %+v", err)
}
p.leader = nil
if len(value) > 0 {
p.leader = mustUnmarshal([]byte(value))
}
p.maybeLoadLeader()

// now, we are not leader
if p.coordinator != nil {
Expand All @@ -96,6 +89,21 @@ func (p *defaultProphet) disableLeader() {
p.cfg.Handler.ProphetBecomeFollower()
}

func (p *defaultProphet) maybeLoadLeader() {
value, err := p.elector.CurrentLeader(math.MaxUint64)
if err != nil {
log.Errorf("get current leader failed with %+v", err)
}

if len(value) == 0 {
return
}

if len(value) > 0 {
p.leader = mustUnmarshal([]byte(value))
}
}

func (p *defaultProphet) isLeader() bool {
return 1 == atomic.LoadInt64(&p.leaderFlag)
}
Expand Down
19 changes: 10 additions & 9 deletions prophet_transport.go
Original file line number Diff line number Diff line change
Expand Up @@ -375,19 +375,20 @@ func (p *defaultProphet) doConnection(conn goetty.IOSession) error {

func (p *defaultProphet) getLeaderClient() goetty.IOSession {
for {
l := p.leader
addr := p.node.Addr
if l != nil {
addr = l.Addr
if p.leader == nil {
p.maybeLoadLeader()
}

conn, err := p.createLeaderClient(addr)
if err == nil {
log.Infof("create leader connection to %s", addr)
return conn
if p.leader != nil {
conn, err := p.createLeaderClient(p.leader.Addr)
if err == nil {
log.Infof("create leader connection to %+v", p.leader)
return conn
}

log.Errorf("create leader connection failed, errors: %+v", err)
}

log.Errorf("create leader connection failed, errors: %+v", err)
time.Sleep(time.Second)
}
}
Expand Down

0 comments on commit 9290669

Please sign in to comment.