public void task(final JobId jobId, final String host, final TaskStatus ts, final Deployment deployment) { final String goal = (deployment == null) ? "" : deployment.getGoal().toString(); final int maxContainerId = full ? Integer.MAX_VALUE : 7; final String jobIdString = full ? jobId.toString() : jobId.toShortString(); if (ts == null) { table.row(jobIdString, host, goal, "", "", ""); } else { final List<String> portMappings = new ArrayList<>(); for (final Map.Entry<String, PortMapping> entry : ts.getPorts().entrySet()) { final PortMapping portMapping = entry.getValue(); portMappings.add(String.format("%s=%d:%d", entry.getKey(), portMapping.getInternalPort(), portMapping.getExternalPort())); } String state = ts.getState().toString(); if (ts.getThrottled() != ThrottleState.NO) { state += " (" + ts.getThrottled() + ")"; } final String ports = Joiner.on(" ").join(portMappings); final String cid = truncate(fromNullable(ts.getContainerId()).or(""), maxContainerId, ""); table.row(jobIdString, host, goal, state, cid, ports); } }
private void putBack(TaskStatusEvent event) { final JobId key = event.getStatus().getJob().getId(); final Deque<TaskStatusEvent> queue = getDeque(key); synchronized (queue) { if (queue.size() >= MAX_QUEUE_SIZE) { // already full, just toss the event return; } queue.push(event); count.incrementAndGet(); } }
final JobId jobId = item.getStatus().getJob().getId(); final String historyPath = Paths.historyJobHostEventsTimestamp( jobId, hostname, item.getTimestamp()); log.debug("writing queued item to zookeeper {} {}", item.getStatus().getJob().getId(), item.getTimestamp()); client.createAndSetData(historyPath, item.getStatus().toJsonBytes());
@Override public TaskStatus call() throws Exception { final HostStatus hostStatus = client.hostStatus(testHost()).get(); final TaskStatus taskStatus = hostStatus.getStatuses().get(jobId); return (taskStatus != null && taskStatus.getContainerId() != null && taskStatus.getState() == RUNNING && !taskStatus.getContainerId().equals(firstTaskStatus.getContainerId())) ? taskStatus : null; } });
@Override public Object call() throws Exception { final JobStatus jobStatus = getOrNull(client.jobStatus(jobId)); final TaskStatus taskStatus = jobStatus.getTaskStatuses().get(host); if (taskStatus.getThrottled() == FLAPPING) { return true; } final PortMapping port = taskStatus.getPorts().get("poke"); assert port.getExternalPort() != null; poke(port.getExternalPort()); return null; } });
final String stateInfo = String.format( "(terminal job state %s, previous states: %s)", taskStatus.getState(), Joiner.on("->").join(previousJobStates)); metadata.put("jobState", taskStatus.getState()); metadata.put("previousJobStates", previousJobStates); metadata.put("throttleState", taskStatus.getThrottled()); if (taskStatus.getThrottled().equals(ThrottleState.IMAGE_MISSING)) { return opFactory.error( baseError + "due to missing Docker image " + stateInfo, metadata); if (taskStatus.getThrottled().equals(ThrottleState.IMAGE_PULL_FAILED)) { return opFactory.error( baseError + "due to failure pulling Docker image " + stateInfo, metadata); if (!Strings.isNullOrEmpty(taskStatus.getContainerError())) { return opFactory.error( baseError + stateInfo + " container error: " + taskStatus.getContainerError(), host, RollingUpdateError.TIMED_OUT_WAITING_FOR_JOB_TO_REACH_RUNNING,
@Override protected boolean matchesSafely(final TaskStatusEvent item) { return item.getStatus().getContainerId() != null; } };
final long timestamp = event.getTimestamp(); final TaskStatus status = checkNotNull(event.getStatus()); final State state = checkNotNull(status.getState()); String containerId = status.getContainerId(); containerId = containerId == null ? "<none>" : containerId; table.row(host, format.print(timestamp), state, status.getThrottled(), containerId);
@Override protected boolean matchesSafely(final TaskStatusEvent event) { final State actual = event.getStatus().getState(); for (final State state : possibleStates) { if (state == actual) { return true; } } return false; } };
chop(jobId.toShortString(), 20), chop(host, 30), ts != null ? ts.getState() : "UNKNOWN", ts != null ? ts.getThrottled() : "UNKNOWN"); out.printf("%-20s %-30s %-8s %s%n", chop(jobId.toShortString(), 20), chop(host, 30), ts.getState(), ts.getThrottled());
assertJobEquals(job, firstTaskStatus.getJob()); assertEquals(1, listContainers(dockerClient, testTag).size()); assertTrue(dockerClient.inspectContainer(firstTaskStatus.getContainerId()).state().running()); final HostStatus hostStatus = client.hostStatus(testHost()).get(); final TaskStatus taskStatus = hostStatus.getStatuses().get(jobId); if (firstTaskStatus.getState() == PULLING_IMAGE) { final State state = taskStatus.getState(); assertTrue(state == RUNNING || state == PULLING_IMAGE); } else { assertEquals(RUNNING, taskStatus.getState()); assertEquals(firstTaskStatus.getContainerId(), taskStatus.getContainerId()); assertEquals(1, listContainers(dockerClient, testTag).size()); assertTrue(dockerClient.inspectContainer(firstTaskStatus.getContainerId()).state().running()); dockerClient.killContainer(firstTaskStatus.getContainerId()); assertEquals(0, listContainers(dockerClient, testTag).size()); assertTrue(dockerClient.inspectContainer(secondTaskStatus.getContainerId()).state().running()); dockerClient.killContainer(secondTaskStatus.getContainerId()); removeContainer(dockerClient, secondTaskStatus.getContainerId()); assertTrue(dockerClient.inspectContainer(thirdTaskStatus.getContainerId()).state().running());
assertJobEquals(job, taskStatus.getJob()); docker.inspectContainer(taskStatus.getContainerId()).hostConfig();
assertTrue(portRange.contains(firstTaskStatus1.getPorts().get("foo").getExternalPort())); assertTrue(portRange.contains(firstTaskStatus2.getPorts().get("foo").getExternalPort())); assertEquals(staticMapping1, firstTaskStatus1.getPorts().get("bar")); assertEquals(staticMapping2, firstTaskStatus2.getPorts().get("bar")); assertNotEquals(firstTaskStatus1.getPorts().get("foo"), firstTaskStatus2.getPorts().get("foo")); dockerClient.killContainer(firstTaskStatus1.getContainerId()); final TaskStatus restartedTaskStatus1 = Polling.await( LONG_WAIT_SECONDS, SECONDS, new Callable<TaskStatus>() { assertEquals(firstTaskStatus1.getPorts(), restartedTaskStatus1.getPorts()); dockerClient.killContainer(firstTaskStatus2.getContainerId()); startDefaultAgent(testHost()); final TaskStatus restartedTaskStatus2 = Polling.await( assertEquals(firstTaskStatus2.getPorts(), restartedTaskStatus2.getPorts());
public void assertVolumes(final JobId jobId) throws Exception { // Wait for agent to come up awaitHostRegistered(client, testHost(), LONG_WAIT_SECONDS, SECONDS); awaitHostStatus(client, testHost(), UP, LONG_WAIT_SECONDS, SECONDS); // Deploy the job on the agent final Deployment deployment = Deployment.of(jobId, START); final JobDeployResponse deployed = client.deploy(deployment, testHost()).get(); assertEquals(JobDeployResponse.Status.OK, deployed.getStatus()); // Wait for the job to run final TaskStatus taskStatus = awaitJobState( client, testHost(), jobId, RUNNING, LONG_WAIT_SECONDS, SECONDS); assertJobEquals(job, taskStatus.getJob()); final Integer randomVolPort = taskStatus.getPorts().get("random").getExternalPort(); final Integer namedVolPort = taskStatus.getPorts().get("named").getExternalPort(); final Integer hostnamePort = taskStatus.getPorts().get("hostname").getExternalPort(); assert randomVolPort != null; assert namedVolPort != null; assert hostnamePort != null; // Read "foo" from /volume/bar and /mnt/my-volume/bar assertEquals("foo", recvUtf8(randomVolPort, 3)); assertEquals("foo", recvUtf8(namedVolPort, 3)); // Read hostname from /hostname final String hostname = getNewDockerClient().info().name(); final String mountedHostname = recvUtf8(hostnamePort, hostname.length()); assertEquals(hostname, mountedHostname); }
@Test public void testAgent() throws Exception { final JobId jobId = createAndAwaitJobRunning(); final byte[] data1 = curator.getData().forPath(Paths.statusHostJob(TEST_HOST, jobId)); assertNotNull(data1); final TaskStatus status = Json.read(data1, TaskStatus.class); assertNotNull(status); assertEquals(START, status.getGoal()); assertEquals(RUNNING, status.getState()); // stop so we can create and maintain the tombstone agent.stopAsync().awaitTerminated(); // create tombstone client.undeploy(jobId, TEST_HOST).get(); final byte[] data2 = curator.getData().forPath(Paths.statusHostJob(TEST_HOST, jobId)); assertNotNull(data2); final TaskStatus status2 = Json.read(data2, TaskStatus.class); assertNotNull(status2); assertEquals(START, status2.getGoal()); assertEquals(RUNNING, status2.getState()); }
final LogStream logs = dockerClient.logs(taskStatus.getContainerId(), stdout(), stderr()); final String log = logs.readFully(); "BAR", "deadbeef", "FOO", "4711"), status.get(testHost()).getStatuses().get(jobId).getEnv());
@Override public Object call() throws Exception { final JobStatus jobStatus = getOrNull(client.jobStatus(jobId)); final TaskStatus taskStatus = jobStatus.getTaskStatuses().get(testHost()); final PortMapping port = taskStatus.getPorts().get("poke"); assert port.getExternalPort() != null; if (poke(port.getExternalPort())) { return true; } else { return null; } } });
@Override public TaskStatus call() throws Exception { final HostStatus hostStatus = getOrNull(client.hostStatus(host)); if (hostStatus == null) { return null; } final TaskStatus taskStatus = hostStatus.getStatuses().get(jobId); return (taskStatus != null && taskStatus.getThrottled() == throttled) ? taskStatus : null; } });
public Builder asBuilder() { return newBuilder() .setJob(job) .setGoal(goal) .setState(state) .setContainerId(containerId) .setThrottled(throttled) .setPorts(ports) .setEnv(env) .setContainerError(containerError); }