operations.add(delete(node)); operations.add(delete(Paths.configJobHost(job, host))); operations.add(delete(s)); operations.add(delete(Paths.configHostJobs(host))); operations.add(delete(node)); operations.add(delete(Paths.configHostPort(host, Integer.valueOf(port)))); operations.add(delete(Paths.configHostPorts(host))); operations.add(delete(idPath)); operations.add(delete(Paths.configHost(host)));
operations.add(delete(Paths.statusDeploymentGroupTasks(deploymentGroup.getName()))); operations.add(set(Paths.statusDeploymentGroup(deploymentGroup.getName()), status));
public RollingUpdateOp nextTask(final List<ZooKeeperOperation> operations) { final List<ZooKeeperOperation> ops = Lists.newArrayList(operations); final List<Map<String, Object>> events = Lists.newArrayList(); final RolloutTask task = tasks.getRolloutTasks().get(tasks.getTaskIndex()); // Update the task index, delete tasks if done if (tasks.getTaskIndex() + 1 == tasks.getRolloutTasks().size()) { final DeploymentGroupStatus status = DeploymentGroupStatus.newBuilder() .setState(DONE) .build(); // We are done -> delete tasks & update status ops.add(delete(Paths.statusDeploymentGroupTasks(deploymentGroup.getName()))); ops.add(set(Paths.statusDeploymentGroup(deploymentGroup.getName()), status)); // Emit an event signalling that we're DONE! events.add(eventFactory.rollingUpdateDone(deploymentGroup)); } else { ops.add( set(Paths.statusDeploymentGroupTasks(deploymentGroup.getName()), tasks.toBuilder() .setTaskIndex(tasks.getTaskIndex() + 1) .build())); // Only emit an event if the task resulted in taking in action. If there are no ZK operations // the task was effectively a no-op. if (!operations.isEmpty()) { events.add(eventFactory.rollingUpdateTaskSucceeded(deploymentGroup, task)); } } return new RollingUpdateOp(ImmutableList.copyOf(ops), ImmutableList.copyOf(events)); }
return ImmutableList.of(delete(nodes));
client.transaction(delete(nodes));
operations.add(delete(path));
.setState(DONE) .build(); ops.add(delete(Paths.statusDeploymentGroupTasks(deploymentGroup.getName()))); events.add(eventFactory.rollingUpdateDone(deploymentGroup)); } else {
operations.add(delete(node)); operations.add(delete(Paths.configJobHost(job, host))); operations.add(delete(s)); operations.add(delete(Paths.configHostJobs(host))); operations.add(delete(node)); operations.add(delete(Paths.configHostPort(host, Integer.valueOf(port)))); operations.add(delete(Paths.configHostPorts(host))); operations.add(delete(idPath)); operations.add(delete(Paths.configHost(host)));
private List<ZooKeeperOperation> getUndeployOperations(final ZooKeeperClient client, final String host, final JobId jobId, final String token) throws HostNotFoundException, JobNotDeployedException, TokenVerificationException { assertHostExists(client, host); final Deployment deployment = getDeployment(host, jobId); if (deployment == null) { throw new JobNotDeployedException(host, jobId); } final Job job = getJob(client, jobId); verifyToken(token, job); final String configHostJobPath = Paths.configHostJob(host, jobId); try { // use listRecursive to remove both job node and its child creation node final List<String> nodes = newArrayList(reverse(client.listRecursive(configHostJobPath))); nodes.add(Paths.configJobHost(jobId, host)); final List<Integer> staticPorts = staticPorts(job); for (int port : staticPorts) { nodes.add(Paths.configHostPort(host, port)); } return ImmutableList.of(delete(nodes)); } catch (NoNodeException e) { // This method is racy since it's possible someone undeployed the job after we called // getDeployment and checked the job exists. If we now discover the job is undeployed, // throw an exception and handle it the same as if we discovered this earlier. throw new JobNotDeployedException(host, jobId); } catch (KeeperException e) { throw new HeliosRuntimeException("calculating undeploy operations failed", e); } }
client.transaction(delete(nodes));