@@ -2812,21 +2812,32 @@ mod tests {
2812
2812
2813
2813
println ! ( "All partitions: {:#?}" , partitions) ;
2814
2814
2815
- let plans = service
2816
- . plan_query ( "SELECT sum(num) from foo.numbers where num = 50" )
2817
- . await
2818
- . unwrap ( ) ;
2815
+ // Semi-busy-wait for, or, seemingly, induce, compaction for 2000 ms.
2816
+ let num_attempts = 100 ;
2817
+ for i in 0 ..num_attempts {
2818
+ tokio :: time :: sleep ( Duration :: from_millis ( 20 ) ) . await ;
2819
2819
2820
- let worker_plan = pp_phys_plan ( plans. worker . as_ref ( ) ) ;
2821
- println ! ( "Worker Plan: {}" , worker_plan) ;
2822
- let parquet_regex = Regex :: new ( r"\d+-[a-z0-9]+.parquet" ) . unwrap ( ) ;
2823
- let matches = parquet_regex. captures_iter ( & worker_plan) . count ( ) ;
2824
- assert ! (
2825
- // TODO 2 because partition pruning doesn't respect half open intervals yet
2826
- matches < 3 && matches > 0 ,
2827
- "{}\n should have 2 and less partition scan nodes" ,
2828
- worker_plan
2829
- ) ;
2820
+ let plans = service
2821
+ . plan_query ( "SELECT sum(num) from foo.numbers where num = 50" )
2822
+ . await
2823
+ . unwrap ( ) ;
2824
+
2825
+ let worker_plan = pp_phys_plan ( plans. worker . as_ref ( ) ) ;
2826
+ let parquet_regex = Regex :: new ( r"\d+-[a-z0-9]+\.parquet" ) . unwrap ( ) ;
2827
+ let matches = parquet_regex. captures_iter ( & worker_plan) . count ( ) ;
2828
+ let chunk_parquet_regex = Regex :: new ( r"\d+-[a-z0-9]+\.chunk\.parquet" ) . unwrap ( ) ;
2829
+ let chunk_matches = chunk_parquet_regex. captures_iter ( & worker_plan) . count ( ) ;
2830
+ if matches < 3 && matches > 0 && chunk_matches == 0 {
2831
+ break ;
2832
+ } else if i == num_attempts - 1 {
2833
+ panic ! (
2834
+ "{}\n should have 2 and less partition scan nodes, matches = {}, chunk_matches = {}" ,
2835
+ worker_plan,
2836
+ matches,
2837
+ chunk_matches,
2838
+ ) ;
2839
+ }
2840
+ }
2830
2841
} )
2831
2842
. await ;
2832
2843
}
0 commit comments