@Override public void transition(ContainerImpl container, ContainerEvent event) { ContainerResourceFailedEvent rsrcFailedEvent = (ContainerResourceFailedEvent) event; container.addDiagnostics(rsrcFailedEvent.getDiagnosticMessage() + "\n"); // Inform the localizer to decrement reference counts and cleanup // resources. container.cleanup(); container.metrics.endInitingContainer(); } }
@Override public boolean isContainerInFinalStates() { ContainerState state = getContainerState(); return state == ContainerState.KILLING || state == ContainerState.DONE || state == ContainerState.LOCALIZATION_FAILED || state == ContainerState.CONTAINER_RESOURCES_CLEANINGUP || state == ContainerState.CONTAINER_CLEANEDUP_AFTER_KILL || state == ContainerState.EXITED_WITH_FAILURE || state == ContainerState.EXITED_WITH_SUCCESS; } }
@Override public ContainerStatus cloneAndGetContainerStatus() { this.readLock.lock(); try { return BuilderUtils.newContainerStatus(this.containerId, getCurrentState(), diagnostics.toString(), exitCode, getResource()); } finally { this.readLock.unlock(); } }
@Override public ContainerStatus cloneAndGetContainerStatus() { this.readLock.lock(); try { ContainerStatus status = BuilderUtils.newContainerStatus(this.containerId, getCurrentState(), diagnostics.toString(), exitCode, getResource(), this.containerTokenIdentifier.getExecutionType()); status.setIPs(StringUtils.isEmpty(ips) ? null : Arrays.asList(ips.split(","))); status.setHost(host); status.setContainerSubState(getContainerSubState()); return status; } finally { this.readLock.unlock(); } }
@Override public void transition(ContainerImpl container, ContainerEvent event) { container.setIsReInitializing(false); // Set exit code to 0 on success container.exitCode = 0; // TODO: Add containerWorkDir to the deletion service. if (DockerLinuxContainerRuntime.isDockerContainerRequested( container.daemonConf, container.getLaunchContext().getEnvironment())) { removeDockerContainer(container); } if (clCleanupRequired) { container.dispatcher.getEventHandler().handle( new ContainersLauncherEvent(container, ContainersLauncherEventType.CLEANUP_CONTAINER)); } container.cleanup(); } }
.getLaunchContext(), container.getUser(), SharedCacheUploadEventType.UPLOAD));
@Override public ContainerStatus cloneAndGetContainerStatus() { this.readLock.lock(); try { return BuilderUtils.newContainerStatus(this.containerId, getCurrentState(), diagnostics.toString(), exitCode); } finally { this.readLock.unlock(); } }
/** * Recover a running container. */ @SuppressWarnings("unchecked") protected void recoverActiveContainer(Application app, ContainerLaunchContext launchContext, ContainerTokenIdentifier token, RecoveredContainerState rcs) throws IOException { Credentials credentials = YarnServerSecurityUtils.parseCredentials( launchContext); Container container = new ContainerImpl(getConfig(), dispatcher, launchContext, credentials, metrics, token, context, rcs); context.getContainers().put(token.getContainerID(), container); containerScheduler.recoverActiveContainer(container, rcs); app.handle(new ApplicationContainerInitEvent(container)); }
@Override public void transition(ContainerImpl container, ContainerEvent event) { ContainerExitEvent exitEvent = (ContainerExitEvent) event; if (container.hasDefaultExitCode()) { container.exitCode = exitEvent.getExitCode(); } if (exitEvent.getDiagnosticInfo() != null) { container.addDiagnostics(exitEvent.getDiagnosticInfo() + "\n"); } if (DockerLinuxContainerRuntime.isDockerContainerRequested( container.daemonConf, container.getLaunchContext().getEnvironment())) { removeDockerContainer(container); } // The process/process-grp is killed. Decrement reference counts and // cleanup resources container.cleanup(); } }
@Override public void setResource(Resource targetResource) { Resource currentResource = getResource(); this.resource = Resources.clone(targetResource); this.metrics.changeContainer(currentResource, targetResource); }
.getLaunchContext(), container.getUser(), SharedCacheUploadEventType.UPLOAD));
@Override public void transition(ContainerImpl container, ContainerEvent event) { container.setIsReInitializing(false); ContainerExitEvent exitEvent = (ContainerExitEvent) event; container.exitCode = exitEvent.getExitCode(); if (exitEvent.getDiagnosticInfo() != null) { container.addDiagnostics(exitEvent.getDiagnosticInfo() + "\n"); } // TODO: Add containerWorkDir to the deletion service. // TODO: Add containerOuputDir to the deletion service. if (DockerLinuxContainerRuntime.isDockerContainerRequested( container.daemonConf, container.getLaunchContext().getEnvironment())) { removeDockerContainer(container); } if (clCleanupRequired) { container.dispatcher.getEventHandler().handle( new ContainersLauncherEvent(container, ContainersLauncherEventType.CLEANUP_CONTAINER)); } container.cleanup(); } }
@Override public ContainerStatus cloneAndGetContainerStatus() { this.readLock.lock(); try { return BuilderUtils.newContainerStatus(this.containerId, getCurrentState(), diagnostics.toString(), exitCode); } finally { this.readLock.unlock(); } }
@SuppressWarnings("unchecked") private void recoverContainer(RecoveredContainerState rcs) throws IOException { StartContainerRequest req = rcs.getStartRequest(); ContainerLaunchContext launchContext = req.getContainerLaunchContext(); ContainerTokenIdentifier token = BuilderUtils.newContainerTokenIdentifier(req.getContainerToken()); ContainerId containerId = token.getContainerID(); ApplicationId appId = containerId.getApplicationAttemptId().getApplicationId(); LOG.info("Recovering " + containerId + " in state " + rcs.getStatus() + " with exit code " + rcs.getExitCode()); Application app = context.getApplications().get(appId); if (app != null) { Credentials credentials = YarnServerSecurityUtils.parseCredentials(launchContext); Container container = new ContainerImpl(getConfig(), dispatcher, req.getContainerLaunchContext(), credentials, metrics, token, context, rcs); context.getContainers().put(containerId, container); app.handle(new ApplicationContainerInitEvent(container)); } else { if (rcs.getStatus() != RecoveredContainerStatus.COMPLETED) { LOG.warn(containerId + " has no corresponding application!"); } LOG.info("Adding " + containerId + " to recently stopped containers"); nodeStatusUpdater.addCompletedContainer(containerId); } }
@SuppressWarnings("unchecked") // dispatcher not typed private void sendContainerMonitorStartEvent() { long pmemBytes = getResource().getMemory() * 1024 * 1024L; float pmemRatio = daemonConf.getFloat( YarnConfiguration.NM_VMEM_PMEM_RATIO, YarnConfiguration.DEFAULT_NM_VMEM_PMEM_RATIO); long vmemBytes = (long) (pmemRatio * pmemBytes); int cpuVcores = getResource().getVirtualCores(); dispatcher.getEventHandler().handle( new ContainerStartMonitoringEvent(containerId, vmemBytes, pmemBytes, cpuVcores)); }
@Override public void transition(ContainerImpl container, ContainerEvent event) { ContainerResourceFailedEvent rsrcFailedEvent = (ContainerResourceFailedEvent) event; container.addDiagnostics(rsrcFailedEvent.getDiagnosticMessage(), "\n"); // Inform the localizer to decrement reference counts and cleanup // resources. container.cleanup(); container.metrics.endInitingContainer(); } }
@Override public NMContainerStatus getNMContainerStatus() { this.readLock.lock(); try { return NMContainerStatus.newInstance(this.containerId, getCurrentState(), getResource(), diagnostics.toString(), exitCode, containerTokenIdentifier.getPriority(), containerTokenIdentifier.getCreationTime()); } finally { this.readLock.unlock(); } }
@Override public boolean isRecovering() { boolean isRecovering = ( recoveredStatus != RecoveredContainerStatus.REQUESTED && getContainerState() == ContainerState.NEW); return isRecovering; } }
.getLaunchContext(), container.getUser(), SharedCacheUploadEventType.UPLOAD));
allContainersCompleted = true; for (Entry<ContainerId, Container> container : containers.entrySet()) { if (((ContainerImpl) container.getValue()).getCurrentState() != ContainerState.COMPLETE) { allContainersCompleted = false;