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