protected ProgressEvent handleRequest()

in aws-rds-dbinstance/src/main/java/software/amazon/rds/dbinstance/UpdateHandler.java [46:116]


    protected ProgressEvent<ResourceModel, CallbackContext> handleRequest(
            final AmazonWebServicesClientProxy proxy,
            final ResourceHandlerRequest<ResourceModel> request,
            final CallbackContext callbackContext,
            final ProxyClient<RdsClient> rdsProxyClient,
            final ProxyClient<Ec2Client> ec2ProxyClient,
            final Logger logger
    ) {
        if (!ImmutabilityHelper.isChangeMutable(request.getPreviousResourceState(), request.getDesiredResourceState())) {
            return ProgressEvent.failed(
                    request.getDesiredResourceState(),
                    callbackContext,
                    HandlerErrorCode.NotUpdatable,
                    "Resource is immutable"
            );
        }

        final Collection<Tag> previousTags = Translator.translateTagsFromRequest(
                Tagging.mergeTags(
                        request.getPreviousSystemTags(),
                        request.getPreviousResourceTags()
                )
        );
        final Collection<Tag> desiredTags = Translator.translateTagsFromRequest(
                Tagging.mergeTags(
                        request.getSystemTags(),
                        request.getDesiredResourceTags()
                )
        );

        final Collection<DBInstanceRole> previousRoles = request.getPreviousResourceState().getAssociatedRoles();
        final Collection<DBInstanceRole> desiredRoles = request.getDesiredResourceState().getAssociatedRoles();

        return ProgressEvent.progress(request.getDesiredResourceState(), callbackContext)
                .then(progress -> {
                    if (shouldSetParameterGroupName(request)) {
                        return setParameterGroupName(rdsProxyClient, progress);
                    }
                    return progress;
                })
                .then(progress -> {
                    if (shouldSetDefaultVpcId(request)) {
                        return setDefaultVpcId(rdsProxyClient, ec2ProxyClient, progress);
                    }
                    return progress;
                })
                .then(progress -> {
                    if (shouldUnsetMaxAllocatedStorage(request)) {
                        return unsetMaxAllocatedStorage(rdsProxyClient, request, progress);
                    }
                    return progress;
                })
                .then(progress -> ensureEngineSet(rdsProxyClient, progress))
                .then(progress -> Commons.execOnce(progress, () ->
                                updateDbInstance(proxy, request, rdsProxyClient, progress),
                        CallbackContext::isUpdated, CallbackContext::setUpdated)
                )
                .then(progress -> Commons.execOnce(progress, () -> {
                            if (shouldReboot(rdsProxyClient, progress)) {
                                return rebootAwait(proxy, rdsProxyClient, progress);
                            }
                            return progress;
                        }, CallbackContext::isRebooted, CallbackContext::setRebooted)
                )
                .then(progress -> Commons.execOnce(progress, () ->
                                updateAssociatedRoles(proxy, rdsProxyClient, progress, previousRoles, desiredRoles),
                        CallbackContext::isUpdatedRoles, CallbackContext::setUpdatedRoles)
                )
                .then(progress -> updateTags(proxy, rdsProxyClient, progress, previousTags, desiredTags))
                .then(progress -> new ReadHandler().handleRequest(proxy, request, callbackContext, rdsProxyClient, ec2ProxyClient, logger));
    }