@@ -10,22 +10,22 @@ use tracing::{debug, instrument};
1010#[ derive( Clone ) ]
1111pub struct InvokerSet {
1212 /// Information abount spawned invokers
13- managed : Arc < [ Arc < WorkerInfo > ] > ,
14- /// these field is used to signal that a worker is reclaimed
15- worker_reclamation : Arc < event_listener:: Event > ,
13+ managed : Arc < [ Arc < Invoker > ] > ,
14+ /// these field is used to signal that an invoker lock was released
15+ invoker_released : Arc < event_listener:: Event > ,
1616}
1717
1818pub struct InvokerSetBuilder {
1919 /// Path to invoker binary
2020 invoker_path : PathBuf ,
21- /// workers spawned so far
22- managed : Vec < Arc < WorkerInfo > > ,
21+ /// Managed invokers spawned so far
22+ managed : Vec < Arc < Invoker > > ,
2323}
2424
2525impl InvokerSetBuilder {
2626 /// Starts new invoker process and adds it to this InvokerSet
2727 #[ instrument( skip( self ) ) ]
28- pub async fn add_managed_worker ( & mut self ) -> anyhow:: Result < ( ) > {
28+ pub async fn add_managed_invoker ( & mut self ) -> anyhow:: Result < ( ) > {
2929 let mut child = tokio:: process:: Command :: new ( & self . invoker_path )
3030 . arg ( "serve" )
3131 . arg ( "--address=cli" )
@@ -43,8 +43,8 @@ impl InvokerSetBuilder {
4343 req_rx,
4444 res_tx,
4545 ) ) ;
46- let info = WorkerInfo {
47- state : Mutex :: new ( WorkerState :: Idle ) ,
46+ let info = Invoker {
47+ state : Mutex :: new ( InvokerState :: Idle ) ,
4848 send_request : req_tx,
4949 recv_response : res_rx,
5050 } ;
@@ -56,7 +56,7 @@ impl InvokerSetBuilder {
5656 pub fn build ( self ) -> InvokerSet {
5757 InvokerSet {
5858 managed : self . managed . into ( ) ,
59- worker_reclamation : Arc :: new ( event_listener:: Event :: new ( ) ) ,
59+ invoker_released : Arc :: new ( event_listener:: Event :: new ( ) ) ,
6060 }
6161 }
6262}
@@ -77,9 +77,9 @@ impl InvokerSet {
7777 loop {
7878 debug ! ( attempt_id, "scanning all workers" ) ;
7979 attempt_id += 1 ;
80- let worker_reclaimed = self . worker_reclamation . listen ( ) ;
81- for worker in & * self . managed {
82- if let Some ( handle) = worker . try_lock ( self . worker_reclamation . clone ( ) ) {
80+ let released = self . invoker_released . listen ( ) ;
81+ for invoker in & * self . managed {
82+ if let Some ( handle) = invoker . try_lock ( self . invoker_released . clone ( ) ) {
8383 handle. send_request . send ( req) . await . expect ( "worker died" ) ;
8484 let resp = handle
8585 . recv_response
@@ -90,38 +90,36 @@ impl InvokerSet {
9090 }
9191 }
9292
93- worker_reclaimed . await ;
93+ released . await ;
9494 }
9595 }
9696}
9797
9898#[ derive( Eq , PartialEq ) ]
99- enum WorkerState {
100- /// Worker is ready for new tasks
99+ enum InvokerState {
100+ /// Ready for new tasks
101101 Idle ,
102- /// Worker is ready , but it is locked by a WorkerHandle
102+ /// Ready , but it is locked by a WorkerHandle
103103 Locked ,
104- /// Worker is juding run
105- Judge ,
106- /// Worker has crashed
104+ /// Crashed
107105 Crash ,
108106}
109- struct WorkerInfo {
107+ struct Invoker {
110108 // could be AtomicU8, but mutex is simpler
111- state : Mutex < WorkerState > ,
109+ state : Mutex < InvokerState > ,
112110 // Danger: must not be used concurrently, otherwise
113111 // we can receive wrong response
114112 send_request : async_channel:: Sender < hyper:: Request < hyper:: Body > > ,
115113 recv_response : async_channel:: Receiver < hyper:: Response < hyper:: Body > > ,
116114}
117- struct LockedWorker {
115+ struct LockedInvoker {
118116 send_request : async_channel:: Sender < hyper:: Request < hyper:: Body > > ,
119117 recv_response : async_channel:: Receiver < hyper:: Response < hyper:: Body > > ,
120118 notify_on_drop : Arc < event_listener:: Event > ,
121- worker : Arc < WorkerInfo > ,
119+ raw : Arc < Invoker > ,
122120}
123121
124- impl LockedWorker {
122+ impl LockedInvoker {
125123 async fn call ( self , req : hyper:: Request < hyper:: Body > ) -> hyper:: Response < hyper:: Body > {
126124 let wake = {
127125 let ev = self . notify_on_drop . clone ( ) ;
@@ -147,29 +145,29 @@ impl LockedWorker {
147145 }
148146}
149147
150- impl Drop for LockedWorker {
148+ impl Drop for LockedInvoker {
151149 fn drop ( & mut self ) {
152- // mark Worker as idle
153- * self . worker . state . lock ( ) = WorkerState :: Idle ;
150+ // mark invoker as idle
151+ * self . raw . state . lock ( ) = InvokerState :: Idle ;
154152 // trigger event
155153 self . notify_on_drop . notify_additional ( 1 ) ;
156154 }
157155}
158156
159- impl WorkerInfo {
157+ impl Invoker {
160158 fn try_lock (
161159 self : & Arc < Self > ,
162160 notify_on_drop : Arc < event_listener:: Event > ,
163- ) -> Option < LockedWorker > {
161+ ) -> Option < LockedInvoker > {
164162 let mut lock = self . state . lock ( ) ;
165- if * lock != WorkerState :: Idle {
163+ if * lock != InvokerState :: Idle {
166164 return None ;
167165 }
168- * lock = WorkerState :: Locked ;
169- Some ( LockedWorker {
166+ * lock = InvokerState :: Locked ;
167+ Some ( LockedInvoker {
170168 send_request : self . send_request . clone ( ) ,
171169 recv_response : self . recv_response . clone ( ) ,
172- worker : self . clone ( ) ,
170+ raw : self . clone ( ) ,
173171 notify_on_drop,
174172 } )
175173 }
0 commit comments