1
1
use crate :: bors:: event:: BorsEvent ;
2
- use crate :: bors:: merge_queue:: { MergeQueueEvent , handle_merge_queue } ;
2
+ use crate :: bors:: merge_queue:: { MergeQueueEvent , start_merge_queue } ;
3
3
use crate :: bors:: mergeable_queue:: {
4
4
MergeableQueueReceiver , MergeableQueueSender , create_mergeable_queue,
5
5
handle_mergeable_queue_item,
@@ -209,22 +209,22 @@ pub fn create_bors_process(
209
209
) -> BorsProcess {
210
210
let ( repository_tx, repository_rx) = mpsc:: channel :: < BorsRepositoryEvent > ( 1024 ) ;
211
211
let ( global_tx, global_rx) = mpsc:: channel :: < BorsGlobalEvent > ( 1024 ) ;
212
- let ( merge_queue_tx, merge_queue_rx) = mpsc:: channel :: < MergeQueueEvent > ( 128 ) ;
213
212
let ( mergeable_queue_tx, mergeable_queue_rx) = create_mergeable_queue ( ) ;
214
213
215
214
let mq_tx = mergeable_queue_tx. clone ( ) ;
215
+ let ctx = Arc :: new ( ctx) ;
216
+
217
+ let ( merge_queue_tx, merge_queue_fut) = start_merge_queue ( ctx. clone ( ) ) ;
216
218
let merge_queue_tx_clone = merge_queue_tx. clone ( ) ;
217
219
218
220
let service = async move {
219
- let ctx = Arc :: new ( ctx) ;
220
-
221
221
// In tests, we shutdown these futures by dropping the channel sender,
222
222
// In that case, we need to wait until both of these futures resolve,
223
223
// to make sure that they are able to handle all the events in the queue
224
224
// before finishing.
225
225
#[ cfg( test) ]
226
226
{
227
- tokio:: join!(
227
+ let _ = tokio:: join!(
228
228
consume_repository_events( ctx. clone( ) , repository_rx, mq_tx. clone( ) ) ,
229
229
consume_global_events(
230
230
ctx. clone( ) ,
@@ -235,7 +235,7 @@ pub fn create_bors_process(
235
235
team_api
236
236
) ,
237
237
consume_mergeable_queue( ctx. clone( ) , mergeable_queue_rx) ,
238
- consume_merge_queue ( ctx , merge_queue_rx )
238
+ merge_queue_fut
239
239
) ;
240
240
}
241
241
// In real execution, the bot runs forever. If there is something that finishes
@@ -253,8 +253,11 @@ pub fn create_bors_process(
253
253
_ = consume_mergeable_queue( ctx. clone( ) , mergeable_queue_rx) => {
254
254
tracing:: error!( "Mergeable queue handling process has ended" )
255
255
}
256
- _ = consume_merge_queue( ctx. clone( ) , merge_queue_rx) => {
257
- tracing:: error!( "Merge queue handling process has ended" )
256
+ result = merge_queue_fut => {
257
+ match result {
258
+ Ok ( ( ) ) => tracing:: error!( "Merge queue handling process has ended" ) ,
259
+ Err ( e) => tracing:: error!( "Merge queue handling process has ended with error: {:?}" , e)
260
+ }
258
261
}
259
262
}
260
263
}
@@ -338,21 +341,6 @@ async fn consume_mergeable_queue(
338
341
}
339
342
}
340
343
341
- async fn consume_merge_queue (
342
- ctx : Arc < BorsContext > ,
343
- mut merge_queue_rx : mpsc:: Receiver < MergeQueueEvent > ,
344
- ) {
345
- while merge_queue_rx. recv ( ) . await . is_some ( ) {
346
- let ctx = ctx. clone ( ) ;
347
-
348
- let span = tracing:: info_span!( "MergeQueue" ) ;
349
- tracing:: debug!( "Processing merge queue" ) ;
350
- if let Err ( error) = handle_merge_queue ( ctx) . instrument ( span. clone ( ) ) . await {
351
- handle_root_error ( span, error) ;
352
- }
353
- }
354
- }
355
-
356
344
#[ allow( unused_variables) ]
357
345
fn handle_root_error ( span : Span , error : Error ) {
358
346
// In tests, we want to panic on all errors.
0 commit comments