public void runElection()

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);
    });
  }