@@ -14,7 +14,7 @@ use crate::deploy::actors::discovery::DiscoveryActor;
14
14
use crate :: deploy:: actors:: loader:: {
15
15
self , LoaderActor , LoaderEvent , ReloadModule , ReloadReason , StopBehavior ,
16
16
} ;
17
- use crate :: deploy:: actors:: pusher:: Push ;
17
+ use crate :: deploy:: actors:: pusher:: PushResult ;
18
18
use crate :: deploy:: actors:: watcher:: WatcherActor ;
19
19
use actix:: prelude:: * ;
20
20
use anyhow:: { bail, Context , Result } ;
@@ -188,11 +188,7 @@ impl Action for DeploySubcommand {
188
188
189
189
mod default_mode {
190
190
//! non-watch mode
191
-
192
- use crate :: deploy:: actors:: {
193
- loader:: LoadModule ,
194
- push_manager:: { PushManager , PushManagerActor , PushManagerBuilder } ,
195
- } ;
191
+ use default_mode:: actors:: loader:: LoadModule ;
196
192
197
193
use super :: * ;
198
194
@@ -201,7 +197,6 @@ mod default_mode {
201
197
console : Addr < ConsoleActor > ,
202
198
loader : Addr < LoaderActor > ,
203
199
loader_event_rx : mpsc:: UnboundedReceiver < LoaderEvent > ,
204
- pusher : Addr < PushManagerActor > ,
205
200
}
206
201
207
202
impl DefaultMode {
@@ -223,21 +218,18 @@ mod default_mode {
223
218
. auto_stop ( )
224
219
. start ( ) ;
225
220
226
- let pusher = PushManagerBuilder :: new ( console. clone ( ) ) . start ( ) ;
227
-
228
221
Ok ( Self {
229
222
deploy,
230
223
console,
231
224
loader,
232
225
loader_event_rx,
233
- pusher,
234
226
} )
235
227
}
236
228
237
229
pub async fn run ( self ) -> Result < ( ) > {
238
230
log:: debug!( "file: {:?}" , self . deploy. file) ;
239
231
let _discovery = if let Some ( file) = self . deploy . file . clone ( ) {
240
- self . loader . do_send ( LoadModule ( file) ) ;
232
+ self . loader . do_send ( LoadModule ( file. to_path_buf ( ) . into ( ) ) ) ;
241
233
None
242
234
} else {
243
235
Some (
@@ -252,36 +244,32 @@ mod default_mode {
252
244
} ;
253
245
254
246
let loader = self . loader . clone ( ) ;
255
- let pusher = self . pusher . clone ( ) ;
256
247
self . push_loaded_typegraphs ( ) ;
257
248
258
- let ret = match loader:: stopped ( loader) . await {
249
+ match loader:: stopped ( loader) . await {
259
250
Ok ( StopBehavior :: Restart ) => unreachable ! ( "LoaderActor should not restart" ) ,
260
251
Ok ( StopBehavior :: ExitSuccess ) => Ok ( ( ) ) ,
261
252
Ok ( StopBehavior :: ExitFailure ( msg) ) => bail ! ( "{msg}" ) ,
262
253
Err ( e) => panic ! ( "Loader actor stopped unexpectedly: {e:?}" ) ,
263
- } ;
264
-
265
- log:: debug!( "loader stopped, stopping pusher" ) ;
266
- let result = pusher. stop ( ) . await ;
267
- if let Err ( e) = result {
268
- System :: current ( ) . stop_with_code ( 1 ) ;
269
- return Err ( e) ;
270
254
}
271
- ret
272
255
}
273
256
274
257
fn push_loaded_typegraphs ( self ) {
275
- let pusher = self . pusher . clone ( ) ;
276
258
let mut event_rx = self . loader_event_rx ;
277
-
278
259
Arbiter :: current ( ) . spawn ( async move {
279
260
while let Some ( event) = event_rx. recv ( ) . await {
280
261
match event {
281
- LoaderEvent :: Typegraph ( tg) => {
282
- // TODO await -- no queue
283
- pusher. do_send ( Push :: new ( tg. into ( ) ) ) ;
284
- }
262
+ LoaderEvent :: Typegraph ( tg) => match tg. get_response_or_fail ( ) {
263
+ Ok ( res) => {
264
+ let push =
265
+ PushResult :: new ( self . console . clone ( ) , res. as_ref ( ) . clone ( ) )
266
+ . unwrap ( ) ;
267
+ if let Err ( e) = push. finalize ( ) {
268
+ panic ! ( "{}" , e. to_string( ) ) ;
269
+ }
270
+ }
271
+ Err ( e) => panic ! ( "{}" , e. to_string( ) ) ,
272
+ } ,
285
273
LoaderEvent :: Stopped ( b) => {
286
274
if let StopBehavior :: ExitFailure ( msg) = b {
287
275
panic ! ( "{msg}" ) ;
@@ -299,7 +287,7 @@ mod default_mode {
299
287
mod watch_mode {
300
288
use std:: time:: Duration ;
301
289
302
- use crate :: deploy :: actors:: push_manager :: { PushManager , PushManagerActor , PushManagerBuilder } ;
290
+ use watch_mode :: actors:: loader :: LoadModule ;
303
291
304
292
use super :: * ;
305
293
@@ -352,33 +340,25 @@ mod watch_mode {
352
340
) ?
353
341
. start ( ) ;
354
342
355
- let pusher = PushManagerBuilder :: new ( console. clone ( ) )
356
- . linear_backoff ( Duration :: from_secs ( 5 ) , 3 )
357
- . start ( ) ;
358
-
359
343
let actor_system = ActorSystem {
360
344
console : console. clone ( ) ,
361
345
watcher,
362
346
loader : loader. clone ( ) ,
363
- pusher : pusher. clone ( ) ,
364
347
} ;
365
348
366
- actor_system. push_loaded_typegraphs ( loader_event_rx) ;
349
+ actor_system. handle_loaded_typegraphs ( loader_event_rx) ;
367
350
actor_system. handle_watch_events ( watch_event_rx) ;
368
351
actor_system. update_ctrlc_handler ( ctrlc_handler_data. clone ( ) ) ;
369
352
370
353
// TODO wait for push lifecycle
371
354
match loader:: stopped ( loader) . await {
372
355
Ok ( StopBehavior :: ExitSuccess ) => {
373
- pusher. stop ( ) . await ?;
374
356
break ;
375
357
}
376
358
Ok ( StopBehavior :: Restart ) => {
377
- pusher. stop ( ) . await ?;
378
359
continue ;
379
360
}
380
361
Ok ( StopBehavior :: ExitFailure ( _) ) => {
381
- pusher. stop ( ) . await ?;
382
362
break ;
383
363
}
384
364
Err ( e) => {
@@ -394,19 +374,41 @@ mod watch_mode {
394
374
console : Addr < ConsoleActor > ,
395
375
watcher : Addr < WatcherActor > ,
396
376
loader : Addr < LoaderActor > ,
397
- pusher : Addr < PushManagerActor > ,
398
377
}
399
378
400
379
impl ActorSystem {
401
- fn push_loaded_typegraphs ( & self , event_rx : mpsc:: UnboundedReceiver < LoaderEvent > ) {
402
- let pusher = self . pusher . clone ( ) ;
380
+ fn handle_loaded_typegraphs ( & self , event_rx : mpsc:: UnboundedReceiver < LoaderEvent > ) {
381
+ let console = self . console . clone ( ) ;
382
+ let loader = self . loader . clone ( ) ;
403
383
Arbiter :: current ( ) . spawn ( async move {
404
384
let mut event_rx = event_rx;
405
385
while let Some ( event) = event_rx. recv ( ) . await {
406
386
match event {
407
387
LoaderEvent :: Typegraph ( tg) => {
408
- pusher. do_send ( Push :: new ( tg. into ( ) ) ) ;
409
- // TODO update deps
388
+ let response = ServerStore :: get_response_or_fail ( & tg. path )
389
+ . unwrap ( )
390
+ . as_ref ( )
391
+ . to_owned ( ) ;
392
+ match PushResult :: new ( console. clone ( ) , response) {
393
+ Ok ( push) => {
394
+ if let Err ( e) = push. finalize ( ) {
395
+ panic ! ( "{}" , e. to_string( ) ) ;
396
+ }
397
+ }
398
+ Err ( _) => {
399
+ // very basic retry
400
+ // TODO: implement something similar to the old 3 retries
401
+ let wait_ms = 3000 ;
402
+ console. warning ( format ! (
403
+ "Retrying {:?} after {}" ,
404
+ tg. path. display( ) ,
405
+ wait_ms,
406
+ ) ) ;
407
+ tokio:: time:: sleep ( Duration :: from_millis ( wait_ms) ) . await ;
408
+
409
+ loader. do_send ( LoadModule ( Arc :: new ( tg. path ) ) ) ;
410
+ }
411
+ }
410
412
}
411
413
LoaderEvent :: Stopped ( b) => {
412
414
if let StopBehavior :: ExitFailure ( msg) = b {
@@ -427,7 +429,6 @@ mod watch_mode {
427
429
let console = self . console . clone ( ) ;
428
430
let watcher = self . watcher . clone ( ) ;
429
431
let loader = self . loader . clone ( ) ;
430
- let pusher = self . pusher . clone ( ) ;
431
432
Arbiter :: current ( ) . spawn ( async move {
432
433
let mut watch_event_rx = watch_event_rx;
433
434
while let Some ( event) = watch_event_rx. recv ( ) . await {
@@ -441,15 +442,12 @@ mod watch_mode {
441
442
watcher. do_send ( actors:: watcher:: Stop ) ;
442
443
}
443
444
E :: TypegraphModuleChanged { typegraph_module } => {
444
- pusher. cancel_all_from ( & typegraph_module) . await . unwrap ( ) ;
445
445
loader. do_send ( ReloadModule (
446
446
typegraph_module. into ( ) ,
447
447
ReloadReason :: FileChanged ,
448
448
) ) ;
449
449
}
450
450
E :: TypegraphModuleDeleted { typegraph_module } => {
451
- // TODO registry
452
- pusher. cancel_all_from ( & typegraph_module) . await . unwrap ( ) ;
453
451
// TODO internally by the watcher??
454
452
watcher. do_send ( actors:: watcher:: RemoveTypegraph (
455
453
typegraph_module. clone ( ) ,
@@ -460,7 +458,6 @@ mod watch_mode {
460
458
typegraph_module,
461
459
dependency_path,
462
460
} => {
463
- pusher. cancel_all_from ( & typegraph_module) . await . unwrap ( ) ;
464
461
loader. do_send ( ReloadModule (
465
462
typegraph_module. into ( ) ,
466
463
ReloadReason :: DependencyChanged ( dependency_path) ,
0 commit comments