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 createReservationTasks(RequestBrokerState state, ContainerDescription containerDescription) { if (containerDescription == null) { getContainerDescription(state, (cd) -> createReservationTasks(state, cd)); return; } enforceRegistryWhitelist(containerDescription, state, (ex) -> { if (ex != null) { String error = String.format( REGISTRY_WHITELIST_CHECK_FAILED_ERROR_FORMAT, containerDescription.image); failTask(error, new LocalizableValidationException(error, REGISTRY_WHITELIST_CHECK_FAILED_ERROR_CODE, containerDescription.image)); } else { doCreateReservationTasks(state, containerDescription); } }); }
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)); } }
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; } })); }); }
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; } })); }
.setCompletion((o, e) -> { if (e != null) { failTask("Failure in removing PKS resource task", e);
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 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 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 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 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 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); }
.setCompletion((o, ex) -> { if (ex != null) { failTask("Failed to create container clustering task.", ex); return;
return; failTask("Failure creating resource allocation task", e); return;
.setCompletion((o, e) -> { if (e != null) { failTask("Failure creating resource allocation task", e); return;
private void createAllocationTasks(RequestBrokerState state) { if (isContainerType(state)) { createContainerAllocationTask(state); } else if (isContainerNetworkType(state)) { if (!isPostAllocationOperation(state)) { createContainerNetworkAllocationTask(state); } else { createContainerNetworkProvisioningTask(state); } } else if (isContainerVolumeType(state)) { if (!isPostAllocationOperation(state)) { createContainerVolumeAllocationTask(state, null); } else { createContainerVolumeProvisioningTask(state); } } else if (isClosureType(state)) { if (!isPostAllocationOperation(state)) { createClosureAllocationTask(state); } else { createClosureProvisionTask(state); } } else if (isPKSClusterType(state)) { createPKSClusterProvisioningTask(state); } else { failTask(null, new LocalizableValidationException("Not supported resourceType: " + state.resourceType, "request.resource-type.not.supported", state.resourceType)); } }