1
- use std:: sync:: Arc ;
2
1
use std:: sync:: atomic:: Ordering ;
3
2
use std:: thread;
3
+ use std:: time:: Duration ;
4
4
5
- use bus:: Bus ;
6
5
use magnetic:: Consumer ;
7
6
use magnetic:: buffer:: dynamic:: DynamicBufferP2 ;
8
7
use thiserror:: Error ;
9
8
10
- use crate :: SHUTDOWN ;
11
9
use crate :: publisher:: types:: {
12
10
Command , CommandSender , Config , LocalId , Status , StatusReceiver , WorkerId ,
13
11
} ;
14
12
use crate :: publisher:: worker:: { Worker , WorkerError } ;
15
- use crate :: types:: { MessageReceiver , SubscribeReposReceiver } ;
13
+ use crate :: types:: SubscribeReposReceiver ;
14
+ use crate :: { SHUTDOWN , ValidatorManager } ;
16
15
17
16
const CAPACITY : usize = 1024 ;
17
+ const SLEEP : Duration = Duration :: from_millis ( 10 ) ;
18
18
19
19
#[ derive( Debug , Error ) ]
20
20
pub enum ManagerError {
@@ -36,22 +36,20 @@ struct WorkerHandle {
36
36
pub struct Manager {
37
37
workers : Box < [ WorkerHandle ] > ,
38
38
next_id : WorkerId ,
39
- message_rx : MessageReceiver ,
40
- bus : Bus < Arc < Vec < u8 > > > ,
41
39
status_rx : StatusReceiver ,
42
40
subscribe_repos_rx : SubscribeReposReceiver ,
43
41
}
44
42
45
43
impl Manager {
46
44
pub fn new (
47
- n_workers : usize , message_rx : MessageReceiver , subscribe_repos_rx : SubscribeReposReceiver ,
45
+ n_workers : usize , validator : & mut ValidatorManager ,
46
+ subscribe_repos_rx : SubscribeReposReceiver ,
48
47
) -> Result < Self , ManagerError > {
49
- let mut bus = Bus :: new ( CAPACITY ) ;
50
48
let ( status_tx, status_rx) =
51
49
magnetic:: mpsc:: mpsc_queue ( DynamicBufferP2 :: new ( CAPACITY ) . unwrap ( ) ) ;
52
50
let workers = ( 0 ..n_workers)
53
51
. map ( |worker_id| {
54
- let message_rx = bus . add_rx ( ) ;
52
+ let message_rx = validator . subscribe ( ) ;
55
53
let status_tx = status_tx. clone ( ) ;
56
54
let ( command_tx, command_rx) = rtrb:: RingBuffer :: new ( CAPACITY ) ;
57
55
let thread_handle = thread:: spawn ( move || {
@@ -63,15 +61,15 @@ impl Manager {
63
61
Ok ( Self {
64
62
workers : workers. into_boxed_slice ( ) ,
65
63
next_id : WorkerId ( 0 ) ,
66
- message_rx,
67
- bus,
68
64
status_rx,
69
65
subscribe_repos_rx,
70
66
} )
71
67
}
72
68
73
69
pub fn run ( mut self ) -> Result < ( ) , ManagerError > {
74
- while self . update ( ) ? { }
70
+ while self . update ( ) ? {
71
+ thread:: sleep ( SLEEP ) ;
72
+ }
75
73
self . shutdown ( )
76
74
}
77
75
@@ -103,17 +101,6 @@ impl Manager {
103
101
}
104
102
}
105
103
106
- for _ in 0 ..32 {
107
- match self . message_rx . try_recv_ref ( ) {
108
- Ok ( msg) => {
109
- self . bus . try_broadcast ( Arc :: new ( msg. data . clone ( ) . into ( ) ) ) . unwrap ( ) ;
110
- }
111
- Err ( thingbuf:: mpsc:: errors:: TryRecvError :: Empty ) => break ,
112
- Err ( thingbuf:: mpsc:: errors:: TryRecvError :: Closed ) => return Ok ( false ) ,
113
- Err ( _) => unreachable ! ( ) ,
114
- }
115
- }
116
-
117
104
if let Ok ( subscribe_repos) = self . subscribe_repos_rx . pop ( ) {
118
105
let config = Config {
119
106
stream : subscribe_repos. stream ,
0 commit comments