in aws-synthetics-canary/src/main/java/com/amazon/synthetics/canary/UpdateHandler.java [24:81]
public ProgressEvent<ResourceModel, CallbackContext> handleRequest() {
Canary canary = getCanaryOrThrow();
if (!context.isCanaryUpdateStarted()) {
if (canary.status().state() == CanaryState.CREATING) {
String message = "Canary is in state CREATING and cannot be updated.";
log(message);
return ProgressEvent.<ResourceModel, CallbackContext>builder()
.message(message)
.resourceModel(model)
.errorCode(HandlerErrorCode.ResourceConflict)
.status(OperationStatus.FAILED)
.build();
} else if (canary.status().state() == CanaryState.UPDATING) {
String message = "Canary is already updating.";
log(message);
return ProgressEvent.<ResourceModel, CallbackContext>builder()
.message(message)
.resourceModel(model)
.errorCode(HandlerErrorCode.ResourceConflict)
.status(OperationStatus.FAILED)
.build();
} else if (canary.status().state() == CanaryState.STARTING) {
String message = "Canary is in state STARTING. It must finish starting before it can be updated.";
return waitingForCanaryStateTransition(message, MAX_RETRY_TIMES, "STARTING");
} else if (canary.status().state() == CanaryState.STOPPING) {
String message = "Canary is in state STOPPING. It must finish stopping before it can be updated.";
return waitingForCanaryStateTransition(message, MAX_RETRY_TIMES, "STOPPING");
} else {
context.setInitialCanaryState(canary.status().state());
context.setCanaryUpdateStarted(true);
return updateCanary(canary);
}
}
if (canary.status().state() == CanaryState.UPDATING) {
return waitingForCanaryStateTransition("Update in progress", MAX_RETRY_TIMES, "UPDATING");
} else if (canary.status().state() == CanaryState.ERROR) {
log(String.format("Canary is in state ERROR. %s", canary.status().stateReason()));
return ProgressEvent.failed(
model,
context,
HandlerErrorCode.GeneralServiceException,
canary.status().stateReason());
} else if (canary.status().state() == CanaryState.READY || canary.status().state() == CanaryState.STOPPED) {
return handleCanaryInStateReadyOrStopped(canary);
} else if (canary.status().state() == CanaryState.STARTING) {
return handleCanaryInStateStarting(canary);
} else if (canary.status().state() == CanaryState.RUNNING) {
return handleCanaryInStateRunning(canary);
} else if (canary.status().state() == CanaryState.STOPPING) {
return waitingForCanaryStateTransition("Stopping canary", MAX_RETRY_TIMES, "STOPPING");
}
return ProgressEvent.<ResourceModel, CallbackContext>builder()
.resourceModel(model)
.status(OperationStatus.FAILED)
.build();
}