private void createReservationTasks(RequestBrokerState state) { if (isContainerNetworkType(state) || isContainerVolumeType(state)) { // No reservation needed here, moving on... proceedTo(SubStage.RESERVED); } else if (isClosureType(state)) { // No reservation needed here, moving on... proceedTo(SubStage.RESERVED); } else if (isPKSClusterType(state)) { // No reservation needed here, moving on.directly to allocated proceedTo(SubStage.ALLOCATED); } else { getContainerDescription(state, (cd) -> createReservationTasks(state, cd)); } }
private void calculateActualRequestedResources(RequestBrokerState state, SubStage next) { if (isPKSClusterType(state)) { proceedTo(next, s -> { s.actualResourceCount = state.resourceCount; s.documentExpirationTimeMicros = getExpirationTimeFromNowInMicros( EXPIRATION_MICROS * 2); }); return; } if (isProvisionOperation(state)) { if (isContainerType(state)) { getContainerDescription(state, (cd) -> { proceedTo(next, s -> { s.actualResourceCount = getRequestContainerResourceCount(state, cd); updateRequestTrackerName(state, cd.name); }); }); } else { proceedTo(next, s -> s.actualResourceCount = state.resourceCount); } } else { proceedTo(next, s -> s.actualResourceCount = state.resourceCount); } }
private void failRequest(RequestBrokerState state, String message, Throwable ex) { logSevere("%s, reason: %s", message, Utils.toString(ex)); proceedTo(SubStage.ERROR, s -> { s.taskInfo.failure = getServiceErrorResponse(ex); }); }
@Override public void failTask(String msg, Throwable e) { String errMsg = msg != null ? msg : "Unexpected State"; if (e != null) { logWarning("Fail task: %s. Error: %s", errMsg, Utils.toString(e)); } else { logWarning("Fail task: %s", errMsg); } ServiceErrorResponse rsp; if (e != null) { rsp = getServiceErrorResponse(e); } else { rsp = new ServiceErrorResponse(); rsp.message = errMsg; } proceedTo(SubStage.REQUEST_FAILED, s -> { s.taskInfo.failure = rsp; }); }
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 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); }
proceedTo(stage); 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 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 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 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); })); }
proceedTo(SubStage.ALLOCATING);
return; proceedTo(SubStage.ALLOCATING); })); });
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)); } }
return; proceedTo(SubStage.ALLOCATING); }));