public static TaskState createDirect() { TaskState state = new TaskState(); state.stage = TaskStage.CREATED; state.isDirect = true; return state; }
@Override protected EndpointRemovalTaskState validateStartPost(Operation taskOperation) { EndpointRemovalTaskState task = super.validateStartPost(taskOperation); if (task == null) { return null; } if (TaskState.isCancelled(task.taskInfo) || TaskState.isFailed(task.taskInfo) || TaskState.isFinished(task.taskInfo)) { return null; } if (!ServiceHost.isServiceCreate(taskOperation)) { return task; } if (task.endpointLink == null) { taskOperation.fail(new IllegalArgumentException("endpointLink is required")); return null; } return task; }
private boolean isBuildImageExpired(DockerImage imageRequest) { if (imageRequest == null || imageRequest.lastAccessedTimeMillis == null) { return false; } if (TaskState.isInProgress(imageRequest.taskInfo)) { return false; } long timeout = TimeUnit.SECONDS.toMillis(ClosureProps.BUILD_IMAGE_EXPIRE_TIMEOUT_SECONDS); long timeElapsed = System.currentTimeMillis() - imageRequest.lastAccessedTimeMillis; if (timeElapsed >= timeout) { logInfo("Timeout elapsed = %s ms, timeout = %s ms of imageRequest = %s", timeElapsed, timeout, imageRequest.documentSelfLink); return true; } return false; }
private void processQuery(QueryTask q, Consumer<ServiceDocumentQueryElementResult<T>> handler) { if (TaskState.isFailed(q.taskInfo)) { handler.accept(error(new IllegalStateException( q.taskInfo.failure.message))); if (q.taskInfo.isDirect || TaskState.isFinished(q.taskInfo)) { processQueryResult(q, handler); return; if (!TaskState.isFinished(rsp.taskInfo)) { host.log(Level.FINE, "Resource query not complete yet, retrying...");
public boolean validateStageTransition(Operation patch, SnapshotTaskState patchBody, SnapshotTaskState currentState) { if (patchBody.taskInfo != null && patchBody.taskInfo.failure != null) { logWarning(() -> String.format("Task failed: %s", Utils.toJson(patchBody.taskInfo.failure))); currentState.taskInfo.failure = patchBody.taskInfo.failure; } else { if (patchBody.taskInfo == null || patchBody.taskInfo.stage == null) { patch.fail(new IllegalArgumentException( "taskInfo and taskInfo.stage are required")); return true; } } logFine(() -> String.format("Current: %s. New: %s", currentState.taskInfo.stage, patchBody.taskInfo.stage)); if (TaskState.isFailed(currentState.taskInfo) || TaskState.isCancelled(currentState.taskInfo)) { patch.fail(new IllegalStateException( "task in failed state, can not transition to " + patchBody.taskInfo.stage)); return true; } // update current stage to new stage currentState.taskInfo.stage = patchBody.taskInfo.stage; adjustStat(patchBody.taskInfo.stage.toString(), 1); return false; }
state.taskInfo = new TaskState(); if (TaskState.isFinished(state.taskInfo)) {
private boolean isImageReady(Operation patch) { ServiceTaskCallback.ServiceTaskCallbackResponse callbackResponse = patch .getBody(ServiceTaskCallback.ServiceTaskCallbackResponse.class); TaskState taskInfo = callbackResponse.taskInfo; return TaskState.isFinished(taskInfo); }
@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(); }
if (DefaultSubStage.ERROR.name().equals(body.subStage) || TaskStage.FAILED.name().equals(body.subStage) || TaskState.isFailed(body.taskInfo)) { state.taskInfo = TaskState.createAsFailed(); } else { state.taskInfo = TaskState.createAsFinished();
return TaskState.isFailed(status.taskInfo) && status.progress.intValue() < 100; }); requestStatus.taskInfo = TaskState.createAsStarted(); requestStatus.progress = 100; requestStatus.subStage = DefaultSubStage.ERROR.name(); requestStatus.taskInfo = TaskState.createAsFinished(); doOperation(requestStatus, UriUtils.buildUri(host, getRequestStatus(requestId).documentSelfLink), assertTrue(TaskState.isFailed(finalStatus.taskInfo));
@Override public void handleStart(Operation startPost) { State initState = getBody(startPost); logInfo("Starting migration with initState: %s", initState); initState = initialize(initState); if (TaskState.isFinished(initState.taskInfo)) { startPost.complete(); return; } if (!verifyState(initState, startPost)) { return; } startPost.complete(); State patchState = new State(); if (initState.taskInfo == null) { patchState.taskInfo = TaskState.create(); } if (initState.continuousMigration) { setMaintenanceIntervalMicros(initState.maintenanceIntervalMicros); } if (initState.taskInfo.stage == TaskStage.CANCELLED) { logInfo("In stage %s, will restart on next maintenance interval", initState.taskInfo.stage); return; } Operation.createPatch(getUri()) .setBody(patchState) .sendWith(this); }
@Test public void testRequestStatusShouldNotBeModifiedAfterCompletion() throws Throwable { ContainerDescription desc1 = TestRequestStateFactory.createContainerDescription("name1"); desc1.portBindings = null; ContainerDescription desc2 = TestRequestStateFactory.createContainerDescription("name2"); desc2.portBindings = null; desc2.affinity = new String[] { desc1.name }; CompositeDescription compositeDesc = createCompositeDesc(desc1, desc2); RequestStatus requestStatus = verifyRequestStatus(compositeDesc.documentSelfLink, ResourceType.COMPOSITE_COMPONENT_TYPE); assertEquals(compositeDesc.name, requestStatus.name); String compositionTaskLink = UriUtils.buildUriPath(CompositionTaskFactoryService.SELF_LINK, extractId(requestStatus.documentSelfLink)); CompositionTaskState compositionTaskState = getDocument(CompositionTaskState.class, compositionTaskLink); assertNotNull(compositionTaskState); assertEquals(1, requestStatus.resourceLinks.size()); assertEquals(compositionTaskState.compositeComponentLink, requestStatus.resourceLinks.iterator().next()); // The request is already finished the patch should not change the state requestStatus.taskInfo = TaskState.createAsStarted(); doOperation(requestStatus, UriUtils.buildUri(host, requestStatus.documentSelfLink), false, Action.PATCH); RequestStatus finalStatus = getRequestStatus(requestId); assertTrue(TaskState.isFinished(finalStatus.taskInfo)); }
private SynchronizationTaskService.State createSynchronizationTaskState( Long membershipUpdateTimeMicros, String factoryLink, Class<? extends ServiceDocument> type) { SynchronizationTaskService.State task = new SynchronizationTaskService.State(); task.documentSelfLink = UriUtils.convertPathCharsFromLink(factoryLink); task.factorySelfLink = factoryLink; task.factoryStateKind = Utils.buildKind(type); task.membershipUpdateTimeMicros = membershipUpdateTimeMicros; task.nodeSelectorLink = ServiceUriPaths.DEFAULT_NODE_SELECTOR; task.queryResultLimit = 1000; task.taskInfo = TaskState.create(); task.taskInfo.isDirect = true; return task; }
/** * Patch the task state to finished. */ private void patchToFinished(Long lastUpdateTime) { State patch = new State(); patch.taskInfo = TaskState.createAsFinished(); if (lastUpdateTime != null) { patch.latestSourceUpdateTimeMicros = lastUpdateTime; } Operation.createPatch(getUri()).setBody(patch).sendWith(this); }
private void handleBaseDockerBuildImageRequest(ContainerDescription containerDesc, AdmiralAdapterTaskState state, DockerImage imageRequest, int retriesCount) { if (TaskState.isFinished(imageRequest.taskInfo)) { } else if (TaskState.isFailed(imageRequest.taskInfo)) { AtomicInteger retryCount = new AtomicInteger(retriesCount); ensurePropertyExists((retryCountProperty) -> {
public boolean validateStageTransition(Operation patch, SnapshotTaskState patchBody, SnapshotTaskState currentState) { if (patchBody.taskInfo != null && patchBody.taskInfo.failure != null) { logWarning(() -> String.format("Task failed: %s", Utils.toJson(patchBody.taskInfo.failure))); currentState.taskInfo.failure = patchBody.taskInfo.failure; } else { if (patchBody.taskInfo == null || patchBody.taskInfo.stage == null) { patch.fail(new IllegalArgumentException( "taskInfo and taskInfo.stage are required")); return true; } } logFine(() -> String.format("Current: %s. New: %s", currentState.taskInfo.stage, patchBody.taskInfo.stage)); if (TaskState.isFailed(currentState.taskInfo) || TaskState.isCancelled(currentState.taskInfo)) { patch.fail(new IllegalStateException( "task in failed state, can not transition to " + patchBody.taskInfo.stage)); return true; } // update current stage to new stage currentState.taskInfo.stage = patchBody.taskInfo.stage; adjustStat(patchBody.taskInfo.stage.toString(), 1); return false; }
state.taskInfo = new TaskState(); if (TaskState.isFinished(state.taskInfo)) {
if (TaskState.isFinished(currentTask.taskInfo)) { setFactoryAvailability(currentTask, true, (o) -> put.fail(Operation.STATUS_CODE_BAD_REQUEST, e, rsp), null);
.getBody(ProvisionNetworkTaskState.class); if (TaskState.isFailed(patchState.taskInfo)) { currState.taskInfo = patchState.taskInfo;
private SynchronizationTaskService.State createSynchronizationTaskState( Long membershipUpdateTimeMicros, String factoryLink, Class<? extends ServiceDocument> type) { SynchronizationTaskService.State task = new SynchronizationTaskService.State(); task.documentSelfLink = UriUtils.convertPathCharsFromLink(factoryLink); task.factorySelfLink = factoryLink; task.factoryStateKind = Utils.buildKind(type); task.membershipUpdateTimeMicros = membershipUpdateTimeMicros; task.nodeSelectorLink = ServiceUriPaths.DEFAULT_NODE_SELECTOR; task.queryResultLimit = 1000; task.taskInfo = TaskState.create(); task.taskInfo.isDirect = true; return task; }