13
13
use std:: { io:: Cursor , sync:: Arc } ;
14
14
15
15
use futures:: future;
16
+ use futures:: stream:: FuturesUnordered ;
16
17
use itertools:: Itertools ;
17
18
use manifest:: ManifestReader ;
18
19
use manifest_list:: read_snapshot;
@@ -313,9 +314,8 @@ async fn datafiles(
313
314
None => Box :: new ( manifests. iter ( ) ) ,
314
315
} ;
315
316
316
- // Collect a vector of data files by creating a stream over the manifst files, fetch their content and return a flatten stream over their entries.
317
- Ok ( stream:: iter ( iter)
318
- . then ( move |file| {
317
+ let stream: FuturesUnordered < _ > = iter
318
+ . map ( move |file| {
319
319
let object_store = object_store. clone ( ) ;
320
320
async move {
321
321
let manifest_path = & file. manifest_path ;
@@ -329,35 +329,35 @@ async fn datafiles(
329
329
Ok :: < _ , Error > ( ( bytes, manifest_path, file. sequence_number ) )
330
330
}
331
331
} )
332
- . flat_map_unordered ( None , move |result| {
333
- let ( bytes, path, sequence_number) = result. unwrap ( ) ;
332
+ . collect ( ) ;
334
333
335
- let reader = ManifestReader :: new ( bytes) . unwrap ( ) ;
336
- stream:: iter ( reader) . try_filter_map ( move |mut x| {
337
- future:: ready ( {
338
- let sequence_number = if let Some ( sequence_number) = x. sequence_number ( ) {
339
- * sequence_number
340
- } else {
341
- * x. sequence_number_mut ( ) = Some ( sequence_number) ;
342
- sequence_number
343
- } ;
334
+ Ok ( stream. flat_map_unordered ( None , move |result| {
335
+ let ( bytes, path, sequence_number) = result. unwrap ( ) ;
344
336
345
- let filter = match sequence_number_range {
346
- ( Some ( start) , Some ( end) ) => {
347
- start < sequence_number && sequence_number <= end
348
- }
349
- ( Some ( start) , None ) => start < sequence_number,
350
- ( None , Some ( end) ) => sequence_number <= end,
351
- _ => true ,
352
- } ;
353
- if filter {
354
- Ok ( Some ( ( path. to_owned ( ) , x) ) )
355
- } else {
356
- Ok ( None )
357
- }
358
- } )
337
+ let reader = ManifestReader :: new ( bytes) . unwrap ( ) ;
338
+ stream:: iter ( reader) . try_filter_map ( move |mut x| {
339
+ future:: ready ( {
340
+ let sequence_number = if let Some ( sequence_number) = x. sequence_number ( ) {
341
+ * sequence_number
342
+ } else {
343
+ * x. sequence_number_mut ( ) = Some ( sequence_number) ;
344
+ sequence_number
345
+ } ;
346
+
347
+ let filter = match sequence_number_range {
348
+ ( Some ( start) , Some ( end) ) => start < sequence_number && sequence_number <= end,
349
+ ( Some ( start) , None ) => start < sequence_number,
350
+ ( None , Some ( end) ) => sequence_number <= end,
351
+ _ => true ,
352
+ } ;
353
+ if filter {
354
+ Ok ( Some ( ( path. to_owned ( ) , x) ) )
355
+ } else {
356
+ Ok ( None )
357
+ }
359
358
} )
360
- } ) )
359
+ } )
360
+ } ) )
361
361
}
362
362
363
363
/// delete all datafiles, manifests and metadata files, does not remove table from catalog
0 commit comments