@Override public FinishTaskRequest deserialize(JsonElement json, Type type, JsonDeserializationContext context) throws JsonParseException { JsonObject jsonObj = json.getAsJsonObject(); String workerId = context.deserialize(jsonObj.get("workerId"), String.class); String provisionerId = context.deserialize(jsonObj.get("provisionerId"), String.class); String tenantId = context.deserialize(jsonObj.get("tenantId"), String.class); String taskId = context.deserialize(jsonObj.get("taskId"), String.class); String stdout = context.deserialize(jsonObj.get("stdout"), String.class); String stderr = context.deserialize(jsonObj.get("stderr"), String.class); Integer status = context.deserialize(jsonObj.get("status"), Integer.class); String hostname = context.deserialize(jsonObj.get("hostname"), String.class); Map<String, String> ipAddresses = context.deserialize(jsonObj.get("ipaddresses"), new TypeToken<Map<String, String>>() { }.getType()); JsonObject result = context.deserialize(jsonObj.get("result"), JsonObject.class); return new FinishTaskRequest(workerId, provisionerId, tenantId, taskId, stdout, stderr, status, hostname, ipAddresses, result); } }
} else { node.addResults(finish.getResult()); Map<String, String> ipAddresses = finish.getIpaddresses(); if (ipAddresses != null) { node.getProperties().setIpaddresses(ipAddresses); String hostname = finish.getHostname(); if (hostname != null && !hostname.isEmpty()) { node.getProperties().setHostname(hostname); nodeService.failAction(node, finish.getStdout(), finish.getStderr());
String workerId = finishRequest.getWorkerId(); String queueName = finishRequest.getTenantId(); String taskId = finishRequest.getTaskId(); String provisionerId = finishRequest.getProvisionerId(); String consumerId = provisionerId + "." + workerId; int status = finishRequest.getStatus(); if (status == 0) { LOG.debug("Successful finish of the task reported. Task {} by worker {}", taskId, workerId);
responder.sendError(HttpResponseStatus.BAD_REQUEST, e.getMessage()); } catch (IOException e) { LOG.error("Exception finishing task {}.", finishRequest.getTaskId(), e); responder.sendError(HttpResponseStatus.INTERNAL_SERVER_ERROR, "Error finishing task " + finishRequest.getTaskId()); } catch (MissingEntityException e) { responder.sendError(HttpResponseStatus.FORBIDDEN, "Provisioner " + finishRequest.getProvisionerId() + " is not registered.");
@Test public void testFinishTaskForDeadProvisionerErrors() throws Exception { FinishTaskRequest finishRequest = new FinishTaskRequest("workerX", "nonexistant-provider", "tenantY", "taskId", "stdout", "stderr", 0, null, null, null); assertResponseStatus(doPostInternalAPI("/tasks/finish", gson.toJson(finishRequest)), HttpResponseStatus.FORBIDDEN); }
); FinishTaskRequest finishRequest = new FinishTaskRequest("workerX", PROVISIONER_ID, tenantId, task.getTaskId(), null, null, 0, null, ipAddresses, result);
new FinishTaskRequest("worker1", PROVISIONER_ID, tenantId, clusterTask.getTaskId(), "some stdout", "some stderr", 0, null, null, provisionerResult); TestHelper.finishTask(getBaseUrlInternalAPI(), finishRequest);
private void testCallbacks(boolean failJob) throws Exception { ClusterScheduler clusterScheduler = injector.getInstance(ClusterScheduler.class); String tenantId = cluster.getAccount().getTenantId(); clusterQueues.add(tenantId, new Element(cluster.getId(), ClusterAction.CLUSTER_CREATE.name())); clusterScheduler.run(); CallbackScheduler callbackScheduler = injector.getInstance(CallbackScheduler.class); // should be no job in the queue until the start callback runs Assert.assertEquals(0, jobQueues.size(tenantId)); waitForCallback(callbackScheduler); Assert.assertEquals(CallbackData.Type.START, mockClusterCallback.getReceivedCallbacks().get(0).getType()); JobScheduler jobScheduler = injector.getInstance(JobScheduler.class); jobScheduler.run(); // take tasks until there are no more TakeTaskRequest takeRequest = new TakeTaskRequest("consumer1", PROVISIONER_ID, tenantId); SchedulableTask task = TestHelper.takeTask(getInternalServerUrl(), takeRequest); while (task != null) { FinishTaskRequest finishRequest = new FinishTaskRequest("consumer1", PROVISIONER_ID, tenantId, task.getTaskId(), null, null, failJob ? 1 : 0, null, null, null); TestHelper.finishTask(getInternalServerUrl(), finishRequest); jobScheduler.run(); jobScheduler.run(); task = TestHelper.takeTask(getInternalServerUrl(), takeRequest); } jobScheduler.run(); waitForCallback(callbackScheduler); // at this point, the failure callback should have run Assert.assertEquals(failJob ? CallbackData.Type.FAILURE : CallbackData.Type.SUCCESS, mockClusterCallback.getReceivedCallbacks().get(1).getType()); }
Map<String, String> ipAddresses = ImmutableMap.of("access", "123.456.789.123"); FinishTaskRequest finishRequest = new FinishTaskRequest("consumer1", PROVISIONER_ID, tenantId, task.getTaskId(), null, null, 0, null, ipAddresses, result); TestHelper.finishTask(getInternalServerUrl(), finishRequest); result = new JsonObject(); ipAddresses = ImmutableMap.of("access", "456.789.123.123"); finishRequest = new FinishTaskRequest("consumer1", PROVISIONER_ID, tenantId, task.getTaskId(), null, null, 0, null, ipAddresses, result); TestHelper.finishTask(getInternalServerUrl(), finishRequest);
result.addProperty("ipaddress", "111.222.333." + i); FinishTaskRequest finishRequest = new FinishTaskRequest("workerX", PROVISIONER_ID, tenantId, task.getTaskId(), null, null, 0, null, null, result); Assert.assertEquals("CONFIRM", task.getTaskName()); finishRequest = new FinishTaskRequest("workerX", PROVISIONER_ID, tenantId, task.getTaskId(), null, null, 1, null, null, result); TestHelper.finishTask(getBaseUrlInternalAPI(), finishRequest); finishRequest = new FinishTaskRequest("workerX", PROVISIONER_ID, tenantId, task.getTaskId(), null, null, 0, null, null, result);
Map<String, String> ipAddresses = ImmutableMap.of("access", "123.456.789.123"); FinishTaskRequest finishRequest = new FinishTaskRequest("consumer1", PROVISIONER_ID, tenantId, task.getTaskId(), null, null, 0, null, ipAddresses, result); TestHelper.finishTask(getInternalServerUrl(), finishRequest); result = new JsonObject(); ipAddresses = ImmutableMap.of("access", "456.789.123.123"); finishRequest = new FinishTaskRequest("consumer1", PROVISIONER_ID, tenantId, task.getTaskId(), null, null, 0, null, ipAddresses, result); TestHelper.finishTask(getInternalServerUrl(), finishRequest); finishRequest = new FinishTaskRequest("consumer1", PROVISIONER_ID, tenantId, task.getTaskId(), null, null, 0, null, null, null); TestHelper.finishTask(getInternalServerUrl(), finishRequest);
new FinishTaskRequest("worker1", PROVISIONER_ID, tenantId, clusterTask.getTaskId(), "some stdout", "some stderr", 1, null, null, null); TestHelper.finishTask(getBaseUrlInternalAPI(), finishRequest);
result.addProperty("ipaddress", "111.222.333." + i); FinishTaskRequest finishRequest = new FinishTaskRequest("workerX", PROVISIONER_ID, tenantId, task.getTaskId(), null, null, 1, null, null, result);
new FinishTaskRequest("workerX", PROVISIONER_ID, tenantId, task.getTaskId(), null, null, 0, null, null, null);
result.addProperty("ipaddress", "111.222.333." + i); FinishTaskRequest finishRequest = new FinishTaskRequest("workerX", PROVISIONER_ID, tenantId, task.getTaskId(), null, null, 0, null, null, result);
result.addProperty("ipaddress", "111.222.333." + i); FinishTaskRequest finishRequest = new FinishTaskRequest("workerX", PROVISIONER_ID, tenantId, task.getTaskId(), null, null, 0, null, null, result);