public CoordinatorStatus changeState(CoordinatorLifecycleState state) { return new CoordinatorStatus(coordinatorId, state, instanceId, internalUri, externalUri, location, instanceType); }
public CoordinatorStatusRepresentation create(CoordinatorStatus status) { return new CoordinatorStatusRepresentation( status.getCoordinatorId(), safeTruncate(status.getCoordinatorId(), shortIdPrefixSize), status.getInstanceId(), status.getState(), status.getInternalUri(), status.getExternalUri(), status.getLocation(), trimLeadingSegments(status.getLocation(), '/', commonLocationParts), status.getInstanceType(), status.getVersion()); } }
@Override public synchronized void setInternalUri(URI internalUri) { coordinatorStatus = coordinatorStatus.changeInternalUri(internalUri); }
@Override public void onFailure(Throwable t) { // error talking to coordinator -- mark coordinator offline if (coordinatorStatus.getState() != PROVISIONING && failureCount.incrementAndGet() > 5) { setStatus(coordinatorStatus.changeState(OFFLINE)); } } });
@Override public boolean apply(@Nullable CoordinatorStatus coordinatorStatus) { return coordinatorStatus != null && (predicate.apply(coordinatorStatus.getExternalUri()) || predicate.apply(coordinatorStatus.getInternalUri())); } }
@Override public List<Instance> provisionCoordinators(String coordinatorConfigSpec, int coordinatorCount, String instanceType, String availabilityZone, String ami, String keyPair, String securityGroup, String provisioningScriptsArtifact) { ImmutableList.Builder<Instance> instances = ImmutableList.builder(); for (int i = 0; i < coordinatorCount; i++) { String coordinatorInstanceId = String.format("i-%05d", nextInstanceId.incrementAndGet()); String location = String.format("/mock/%s/coordinator", coordinatorInstanceId); CoordinatorStatus coordinatorStatus = new CoordinatorStatus(null, CoordinatorLifecycleState.PROVISIONING, coordinatorInstanceId, null, null, location, instanceType); instances.add(new Instance(coordinatorStatus.getInstanceId(), coordinatorStatus.getInstanceType(), coordinatorStatus.getLocation(), null, null)); addCoordinators(coordinatorStatus); } return instances.build(); }
public CoordinatorStatus startCoordinator(String instanceId) { CoordinatorStatus coordinatorStatus = coordinators.get(instanceId); Preconditions.checkNotNull(coordinatorStatus, "coordinatorStatus is null"); String coordinatorId = UUID.randomUUID().toString(); URI internalUri = URI.create("fake:/" + coordinatorId + "/internal"); URI externalUri = URI.create("fake:/" + coordinatorId + "/external"); CoordinatorStatus newCoordinatorStatus = new CoordinatorStatus(coordinatorId, CoordinatorLifecycleState.ONLINE, instanceId, internalUri, externalUri, coordinatorStatus.getLocation(), coordinatorStatus.getInstanceType()); coordinators.put(instanceId, newCoordinatorStatus); return newCoordinatorStatus; }
private List<ListenableFuture<?>> updateAllCoordinators() { Set<String> instanceIds = newHashSet(); for (Instance instance : this.provisioner.listCoordinators()) { instanceIds.add(instance.getInstanceId()); // skip this server since it is automatically managed if (instance.getInstanceId().equals(this.coordinatorStatus.getInstanceId())) { continue; } RemoteCoordinator remoteCoordinator = remoteCoordinatorFactory.createRemoteCoordinator(instance, instance.getInternalUri() != null ? CoordinatorLifecycleState.ONLINE : CoordinatorLifecycleState.OFFLINE); RemoteCoordinator existing = coordinators.putIfAbsent(instance.getInstanceId(), remoteCoordinator); if (existing != null) { existing.setInternalUri(instance.getInternalUri()); } } // add provisioning coordinators to provisioner list for (RemoteCoordinator remoteCoordinator : coordinators.values()) { if (remoteCoordinator.status().getState() == CoordinatorLifecycleState.PROVISIONING) { instanceIds.add(coordinatorStatus.getCoordinatorId()); } } // remove any coordinators in the provisioner list coordinators.keySet().retainAll(instanceIds); List<ListenableFuture<?>> futures = new ArrayList<>(); for (RemoteCoordinator remoteCoordinator : coordinators.values()) { futures.add(remoteCoordinator.updateStatus()); } return futures; }
@Override public boolean apply(@Nullable CoordinatorStatus coordinatorStatus) { return coordinatorStatus != null && predicate.apply(coordinatorStatus.getInstanceId()); } }
@Override public void onSuccess(CoordinatorStatusRepresentation result) { // todo deal with out of order responses setStatus(result.toCoordinatorStatus(coordinatorStatus.getInstanceId(), coordinatorStatus.getInstanceType())); failureCount.set(0); }
public String apply(CoordinatorStatus input) { return input.getCoordinatorId(); } };
@Override public boolean apply(@Nullable CoordinatorStatus coordinatorStatus) { return coordinatorStatus.getState() == state; } }
URI internalUri = coordinatorStatus.getInternalUri(); if (internalUri == null) { return Futures.immediateFuture(null);
public String apply(CoordinatorStatus input) { return firstNonNull(input.getLocation(), defaultValue); } };
@GET @Produces(MediaType.APPLICATION_JSON) public Response getAllSlotsStatus() { CoordinatorStatus coordinatorStatus = coordinator.status(); CoordinatorStatusRepresentation coordinatorStatusRepresentation = CoordinatorStatusRepresentation.from(coordinatorStatus); return Response.ok(coordinatorStatusRepresentation) .header(AIRSHIP_COORDINATOR_VERSION_HEADER, coordinatorStatus.getVersion()) .build(); } }
@Override public List<Instance> provisionCoordinators(String coordinatorConfigSpec, int coordinatorCount, String instanceType, String availabilityZone, String ami, String keyPair, String securityGroup) { ImmutableList.Builder<Instance> instances = ImmutableList.builder(); for (int i = 0; i < coordinatorCount; i++) { String coordinatorInstanceId = String.format("i-%05d", nextInstanceId.incrementAndGet()); String location = String.format("/mock/%s/coordinator", coordinatorInstanceId); CoordinatorStatus coordinatorStatus = new CoordinatorStatus(null, CoordinatorLifecycleState.PROVISIONING, coordinatorInstanceId, null, null, location, instanceType); instances.add(new Instance(coordinatorStatus.getInstanceId(), coordinatorStatus.getInstanceType(), coordinatorStatus.getLocation(), null, null)); addCoordinators(coordinatorStatus); } return instances.build(); }
public CoordinatorStatus startCoordinator(String instanceId) { CoordinatorStatus coordinatorStatus = coordinators.get(instanceId); Preconditions.checkNotNull(coordinatorStatus, "coordinatorStatus is null"); String coordinatorId = UUID.randomUUID().toString(); URI internalUri = URI.create("fake:/" + coordinatorId + "/internal"); URI externalUri = URI.create("fake:/" + coordinatorId + "/external"); CoordinatorStatus newCoordinatorStatus = new CoordinatorStatus(coordinatorId, CoordinatorLifecycleState.ONLINE, instanceId, internalUri, externalUri, coordinatorStatus.getLocation(), coordinatorStatus.getInstanceType()); coordinators.put(instanceId, newCoordinatorStatus); return newCoordinatorStatus; }
public CoordinatorStatus getCoordinator(String instanceId) { if (coordinatorStatus.getInstanceId().equals(instanceId)) { return status(); } RemoteCoordinator remoteCoordinator = coordinators.get(instanceId); if (remoteCoordinator == null) { return null; } return remoteCoordinator.status(); }
@Override public boolean apply(@Nullable CoordinatorStatus coordinatorStatus) { return uuid.equals(coordinatorStatus.getCoordinatorId()); } }
@Override public Instance apply(CoordinatorStatus coordinatorStatus) { return new Instance(coordinatorStatus.getInstanceId(), coordinatorStatus.getInstanceType(), coordinatorStatus.getLocation(), coordinatorStatus.getInternalUri(), coordinatorStatus.getExternalUri()); } }));