@@ -215,7 +215,7 @@ fn uri_to_spec(uri: &Uri) -> Result<ResourceSpec, SpecParseError> {
215
215
216
216
#[ derive( Clone , Debug ) ]
217
217
pub enum TaskStatus {
218
- Pending ,
218
+ Pending ( f32 ) ,
219
219
Error ,
220
220
Completed ,
221
221
}
@@ -348,9 +348,9 @@ impl Service {
348
348
}
349
349
350
350
async fn serve ( self : Arc < Self > , req : Request < Body > ) -> Result < Response < Body > , Infallible > {
351
- match req. method ( ) {
352
- & Method :: POST => self . post ( req) . await ,
353
- & Method :: GET => self . get ( req) . await ,
351
+ match * req. method ( ) {
352
+ Method :: POST => self . post ( req) . await ,
353
+ Method :: GET => self . get ( req) . await ,
354
354
_ => todo ! ( ) ,
355
355
}
356
356
}
@@ -389,7 +389,9 @@ impl Service {
389
389
. unwrap ( )
390
390
. chunks ( 100 ) ;
391
391
let ( id, hnsw) = self
392
- . process_operation_chunks ( opstream, domain, commit, previous, & index_id)
392
+ . process_operation_chunks (
393
+ opstream, domain, commit, previous, & index_id, & task_id,
394
+ )
393
395
. await ;
394
396
self . set_index ( id, hnsw. into ( ) ) . await ;
395
397
self . clear_pending ( & index_id) . await ;
@@ -439,6 +441,7 @@ impl Service {
439
441
commit : String ,
440
442
previous : Option < String > ,
441
443
index_id : & str ,
444
+ task_id : & str ,
442
445
) -> ( String , HnswIndex ) {
443
446
let id = create_index_name ( & domain, & commit) ;
444
447
let mut hnsw = self
@@ -448,6 +451,8 @@ impl Service {
448
451
previous,
449
452
} )
450
453
. await ;
454
+ self . set_task_status ( task_id. to_string ( ) , TaskStatus :: Pending ( 0.3 ) )
455
+ . await ;
451
456
while let Some ( structs) = opstream. next ( ) . await {
452
457
let new_ops = operations_to_point_operations (
453
458
& domain. clone ( ) ,
@@ -458,6 +463,8 @@ impl Service {
458
463
. await ;
459
464
hnsw = start_indexing_from_operations ( hnsw, new_ops) . unwrap ( ) ;
460
465
}
466
+ self . set_task_status ( task_id. to_string ( ) , TaskStatus :: Pending ( 0.8 ) )
467
+ . await ;
461
468
let path = self . path . clone ( ) ;
462
469
serialize_index ( path, index_id, hnsw. clone ( ) ) . unwrap ( ) ;
463
470
( id, hnsw)
@@ -472,7 +479,7 @@ impl Service {
472
479
previous,
473
480
} ) => {
474
481
let task_id = Service :: generate_task ( ) ;
475
- self . set_task_status ( task_id. clone ( ) , TaskStatus :: Pending )
482
+ self . set_task_status ( task_id. clone ( ) , TaskStatus :: Pending ( 0.0 ) )
476
483
. await ;
477
484
match self . start_indexing ( domain, commit, previous, task_id. clone ( ) ) {
478
485
Ok ( ( ) ) => Ok ( Response :: builder ( ) . body ( task_id. into ( ) ) . unwrap ( ) ) ,
@@ -500,13 +507,19 @@ impl Service {
500
507
}
501
508
Ok ( ResourceSpec :: CheckTask { task_id } ) => {
502
509
if let Some ( state) = self . get_task_status ( & task_id) . await {
503
- Ok ( Response :: builder ( )
504
- . body ( format ! ( "{:?}" , state) . into ( ) )
505
- . unwrap ( ) )
510
+ match state {
511
+ TaskStatus :: Pending ( f) => {
512
+ Ok ( Response :: builder ( ) . body ( format ! ( "{}" , f) . into ( ) ) . unwrap ( ) )
513
+ }
514
+ TaskStatus :: Error => Ok ( Response :: builder ( )
515
+ . body ( format ! ( "{:?}" , state) . into ( ) )
516
+ . unwrap ( ) ) ,
517
+ TaskStatus :: Completed => {
518
+ Ok ( Response :: builder ( ) . body ( format ! ( "{}" , 1.0 ) . into ( ) ) . unwrap ( ) )
519
+ }
520
+ }
506
521
} else {
507
- Ok ( Response :: builder ( )
508
- . body ( format ! ( "{:?}" , TaskStatus :: Completed ) . into ( ) )
509
- . unwrap ( ) )
522
+ Ok ( Response :: builder ( ) . body ( format ! ( "{}" , 1.0 ) . into ( ) ) . unwrap ( ) )
510
523
}
511
524
}
512
525
Ok ( ResourceSpec :: DuplicateCandidates {
0 commit comments