public ProgressEvent handleRequest()

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