package com.sequenceiq.cloudbreak.service.cluster.flow;
import java.util.Map;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import com.sequenceiq.ambari.client.AmbariClient;
import com.sequenceiq.cloudbreak.logger.MDCBuilder;
import com.sequenceiq.cloudbreak.service.ClusterBasedStatusCheckerTask;
@Component
public class RSDecommissionStatusCheckerTask extends ClusterBasedStatusCheckerTask<AmbariHostsWithNames> {
private static final Logger LOGGER = LoggerFactory.getLogger(RSDecommissionStatusCheckerTask.class);
private static final String FINAL_STATE = "INSTALLED";
@Override
public boolean checkStatus(AmbariHostsWithNames t) {
MDCBuilder.buildMdcContext(t.getStack());
AmbariClient ambariClient = t.getAmbariClient();
Map<String, String> rs = ambariClient.getHBaseRegionServersState(t.getHostNames());
for (Map.Entry<String, String> entry : rs.entrySet()) {
if (!FINAL_STATE.equals(entry.getValue())) {
LOGGER.info("RegionServer: {} decommission is in progress, current state: {}", entry.getKey(), entry.getValue());
return false;
}
}
return true;
}
@Override
public void handleTimeout(AmbariHostsWithNames t) {
throw new IllegalStateException("RegionServer decommission timed out");
}
@Override
public String successMessage(AmbariHostsWithNames t) {
return "Requested RegionServer decommission operations completed";
}
}