protected ProgressEvent updateParameterGroup()

in aws-memorydb-parametergroup/src/main/java/software/amazon/memorydb/parametergroup/UpdateHandler.java [157:202]


    protected ProgressEvent<ResourceModel, CallbackContext> updateParameterGroup(final AmazonWebServicesClientProxy proxy,
                                                                                 final ProxyClient<MemoryDbClient> proxyClient,
                                                                                 final ProgressEvent<ResourceModel, CallbackContext> progress,
                                                                                 final ResourceHandlerRequest<ResourceModel> request) {
        try {

            if (!isUpdateNeeded(request.getDesiredResourceState(), request.getPreviousResourceState())) {
                return progress;
            }

            Map<String, Object> specifiedParamsToUpdate = request.getDesiredResourceState().getParameters();

            Map<String, Object> existingParams = request.getPreviousResourceState().getParameters();

            Set<String> removedParamKeys = existingParams != null && !existingParams.isEmpty() ?
                    existingParams.entrySet().stream().filter(existingParam ->
                            !specifiedParamsToUpdate.containsKey(existingParam.getKey()))
                            .map(removedParam -> removedParam.getKey())
                            .collect(Collectors.toSet()) : null;

            final List<Parameter> finalParamsToUpdate = specifiedParamsToUpdate
                    .entrySet()
                    .stream()
                    .map(kv -> Parameter.builder()
                            .name(kv.getKey())
                            .value(String.valueOf(kv.getValue()))
                            .build())
                    .collect(Collectors.toList());

            //get the default parameter values for all the params which were removed from the desired state
            if(removedParamKeys != null && !removedParamKeys.isEmpty()) {
                finalParamsToUpdate.addAll(getDefaultParametersForRemovedParams(removedParamKeys, proxyClient, progress));
            }

            //initiate parameter-group update
            return proxy.initiate("AWS-memorydb-ParameterGroup::Update", proxyClient, progress.getResourceModel(), progress.getCallbackContext())
                    .translateToServiceRequest(model -> Translator.translateToUpdateRequest(model, finalParamsToUpdate))
                    .backoffDelay(STABILIZATION_DELAY)
                    .makeServiceCall((awsRequest, proxyInvocation) -> handleExceptions(() -> proxyInvocation.injectCredentialsAndInvokeV2(awsRequest, proxyInvocation.client()::updateParameterGroup)))
                    .progress();
        } catch (BaseHandlerException e) {
            throw e;
        } catch (final Exception e) {
            throw new CfnGeneralServiceException(e);
        }
    }