if (op.getType() == Protos.Offer.Operation.Type.LAUNCH) { for (Protos.TaskInfo info : op.getLaunch().getTaskInfosList()) { MesosWorkerStore.Worker worker = workersInNew.remove(extractResourceID(info.getTaskId())); assert (worker != null);
final String taskId = taskInfo.getTaskId().getValue(); LOG.error("Unexpected exception starting task {}", taskId, t); executorUtils.sendStatusUpdate(executorDriver, taskInfo.getTaskId(), TaskState.TASK_LOST, String.format("Unexpected exception while launching task %s - %s", taskId, t.getMessage()), LOG);
private void runHealthcheck() { Optional<HealthcheckOptions> maybeOptions = task.getTaskDefinition().getHealthcheckOptions(); Optional<String> expectedHealthcheckResultFilePath = task.getTaskDefinition().getHealthcheckResultFilePath(); if (maybeOptions.isPresent() && expectedHealthcheckResultFilePath.isPresent()) { LOG.debug("Checking for healthcheck file {}", expectedHealthcheckResultFilePath.get()); String taskAppDirectory = task.getTaskDefinition().getTaskAppDirectory(); File fullHealthcheckPath = Paths.get(taskAppDirectory, expectedHealthcheckResultFilePath.get()).toFile(); try { Integer healthcheckMaxRetries = maybeOptions.get().getMaxRetries().or(configuration.getDefaultHealthcheckMaxRetries()); Integer retryInterval = maybeOptions.get().getIntervalSeconds().or(5); Retryer<Boolean> retryer = RetryerBuilder.<Boolean>newBuilder() .retryIfResult(bool -> !bool) .withWaitStrategy(WaitStrategies.fixedWait(retryInterval, TimeUnit.SECONDS)) .withStopStrategy(StopStrategies.stopAfterAttempt(healthcheckMaxRetries)) .build(); retryer.call(() -> fullHealthcheckPath.exists()); executorUtils.sendStatusUpdate(task.getDriver(), task.getTaskInfo().getTaskId(), Protos.TaskState.TASK_RUNNING, String.format("Task running process %s (health check file found successfully).", getCurrentProcessToString()), task.getLog()); } catch (ExecutionException | RetryException e) { executorUtils.sendStatusUpdate(task.getDriver(), task.getTaskInfo().getTaskId(), TaskState.TASK_FAILED, String.format("Task timed out on health checks (health check file not found)."), task.getLog()); } } else { executorUtils.sendStatusUpdate(task.getDriver(), task.getTaskInfo().getTaskId(), Protos.TaskState.TASK_RUNNING, String.format("Task running process %s", getCurrentProcessToString()), task.getLog()); } } }
@Override public void store(Protos.TaskInfo taskInfo) { logger.debug("Persisting taskInfo for taskId=" + taskInfo.getTaskId().getValue()); Set<Protos.TaskInfo> taskInfos = allTaskInfos(); taskInfos.add(taskInfo); set("tasks", taskInfos); }
private static void killUnneededTasks(StateStore stateStore, Set<String> taskToDeployNames) { Set<Protos.TaskInfo> unneededTaskInfos = stateStore.fetchTasks().stream() .filter(taskInfo -> !taskToDeployNames.contains(taskInfo.getName())) .collect(Collectors.toSet()); Set<Protos.TaskID> taskIdsToKill = unneededTaskInfos.stream() .map(taskInfo -> taskInfo.getTaskId()) .collect(Collectors.toSet()); taskIdsToKill.forEach(taskID -> TaskKiller.killTask(taskID)); }
@Override public String toString() { return String.format("%s(%s):%s", taskInfo.getName(), taskInfo.getTaskId().getValue(), status); } }
@Override public OfferRequirement getNewOfferRequirement(String type, Protos.TaskInfo taskInfo) { LOGGER.info("Getting new offer requirement for nodeId: {}", taskInfo.getTaskId()); return getCreateOfferRequirement(type, taskInfo); }
private static Collection<Protos.TaskStatus> getTaskStatuses(Collection<Protos.TaskInfo> taskInfos) { return taskInfos.stream().map(task -> Protos.TaskStatus.newBuilder() .setState(Protos.TaskState.TASK_STAGING) .setTaskId(task.getTaskId()) .build()) .collect(Collectors.toList()); }
private static Protos.TaskStatus createTaskStatusWithIP(Protos.TaskInfo taskInfo, String ipAddress) { return Protos.TaskStatus.newBuilder() .setTaskId(taskInfo.getTaskId()) .setState(Protos.TaskState.TASK_UNKNOWN) .setContainerStatus(Protos.ContainerStatus.newBuilder() .addNetworkInfos(Protos.NetworkInfo.newBuilder() .addIpAddresses(Protos.NetworkInfo.IPAddress.newBuilder() .setIpAddress(ipAddress)))) .build(); }
@Test public void testRepairTaskIdsNothingNeeded() { Protos.TaskInfo taskInfo = newTaskInfo(TestConstants.TASK_NAME); stateStore.storeTasks(ImmutableList.of(taskInfo)); Protos.TaskStatus taskStatus = newTaskStatus(taskInfo.getTaskId(), Protos.TaskState.TASK_UNKNOWN); stateStore.storeStatus(TestConstants.TASK_NAME, taskStatus); StateStoreUtils.repairTaskIDs(stateStore); assertThat(stateStore.fetchTask(TestConstants.TASK_NAME).get(), is(taskInfo)); assertThat(stateStore.fetchStatus(TestConstants.TASK_NAME).get(), is(taskStatus)); }
@Test public void testStoreFetchStatusExactMatch() throws Exception { Protos.TaskInfo task = createTask(TestConstants.TASK_NAME); store.storeTasks(Arrays.asList(task)); // taskstatus id must exactly match taskinfo id: Protos.TaskStatus status = TASK_STATUS.toBuilder().setTaskId(task.getTaskId()).build(); store.storeStatus(TestConstants.TASK_NAME, status); assertEquals(status, store.fetchStatus(TestConstants.TASK_NAME).get()); Collection<Protos.TaskStatus> statuses = store.fetchStatuses(); assertEquals(1, statuses.size()); assertEquals(status, statuses.iterator().next()); }
/** * Returns the last task id for a task of the specified name. * * @param taskName the task name to be found * @return the task id * @throws IllegalStateException if no such task was found */ public Protos.TaskID getTaskId(String taskName) { return getLastLaunchedTask(taskName).getTask().getTaskId(); } }
@Override public void start() { logger.info("Marking task for decommissioning: {}", taskInfo.getName()); setStatus(Status.IN_PROGRESS); stateStore.storeGoalOverrideStatus( taskInfo.getName(), DecommissionPlanFactory.DECOMMISSIONING_STATUS ); TaskKiller.killTask(taskInfo.getTaskId()); setStatus(Status.COMPLETE); } }
@Test public void shouldReturnFalseIfNotExists() throws IOException { Protos.TaskInfo defaultTaskInfo = ProtoTestUtil.getDefaultTaskInfo(); assertFalse(clusterState.exists(defaultTaskInfo.getTaskId())); verify(state, times(1)).get(anyString()); }
@Test public void shouldReturnTrueIfExists() throws IOException { ArrayList<Protos.TaskInfo> mock = Mockito.spy(new ArrayList<>()); Protos.TaskInfo defaultTaskInfo = ProtoTestUtil.getDefaultTaskInfo(); mock.add(defaultTaskInfo); when(state.get(anyString())).thenReturn(mock); assertTrue(clusterState.exists(defaultTaskInfo.getTaskId())); verify(state, atLeastOnce()).get(anyString()); }
@Test public void shouldReturnStatusWhenDoesExist() throws IOException { ArrayList<Protos.TaskInfo> taskInfos = new ArrayList<>(); taskInfos.add(ProtoTestUtil.getDefaultTaskInfo()); Protos.TaskInfo defaultTaskInfo = ProtoTestUtil.getDefaultTaskInfo(); taskInfos.add(defaultTaskInfo); when(state.get(anyString())).thenReturn(taskInfos).thenReturn(ProtoTestUtil.getDefaultTaskStatus(Protos.TaskState.TASK_FINISHED)); ESTaskStatus status = clusterState.getStatus(defaultTaskInfo.getTaskId()); assertNotNull(status); }
/** * Gets the unique identifier for the task. * * @return The universally unique identifier for the task. */ public String getId() { return info.getTaskId().getValue(); }
private void validateDaemonTaskInfo(Protos.TaskInfo daemonTaskInfo) throws TaskException { Assert.assertEquals(testDaemonName, daemonTaskInfo.getName()); Assert.assertEquals(4, daemonTaskInfo.getResourcesCount()); Assert.assertEquals(testDaemonName, TaskUtils.toTaskName(daemonTaskInfo.getTaskId())); Assert.assertTrue(daemonTaskInfo.getSlaveId().getValue().isEmpty()); for (Protos.Resource resource : daemonTaskInfo.getResourcesList()) { Assert.assertTrue(ResourceUtils.getResourceId(resource).isEmpty()); } }
@Test public void testRepairTaskIdsMissingStatus() { Protos.TaskInfo taskInfo = newTaskInfo(TestConstants.TASK_NAME); stateStore.storeTasks(ImmutableList.of(taskInfo)); StateStoreUtils.repairTaskIDs(stateStore); assertThat(stateStore.fetchTask(TestConstants.TASK_NAME).get(), is(taskInfo)); Protos.TaskStatus status = stateStore.fetchStatus(TestConstants.TASK_NAME).get(); assertThat(status.getState(), is(Protos.TaskState.TASK_FAILED)); assertThat(status.getTaskId(), is(taskInfo.getTaskId())); }
@Override public ProcessBuilder call() throws Exception { if (task.getTaskInfo().hasContainer() && task.getTaskInfo().getContainer().hasDocker()) { executorUtils.sendStatusUpdate(task.getDriver(), task.getTaskInfo().getTaskId(), TaskState.TASK_STARTING, String.format("Pulling image... (executor pid: %s)", executorPid), task.getLog()); try { dockerUtils.pull(task.getTaskInfo().getContainer().getDocker().getImage()); executorUtils.sendStatusUpdate(task.getDriver(), task.getTaskInfo().getTaskId(), TaskState.TASK_STARTING, String.format("Staging files... (executor pid: %s)", executorPid), task.getLog());