@@ -23,7 +23,10 @@ use tracing::instrument::Instrument;
23
23
24
24
use super :: { Store , remote:: GetConnection } ;
25
25
use crate :: {
26
- protocol:: { GetManyRequest , GetRequest } , util:: sink:: { Drain , IrpcSenderRefSink , Sink , TokioMpscSenderSink } , BlobFormat , Hash , HashAndFormat
26
+ BlobFormat , Hash , HashAndFormat ,
27
+ get:: request,
28
+ protocol:: { GetManyRequest , GetRequest } ,
29
+ util:: sink:: { Drain , IrpcSenderRefSink , Sink , TokioMpscSenderSink } ,
27
30
} ;
28
31
29
32
#[ derive( Debug , Clone ) ]
@@ -134,12 +137,16 @@ async fn handle_download_split_impl(
134
137
request : DownloadRequest ,
135
138
tx : & mut spsc:: Sender < DownloadProgessItem > ,
136
139
) -> anyhow:: Result < ( ) > {
140
+ println ! ( "Handling download split" ) ;
137
141
let providers = request. providers ;
138
142
let requests = split_request ( & request. request , & providers, & pool, & store, Drain ) . await ?;
143
+ let requests = requests. collect :: < Vec < _ > > ( ) ;
144
+ println ! ( "Split into {:?} requests" , requests) ;
139
145
// todo: this is it's own mini actor, we should probably refactor this out
140
146
let ( progress_tx, progress_rx) = mpsc:: channel ( 32 ) ;
141
147
let mut futs = stream:: iter ( requests. into_iter ( ) . enumerate ( ) )
142
148
. map ( |( id, request) | {
149
+ println ! ( "Spawning download fut for request {id} {request:?}" ) ;
143
150
let pool = pool. clone ( ) ;
144
151
let providers = providers. clone ( ) ;
145
152
let store = store. clone ( ) ;
@@ -178,7 +185,6 @@ async fn handle_download_split_impl(
178
185
tx. send( item) . await ?;
179
186
} ,
180
187
res = futs. next( ) => {
181
- println!( "Got result: {:?}" , res) ;
182
188
match res {
183
189
Some ( ( hash, Ok ( ( ) ) ) ) => {
184
190
}
@@ -245,7 +251,8 @@ impl SupportedRequest for HashAndFormat {
245
251
( match self . format {
246
252
BlobFormat :: Raw => GetRequest :: blob ( self . hash ) ,
247
253
BlobFormat :: HashSeq => GetRequest :: all ( self . hash ) ,
248
- } ) . into ( )
254
+ } )
255
+ . into ( )
249
256
}
250
257
}
251
258
@@ -387,7 +394,7 @@ async fn split_request<'a>(
387
394
) -> anyhow:: Result < Box < dyn Iterator < Item = GetRequest > + Send + ' a > > {
388
395
Ok ( match request {
389
396
FiniteRequest :: Get ( req) => {
390
- let Some ( first) = req. ranges . iter ( ) . next ( ) else {
397
+ let Some ( first) = req. ranges . iter_infinite ( ) . next ( ) else {
391
398
return Ok ( Box :: new ( std:: iter:: empty ( ) ) ) ;
392
399
} ;
393
400
let first = GetRequest :: blob ( req. hash ) ;
@@ -397,7 +404,7 @@ async fn split_request<'a>(
397
404
let n = size / 32 ;
398
405
Box :: new (
399
406
req. ranges
400
- . iter ( )
407
+ . iter_infinite ( )
401
408
. take ( n as usize + 1 )
402
409
. enumerate ( )
403
410
. filter_map ( |( i, ranges) | {
0 commit comments