in aws-memorydb-cluster/src/main/java/software/amazon/memorydb/cluster/UpdateHandler.java [133:169]
ProgressEvent<ResourceModel, CallbackContext> updateCluster(final AmazonWebServicesClientProxy proxy,
final ProxyClient<MemoryDbClient> proxyClient,
final ProgressEvent<ResourceModel, CallbackContext> progress,
final ResourceModel desiredResourceState,
final ClusterUpdateFieldType fieldType,
final Logger logger) {
logger.log(String.format("Updating fieldType : %s" , fieldType.name()));
return proxy.initiate("AWS-memorydb-Cluster::Update", proxyClient, progress.getResourceModel(), progress.getCallbackContext())
.translateToServiceRequest(model -> Translator.translateToUpdateRequest(model, fieldType))
.backoffDelay(STABILIZATION_DELAY)
.makeServiceCall((awsRequest, memoryDbClientProxyClient) -> handleExceptions(() -> memoryDbClientProxyClient.injectCredentialsAndInvokeV2(awsRequest, memoryDbClientProxyClient.client()::updateCluster)))
.stabilize((awsRequest, awsResponse, client, model, context) -> {
try {
final Cluster cluster = getCluster(proxy, client, model);
boolean isStabilized = STABILIZED_STATUS.contains(cluster.status());
if (isStabilized == false) {
return false;
}
final ResourceModel postUpdateResourceState = Translator.translateFromReadResponse(cluster);
if (isUpdateNeeded(desiredResourceState, postUpdateResourceState, fieldType, logger)) {
/* Resource has been stabilized, however update operation has not been completed.
* This is possible, since an update operation can fail to service failures (Example: requested
* node type is not currently available).
*/
throw MemoryDbException.builder().message(UPDATE_FAILED_WITH_STABILIZATION_SUCCESS).build();
}
return true;
} catch (final ClusterNotFoundException e) {
throw new CfnNotFoundException(e);
} catch (final InvalidParameterValueException | InvalidParameterCombinationException e) {
throw new CfnInvalidRequestException(e);
} catch (final Exception e) {
throw e;
}
})
.progress();
}