package com.sequenceiq.cloudbreak.core.flow2.cluster.upgrade;
import javax.inject.Inject;
import org.springframework.stereotype.Service;
import com.sequenceiq.cloudbreak.api.model.DetailedStackStatus;
import com.sequenceiq.cloudbreak.api.model.Status;
import com.sequenceiq.cloudbreak.core.flow2.stack.FlowMessageService;
import com.sequenceiq.cloudbreak.core.flow2.stack.Msg;
import com.sequenceiq.cloudbreak.domain.Cluster;
import com.sequenceiq.cloudbreak.domain.Stack;
import com.sequenceiq.cloudbreak.logger.MDCBuilder;
import com.sequenceiq.cloudbreak.repository.StackUpdater;
import com.sequenceiq.cloudbreak.service.cluster.ClusterService;
import com.sequenceiq.cloudbreak.service.cluster.flow.EmailSenderService;
import com.sequenceiq.cloudbreak.util.StackUtil;
@Service
public class ClusterUpgradeService {
@Inject
private FlowMessageService flowMessageService;
@Inject
private ClusterService clusterService;
@Inject
private StackUpdater stackUpdater;
@Inject
private EmailSenderService emailSenderService;
@Inject
private StackUtil stackUtil;
public void upgradeCluster(Stack stack, Cluster cluster) {
MDCBuilder.buildMdcContext(cluster);
clusterService.updateClusterStatusByStackId(stack.getId(), Status.UPDATE_IN_PROGRESS);
flowMessageService.fireEventAndLog(stack.getId(), Msg.AMBARI_CLUSTER_UPGRADE, Status.UPDATE_IN_PROGRESS.name());
}
public void clusterUpgradeFinished(Stack stack) {
clusterService.updateClusterStatusByStackId(stack.getId(), Status.START_REQUESTED);
stackUpdater.updateStackStatus(stack.getId(), DetailedStackStatus.AVAILABLE, "Ambari is successfully upgraded.");
flowMessageService.fireEventAndLog(stack.getId(), Msg.AMBARI_CLUSTER_UPGRADE_FINISHED, Status.AVAILABLE.name(), stackUtil.extractAmbariIp(stack));
}
public void handleUpgradeClusterFailure(Stack stack, String errorReason) {
Cluster cluster = clusterService.retrieveClusterByStackId(stack.getId());
MDCBuilder.buildMdcContext(cluster);
clusterService.updateClusterStatusByStackId(stack.getId(), Status.UPDATE_FAILED, errorReason);
stackUpdater.updateStackStatus(stack.getId(), DetailedStackStatus.AVAILABLE);
flowMessageService.fireEventAndLog(stack.getId(), Msg.AMBARI_CLUSTER_UPGRADE_FAILED, Status.UPDATE_FAILED.name(), errorReason);
}
}