@Override public Service createServiceInstance() throws Throwable { return new ContainerOperationTaskService(); } }
@Override protected void handleStartedStagePatch(ContainerOperationTaskState state) { switch (state.taskSubStage) { case CREATED: queryContainerResources(state); break; case COMPLETED: complete(); break; case ERROR: completeWithError(); break; default: break; } }
private void performResourceOperations(ContainerOperationTaskState state, Collection<ContainerState> resources, ServiceTaskCallback taskCallback) { if (taskCallback == null) { createCounterSubTaskCallback(state, resources.size(), true, (serviceTask) -> performResourceOperations(state, resources, serviceTask)); return; } try { logInfo("Starting %s of %d container resources", state.operation, resources.size()); for (ContainerState container : resources) { createAdapterRequest(state, container, taskCallback); } } catch (Throwable e) { failTask("Unexpected exception while requesting operation: " + state.operation, e); } }
private void queryContainerResources(ContainerOperationTaskState state) { QueryTask computeQuery = createResourcesQuery(ContainerState.class, state.resourceLinks); ServiceDocumentQuery<ContainerState> query = new ServiceDocumentQuery<>(getHost(), ContainerState.class); final List<ContainerState> documents = new ArrayList<>(state.resourceLinks.size()); query.query(computeQuery, (r) -> { if (r.hasException()) { failTask("Failure retrieving query results", r.getException()); } else if (r.hasResult()) { if (isSystemContainer(r.getResult())) { failTask(null, new LocalizableValidationException( "Day2 operations are not supported for system container", "request.system.container.day2")); } documents.add(r.getResult()); } else { if (documents.isEmpty()) { if (ContainerOperationType.DELETE.id.equals(state.operation)) { logWarning("No resources found to be removed with links: %s", state.resourceLinks); proceedTo(SubStage.COMPLETED); } else { failTask("No available resources", null); } } else { performResourceOperations(state, documents, null); } } }); }
private void createAdapterRequest(ContainerOperationTaskState state, ContainerState containerState, ServiceTaskCallback taskCallback) { AdapterRequest adapterRequest = new AdapterRequest(); String selfLink = containerState.documentSelfLink; adapterRequest.resourceReference = UriUtils.buildUri(getHost(), selfLink); adapterRequest.serviceTaskCallback = taskCallback; adapterRequest.operationTypeId = state.operation; adapterRequest.customProperties = state.customProperties; sendRequest(Operation.createPatch(getHost(), containerState.adapterManagementReference.toString()) .setBody(adapterRequest) .setContextId(getSelfId()) .setCompletion((o, e) -> { if (e != null) { failTask("AdapterRequest failed for container: " + selfLink, e); return; } else { patchContainerStats(state, containerState); } })); }