@@ -30,12 +30,12 @@ struct ReadData {
30
30
producer_tx : Sender < Message > ,
31
31
consumers : Senders ,
32
32
num_chunks : u64 ,
33
- producers_per_consumer : u64
34
33
}
35
34
type ProducerId = u64 ;
35
+ type NumProducers = u64 ;
36
36
enum Message {
37
37
Read ( ReadData , Buffer ) ,
38
- End ( ProducerId ) ,
38
+ End ( ProducerId , NumProducers ) ,
39
39
}
40
40
41
41
// Moving a generic Fn instance requires customization
@@ -163,7 +163,6 @@ fn read_file<T: 'static + Clone + Send + Sync, R: 'static + Clone + Sync + Send>
163
163
producer_chunk_size,
164
164
last_producer_chunk_size,
165
165
task_chunk_size,
166
- last_task_chunk_size,
167
166
last_prod_task_chunk_size,
168
167
chunks_per_producer,
169
168
reserved_size as usize ,
@@ -233,7 +232,7 @@ fn build_producers(num_producers: u64, filename: &str) -> Senders {
233
232
num_consumers,
234
233
num_producers as usize ,
235
234
) ;
236
- println ! ( "[{}] Sending {} bytes to consumer {}" , i, buffer. len( ) , c) ;
235
+ // println!("[{}] Sending {} bytes to consumer {}", i, buffer.len(), c);
237
236
consumers. insert ( c) ;
238
237
prev_consumer = c;
239
238
#[ cfg( feature = "print_ptr" ) ]
@@ -255,10 +254,10 @@ fn build_producers(num_producers: u64, filename: &str) -> Senders {
255
254
. expect ( & format ! ( "Cannot send buffer" ) ) ;
256
255
if offset as u64 >= end_offset {
257
256
// signal the end of stream to consumers
258
- consumers. iter ( ) . for_each ( |x| {
259
- println ! ( "{}>> Sending End of message to consumer {}" , i, x) ;
260
- let _ = rd. consumers [ * x]
261
- . send ( End ( i) ) ;
257
+ ( 0 ..rd . consumers . len ( ) ) . for_each ( |x| {
258
+ // println!("{}>> Sending End of message to consumer {}", i, x);
259
+ let _ = rd. consumers [ x]
260
+ . send ( End ( i, num_producers ) ) ;
262
261
} ) ;
263
262
break ;
264
263
}
@@ -289,7 +288,6 @@ fn build_consumers<T: 'static + Clone + Sync + Send, R: 'static + Clone + Sync +
289
288
let data = data. clone ( ) ;
290
289
let h = thread:: spawn ( move || {
291
290
let mut ret = Vec :: new ( ) ;
292
- let mut producers_per_consumer = 0 ;
293
291
let mut producers_end_signal_count = 0 ;
294
292
let mut bytes = 0 ;
295
293
loop {
@@ -300,9 +298,8 @@ fn build_consumers<T: 'static + Clone + Sync + Send, R: 'static + Clone + Sync +
300
298
if let Ok ( msg) = rx. recv ( ) {
301
299
match msg {
302
300
Read ( rd, buffer) => {
303
- if producers_per_consumer == 0 { producers_per_consumer = rd. producers_per_consumer ; }
304
301
bytes += buffer. len ( ) ;
305
- println ! ( "{}> Received {} bytes from [{}]" , i, buffer. len( ) , rd. producer_id) ;
302
+ // println!("{}> Received {} bytes from [{}]", i, buffer.len(), rd.producer_id);
306
303
ret. push ( (
307
304
rd. chunk_id ,
308
305
cc. call ( & buffer, data. clone ( ) , rd. chunk_id , rd. num_chunks ) ,
@@ -321,10 +318,10 @@ fn build_consumers<T: 'static + Clone + Sync + Send, R: 'static + Clone + Sync +
321
318
//break;
322
319
}
323
320
} ,
324
- End ( _prod_id) => {
321
+ End ( _prod_id, num_producers ) => {
325
322
producers_end_signal_count += 1 ;
326
- println ! ( "{}> received End signal from {}" , i, _prod_id) ;
327
- if producers_per_consumer == producers_end_signal_count {
323
+ println ! ( "{}> received End signal from {} {}/{} " , i, _prod_id, producers_end_signal_count , num_producers ) ;
324
+ if producers_end_signal_count >= num_producers {
328
325
329
326
//println!(
330
327
// "{}>> {} {}/{}",
@@ -335,6 +332,9 @@ fn build_consumers<T: 'static + Clone + Sync + Send, R: 'static + Clone + Sync +
335
332
}
336
333
}
337
334
} else {
335
+ // we do not care if the communication channel was closed
336
+ // since it only happen when the producer is finished
337
+ // of an error elsewhere occurred
338
338
//println!("{}> Exiting", i);
339
339
//break;
340
340
}
@@ -362,7 +362,6 @@ fn launch(
362
362
producer_chunk_size : u64 ,
363
363
last_producer_chunk_size : u64 ,
364
364
task_chunk_size : u64 ,
365
- last_task_chunk_size : u64 ,
366
365
last_producer_task_chunk_size : u64 ,
367
366
chunks_per_producer : u64 ,
368
367
reserved_size : usize ,
@@ -393,7 +392,6 @@ fn launch(
393
392
consumers : tx_consumers. clone ( ) ,
394
393
producer_id : 0 , // will be overwritten
395
394
num_chunks : chunks_per_producer * num_producers,
396
- producers_per_consumer : num_producers
397
395
} ;
398
396
tx. send ( Message :: Read ( rd, buffer) ) . expect ( "Cannot send" ) ;
399
397
}
0 commit comments