12
12
//! Consult [DeltaJoinPlan] documentation for details.
13
13
14
14
#![ allow( clippy:: op_ref) ]
15
+
15
16
use std:: collections:: { BTreeMap , BTreeSet } ;
16
17
17
18
use timely:: dataflow:: Scope ;
@@ -24,7 +25,7 @@ use mz_repr::{DatumVec, Diff, Row, RowArena};
24
25
use mz_storage_client:: types:: errors:: DataflowError ;
25
26
use mz_timely_util:: operator:: CollectionExt ;
26
27
27
- use crate :: render:: context:: { ArrangementFlavor , CollectionBundle , Context } ;
28
+ use crate :: render:: context:: { ArrangementFlavor , CollectionBundle , Context , ShutdownToken } ;
28
29
29
30
impl < G > Context < G , Row >
30
31
where
@@ -198,6 +199,7 @@ where
198
199
stream_thinning,
199
200
|t1, t2| t1. le ( t2) ,
200
201
closure,
202
+ self . shutdown_token . clone ( ) ,
201
203
)
202
204
} else {
203
205
build_halfjoin (
@@ -207,6 +209,7 @@ where
207
209
stream_thinning,
208
210
|t1, t2| t1. lt ( t2) ,
209
211
closure,
212
+ self . shutdown_token . clone ( ) ,
210
213
)
211
214
}
212
215
}
@@ -219,6 +222,7 @@ where
219
222
stream_thinning,
220
223
|t1, t2| t1. le ( t2) ,
221
224
closure,
225
+ self . shutdown_token . clone ( ) ,
222
226
)
223
227
} else {
224
228
build_halfjoin (
@@ -228,6 +232,7 @@ where
228
232
stream_thinning,
229
233
|t1, t2| t1. lt ( t2) ,
230
234
closure,
235
+ self . shutdown_token . clone ( ) ,
231
236
)
232
237
}
233
238
}
@@ -314,6 +319,7 @@ fn build_halfjoin<G, Tr, CF>(
314
319
prev_thinning : Vec < usize > ,
315
320
comparison : CF ,
316
321
closure : JoinClosure ,
322
+ shutdown_token : ShutdownToken ,
317
323
) -> (
318
324
Collection < G , ( Row , G :: Timestamp ) , Diff > ,
319
325
Collection < G , DataflowError , Diff > ,
@@ -364,6 +370,10 @@ where
364
370
|_timer, count| count > 1_000_000 ,
365
371
// TODO(mcsherry): consider `RefOrMut` in `half_join` interface to allow re-use.
366
372
move |key, stream_row, lookup_row, initial, time, diff1, diff2| {
373
+ // Check the shutdown token to avoid doing unnecessary work when the dataflow is
374
+ // shutting down.
375
+ shutdown_token. probe ( ) ?;
376
+
367
377
let temp_storage = RowArena :: new ( ) ;
368
378
let mut datums_local = datums. borrow_with_many ( & [ key, stream_row, lookup_row] ) ;
369
379
let row = closure. apply ( & mut datums_local, & temp_storage, & mut row_builder) ;
@@ -396,6 +406,10 @@ where
396
406
|_timer, count| count > 1_000_000 ,
397
407
// TODO(mcsherry): consider `RefOrMut` in `half_join` interface to allow re-use.
398
408
move |key, stream_row, lookup_row, initial, time, diff1, diff2| {
409
+ // Check the shutdown token to avoid doing unnecessary work when the dataflow is
410
+ // shutting down.
411
+ shutdown_token. probe ( ) ?;
412
+
399
413
let temp_storage = RowArena :: new ( ) ;
400
414
let mut datums_local = datums. borrow_with_many ( & [ key, stream_row, lookup_row] ) ;
401
415
let row = closure
0 commit comments