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