Merge pull request #63700 from zjj2wry/leaderelection

Automatic merge from submit-queue (batch tested with PRs 64895, 64938, 63700, 65050, 64957). If you want to cherry-pick this change to another branch, please follow the instructions <a href="https://github.com/kubernetes/community/blob/master/contributors/devel/cherry-picks.md">here</a>.

enhance leaderelection code

**What this PR does / why we need it**:

**Which issue(s) this PR fixes** *(optional, in `fixes #<issue number>(, fixes #<issue_number>, ...)` format, will close the issue(s) when PR gets merged)*:
Fixes #

**Special notes for your reviewer**:

**Release note**:

```release-note
NONE
```
This commit is contained in:
Kubernetes Submit Queue 2018-06-21 04:15:13 -07:00 committed by GitHub
commit 8850871891
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -130,10 +130,6 @@ type LeaderCallbacks struct {
} }
// LeaderElector is a leader election client. // LeaderElector is a leader election client.
//
// possible future methods:
// * (le *LeaderElector) IsLeader()
// * (le *LeaderElector) GetLeader()
type LeaderElector struct { type LeaderElector struct {
config LeaderElectionConfig config LeaderElectionConfig
// internal bookkeeping // internal bookkeeping
@ -259,14 +255,14 @@ func (le *LeaderElector) tryAcquireOrRenew() bool {
le.observedTime = time.Now() le.observedTime = time.Now()
} }
if le.observedTime.Add(le.config.LeaseDuration).After(now.Time) && if le.observedTime.Add(le.config.LeaseDuration).After(now.Time) &&
oldLeaderElectionRecord.HolderIdentity != le.config.Lock.Identity() { !le.IsLeader() {
glog.V(4).Infof("lock is held by %v and has not yet expired", oldLeaderElectionRecord.HolderIdentity) glog.V(4).Infof("lock is held by %v and has not yet expired", oldLeaderElectionRecord.HolderIdentity)
return false return false
} }
// 3. We're going to try to update. The leaderElectionRecord is set to it's default // 3. We're going to try to update. The leaderElectionRecord is set to it's default
// here. Let's correct it before updating. // here. Let's correct it before updating.
if oldLeaderElectionRecord.HolderIdentity == le.config.Lock.Identity() { if le.IsLeader() {
leaderElectionRecord.AcquireTime = oldLeaderElectionRecord.AcquireTime leaderElectionRecord.AcquireTime = oldLeaderElectionRecord.AcquireTime
leaderElectionRecord.LeaderTransitions = oldLeaderElectionRecord.LeaderTransitions leaderElectionRecord.LeaderTransitions = oldLeaderElectionRecord.LeaderTransitions
} else { } else {
@ -283,12 +279,12 @@ func (le *LeaderElector) tryAcquireOrRenew() bool {
return true return true
} }
func (l *LeaderElector) maybeReportTransition() { func (le *LeaderElector) maybeReportTransition() {
if l.observedRecord.HolderIdentity == l.reportedLeader { if le.observedRecord.HolderIdentity == le.reportedLeader {
return return
} }
l.reportedLeader = l.observedRecord.HolderIdentity le.reportedLeader = le.observedRecord.HolderIdentity
if l.config.Callbacks.OnNewLeader != nil { if le.config.Callbacks.OnNewLeader != nil {
go l.config.Callbacks.OnNewLeader(l.reportedLeader) go le.config.Callbacks.OnNewLeader(le.reportedLeader)
} }
} }