forked from opensearch-project/OpenSearch
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[Offline Nodes] Adds new library for offline tasks (opensearch-projec…
…t#13574) --------- Signed-off-by: Varun Bansal <bansvaru@amazon.com> Signed-off-by: Bukhtawar Khan <bukhtawa@amazon.com> Co-authored-by: Bukhtawar Khan <bukhtawa@amazon.com>
- Loading branch information
1 parent
3a847ae
commit 9d6ed0d
Showing
26 changed files
with
1,306 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
/* | ||
* SPDX-License-Identifier: Apache-2.0 | ||
* | ||
* The OpenSearch Contributors require contributions made to | ||
* this file be licensed under the Apache-2.0 license or a | ||
* compatible open source license. | ||
* | ||
* Modifications Copyright OpenSearch Contributors. See | ||
* GitHub history for details. | ||
*/ | ||
|
||
dependencies { | ||
api project(':libs:opensearch-common') | ||
|
||
testImplementation "com.carrotsearch.randomizedtesting:randomizedtesting-runner:${versions.randomizedrunner}" | ||
testImplementation "junit:junit:${versions.junit}" | ||
testImplementation "org.hamcrest:hamcrest:${versions.hamcrest}" | ||
testImplementation(project(":test:framework")) { | ||
exclude group: 'org.opensearch', module: 'opensearch-task-commons' | ||
} | ||
} | ||
|
||
tasks.named('forbiddenApisMain').configure { | ||
replaceSignatureFiles 'jdk-signatures' | ||
} |
103 changes: 103 additions & 0 deletions
103
libs/task-commons/src/main/java/org/opensearch/task/commons/clients/TaskListRequest.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,103 @@ | ||
/* | ||
* SPDX-License-Identifier: Apache-2.0 | ||
* | ||
* The OpenSearch Contributors require contributions made to | ||
* this file be licensed under the Apache-2.0 license or a | ||
* compatible open source license. | ||
*/ | ||
|
||
package org.opensearch.task.commons.clients; | ||
|
||
import org.opensearch.task.commons.task.TaskStatus; | ||
import org.opensearch.task.commons.task.TaskType; | ||
import org.opensearch.task.commons.worker.WorkerNode; | ||
|
||
/** | ||
* Request object for listing tasks | ||
*/ | ||
public class TaskListRequest { | ||
|
||
/** | ||
* Filters listTasks response by specific task status' | ||
*/ | ||
private TaskStatus[] taskStatus; | ||
|
||
/** | ||
* Filter listTasks response by specific task types | ||
*/ | ||
private TaskType[] taskTypes; | ||
|
||
/** | ||
* Filter listTasks response by specific worker node | ||
*/ | ||
private WorkerNode workerNodes; | ||
|
||
/** | ||
* Depicts the start page number for the list call. | ||
* | ||
* @see TaskManagerClient#listTasks(TaskListRequest) | ||
*/ | ||
private int startPageNumber; | ||
|
||
/** | ||
* Depicts the page size for the list call. | ||
* | ||
* @see TaskManagerClient#listTasks(TaskListRequest) | ||
*/ | ||
private int pageSize; | ||
|
||
/** | ||
* Default constructor | ||
*/ | ||
public TaskListRequest() {} | ||
|
||
/** | ||
* Update task types to filter with in the request | ||
* @param taskTypes TaskType[] | ||
* @return ListTaskRequest | ||
*/ | ||
public TaskListRequest taskType(TaskType... taskTypes) { | ||
this.taskTypes = taskTypes; | ||
return this; | ||
} | ||
|
||
/** | ||
* Update task status to filter with in the request | ||
* @param taskStatus TaskStatus[] | ||
* @return ListTaskRequest | ||
*/ | ||
public TaskListRequest taskType(TaskStatus... taskStatus) { | ||
this.taskStatus = taskStatus; | ||
return this; | ||
} | ||
|
||
/** | ||
* Update worker node to filter with in the request | ||
* @param workerNode WorkerNode | ||
* @return ListTaskRequest | ||
*/ | ||
private TaskListRequest workerNode(WorkerNode workerNode) { | ||
this.workerNodes = workerNode; | ||
return this; | ||
} | ||
|
||
/** | ||
* Update page number to start with when fetching the list of tasks | ||
* @param startPageNumber startPageNumber | ||
* @return ListTaskRequest | ||
*/ | ||
public TaskListRequest startPageNumber(int startPageNumber) { | ||
this.startPageNumber = startPageNumber; | ||
return this; | ||
} | ||
|
||
/** | ||
* Update page size for the list tasks response | ||
* @param pageSize int | ||
* @return ListTaskRequest | ||
*/ | ||
public TaskListRequest pageSize(int pageSize) { | ||
this.pageSize = pageSize; | ||
return this; | ||
} | ||
} |
69 changes: 69 additions & 0 deletions
69
libs/task-commons/src/main/java/org/opensearch/task/commons/clients/TaskManagerClient.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,69 @@ | ||
/* | ||
* SPDX-License-Identifier: Apache-2.0 | ||
* | ||
* The OpenSearch Contributors require contributions made to | ||
* this file be licensed under the Apache-2.0 license or a | ||
* compatible open source license. | ||
*/ | ||
|
||
package org.opensearch.task.commons.clients; | ||
|
||
import org.opensearch.common.annotation.ExperimentalApi; | ||
import org.opensearch.task.commons.task.Task; | ||
import org.opensearch.task.commons.task.TaskId; | ||
import org.opensearch.task.commons.worker.WorkerNode; | ||
|
||
import java.util.List; | ||
|
||
/** | ||
* Client used to interact with Task Store/Queue. | ||
* | ||
* TODO: TaskManager can be something not running an opensearch process. | ||
* We need to come up with a way to allow this interface to be used with in and out opensearch as well | ||
* | ||
* @opensearch.experimental | ||
*/ | ||
@ExperimentalApi | ||
public interface TaskManagerClient { | ||
|
||
/** | ||
* Get task from TaskStore/Queue | ||
* | ||
* @param taskId TaskId of the task to be retrieved | ||
* @return Task corresponding to TaskId | ||
*/ | ||
Task getTask(TaskId taskId); | ||
|
||
/** | ||
* Update task in TaskStore/Queue | ||
* | ||
* @param task Task to be updated | ||
*/ | ||
void updateTask(Task task); | ||
|
||
/** | ||
* Mark task as cancelled. | ||
* Ongoing Tasks can be cancelled as well if the corresponding worker supports cancellation | ||
* | ||
* @param taskId TaskId of the task to be cancelled | ||
*/ | ||
void cancelTask(TaskId taskId); | ||
|
||
/** | ||
* List all tasks applying all the filters present in listTaskRequest | ||
* | ||
* @param taskListRequest TaskListRequest | ||
* @return list of all the task matching the filters in listTaskRequest | ||
*/ | ||
List<Task> listTasks(TaskListRequest taskListRequest); | ||
|
||
/** | ||
* Assign Task to a particular WorkerNode. This ensures no 2 worker Nodes work on the same task. | ||
* This API can be used in both pull and push models of task assignment. | ||
* | ||
* @param taskId TaskId of the task to be assigned | ||
* @param node WorkerNode task is being assigned to | ||
* @return true if task is assigned successfully, false otherwise | ||
*/ | ||
boolean assignTask(TaskId taskId, WorkerNode node); | ||
} |
24 changes: 24 additions & 0 deletions
24
libs/task-commons/src/main/java/org/opensearch/task/commons/clients/TaskProducerClient.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
/* | ||
* SPDX-License-Identifier: Apache-2.0 | ||
* | ||
* The OpenSearch Contributors require contributions made to | ||
* this file be licensed under the Apache-2.0 license or a | ||
* compatible open source license. | ||
*/ | ||
|
||
package org.opensearch.task.commons.clients; | ||
|
||
import org.opensearch.task.commons.task.Task; | ||
|
||
/** | ||
* Producer interface used to submit new tasks for execution on worker nodes. | ||
*/ | ||
public interface TaskProducerClient { | ||
|
||
/** | ||
* Submit a new task to TaskStore/Queue | ||
* | ||
* @param task Task to be submitted for execution on offline nodes | ||
*/ | ||
void submitTask(Task task); | ||
} |
38 changes: 38 additions & 0 deletions
38
libs/task-commons/src/main/java/org/opensearch/task/commons/clients/TaskWorkerClient.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,38 @@ | ||
/* | ||
* SPDX-License-Identifier: Apache-2.0 | ||
* | ||
* The OpenSearch Contributors require contributions made to | ||
* this file be licensed under the Apache-2.0 license or a | ||
* compatible open source license. | ||
*/ | ||
|
||
package org.opensearch.task.commons.clients; | ||
|
||
import org.opensearch.task.commons.task.Task; | ||
import org.opensearch.task.commons.task.TaskId; | ||
|
||
import java.util.List; | ||
|
||
/** | ||
* Consumer interface used to find new tasks assigned to a {@code WorkerNode} for execution. | ||
*/ | ||
public interface TaskWorkerClient { | ||
|
||
/** | ||
* List all tasks assigned to a WorkerNode. | ||
* Useful when the implementation uses a separate store for Task assignments to Worker nodes | ||
* | ||
* @param taskListRequest TaskListRequest | ||
* @return list of all tasks assigned to a WorkerNode | ||
*/ | ||
List<Task> getAssignedTasks(TaskListRequest taskListRequest); | ||
|
||
/** | ||
* Sends task heart beat to Task Store/Queue | ||
* | ||
* @param taskId TaskId of Task to send heartbeat for | ||
* @param timestamp timestamp of heartbeat to be recorded in TaskStore/Queue | ||
*/ | ||
void sendTaskHeartbeat(TaskId taskId, long timestamp); | ||
|
||
} |
12 changes: 12 additions & 0 deletions
12
libs/task-commons/src/main/java/org/opensearch/task/commons/clients/package-info.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
/* | ||
* SPDX-License-Identifier: Apache-2.0 | ||
* | ||
* The OpenSearch Contributors require contributions made to | ||
* this file be licensed under the Apache-2.0 license or a | ||
* compatible open source license. | ||
*/ | ||
|
||
/** | ||
* Contains task client related classes | ||
*/ | ||
package org.opensearch.task.commons.clients; |
12 changes: 12 additions & 0 deletions
12
libs/task-commons/src/main/java/org/opensearch/task/commons/package-info.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
/* | ||
* SPDX-License-Identifier: Apache-2.0 | ||
* | ||
* The OpenSearch Contributors require contributions made to | ||
* this file be licensed under the Apache-2.0 license or a | ||
* compatible open source license. | ||
*/ | ||
|
||
/** | ||
* Contains offline tasks related classes | ||
*/ | ||
package org.opensearch.task.commons; |
Oops, something went wrong.