private void logContainerStatus(String prefix, ContainerStatus status) { StringBuilder sb = new StringBuilder(); sb.append(prefix); sb.append("ContainerStatus: ["); sb.append("ContainerId: "); sb.append(status.getContainerId()).append(", "); sb.append("ExecutionType: "); sb.append(status.getExecutionType()).append(", "); sb.append("State: "); sb.append(status.getState()).append(", "); sb.append("Capability: "); sb.append(status.getCapability()).append(", "); sb.append("Diagnostics: "); sb.append(LOG.isDebugEnabled() ? status.getDiagnostics() : "..."); sb.append(", "); sb.append("ExitStatus: "); sb.append(status.getExitStatus()).append(", "); sb.append("IP: "); sb.append(status.getIPs()).append(", "); sb.append("Host: "); sb.append(status.getHost()).append(", "); sb.append("ContainerSubState: "); sb.append(status.getContainerSubState()); sb.append("]"); LOG.info(sb.toString()); }
private List<ContainerStatus> findLostContainers(int numRemoteRunning, List<ContainerStatus> containerStatuses) { if (numRemoteRunning >= launchedContainers.size()) { return Collections.emptyList(); } Set<ContainerId> nodeContainers = new HashSet<ContainerId>(numRemoteRunning); List<ContainerStatus> lostContainers = new ArrayList<ContainerStatus>( launchedContainers.size() - numRemoteRunning); for (ContainerStatus remoteContainer : containerStatuses) { if (remoteContainer.getState() == ContainerState.RUNNING && remoteContainer.getExecutionType() == ExecutionType.GUARANTEED) { nodeContainers.add(remoteContainer.getContainerId()); } } Iterator<ContainerId> iter = launchedContainers.iterator(); while (iter.hasNext()) { ContainerId containerId = iter.next(); if (!nodeContainers.contains(containerId)) { String diag = "Container " + containerId + " was running but not reported from " + nodeId; LOG.warn(diag); lostContainers.add(SchedulerUtils.createAbnormalContainerStatus( containerId, diag)); iter.remove(); } } return lostContainers; }