public boolean updateLeadershipFor()

in iep-spring-leader-dynamodb/src/main/java/com/netflix/iep/leader/dynamodb/DynamoDbLeaderDatabase.java [246:288]


  public boolean updateLeadershipFor(ResourceId resource) {
    final String resourceId = resource.getId();

    boolean updated;
    try {
      final Instant now = Instant.now();
      final Duration leaderMaxIdleDuration =
          config.getDuration(LEADER_CONFIG_PATH_NAME + ".maxIdleDuration");
      final Instant leaderTimeoutInstant = now.minus(leaderMaxIdleDuration);

      final Map<String, AttributeValue> resourceRecordKey = Collections.singletonMap(
          hashKeyName, AttributeValue.builder().s(resourceId).build()
      );

      final Map<String, AttributeValue> expressionAttributeValues = new HashMap<>(3, 1.0f);
      expressionAttributeValues.put(LEADER_ID_PLACEHOLDER,
          AttributeValue.builder().s(leaderId.getId()).build()
      );
      expressionAttributeValues.put(NOW_MILLIS_PLACEHOLDER,
          AttributeValue.builder().n(String.valueOf(now.toEpochMilli())).build()
      );
      expressionAttributeValues.put(LEADER_TIMEOUT_PLACEHOLDER,
          AttributeValue.builder().n(String.valueOf(leaderTimeoutInstant.toEpochMilli())).build()
      );

      final UpdateItemRequest updateRequest =
          UpdateItemRequest
              .builder()
              .tableName(tableName)
              .key(resourceRecordKey)
              .updateExpression(leaderUpdateExpression)
              .conditionExpression(leaderUpdateConditionExpression)
              .expressionAttributeValues(expressionAttributeValues)
              .build();

      updated = db.updateItem(updateRequest).sdkHttpResponse().isSuccessful();
    } catch (ConditionalCheckFailedException e) {
      logger.debug("There is already an active leader for resource: {}", resourceId);
      updated = false;
    }

    return updated;
  }