in aws-timestream-table/src/main/java/software/amazon/timestream/table/UpdateHandler.java [47:119]
public ProgressEvent<ResourceModel, CallbackContext> handleRequest(
final AmazonWebServicesClientProxy proxy,
final ResourceHandlerRequest<ResourceModel> request,
final CallbackContext callbackContext,
final Logger logger) {
timestreamClient = TimestreamClientFactory.get(proxy, logger);
this.proxy = proxy;
final ResourceModel model = request.getDesiredResourceState();
final ResourceModel existingModel = request.getPreviousResourceState();
final Map<String, String> desiredTags = TagHelper.getNewDesiredTags(model, request);
final Map<String, String> previousTags = TagHelper.getPreviouslyAttachedTags(request);
final Set<Tag> tagsToAdd = TagHelper.convertToSet(
TagHelper.generateTagsToAdd(previousTags, desiredTags));
final Set<String> tagsToRemove = TagHelper.generateTagsToRemove(previousTags, desiredTags);
try {
RetentionProperties retentionProperties;
if (model.getRetentionProperties() == null) {
// TODO there are cases when Uluru not keeping RetentionProperties in the existing model properly
// here will fetch from TS directly for the current RetentionProperties if not defined in the CFN
// template
final DescribeTableRequest describeTableRequest =
new DescribeTableRequest()
.withDatabaseName(model.getDatabaseName())
.withTableName(model.getTableName());
final DescribeTableResult describeTableResult = this.proxy.injectCredentialsAndInvoke(describeTableRequest, timestreamClient::describeTable);
retentionProperties = describeTableResult.getTable().getRetentionProperties();
} else {
retentionProperties = RetentionPropertiesModelConverter.convert(model.getRetentionProperties());
}
MagneticStoreWriteProperties magneticStoreWriteProperties = MagneticStoreWritePropertiesModelConverter.convert(model.getMagneticStoreWriteProperties());
final UpdateTableRequest updateTableRequest =
new UpdateTableRequest()
.withDatabaseName(model.getDatabaseName())
.withTableName(model.getTableName())
.withRetentionProperties(retentionProperties)
.withMagneticStoreWriteProperties(magneticStoreWriteProperties);
final UpdateTableResult updateTableResult =
this.proxy.injectCredentialsAndInvoke(updateTableRequest, timestreamClient::updateTable);
/*
* Update tags
*
* Here we first remove the tags no long exist, this includes tags whose values are modified.
* New tags are added afterwards, including tags with updated values.
*/
removeTags(updateTableResult.getTable().getArn(), tagsToRemove);
addTags(updateTableResult.getTable().getArn(), tagsToAdd);
} catch (InternalServerException ex) {
throw new CfnInternalFailureException(ex);
} catch (ThrottlingException ex) {
throw new CfnThrottlingException(UPDATE_TABLE, ex);
} catch (ValidationException | InvalidEndpointException ex) {
throw new CfnInvalidRequestException(request.toString(), ex);
} catch (ResourceNotFoundException ex) {
// could be either database does not exist or table does not exist.
throw new CfnNotFoundException(ex);
} catch (AccessDeniedException ex) {
throw new CfnAccessDeniedException(UPDATE_TABLE, ex);
}
return ProgressEvent.<ResourceModel, CallbackContext>builder()
.resourceModel(model)
.status(OperationStatus.SUCCESS)
.build();
}