private void getContainerDescription(RequestBrokerState state, Consumer<ContainerDescription> callbackFunction) { sendRequest(Operation.createGet(this, state.resourceDescriptionLink) .setCompletion((o, e) -> { if (e != null) { String errMsg = String.format( "Failure retrieving container description state: %s ", state.resourceDescriptionLink); failTask(errMsg, e); return; } ContainerDescription desc = o.getBody(ContainerDescription.class); callbackFunction.accept(desc); })); }
private void getContainerVolumeDescription(RequestBrokerState state, Consumer<ContainerVolumeDescription> callbackFunction) { sendRequest(Operation.createGet(this, state.resourceDescriptionLink) .setCompletion((o, e) -> { if (e != null) { String errMsg = String.format( "Failure retrieving container volume description state: %s ", state.resourceDescriptionLink); failTask(errMsg, e); return; } ContainerVolumeDescription desc = o.getBody(ContainerVolumeDescription.class); callbackFunction.accept(desc); })); }
/** * Calls given callback if document does not exist. This utility method is used to create new * task only if it has not been created yet. */ private void createNewIfNotExist(String taskLink, Runnable callback) { sendRequest(Operation .createGet(this, taskLink) .setCompletion((o, e) -> { if (o.getStatusCode() == Operation.STATUS_CODE_NOT_FOUND) { callback.run(); return; } if (e != null) { failTask("Fail: " + e.getMessage(), e); return; } logInfo("Task %s is already started.", taskLink); })); }
private void createPKSClusterResizeOperation(RequestBrokerState state) { String link = buildUriPath(PKSClusterResizeTaskService.FACTORY_LINK, getSelfId()); createNewIfNotExist(link, () -> { PKSClusterResizeTaskState task = new PKSClusterResizeTaskState(); task.documentSelfLink = getSelfId(); task.serviceTaskCallback = ServiceTaskCallback.create( state.documentSelfLink, TaskStage.STARTED, SubStage.COMPLETED, TaskStage.STARTED, SubStage.REQUEST_FAILED); task.customProperties = state.customProperties; task.resourceLink = state.resourceLinks.iterator().next(); task.tenantLinks = state.tenantLinks; task.requestTrackerLink = state.requestTrackerLink; // calculate task expiration to be shortly before parent task expiration task.documentExpirationTimeMicros = calculatePKSTaskExpirationTime(state); sendRequest(Operation .createPost(this, PKSClusterResizeTaskService.FACTORY_LINK) .setBodyNoCloning(task) .setContextId(getSelfId()) .setCompletion((o, e) -> { if (e != null) { failTask("Failure in creating PKS resource resize task", e); return; } })); }); }
@Override public void handleDelete(Operation delete) { RequestBrokerState state = getState(delete); if (state.requestTrackerLink != null && !state.requestTrackerLink.isEmpty()) { sendRequest(Operation.createDelete(this, state.requestTrackerLink) .setBodyNoCloning(new ServiceDocument()) .setCompletion((o, e) -> { if (Operation.STATUS_CODE_NOT_FOUND == o.getStatusCode()) { logWarning("Request status not found: %s", state.requestTrackerLink); } else if (e != null) { logWarning("Exception while deleting request status: %s. Error: %s", state.requestTrackerLink, Utils.toString(e)); } else { logFine("Request status %s deleted.", state.requestTrackerLink); } })); } super.handleDelete(delete); }
eventLog.tenantLinks = state.tenantLinks; sendRequest(Operation.createPost(this, EventLogService.FACTORY_LINK) .setBodyNoCloning(eventLog) .setCompletion((o, e) -> {
private void createClosureProvisionTask(RequestBrokerState state) { ClosureProvisionTaskState allocationTask = new ClosureProvisionTaskState(); allocationTask.documentSelfLink = getSelfId(); allocationTask.serviceTaskCallback = ServiceTaskCallback.create( state.documentSelfLink, TaskStage.STARTED, SubStage.COMPLETED, TaskStage.STARTED, SubStage.REQUEST_FAILED); allocationTask.customProperties = state.customProperties; allocationTask.resourceDescriptionLink = state.resourceDescriptionLink; allocationTask.resourceLinks = state.resourceLinks; allocationTask.tenantLinks = state.tenantLinks; allocationTask.requestTrackerLink = state.requestTrackerLink; sendRequest(Operation .createPost(this, ClosureProvisionTaskService.FACTORY_LINK) .setBodyNoCloning(allocationTask) .setContextId(getSelfId()) .setCompletion((o, e) -> { if (e != null) { failTask("Failure creating resource provisioning task", e); return; } })); }
private void doCreateReservationTasks(RequestBrokerState state, ContainerDescription containerDescription) { ReservationTaskState rsrvTask = new ReservationTaskState(); rsrvTask.documentSelfLink = getSelfId(); rsrvTask.serviceTaskCallback = ServiceTaskCallback.create(getSelfLink(), TaskStage.STARTED, SubStage.RESERVED, TaskStage.STARTED, SubStage.ERROR); rsrvTask.resourceCount = state.actualResourceCount; rsrvTask.tenantLinks = state.tenantLinks; rsrvTask.resourceType = state.resourceType; rsrvTask.resourceDescriptionLink = state.resourceDescriptionLink; rsrvTask.customProperties = mergeCustomProperties( state.customProperties, containerDescription.customProperties); rsrvTask.requestTrackerLink = state.requestTrackerLink; if (state.groupResourcePlacementLink != null) { rsrvTask.groupResourcePlacementLink = state.groupResourcePlacementLink; rsrvTask.taskSubStage = ReservationTaskState.SubStage.RESERVATION_SELECTED; rsrvTask.resourcePoolsPerGroupPlacementLinks = new LinkedHashMap<>(0); } sendRequest(Operation.createPost(this, ReservationTaskFactoryService.SELF_LINK) .setBodyNoCloning(rsrvTask) .setContextId(getSelfId()) .setCompletion((o, e) -> { if (e != null) { failTask("Failure creating reservation task", e); return; } proceedTo(SubStage.RESERVING); })); }
private void createComputeRemovalTask(RequestBrokerState state, boolean skipReleaseResourceQuota) { boolean errorState = state.taskSubStage == SubStage.REQUEST_FAILED || state.taskSubStage == SubStage.RESERVATION_CLEANED_UP; if (state.resourceLinks == null || state.resourceLinks.isEmpty()) { proceedTo(errorState ? SubStage.ERROR : SubStage.ALLOCATED); return; } ComputeRemovalTaskState computeRemovalState = new ComputeRemovalTaskState(); computeRemovalState.resourceLinks = state.resourceLinks; computeRemovalState.serviceTaskCallback = ServiceTaskCallback.create( getSelfLink(), TaskStage.STARTED, errorState ? SubStage.ERROR : SubStage.ALLOCATED, TaskStage.FAILED, SubStage.ERROR); computeRemovalState.documentSelfLink = getSelfId(); computeRemovalState.tenantLinks = state.tenantLinks; computeRemovalState.customProperties = state.customProperties; computeRemovalState.skipReleaseResourceQuota = skipReleaseResourceQuota; computeRemovalState.requestTrackerLink = state.requestTrackerLink; sendRequest(Operation.createPost(this, ComputeRemovalTaskService.FACTORY_LINK) .setBodyNoCloning(computeRemovalState) .setContextId(getSelfId()) .setCompletion((o, ex) -> { if (ex != null) { failRequest(state, "Failed to create compute removal operation task", ex); return; } proceedTo(SubStage.ALLOCATING); })); }
private void createReservationRemovalTask(RequestBrokerState state) { if (state.groupResourcePlacementLink == null || state.groupResourcePlacementLink.isEmpty()) { proceedTo(SubStage.RESERVATION_CLEANED_UP); return; } ReservationRemovalTaskState rsrvTask = new ReservationRemovalTaskState(); rsrvTask.documentSelfLink = getSelfId(); rsrvTask.serviceTaskCallback = ServiceTaskCallback.create(getSelfLink(), TaskStage.STARTED, SubStage.RESERVATION_CLEANED_UP, TaskStage.FAILED, SubStage.ERROR); rsrvTask.resourceCount = state.actualResourceCount; rsrvTask.resourceDescriptionLink = state.resourceDescriptionLink; rsrvTask.groupResourcePlacementLink = state.groupResourcePlacementLink; rsrvTask.requestTrackerLink = state.requestTrackerLink; rsrvTask.tenantLinks = state.tenantLinks; sendRequest(Operation.createPost(this, ReservationRemovalTaskFactoryService.SELF_LINK) .setBodyNoCloning(rsrvTask) .setContextId(getSelfId()) .setCompletion((o, e) -> { if (e != null) { logSevere("Reservations can't be cleaned up. Error: %s", Utils.toString(e)); } proceedTo(SubStage.RESERVATION_CLEANUP); })); }
private void createClosureAllocationTask(RequestBrokerState state) { ClosureAllocationTaskState allocationTask = new ClosureAllocationTaskState(); allocationTask.documentSelfLink = getSelfId(); allocationTask.serviceTaskCallback = ServiceTaskCallback.create( state.documentSelfLink, TaskStage.STARTED, SubStage.ALLOCATED, TaskStage.STARTED, SubStage.REQUEST_FAILED); allocationTask.customProperties = state.customProperties; allocationTask.resourceDescriptionLink = state.resourceDescriptionLink; allocationTask.resourceLinks = state.resourceLinks; allocationTask.tenantLinks = state.tenantLinks; allocationTask.requestTrackerLink = state.requestTrackerLink; sendRequest(Operation .createPost(this, ClosureAllocationTaskService.FACTORY_LINK) .setBodyNoCloning(allocationTask) .setContextId(getSelfId()) .setCompletion((o, e) -> { if (e != null) { failTask("Failure creating resource allocation task", e); return; } proceedTo(SubStage.ALLOCATING); })); }
private void createContainerVolumeProvisioningTask(RequestBrokerState state) { ContainerVolumeProvisionTaskState provisionTask = new ContainerVolumeProvisionTaskState(); provisionTask.documentSelfLink = getSelfId(); provisionTask.serviceTaskCallback = ServiceTaskCallback.create( getSelfLink(), TaskStage.STARTED, SubStage.COMPLETED, TaskStage.STARTED, SubStage.REQUEST_FAILED); provisionTask.customProperties = state.customProperties; provisionTask.tenantLinks = state.tenantLinks; provisionTask.requestTrackerLink = state.requestTrackerLink; provisionTask.resourceType = state.resourceType; provisionTask.resourceLinks = state.resourceLinks; provisionTask.resourceDescriptionLink = state.resourceDescriptionLink; sendRequest(Operation .createPost(this, ContainerVolumeProvisionTaskService.FACTORY_LINK) .setBodyNoCloning(provisionTask) .setContextId(getSelfId()) .setCompletion((o, e) -> { if (e != null) { failTask("Failure creating resource provision task", e); return; } })); }
private void createContainerNetworkProvisioningTask(RequestBrokerState state) { // 2. provision the network ContainerNetworkProvisionTaskState provisionTask = new ContainerNetworkProvisionTaskState(); provisionTask.documentSelfLink = getSelfId(); provisionTask.serviceTaskCallback = ServiceTaskCallback.create( getSelfLink(), TaskStage.STARTED, SubStage.COMPLETED, TaskStage.STARTED, SubStage.REQUEST_FAILED); provisionTask.customProperties = state.customProperties; provisionTask.tenantLinks = state.tenantLinks; provisionTask.requestTrackerLink = state.requestTrackerLink; provisionTask.resourceLinks = state.resourceLinks; provisionTask.resourceDescriptionLink = state.resourceDescriptionLink; sendRequest(Operation .createPost(this, ContainerNetworkProvisionTaskService.FACTORY_LINK) .setBodyNoCloning(provisionTask) .setContextId(getSelfId()) .setCompletion((o, e) -> { if (e != null) { failTask("Failure creating resource provision task", e); return; } })); }
private void createContainerOperationTasks(RequestBrokerState state) { ContainerOperationTaskState operationState = new ContainerOperationTaskState(); operationState.resourceLinks = state.resourceLinks; operationState.serviceTaskCallback = ServiceTaskCallback.create(getSelfLink(), TaskStage.STARTED, SubStage.ALLOCATED, TaskStage.FAILED, SubStage.ERROR); operationState.operation = state.operation; operationState.documentSelfLink = getSelfId(); operationState.customProperties = state.customProperties; operationState.requestTrackerLink = state.requestTrackerLink; sendRequest(Operation.createPost(this, ContainerOperationTaskFactoryService.SELF_LINK) .setBodyNoCloning(operationState) .setContextId(getSelfId()) .setCompletion((o, ex) -> { if (ex != null) { failTask("Failed to create container operation task", ex); } proceedTo(SubStage.ALLOCATING); })); }
private void createPKSClusterProvisioningTask(RequestBrokerState state) { String link = buildUriPath(PKSClusterProvisioningTaskService.FACTORY_LINK, getSelfId()); createNewIfNotExist(link, () -> { PKSProvisioningTaskState task = new PKSProvisioningTaskState(); task.documentSelfLink = getSelfId(); task.serviceTaskCallback = ServiceTaskCallback.create( state.documentSelfLink, TaskStage.STARTED, SubStage.COMPLETED, TaskStage.STARTED, SubStage.REQUEST_FAILED); task.customProperties = state.customProperties; task.preferMasterIP = Boolean.parseBoolean(task .removeCustomProperty(PKSConstants.PKS_PREFER_MASTER_IP_PROP_NAME)); task.endpointLink = state.getCustomProperty(PKSConstants.PKS_ENDPOINT_PROP_NAME); task.tenantLinks = state.tenantLinks; task.requestTrackerLink = state.requestTrackerLink; // calculate task expiration to be shortly before parent task expiration task.documentExpirationTimeMicros = calculatePKSTaskExpirationTime(state); sendRequest(Operation .createPost(this, PKSClusterProvisioningTaskService.FACTORY_LINK) .setBodyNoCloning(task) .setContextId(getSelfId()) .setCompletion((o, e) -> { if (e != null) { failTask("Failure in creating PKS resource provision task", e); return; } })); }); }
private void createContainerNetworkAllocationTask(RequestBrokerState state) { // 1. allocate the network ContainerNetworkAllocationTaskState allocationTask = new ContainerNetworkAllocationTaskState(); allocationTask.documentSelfLink = getSelfId(); allocationTask.serviceTaskCallback = ServiceTaskCallback.create( getSelfLink(), TaskStage.STARTED, SubStage.ALLOCATED, TaskStage.STARTED, SubStage.ERROR); allocationTask.customProperties = state.customProperties; allocationTask.resourceDescriptionLink = state.resourceDescriptionLink; allocationTask.tenantLinks = state.tenantLinks; allocationTask.requestTrackerLink = state.requestTrackerLink; allocationTask.resourceLinks = state.resourceLinks; allocationTask.resourceCount = state.actualResourceCount; sendRequest(Operation .createPost(this, ContainerNetworkAllocationTaskService.FACTORY_LINK) .setBodyNoCloning(allocationTask) .setContextId(getSelfId()) .setCompletion((o, e) -> { if (e != null) { failTask("Failure creating resource allocation task", e); return; } proceedTo(SubStage.ALLOCATING); })); }
private void createCompositeComponentRemovalTask(RequestBrokerState state) { if (state.resourceLinks == null) { proceedTo(SubStage.ERROR); return; } CompositeComponentRemovalTaskState removalState = new CompositeComponentRemovalTaskState(); removalState.resourceLinks = state.resourceLinks; removalState.serviceTaskCallback = ServiceTaskCallback.create(getSelfLink(), SubStage.COMPLETED, SubStage.ERROR); removalState.documentSelfLink = getSelfId(); removalState.requestTrackerLink = state.requestTrackerLink; removalState.tenantLinks = state.tenantLinks; Operation post = Operation .createPost(this, CompositeComponentRemovalTaskService.FACTORY_LINK) .setBodyNoCloning(removalState) .setContextId(getSelfId()) .setCompletion((o, ex) -> { if (ex != null) { failTask("Failed to create container removal task", ex); } proceedTo(SubStage.ALLOCATING); }); sendRequest(post); }
private void createCompositionTask(RequestBrokerState state) { if (isCompositeComponentType(state)) { CompositionTaskState compositionTask = new CompositionTaskState(); compositionTask.documentSelfLink = getSelfId(); compositionTask.serviceTaskCallback = ServiceTaskCallback.create( getSelfLink(), TaskStage.STARTED, SubStage.ALLOCATED, TaskStage.STARTED, SubStage.ERROR); compositionTask.customProperties = state.customProperties; compositionTask.resourceDescriptionLink = state.resourceDescriptionLink; compositionTask.tenantLinks = state.tenantLinks; compositionTask.requestTrackerLink = state.requestTrackerLink; compositionTask.groupResourcePlacementLink = state.groupResourcePlacementLink; sendRequest(Operation.createPost(this, CompositionTaskFactoryService.SELF_LINK) .setBodyNoCloning(compositionTask) .setContextId(getSelfId()) .setCompletion((o, e) -> { if (e != null) { failTask("Failure creating composition task", e); return; } proceedTo(SubStage.ALLOCATING); })); } else { failTask(null, new LocalizableValidationException("Not supported resourceType: " + state.resourceType, "request.resource-type.not.supported", state.resourceType)); } }
allocationTask.resourceCount = state.actualResourceCount; sendRequest(Operation .createPost(this, ContainerVolumeAllocationTaskService.FACTORY_LINK) .setBodyNoCloning(allocationTask)