/** * Once the task has been validated, we need to initialize the state to valid values. * * @see TaskService#initializeState(TaskServiceState, Operation) */ @Override protected void initializeState(NodeGroupMigrationState task, Operation taskOperation) { super.initializeState(task, taskOperation); task.subStage = SubStage.INITIALIZING; }
public ProvisionNetworkTaskService() { super(ProvisionNetworkTaskState.class); super.toggleOption(ServiceOption.REPLICATION, true); super.toggleOption(ServiceOption.OWNER_SELECTION, true); }
@Override protected void updateState(GraphQueryTask task, GraphQueryTask patchBody) { super.updateState(task, patchBody); // we replace the stages and result links since they are lists and their items have // modifications. The merge utility is not sophisticated enough to merge lists task.stages = patchBody.stages; task.resultLinks = patchBody.resultLinks; }
public SingleResourceStatsAggregationTaskService() { super(SingleResourceStatsAggregationTaskState.class); super.toggleOption(ServiceOption.OWNER_SELECTION, true); super.toggleOption(ServiceOption.IDEMPOTENT_POST, true); super.toggleOption(ServiceOption.REPLICATION, true); super.setPeerNodeSelectorPath(ServiceUriPaths.DEFAULT_1X_NODE_SELECTOR); }
@Override protected SingleResourceStatsAggregationTaskState validateStartPost(Operation postOp) { SingleResourceStatsAggregationTaskState state = super.validateStartPost(postOp); if (state == null) { return null; } if (state.resourceLink == null) { postOp.fail(new IllegalArgumentException("resourceLink needs to be specified")); return null; } if (state.metricNames == null || state.metricNames.isEmpty()) { postOp.fail(new IllegalArgumentException("metricNames needs to be specified")); return null; } return state; }
/** * This handles the initial {@code POST} that creates the task service. Most subclasses won't * need to override this method, although they likely want to override the {@link * #validateStartPost(Operation)} and {@link #initializeState(TaskServiceState, Operation)} * methods. */ @Override public void handleStart(Operation taskOperation) { T task = validateStartPost(taskOperation); if (task == null) { return; } taskOperation.complete(); if (!ServiceHost.isServiceCreate(taskOperation) || (task.taskInfo != null && !TaskState.isCreated(task.taskInfo))) { // Skip self patch to STARTED if this is a restart operation, or, task stage is // other than CREATED. // Tasks that handle restart should override handleStart and decide if they should // continue processing on restart, or fail return; } initializeState(task, taskOperation); sendSelfPatch(task); }
@Override protected boolean validateTransition(Operation patch, ResourceEnumerationTaskState currentTask, ResourceEnumerationTaskState patchBody) { boolean ok = super.validateTransition(patch, currentTask, patchBody); if (ok) { if (currentTask.taskInfo.stage == TaskStage.STARTED && patchBody.taskInfo.stage == TaskStage.STARTED) { patch.fail(new IllegalArgumentException("Cannot start task again")); return false; } } return ok; }
/** * Ensure that the initial input task is valid. Subclasses might want to override this * implementation to also validate their {@code SubStage}. */ protected T validateStartPost(Operation taskOperation) { T task = getBody(taskOperation); if (!taskOperation.hasBody()) { taskOperation.fail(new IllegalArgumentException("POST body is required")); return null; } if (!ServiceHost.isServiceCreate(taskOperation)) { // we apply validation only on the original, client issued POST, not operations // caused by host restart return task; } // Subclasses might also want to ensure that their "SubStage" is not specified also return task; }
@Override protected StatsAggregationTaskState validateStartPost(Operation postOp) { StatsAggregationTaskState state = super.validateStartPost(postOp); if (state == null) { return null; } if (state.query == null) { postOp.fail(new IllegalArgumentException("query needs to be specified")); return null; } if (state.metricNames == null || state.metricNames.isEmpty()) { postOp.fail(new IllegalStateException("metricNames should not be null or empty")); return null; } return state; }
@Override protected boolean validateTransition(Operation patch, ResourceEnumerationTaskState currentTask, ResourceEnumerationTaskState patchBody) { boolean ok = super.validateTransition(patch, currentTask, patchBody); if (ok) { if (currentTask.taskInfo.stage == TaskStage.STARTED && patchBody.taskInfo.stage == TaskStage.STARTED) { patch.fail(new IllegalArgumentException("Cannot start task again")); return false; } } return ok; }
public SingleResourceStatsAggregationTaskService() { super(SingleResourceStatsAggregationTaskState.class); super.toggleOption(ServiceOption.OWNER_SELECTION, true); super.toggleOption(ServiceOption.IDEMPOTENT_POST, true); super.toggleOption(ServiceOption.REPLICATION, true); super.setPeerNodeSelectorPath(ServiceUriPaths.DEFAULT_1X_NODE_SELECTOR); }
public ProvisionLoadBalancerTaskService() { super(ProvisionLoadBalancerTaskState.class); super.toggleOption(ServiceOption.REPLICATION, true); super.toggleOption(ServiceOption.OWNER_SELECTION, true); }
@Override protected StatsAggregationTaskState validateStartPost(Operation postOp) { StatsAggregationTaskState state = super.validateStartPost(postOp); if (state == null) { return null; } if (state.query == null) { postOp.fail(new IllegalArgumentException("query needs to be specified")); return null; } if (state.metricNames == null || state.metricNames.isEmpty()) { postOp.fail(new IllegalStateException("metricNames should not be null or empty")); return null; } return state; }
/** * This method initializes a {@link DemoTaskState} from the body of a valid POST operation. * @param taskState Supplies the task state to be initialized. * @param startOp Supplies the POST {@link Operation} which has caused this task to be created. */ @Override protected void initializeState(DemoTaskState taskState, Operation startOp) { super.initializeState(taskState, startOp); taskState.taskInfo.stage = TaskState.TaskStage.CREATED; }
/** * Validate that the PATCH we got requests reasonable changes to our state * * @see TaskService#validateTransition(Operation, TaskServiceState, TaskServiceState) */ @Override protected boolean validateTransition(Operation patch, NodeGroupMigrationState currentTask, NodeGroupMigrationState patchBody) { super.validateTransition(patch, currentTask, patchBody); if (patchBody.taskInfo.stage == TaskState.TaskStage.STARTED && patchBody.subStage == null) { patch.fail(new IllegalArgumentException("Missing substage")); return false; } return true; }
/** * Override updateState to update all service values from patch body. */ @Override protected void updateState(TagDeletionRequest currentTask, TagDeletionRequest patchBody) { currentTask.tagsMap = patchBody.tagsMap; currentTask.tagsNextPageLink = patchBody.tagsNextPageLink; currentTask.docsNextPageLink = patchBody.docsNextPageLink; // auto-merge fields based on annotations super.updateState(currentTask, patchBody); }
public ProvisionLoadBalancerTaskService() { super(ProvisionLoadBalancerTaskState.class); super.toggleOption(ServiceOption.REPLICATION, true); super.toggleOption(ServiceOption.OWNER_SELECTION, true); }
@Override protected SingleResourceStatsAggregationTaskState validateStartPost(Operation postOp) { SingleResourceStatsAggregationTaskState state = super.validateStartPost(postOp); if (state == null) { return null; } if (state.resourceLink == null) { postOp.fail(new IllegalArgumentException("resourceLink needs to be specified")); return null; } if (state.metricNames == null || state.metricNames.isEmpty()) { postOp.fail(new IllegalArgumentException("metricNames needs to be specified")); return null; } return state; }
@Override protected void initializeState(StatsAggregationTaskState state, Operation postOp) { logFine(() -> "Started stats aggregation"); super.initializeState(state, postOp); state.taskSubStage = StatsAggregationStage.INIT; }
/** * Customize the validation transition logic that's part of {@code PATCH} request. */ @Override protected boolean validateTransition( Operation patchOp, ImageEnumerationTaskState currentState, ImageEnumerationTaskState patchState) { boolean ok = super.validateTransition(patchOp, currentState, patchState); if (ok) { if (currentState.taskInfo.stage == TaskStage.STARTED && patchState.taskInfo.stage == TaskStage.STARTED) { patchOp.fail(new IllegalArgumentException("Cannot start task again")); return false; } } return ok; }