package com.sequenceiq.cloudbreak.service.stack.repair; import java.util.HashSet; import java.util.Map; import java.util.Set; import javax.inject.Inject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; import com.sequenceiq.cloudbreak.api.model.InstanceGroupType; import com.sequenceiq.cloudbreak.core.CloudbreakSecuritySetupException; import com.sequenceiq.cloudbreak.domain.InstanceMetaData; import com.sequenceiq.cloudbreak.domain.Stack; import com.sequenceiq.cloudbreak.repository.InstanceMetaDataRepository; import com.sequenceiq.cloudbreak.service.cluster.ClusterService; @Component public class CandidateUnhealthyInstanceSelector { private static final Logger LOGGER = LoggerFactory.getLogger(CandidateUnhealthyInstanceSelector.class); @Inject private ClusterService clusterService; @Inject private InstanceMetaDataRepository instanceMetaDataRepository; public Set<InstanceMetaData> selectCandidateUnhealthyInstances(Stack stack) throws CloudbreakSecuritySetupException { Map<String, String> hostStatuses = clusterService.getHostStatuses(stack.getId()); LOGGER.info("HostStatuses: {}", hostStatuses); Set<InstanceMetaData> candidateUnhealthyInstances = new HashSet<>(); hostStatuses.keySet().stream().filter(hostName -> hostName != null && hostStatuses.get(hostName).equals("UNKNOWN")).forEach(hostName -> { InstanceMetaData instanceMetaData = instanceMetaDataRepository.findHostInStack(stack.getId(), hostName); if (isAWorker(instanceMetaData)) { candidateUnhealthyInstances.add(instanceMetaData); } }); LOGGER.info("Candidate Unhealthy Instances: {}", candidateUnhealthyInstances); return candidateUnhealthyInstances; } private boolean isAWorker(InstanceMetaData instanceMetaData) { return instanceMetaData.getInstanceGroup().getInstanceGroupType().equals(InstanceGroupType.CORE); } }