1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
use crate::teaclave_common::{i32_from_task_status, ExecutorCommand, ExecutorStatus};
use crate::teaclave_scheduler_service_proto as proto;
use anyhow::Result;
pub use proto::teaclave_scheduler_client::TeaclaveSchedulerClient;
pub use proto::teaclave_scheduler_server::TeaclaveScheduler;
pub use proto::teaclave_scheduler_server::TeaclaveSchedulerServer;
pub use proto::{
HeartbeatRequest, PublishTaskRequest, PullTaskRequest, UpdateTaskResultRequest,
UpdateTaskStatusRequest,
};
pub use proto::{HeartbeatResponse, PullTaskResponse, SubscribeResponse};
use teaclave_types::Storable;
use teaclave_types::{StagedTask, TaskFailure, TaskOutputs, TaskResult, TaskStatus};
use uuid::Uuid;
impl_custom_server!(TeaclaveSchedulerServer, TeaclaveScheduler);
impl_custom_client!(TeaclaveSchedulerClient);
impl HeartbeatRequest {
pub fn new(executor_id: Uuid, status: ExecutorStatus) -> Self {
Self {
executor_id: executor_id.to_string(),
status: status.into(),
}
}
}
impl HeartbeatResponse {
pub fn new(command: ExecutorCommand) -> Self {
Self {
command: command.into(),
}
}
}
impl PullTaskResponse {
pub fn new(staged_task: StagedTask) -> Self {
Self {
staged_task: staged_task.to_vec().unwrap(),
}
}
}
impl UpdateTaskResultRequest {
pub fn new(task_id: Uuid, task_result: Result<TaskOutputs>) -> Self {
let result = match task_result {
Ok(task_output) => TaskResult::Ok(task_output),
Err(e) => TaskResult::Err(TaskFailure {
reason: e.to_string(),
}),
};
Self {
task_id: task_id.to_string(),
result: Some(result.into()),
}
}
}
impl UpdateTaskStatusRequest {
pub fn new(task_id: Uuid, task_status: TaskStatus) -> Self {
let task_status = i32_from_task_status(task_status);
Self {
task_id: task_id.to_string(),
task_status,
}
}
}