@@ -4,8 +4,11 @@ use dkn_p2p::libp2p::{
4
4
PeerId ,
5
5
} ;
6
6
use dkn_p2p:: DriaReqResMessage ;
7
- use dkn_utils:: payloads:: { HEARTBEAT_TOPIC , SPECS_TOPIC , TASK_REQUEST_TOPIC } ;
8
- use eyre:: { eyre, Result } ;
7
+ use dkn_utils:: {
8
+ payloads:: { HEARTBEAT_TOPIC , SPECS_TOPIC , TASK_REQUEST_TOPIC } ,
9
+ DriaMessage ,
10
+ } ;
11
+ use eyre:: Result ;
9
12
10
13
use crate :: { reqres:: * , workers:: task:: TaskWorkerOutput } ;
11
14
@@ -33,7 +36,7 @@ impl DriaComputeNode {
33
36
if self . dria_rpc . peer_id != peer_id {
34
37
log:: warn!( "Received request from unauthorized source: {}" , peer_id) ;
35
38
log:: debug!( "Allowed source: {}" , self . dria_rpc. peer_id) ;
36
- } else if let Err ( e) = self . handle_request ( peer_id, request, channel) . await {
39
+ } else if let Err ( e) = self . handle_request ( peer_id, & request, channel) . await {
37
40
log:: error!( "Error handling request: {:?}" , e) ;
38
41
}
39
42
}
@@ -61,6 +64,11 @@ impl DriaComputeNode {
61
64
request_id : OutboundRequestId ,
62
65
data : Vec < u8 > ,
63
66
) -> Result < ( ) > {
67
+ if peer_id != self . dria_rpc . peer_id {
68
+ log:: warn!( "Received response from unauthorized source: {}" , peer_id) ;
69
+ log:: debug!( "Allowed source: {}" , self . dria_rpc. peer_id) ;
70
+ }
71
+
64
72
if let Ok ( heartbeat_response) = HeartbeatRequester :: try_parse_response ( & data) {
65
73
log:: info!(
66
74
"Received a {} response ({request_id}) from {peer_id}" ,
@@ -85,14 +93,18 @@ impl DriaComputeNode {
85
93
async fn handle_request (
86
94
& mut self ,
87
95
peer_id : PeerId ,
88
- data : Vec < u8 > ,
96
+ message_data : & [ u8 ] ,
89
97
channel : ResponseChannel < Vec < u8 > > ,
90
98
) -> Result < ( ) > {
91
- if let Ok ( task_request) = TaskResponder :: try_parse_request ( & data) {
92
- self . handle_task_request ( peer_id, task_request, channel)
93
- . await
94
- } else {
95
- Err ( eyre:: eyre!( "Received unhandled request from {peer_id}" ) )
99
+ let message = DriaMessage :: from_slice_checked (
100
+ message_data,
101
+ self . p2p . protocol ( ) . name . clone ( ) ,
102
+ self . config . version ,
103
+ ) ?;
104
+
105
+ match message. topic . as_str ( ) {
106
+ TASK_REQUEST_TOPIC => self . handle_task_request ( peer_id, message, channel) . await ,
107
+ _ => Err ( eyre:: eyre!( "Received unhandled request from {peer_id}" ) ) ,
96
108
}
97
109
}
98
110
@@ -113,7 +125,7 @@ impl DriaComputeNode {
113
125
) ;
114
126
115
127
let ( task_input, task_metadata) =
116
- TaskResponder :: prepare_worker_input ( self , & task_request, channel) . await ?;
128
+ TaskResponder :: parse_task_request ( self , & task_request, channel) . await ?;
117
129
if let Err ( e) = match task_input. task . is_batchable ( ) {
118
130
// this is a batchable task, send it to batch worker
119
131
// and keep track of the task id in pending tasks
@@ -123,11 +135,7 @@ impl DriaComputeNode {
123
135
. insert ( task_input. row_id , task_metadata) ;
124
136
tx. send ( task_input) . await
125
137
}
126
- None => {
127
- return Err ( eyre ! (
128
- "Batchable workflow received but no worker available."
129
- ) ) ;
130
- }
138
+ None => eyre:: bail!( "Batchable task received but no worker available." ) ,
131
139
} ,
132
140
133
141
// this is a single task, send it to single worker
@@ -138,12 +146,10 @@ impl DriaComputeNode {
138
146
. insert ( task_input. row_id , task_metadata) ;
139
147
tx. send ( task_input) . await
140
148
}
141
- None => {
142
- return Err ( eyre ! ( "Single workflow received but no worker available." ) ) ;
143
- }
149
+ None => eyre:: bail!( "Single task received but no worker available." ) ,
144
150
} ,
145
151
} {
146
- log:: error!( "Error sending workflow message : {:?}" , e) ;
152
+ log:: error!( "Could not send task to worker : {:?}" , e) ;
147
153
} ;
148
154
149
155
Ok ( ( ) )
@@ -165,7 +171,7 @@ impl DriaComputeNode {
165
171
// respond to the response channel with the result
166
172
match task_metadata {
167
173
Some ( task_metadata) => {
168
- TaskResponder :: send_output ( self , task_response, task_metadata) . await ?;
174
+ TaskResponder :: send_task_output ( self , task_response, task_metadata) . await ?;
169
175
}
170
176
None => {
171
177
// totally unexpected case, wont happen at all
0 commit comments