ProgressEvent updateCluster()

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