/** * The default expiration time for all Task Services. */ public static long getDefaultTaskExpirationTimeInMicros() { return getExpirationTimeFromNowInMicros(EXPIRATION_MICROS); }
@Override public ServiceDocument getDocumentTemplate() { ServiceDocument d = super.getDocumentTemplate(); addServiceRequestRoute(d, Action.GET, "Do health check of services in default node group if they are available and " + "ready for replication.", null); addServiceRequestRoute(d, Action.PATCH, "Register services for health check.", NodeHealthCheckService.class); return d; } }
private void createDeleteResourceCounterSubTask(ContainerVolumeRemovalTaskState state, Collection<String> resourceLinks) { CounterSubTaskState subTaskInitState = new CounterSubTaskState(); subTaskInitState.completionsRemaining = resourceLinks.size(); subTaskInitState.documentExpirationTimeMicros = ServiceUtils .getDefaultTaskExpirationTimeInMicros(); subTaskInitState.serviceTaskCallback = ServiceTaskCallback.create( state.documentSelfLink, TaskStage.STARTED, SubStage.INSTANCES_REMOVED, TaskStage.STARTED, state.cleanupRemoval ? SubStage.INSTANCES_REMOVED : SubStage.ERROR); CounterSubTaskService.createSubTask(this, subTaskInitState, (subTaskLink) -> deleteResourceInstances(state, resourceLinks, subTaskLink)); }
@Test public void testIsExpired() { assertFalse(ServiceUtils.isExpired(null)); ServiceDocument sd = new ServiceDocument(); sd.documentExpirationTimeMicros = 0; assertFalse(ServiceUtils.isExpired(new ServiceDocument())); sd.documentExpirationTimeMicros = Utils.getSystemNowMicrosUtc() - TimeUnit.MINUTES.toMicros(1); assertTrue(ServiceUtils.isExpired(sd)); sd.documentExpirationTimeMicros = Utils.getSystemNowMicrosUtc() + TimeUnit.MINUTES.toMicros(1); assertFalse(ServiceUtils.isExpired(sd)); } }
ServiceUtils.handleExceptions(null, null); ServiceUtils.handleExceptions(null, () -> flag.set(1)); assertEquals(1, flag.get()); ServiceUtils.handleExceptions(null, () -> { throw new RuntimeException("error"); }); ServiceUtils.handleExceptions(op4, () -> flag.set(0)); assertEquals(0, flag.get()); ServiceUtils.handleExceptions(op5, () -> { flag.set(0); op5.complete(); ServiceUtils.handleExceptions(op6, () -> { flag.set(0); throw new RuntimeException("error");
private void createDeleteResourceCounterSubTask(ContainerRemovalTaskState state, Collection<String> resourceLinks) { CounterSubTaskState subTaskInitState = new CounterSubTaskState(); subTaskInitState.completionsRemaining = resourceLinks.size(); subTaskInitState.documentExpirationTimeMicros = ServiceUtils .getDefaultTaskExpirationTimeInMicros(); subTaskInitState.serviceTaskCallback = ServiceTaskCallback.create( getSelfLink(), TaskStage.STARTED, SubStage.INSTANCES_REMOVED, TaskStage.STARTED, SubStage.ERROR); CounterSubTaskService.createSubTask(this, subTaskInitState, (subTaskLink) -> deleteResourceInstances(state, resourceLinks, subTaskLink)); }
@Override public void handleStop(Operation delete) { try { if (delete.hasBody()) { T task = getBody(delete); if (ServiceUtils.isExpired(task)) { handleExpiration(task); } } } catch (Throwable t) { logWarning("Error while stopping task service [%s]: %s", getSelfLink(), Utils.toString(t)); } finally { super.handleStop(delete); } }
/** * start processing the request - first fetch the ContainerState */ private void getContainerStateAndProcess(Operation op, String id) { final String containerLink = UriUtils.buildUriPath(ContainerFactoryService.SELF_LINK, id); sendRequest(Operation .createGet(UriUtils.buildUri(getHost(), containerLink)) .setCompletion((o, ex) -> { if (ex != null) { logWarning("Container '%s' not found", containerLink); op.fail(Operation.STATUS_CODE_NOT_FOUND); return; } ServiceUtils.handleExceptions(op, () -> { ContainerState containerState = o.getBody(ContainerState.class); processInspect(containerState, () -> processStatsRequest(op, containerState)); }); })); }
private void prepareRequest(Operation op, boolean longRunningRequest) { op.forceRemote(); if (op.getExpirationMicrosUtc() == 0L) { long timeout; if (longRunningRequest) { timeout = TimeUnit.SECONDS .toMicros(ClosureProps.DOCKER_IMAGE_REQUEST_TIMEOUT_SECONDS); } else { timeout = ServiceHost.ServiceHostState.DEFAULT_OPERATION_TIMEOUT_MICROS; } op.setExpiration(ServiceUtils.getExpirationTimeFromNowInMicros(timeout)); } }
@Override public ServiceDocument getDocumentTemplate() { ServiceDocument d = super.getDocumentTemplate(); addServiceRequestRoute(d, Action.GET, "Do migration of documents from another xenon node.", MigrationRequest.class); addServiceRequestRoute(d, Action.PATCH, "Add services for migration from another xenon node.", NodeMigrationService.class); return d; } }
private void createDeleteResourceCounterSubTask(ContainerNetworkRemovalTaskState state, Collection<String> resourceLinks) { CounterSubTaskState subTaskInitState = new CounterSubTaskState(); subTaskInitState.completionsRemaining = resourceLinks.size(); subTaskInitState.documentExpirationTimeMicros = ServiceUtils .getDefaultTaskExpirationTimeInMicros(); subTaskInitState.serviceTaskCallback = ServiceTaskCallback.create( getSelfLink(), TaskStage.STARTED, SubStage.INSTANCES_REMOVED, TaskStage.STARTED, state.cleanupRemoval ? SubStage.INSTANCES_REMOVED : SubStage.ERROR); CounterSubTaskService.createSubTask(this, subTaskInitState, (subTaskLink) -> deleteResourceInstances(state, resourceLinks, subTaskLink)); }
/** * Common settings on all outgoing requests to the docker server */ protected void prepareRequest(Operation op, boolean longRunningRequest) { op.setReferer(host.getPublicUri()) .addRequestHeader(Operation.REQUEST_AUTH_TOKEN_HEADER, "") .forceRemote(); if (op.getExpirationMicrosUtc() == 0) { long timeout = longRunningRequest ? TimeUnit.SECONDS.toMicros(DOCKER_IMAGE_REQUEST_TIMEOUT_SECONDS) : TimeUnit.SECONDS.toMicros(DOCKER_REQUEST_TIMEOUT_SECONDS); op.setExpiration(ServiceUtils.getExpirationTimeFromNowInMicros(timeout)); } }
@Override public ServiceDocument getDocumentTemplate() { ServiceDocument d = super.getDocumentTemplate(); addServiceRequestRoute(d, Action.GET, String.format( "Provide the composite description documentSelfLink in URI query parameter " + "with key \"%s\" to get it's YAML definition.", SELF_LINK_PARAM_NAME), String.class); addServiceRequestRoute(d, Action.POST, "Import YAML definition of composite description. Resource reference of the " + "imported template can be acquired from \"Location\" response header.", null); return d; }
protected void createCounterSubTask(T state, long count, Enum<?> substageComplete, Consumer<String> callbackFunction) { CounterSubTaskState subTaskInitState = new CounterSubTaskState(); subTaskInitState.completionsRemaining = count; subTaskInitState.documentExpirationTimeMicros = ServiceUtils .getDefaultTaskExpirationTimeInMicros(); subTaskInitState.serviceTaskCallback = ServiceTaskCallback.create( getSelfLink(), TaskStage.STARTED, substageComplete, TaskStage.STARTED, DefaultSubStage.ERROR); CounterSubTaskService.createSubTask(this, subTaskInitState, callbackFunction); }
@Override public void handlePatch(Operation patch) { DockerImage requestedImageState = patch.getBody(DockerImage.class); DockerImage currentImageState = this.getState(patch); if (requestedImageState.taskInfo != null) { currentImageState.taskInfo = requestedImageState.taskInfo; } if (TaskState.isFailed(currentImageState.taskInfo)) { if (currentImageState.documentExpirationTimeMicros <= 0) { currentImageState.documentExpirationTimeMicros = ServiceUtils .getExpirationTimeFromNowInMicros(TimeUnit .SECONDS.toMicros(ClosureProps.KEEP_FAILED_BUILDS_TIMEOUT_SECONDS)); } } else { currentImageState.lastAccessedTimeMillis = System.currentTimeMillis(); currentImageState.documentExpirationTimeMicros = requestedImageState.documentExpirationTimeMicros; currentImageState.imageDetails = requestedImageState.imageDetails; } this.setState(patch, currentImageState); patch.complete(); }
@Override public ServiceDocument getDocumentTemplate() { ServiceDocument d = super.getDocumentTemplate(); addServiceRequestRoute(d, Action.GET, "Use the service URL to get all elastic placement zones." + " Append the resource pool link to this service URL to retrieve the" ServiceDocumentQueryResult.class); addServiceRequestRoute(d, Action.POST, "Post a valid ElasticPlacementZoneConfigurationState with no document" + " self links to create a resource pool and optionally a corresponding" ElasticPlacementZoneConfigurationState.class); addServiceRequestRoute(d, Action.PATCH, "Send a valid ElasticPlacementZoneConfigurationState to update the" + " resource pool and optionally the elastic placement zone. PATCH is done for the" ElasticPlacementZoneConfigurationState.class); addServiceRequestRoute(d, Action.DELETE, "Append the resource pool link to this service URL to delete the placement" + " zone (both the resource pool and its corresponding EPZ state will be deleted). "
private boolean validateNewState(T state, Operation startPost) { if (state.documentVersion > 0) { logWarning("Document version on create is : %s", state.documentVersion); return false; } if (state.serviceTaskCallback == null) { state.serviceTaskCallback = ServiceTaskCallback.createEmpty(); } if (state.taskInfo == null) { state.taskInfo = new TaskState(); state.taskInfo.stage = TaskStage.CREATED; } if (state.taskSubStage == null) { state.taskSubStage = Enum.valueOf(subStageType, DefaultSubStage.CREATED.name()); } if (state.documentExpirationTimeMicros == 0) { state.documentExpirationTimeMicros = ServiceUtils .getDefaultTaskExpirationTimeInMicros(); } return validateStateOnStart(state, startPost); }
public void ping(KubernetesContext context, CompletionHandler completionHandler) { URI uri = UriUtils.buildUri(context.host.address + KubernetesHostConstants.KUBERNETES_HOST_HEALTH_PATH); Operation op = Operation .createGet(uri) .setCompletion(completionHandler); prepareRequest(op, context); op.setExpiration(ServiceUtils.getExpirationTimeFromNowInMicros( TimeUnit.SECONDS.toMicros(10))); serviceClient.send(op); }
@Override public ServiceDocument getDocumentTemplate() { ServiceDocument d = super.getDocumentTemplate(); addServiceRequestRoute(d, Action.GET, String.format("Get container logs. Provide the ContainerState id in URI query " + "parameter with key \"%s\".", CONTAINER_ID_QUERY_PARAM), LogServiceState.class); return d; }
private PlacementHostSelectionTaskState createHostPlacementTask(String containerDescLink, int resourceCount, boolean expectError) throws Throwable { PlacementHostSelectionTaskState placementTask = new PlacementHostSelectionTaskState(); placementTask.documentSelfLink = UUID.randomUUID().toString(); placementTask.resourceDescriptionLink = containerDescLink; placementTask.resourcePoolLinks = new ArrayList<>(); placementTask.resourcePoolLinks.add(resourcePool.documentSelfLink); placementTask.resourceCount = resourceCount; placementTask.resourceType = ResourceType.CONTAINER_TYPE.getName(); placementTask.contextId = contextId; placementTask.serviceTaskCallback = ServiceTaskCallback.createEmpty(); placementTask.documentExpirationTimeMicros = ServiceUtils .getDefaultTaskExpirationTimeInMicros(); return placeTask(placementTask, expectError); }