protected ProgressEvent handleRequest()

in aws-rds-dbinstance/src/main/java/software/amazon/rds/dbinstance/CreateHandler.java [37:94]


    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
    ) {
        final ResourceModel model = request.getDesiredResourceState();
        final Collection<DBInstanceRole> desiredRoles = model.getAssociatedRoles();

        if (BooleanUtils.isTrue(request.getSnapshotRequested()) && StringUtils.hasValue(model.getDBClusterIdentifier())) {
            return ProgressEvent.failed(model, callbackContext, HandlerErrorCode.InvalidRequest, ILLEGAL_DELETION_POLICY_ERR);
        }

        if (StringUtils.isNullOrEmpty(model.getDBInstanceIdentifier())) {
            model.setDBInstanceIdentifier(generateResourceIdentifier(
                    Optional.ofNullable(request.getStackId()).orElse(STACK_NAME),
                    Optional.ofNullable(request.getLogicalResourceIdentifier()).orElse(RESOURCE_IDENTIFIER),
                    request.getClientRequestToken(),
                    RESOURCE_ID_MAX_LENGTH
            ).toLowerCase());
        }
        final Map<String, String> tags = mergeMaps(Arrays.asList(
                request.getSystemTags(),
                request.getDesiredResourceTags()
        ));
        model.setTags(Translator.translateTagsFromRequest(tags));

        return ProgressEvent.progress(model, callbackContext)
                .then(progress -> Commons.execOnce(progress, () -> {
                    if (isReadReplica(progress.getResourceModel())) {
                        return createDbInstanceReadReplica(proxy, rdsProxyClient, progress);
                    } else if (isRestoreFromSnapshot(progress.getResourceModel())) {
                        return restoreDbInstanceFromSnapshot(proxy, rdsProxyClient, progress);
                    }
                    return createDbInstance(proxy, rdsProxyClient, progress);
                }, CallbackContext::isCreated, CallbackContext::setCreated))
                .then(progress -> ensureEngineSet(rdsProxyClient, progress))
                .then(progress -> {
                    if (shouldUpdateAfterCreate(progress.getResourceModel())) {
                        return Commons.execOnce(progress, () ->
                                        updateDbInstanceAfterCreate(proxy, rdsProxyClient, progress, request.getDesiredResourceState()),
                                CallbackContext::isUpdated, CallbackContext::setUpdated)
                                .then(p -> Commons.execOnce(p, () -> {
                                    if (shouldReboot(p.getResourceModel())) {
                                        return rebootAwait(proxy, rdsProxyClient, p);
                                    }
                                    return p;
                                }, CallbackContext::isRebooted, CallbackContext::setRebooted));
                    }
                    return progress;
                })
                .then(progress -> Commons.execOnce(progress, () ->
                                updateAssociatedRoles(proxy, rdsProxyClient, progress, Collections.emptyList(), desiredRoles),
                        CallbackContext::isUpdatedRoles, CallbackContext::setUpdatedRoles))
                .then(progress -> new ReadHandler().handleRequest(proxy, request, progress.getCallbackContext(), rdsProxyClient, ec2ProxyClient, logger));
    }