Search in sources :

Example 21 with FAILED

use of com.sequenceiq.cloudbreak.api.endpoint.v4.stacks.base.InstanceStatus.FAILED in project cloudbreak by hortonworks.

the class SdxBackupRestoreService method getStackResponseAttemptResult.

private AttemptResult<StackV4Response> getStackResponseAttemptResult(SdxCluster sdxCluster, String pollingMessage, FlowState flowState) throws JsonProcessingException {
    StackV4Response stackV4Response = ThreadBasedUserCrnProvider.doAsInternalActor(regionAwareInternalCrnGeneratorFactory.iam().getInternalCrnForServiceAsString(), () -> stackV4Endpoint.get(0L, sdxCluster.getClusterName(), Collections.emptySet(), sdxCluster.getAccountId()));
    LOGGER.info("Response from cloudbreak: {}", JsonUtil.writeValueAsString(stackV4Response));
    ClusterV4Response cluster = stackV4Response.getCluster();
    if (isStackOrClusterDrStatusComplete(stackV4Response.getStatus()) && isStackOrClusterDrStatusComplete(cluster.getStatus())) {
        return sdxDrSucceeded(stackV4Response);
    } else if (isStackOrClusterStatusFailed(stackV4Response.getStatus())) {
        LOGGER.info("{} failed for Stack {} with status {}", pollingMessage, stackV4Response.getName(), stackV4Response.getStatus());
        return sdxDrFailed(sdxCluster, stackV4Response.getStatusReason(), pollingMessage);
    } else if (isStackOrClusterStatusFailed(stackV4Response.getCluster().getStatus())) {
        LOGGER.info("{} failed for Cluster {} status {}", pollingMessage, stackV4Response.getCluster().getName(), stackV4Response.getCluster().getStatus());
        return sdxDrFailed(sdxCluster, stackV4Response.getCluster().getStatusReason(), pollingMessage);
    } else if (FINISHED.equals(flowState)) {
        LOGGER.info("Flow finished, but Backup/Restore is not complete: {}", sdxCluster.getClusterName());
        return sdxDrFailed(sdxCluster, "stack is in improper state", pollingMessage);
    } else {
        LOGGER.info("Flow is unknown state");
        return sdxDrFailed(sdxCluster, "Flow is unknown state", pollingMessage);
    }
}
Also used : ClusterV4Response(com.sequenceiq.cloudbreak.api.endpoint.v4.stacks.response.cluster.ClusterV4Response) StackV4Response(com.sequenceiq.cloudbreak.api.endpoint.v4.stacks.response.StackV4Response)

Example 22 with FAILED

use of com.sequenceiq.cloudbreak.api.endpoint.v4.stacks.base.InstanceStatus.FAILED in project cloudbreak by hortonworks.

the class SdxBackupRestoreService method databaseRestore.

public void databaseRestore(SdxOperation drStatus, Long clusterId, String backupId, String backupLocation) {
    try {
        sdxOperationRepository.save(drStatus);
        sdxClusterRepository.findById(clusterId).ifPresentOrElse(sdxCluster -> {
            String initiatorUserCrn = ThreadBasedUserCrnProvider.getUserCrn();
            RestoreV4Response restoreV4Response = ThreadBasedUserCrnProvider.doAsInternalActor(regionAwareInternalCrnGeneratorFactory.iam().getInternalCrnForServiceAsString(), () -> stackV4Endpoint.restoreDatabaseByNameInternal(0L, sdxCluster.getClusterName(), backupLocation, backupId, initiatorUserCrn));
            updateSuccessStatus(drStatus.getOperationId(), sdxCluster, restoreV4Response.getFlowIdentifier(), SdxOperationStatus.TRIGGERRED);
        }, () -> {
            updateFailureStatus(drStatus.getOperationId(), clusterId, String.format("SDX cluster with Id [%d] not found", clusterId));
        });
    } catch (WebApplicationException e) {
        String errorMessage = webApplicationExceptionMessageExtractor.getErrorMessage(e);
        String message = String.format("Database restore failed for datalake-id: [%d]. Message: [%s]", clusterId, errorMessage);
        throw new CloudbreakApiException(message);
    }
}
Also used : RestoreV4Response(com.sequenceiq.cloudbreak.api.endpoint.v4.stacks.response.dr.RestoreV4Response) WebApplicationException(javax.ws.rs.WebApplicationException) CloudbreakApiException(com.sequenceiq.cloudbreak.exception.CloudbreakApiException)

Example 23 with FAILED

use of com.sequenceiq.cloudbreak.api.endpoint.v4.stacks.base.InstanceStatus.FAILED in project cloudbreak by hortonworks.

the class SdxBackupRestoreService method databaseBackup.

public void databaseBackup(SdxOperation drStatus, Long clusterId, SdxDatabaseBackupRequest backupRequest) {
    try {
        sdxOperationRepository.save(drStatus);
        sdxClusterRepository.findById(clusterId).ifPresentOrElse(sdxCluster -> {
            String initiatorUserCrn = ThreadBasedUserCrnProvider.getUserCrn();
            BackupV4Response backupV4Response = ThreadBasedUserCrnProvider.doAsInternalActor(regionAwareInternalCrnGeneratorFactory.iam().getInternalCrnForServiceAsString(), () -> stackV4Endpoint.backupDatabaseByNameInternal(0L, sdxCluster.getClusterName(), backupRequest.getBackupId(), backupRequest.getBackupLocation(), backupRequest.getCloseConnections(), initiatorUserCrn));
            updateSuccessStatus(drStatus.getOperationId(), sdxCluster, backupV4Response.getFlowIdentifier(), SdxOperationStatus.TRIGGERRED);
        }, () -> {
            updateFailureStatus(drStatus.getOperationId(), clusterId, String.format("SDX cluster with Id [%d] not found", clusterId));
        });
    } catch (WebApplicationException e) {
        String errorMessage = webApplicationExceptionMessageExtractor.getErrorMessage(e);
        String message = String.format("Database backup failed for datalake-id: [%d]. Message: [%s]", clusterId, errorMessage);
        throw new CloudbreakApiException(message);
    }
}
Also used : WebApplicationException(javax.ws.rs.WebApplicationException) BackupV4Response(com.sequenceiq.cloudbreak.api.endpoint.v4.stacks.response.dr.BackupV4Response) CloudbreakApiException(com.sequenceiq.cloudbreak.exception.CloudbreakApiException)

Example 24 with FAILED

use of com.sequenceiq.cloudbreak.api.endpoint.v4.stacks.base.InstanceStatus.FAILED in project cloudbreak by hortonworks.

the class CloudbreakPoller method getStackResponseAttemptResult.

private AttemptResult<StackStatusV4Response> getStackResponseAttemptResult(String process, SdxCluster sdxCluster, FlowState flowState, Set<Status> targetStatuses, Set<Status> failedStatuses) {
    StackStatusV4Response statusResponse = getStackAndClusterStatusWithInternalActor(sdxCluster);
    LOGGER.info("Response from cloudbreak: {}", statusResponse);
    if (FAILED.equals(flowState)) {
        String message = sdxStatusService.getShortStatusMessage(statusResponse);
        LOGGER.info("{} flow finished, but failed. {}", process, message);
        return failedPolling(process, sdxCluster, message);
    } else if (oneOf(statusResponse.getStatus(), targetStatuses) && oneOf(statusResponse.getClusterStatus(), targetStatuses)) {
        return AttemptResults.finishWith(statusResponse);
    } else if (oneOf(statusResponse.getStatus(), failedStatuses)) {
        LOGGER.info("{} failed. Stack is in {} status.", process, statusResponse.getStatus());
        return failedPolling(process, sdxCluster, statusResponse.getStatusReason());
    } else if (oneOf(statusResponse.getClusterStatus(), failedStatuses)) {
        LOGGER.info("{} failed. Cluster is in {} status.", process, statusResponse.getClusterStatus());
        return failedPolling(process, sdxCluster, statusResponse.getClusterStatusReason());
    } else if (FINISHED.equals(flowState)) {
        String message = sdxStatusService.getShortStatusMessage(statusResponse);
        LOGGER.info("{} flow finished, but stack or cluster is not available. {}", process, message);
        return failedPolling(process, sdxCluster, message);
    } else {
        return AttemptResults.justContinue();
    }
}
Also used : StackStatusV4Response(com.sequenceiq.cloudbreak.api.endpoint.v4.stacks.response.StackStatusV4Response)

Example 25 with FAILED

use of com.sequenceiq.cloudbreak.api.endpoint.v4.stacks.base.InstanceStatus.FAILED in project cloudbreak by hortonworks.

the class CreateExternalDatabaseHandler method accept.

@Override
public void accept(Event<CreateExternalDatabaseRequest> createExternalDatabaseRequest) {
    LOGGER.debug("In CreateExternalDatabaseHandler.accept");
    CreateExternalDatabaseRequest request = createExternalDatabaseRequest.getData();
    Stack stack = stackService.getById(request.getResourceId());
    DatabaseAvailabilityType externalDatabase = ObjectUtils.defaultIfNull(stack.getExternalDatabaseCreationType(), DatabaseAvailabilityType.NONE);
    LOGGER.debug("External database: {} for stack {}", externalDatabase.name(), stack.getName());
    Selectable result;
    try {
        String resourceCrn = null;
        if (externalDatabase.isEmbedded()) {
            LOGGER.info("External database for stack {} is not requested.", stack.getName());
        } else {
            LOGGER.debug("Updating stack {} status from {} to {}", stack.getName(), stack.getStatus().name(), DetailedStackStatus.EXTERNAL_DATABASE_CREATION_IN_PROGRESS.name());
            stackUpdaterService.updateStatus(stack.getId(), DetailedStackStatus.EXTERNAL_DATABASE_CREATION_IN_PROGRESS, ResourceEvent.CLUSTER_EXTERNAL_DATABASE_CREATION_STARTED, "External database creation in progress");
            LOGGER.debug("Getting environment CRN for stack {}", stack.getName());
            DetailedEnvironmentResponse environment = environmentClientService.getByCrn(stack.getEnvironmentCrn());
            environmentValidator.checkValidEnvironment(stack.getName(), externalDatabase, environment);
            provisionService.provisionDatabase(stack.getCluster(), externalDatabase, environment);
            LOGGER.debug("Updating stack {} status from {} to {}", stack.getName(), stack.getStatus().name(), DetailedStackStatus.PROVISION_REQUESTED.name());
            stackUpdaterService.updateStatus(stack.getId(), DetailedStackStatus.PROVISION_REQUESTED, ResourceEvent.CLUSTER_EXTERNAL_DATABASE_CREATION_FINISHED, "External database creation finished");
            resourceCrn = stack.getCluster().getDatabaseServerCrn();
        }
        result = new CreateExternalDatabaseResult(stack.getId(), EXTERNAL_DATABASE_WAIT_SUCCESS_EVENT.event(), stack.getName(), resourceCrn);
    } catch (UserBreakException e) {
        LOGGER.info("Database polling exited before timeout. Cause: ", e);
        result = createFailedEvent(stack, e);
    } catch (PollerStoppedException e) {
        LOGGER.info(String.format("Database poller stopped for stack: %s", stack.getName()), e);
        result = createFailedEvent(stack, e);
    } catch (PollerException e) {
        LOGGER.info(String.format("Database polling failed for stack: %s", stack.getName()), e);
        result = createFailedEvent(stack, e);
    } catch (Exception e) {
        LOGGER.error(String.format("Exception during DB creation for stack/cluster: %s", stack.getName()), e);
        result = createFailedEvent(stack, e);
    }
    LOGGER.debug("Sending reactor notification for selector {}", result.selector());
    eventBus.notify(result.selector(), new Event<>(createExternalDatabaseRequest.getHeaders(), result));
}
Also used : UserBreakException(com.dyngr.exception.UserBreakException) Selectable(com.sequenceiq.cloudbreak.common.event.Selectable) CreateExternalDatabaseRequest(com.sequenceiq.cloudbreak.reactor.api.event.externaldatabase.CreateExternalDatabaseRequest) PollerException(com.dyngr.exception.PollerException) DetailedEnvironmentResponse(com.sequenceiq.environment.api.v1.environment.model.response.DetailedEnvironmentResponse) CreateExternalDatabaseResult(com.sequenceiq.cloudbreak.reactor.api.event.externaldatabase.CreateExternalDatabaseResult) PollerStoppedException(com.dyngr.exception.PollerStoppedException) UserBreakException(com.dyngr.exception.UserBreakException) PollerException(com.dyngr.exception.PollerException) PollerStoppedException(com.dyngr.exception.PollerStoppedException) Stack(com.sequenceiq.cloudbreak.domain.stack.Stack) DatabaseAvailabilityType(com.sequenceiq.cloudbreak.api.endpoint.v4.stacks.request.database.DatabaseAvailabilityType)

Aggregations

Stack (com.sequenceiq.cloudbreak.domain.stack.Stack)20 List (java.util.List)19 Set (java.util.Set)18 Inject (javax.inject.Inject)18 Optional (java.util.Optional)17 Logger (org.slf4j.Logger)17 LoggerFactory (org.slf4j.LoggerFactory)17 Map (java.util.Map)16 Collectors (java.util.stream.Collectors)15 InstanceMetaData (com.sequenceiq.cloudbreak.domain.stack.instance.InstanceMetaData)14 HashSet (java.util.HashSet)13 Status (com.sequenceiq.cloudbreak.api.endpoint.v4.common.Status)11 Collection (java.util.Collection)11 Collections (java.util.Collections)11 HostGroup (com.sequenceiq.cloudbreak.domain.stack.cluster.host.HostGroup)9 ResourceEvent (com.sequenceiq.cloudbreak.event.ResourceEvent)9 DetailedStackStatus (com.sequenceiq.cloudbreak.api.endpoint.v4.common.DetailedStackStatus)8 VolumeSetAttributes (com.sequenceiq.cloudbreak.cloud.model.VolumeSetAttributes)8 ResourceAttributeUtil (com.sequenceiq.cloudbreak.cluster.util.ResourceAttributeUtil)8 Selectable (com.sequenceiq.cloudbreak.common.event.Selectable)8