use of com.sequenceiq.cloudbreak.reactor.api.event.cluster.upgrade.ClusterUpgradeFailedEvent in project cloudbreak by hortonworks.
the class ClusterUpgradeActions method clusterUpgradeFailedAction.
@Bean(name = "CLUSTER_UPGRADE_FAILED_STATE")
public Action<?, ?> clusterUpgradeFailedAction() {
return new AbstractClusterUpgradeAction<>(ClusterUpgradeFailedEvent.class) {
@Value("${cb.upgrade.failure.sync.sdx.enabled}")
private boolean syncAfterFailureEnabled;
@Override
protected ClusterUpgradeContext createFlowContext(FlowParameters flowParameters, StateContext<FlowState, FlowEvent> stateContext, ClusterUpgradeFailedEvent payload) {
Flow flow = getFlow(flowParameters.getFlowId());
Stack stack = stackService.getById(payload.getResourceId());
MDCBuilder.buildMdcContext(stack);
flow.setFlowFailed(payload.getException());
return ClusterUpgradeContext.from(flowParameters, payload);
}
@Override
protected void doExecute(ClusterUpgradeContext context, ClusterUpgradeFailedEvent payload, Map<Object, Object> variables) {
clusterUpgradeService.handleUpgradeClusterFailure(context.getStackId(), payload.getException().getMessage(), payload.getDetailedStatus());
if (syncAfterFailureEnabled) {
LOGGER.debug("Starting syncing parcel and CM version from CM to DB.");
try {
Set<Image> candidateImages = new HashSet<>();
Optional.ofNullable(getCurrentImage(variables)).ifPresent(si -> candidateImages.add(si.getImage()));
Optional.ofNullable(getTargetImage(variables)).ifPresent(si -> candidateImages.add(si.getImage()));
ClusterUpgradeFailedCmSyncRequest cmSyncRequest = new ClusterUpgradeFailedCmSyncRequest(payload.getResourceId(), payload.getException(), payload.getDetailedStatus(), candidateImages);
sendEvent(context, cmSyncRequest);
} catch (Exception e) {
LOGGER.warn("Error starting syncing CM version to DB, syncing skipped: ", e);
sendEvent(context, new ClusterUpgradeFailHandledRequest(payload.getResourceId(), payload.getException(), payload.getDetailedStatus()));
}
} else {
LOGGER.debug("Syncing from CM to DB is not enabled.");
sendEvent(context, new ClusterUpgradeFailHandledRequest(payload.getResourceId(), payload.getException(), payload.getDetailedStatus()));
}
}
@Override
protected Object getFailurePayload(ClusterUpgradeFailedEvent payload, Optional<ClusterUpgradeContext> flowContext, Exception ex) {
return null;
}
};
}
use of com.sequenceiq.cloudbreak.reactor.api.event.cluster.upgrade.ClusterUpgradeFailedEvent in project cloudbreak by hortonworks.
the class ClusterManagerUpgradeHandler method doAccept.
@Override
protected Selectable doAccept(HandlerEvent<ClusterManagerUpgradeRequest> event) {
LOGGER.debug("Accepting Cluster Manager upgrade event..");
ClusterManagerUpgradeRequest request = event.getData();
Selectable result;
try {
clusterManagerUpgradeService.upgradeClusterManager(request.getResourceId(), request.isRuntimeServicesStartNeeded());
result = new ClusterManagerUpgradeSuccess(request.getResourceId());
} catch (Exception e) {
LOGGER.info("Cluster Manager upgrade event failed", e);
result = new ClusterUpgradeFailedEvent(request.getResourceId(), e, DetailedStackStatus.CLUSTER_MANAGER_UPGRADE_FAILED);
}
return result;
}
use of com.sequenceiq.cloudbreak.reactor.api.event.cluster.upgrade.ClusterUpgradeFailedEvent in project cloudbreak by hortonworks.
the class ClusterUpgradeHandler method doAccept.
@Override
protected Selectable doAccept(HandlerEvent<ClusterUpgradeRequest> event) {
LOGGER.debug("Accepting Cluster upgrade event..");
ClusterUpgradeRequest request = event.getData();
Long stackId = request.getResourceId();
Selectable result;
try {
Stack stack = stackService.getByIdWithClusterInTransaction(stackId);
Optional<String> remoteDataContext = getRemoteDataContext(stack);
ClusterApi connector = clusterApiConnectors.getConnector(stack);
Set<ClusterComponent> components = parcelService.getParcelComponentsByBlueprint(stack);
connector.upgradeClusterRuntime(components, request.isPatchUpgrade(), remoteDataContext);
ParcelOperationStatus parcelOperationStatus = parcelService.removeUnusedParcelComponents(stack, components);
if (parcelOperationStatus.getFailed().isEmpty()) {
result = new ClusterUpgradeSuccess(request.getResourceId());
} else {
LOGGER.info("There are failed parcel removals: {}", parcelOperationStatus);
CloudbreakException exception = new CloudbreakException(format("Failed to remove the following parcels: %s", parcelOperationStatus.getFailed()));
result = new ClusterUpgradeFailedEvent(request.getResourceId(), exception, DetailedStackStatus.CLUSTER_UPGRADE_FAILED);
}
} catch (Exception e) {
LOGGER.error("Cluster upgrade event failed", e);
result = new ClusterUpgradeFailedEvent(request.getResourceId(), e, DetailedStackStatus.CLUSTER_UPGRADE_FAILED);
}
return result;
}
use of com.sequenceiq.cloudbreak.reactor.api.event.cluster.upgrade.ClusterUpgradeFailedEvent in project cloudbreak by hortonworks.
the class ClusterUpgradeActions method initClusterUpgrade.
@Bean(name = "CLUSTER_UPGRADE_INIT_STATE")
public Action<?, ?> initClusterUpgrade() {
return new AbstractClusterUpgradeAction<>(ClusterUpgradeTriggerEvent.class) {
@Inject
private ImageComponentUpdaterService imageComponentUpdaterService;
@Inject
private ClusterUpgradeTargetImageService clusterUpgradeTargetImageService;
@Override
protected void doExecute(ClusterUpgradeContext context, ClusterUpgradeTriggerEvent payload, Map<Object, Object> variables) {
try {
UpgradeImageInfo images = imageComponentUpdaterService.updateForUpgrade(payload.getImageId(), payload.getResourceId());
variables.put(CURRENT_IMAGE, images.getCurrentStatedImage());
variables.put(TARGET_IMAGE, images.getTargetStatedImage());
clusterUpgradeTargetImageService.saveImage(context.getStackId(), images.getTargetStatedImage());
clusterUpgradeService.initUpgradeCluster(context.getStackId(), getTargetImage(variables));
Selectable event = new ClusterUpgradeInitRequest(context.getStackId(), isPatchUpgrade(images.getCurrentStatedImage().getImage(), images.getTargetStatedImage().getImage()));
sendEvent(context, event.selector(), event);
} catch (Exception e) {
LOGGER.error("Error during updating cluster components with image id: [{}]", payload.getImageId(), e);
ClusterUpgradeFailedEvent upgradeFailedEvent = new ClusterUpgradeFailedEvent(payload.getResourceId(), e, DetailedStackStatus.CLUSTER_MANAGER_UPGRADE_FAILED);
sendEvent(context, upgradeFailedEvent);
}
}
@Override
protected Object getFailurePayload(ClusterUpgradeTriggerEvent payload, Optional<ClusterUpgradeContext> flowContext, Exception ex) {
return ClusterUpgradeFailedEvent.from(payload, ex, DetailedStackStatus.CLUSTER_MANAGER_UPGRADE_FAILED);
}
@Override
protected ClusterUpgradeContext createFlowContext(FlowParameters flowParameters, StateContext<FlowState, FlowEvent> stateContext, ClusterUpgradeTriggerEvent payload) {
return ClusterUpgradeContext.from(flowParameters, payload);
}
};
}
use of com.sequenceiq.cloudbreak.reactor.api.event.cluster.upgrade.ClusterUpgradeFailedEvent in project cloudbreak by hortonworks.
the class ClusterUpgradeInitHandler method doAccept.
@Override
protected Selectable doAccept(HandlerEvent<ClusterUpgradeInitRequest> event) {
LOGGER.debug("Accepting Cluster Manager parcel deactivation event..");
Stack stack = stackService.getByIdWithClusterInTransaction(event.getData().getResourceId());
ClusterUpgradeInitRequest request = event.getData();
Selectable result;
try {
Set<ClusterComponent> componentsByBlueprint = parcelService.getParcelComponentsByBlueprint(stack);
parcelService.removeUnusedParcelComponents(stack, componentsByBlueprint);
clusterApiConnectors.getConnector(stack).downloadAndDistributeParcels(componentsByBlueprint, request.isPatchUpgrade());
result = new ClusterUpgradeInitSuccess(request.getResourceId());
} catch (Exception e) {
LOGGER.error("Cluster Manager parcel deactivation failed", e);
result = new ClusterUpgradeFailedEvent(request.getResourceId(), e, DetailedStackStatus.CLUSTER_UPGRADE_INIT_FAILED);
}
return result;
}
Aggregations