in iep-leader-api/src/main/java/com/netflix/iep/leader/StandardLeaderElector.java [197:233]
public void runElection() {
resourceLeaders.entrySet().forEach(entry -> {
final ResourceId resourceId = entry.getKey();
LeaderId newLeaderId;
try {
leaderDatabase.updateLeadershipFor(resourceId);
newLeaderId = leaderDatabase.getLeaderFor(resourceId);
} catch (Exception e) {
logger.error("Exception during leader election", e);
if (removeLocalLeaderStatusOnError()) {
newLeaderId = LeaderId.UNKNOWN;
} else {
newLeaderId = this.leaderId;
}
}
entry.setValue(newLeaderId);
final Id idWithResourceTag = resourceLeaderGaugeId.withTag("resource", resourceId.getId());
final boolean hasLeadership = this.leaderId.equals(newLeaderId);
// always set this leader's value
registry
.gauge(idWithResourceTag.withTag("leader", leaderId.getId()))
.set(hasLeadership ? 1.0 : 0.0);
if (!hasLeadership) {
// If this leader doesn't have leadership, this provides a view of which leader this
// instance maintains has leadership.
registry.gauge(idWithResourceTag.withTag("leader", newLeaderId.getId())).set(0.0);
}
// NO_LEADER for an extended period suggests something isn't right.
final boolean noLeader = newLeaderId.equals(LeaderId.NO_LEADER);
registry
.gauge(resourceWithNoLeaderGaugeId.withTag("resource", resourceId.getId()))
.set(noLeader ? 1.0 : 0.0);
});
}