@Override public Service createServiceInstance() throws Throwable { return new RequestBrokerService(); } }
switch (state.taskSubStage) { case CREATED: calculateActualRequestedResources(state, SubStage.RESOURCE_COUNTED); break; case RESOURCE_COUNTED: if (isProvisionOperation(state)) { if (isCompositeComponentType(state)) { createCompositionTask(state); } else { createReservationTasks(state); } else if (isPostAllocationOperation(state)) { createAllocationTasks(state); } else { createResourceOperation(state); break; case RESERVED: createAllocationTasks(state); break; case ALLOCATING: break; case ALLOCATED: String postAllocationOperation = getPostAllocationOperation(state); if (postAllocationOperation != null) { state.operation = postAllocationOperation; createAllocationTasks(state); } else { complete();
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)); } }
private void createResourceOperation(RequestBrokerState state) { if (isContainerType(state)) { if (isRemoveOperation(state)) { createContainerRemovalTasks(state, false); } else if (isClusteringOperation(state)) { createContainerClusteringTasks(state); } else { createContainerOperationTasks(state); } else if (isCompositeComponentType(state)) { createCompositeComponentOperationTask(state); } else if (isContainerHostType(state)) { if (isRemoveOperation(state)) { createComputeRemovalTask(state, true); } else { failTask(null, new LocalizableValidationException("Not supported operation: " + state.operation, "request.operation.not.supported", state.operation)); } else if (isComputeType(state)) { if (isRemoveOperation(state)) { createComputeRemovalTask(state); } else { failTask(null, new LocalizableValidationException("Not supported operation: " + state.operation, "request.operation.not.supported", state.operation)); } else if (isContainerNetworkType(state)) { if (isRemoveOperation(state)) { createContainerNetworkRemovalTask(state); } else { failTask(null, new LocalizableValidationException("Not supported operation: "
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 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; } })); }); }
proceedTo(stage); return; String link = buildUriPath(PKSClusterRemovalTaskService.FACTORY_LINK, getSelfId()); createNewIfNotExist(link, () -> { PKSClusterRemovalTaskState task = new PKSClusterRemovalTaskState(); task.documentSelfLink = getSelfId(); task.serviceTaskCallback = ServiceTaskCallback.create(state.documentSelfLink, TaskStage.STARTED, errorState ? SubStage.ERROR : SubStage.COMPLETED, task.removeOnly = removeOnly; task.documentExpirationTimeMicros = calculatePKSTaskExpirationTime(state); sendRequest(Operation .createPost(this, PKSClusterRemovalTaskService.FACTORY_LINK) .setBodyNoCloning(task) .setContextId(getSelfId()) .setCompletion((o, e) -> { if (e != null) { failTask("Failure in removing PKS resource task", e);
@Test public void testValidateOnStart() throws Throwable { RequestBrokerState request = TestRequestStateFactory.createRequestState(); request.resourceType = "-"; request.resourceDescriptionLink = "-"; RequestBrokerService r = new RequestBrokerService(); Method m = r.getClass().getDeclaredMethod("validateStateOnStart", RequestBrokerState.class); m.setAccessible(true); validateLocalizableException(() -> { try { m.invoke(r, request); } catch (InvocationTargetException e) { throw e.getCause(); } }, "resource type should not be supported"); }
@Test public void testIsUserAuthorized() throws Throwable { RequestBrokerService r = new RequestBrokerService(); Method m = r.getClass().getDeclaredMethod("isUserAuthorized", SecurityContext.ProjectEntry.class, SecurityContext.class); m.setAccessible(true); SecurityContext context = new SecurityContext(); context.projects = new ArrayList<>(); SecurityContext.ProjectEntry project = new SecurityContext.ProjectEntry(); project.documentSelfLink = "link"; project.roles = new HashSet<>(); project.roles.add(AuthRole.PROJECT_ADMIN); DeferredResult<Void> deferred = (DeferredResult<Void>) m.invoke(r, project, context); assertNotNull(deferred); assertTrue(deferred.toCompletionStage().toCompletableFuture().isCompletedExceptionally()); context.projects.add(project); deferred = (DeferredResult<Void>) m.invoke(r, project, context); assertNotNull(deferred); assertTrue(deferred.toCompletionStage().toCompletableFuture().isDone()); assertFalse(deferred.toCompletionStage().toCompletableFuture().isCancelled()); assertFalse(deferred.toCompletionStage().toCompletableFuture().isCompletedExceptionally()); }