@@ -15,7 +15,7 @@ use graph::components::versions::VERSIONS;
1515use graph:: data:: graphql:: { object, IntoValue , ObjectOrInterface , ValueMap } ;
1616use graph:: data:: subgraph:: { status, DeploymentFeatures } ;
1717use graph:: data:: value:: Object ;
18- use graph:: futures03:: TryFutureExt ;
18+ use graph:: futures03:: { future , TryFutureExt } ;
1919use graph:: prelude:: * ;
2020use graph_graphql:: prelude:: { a, ExecutionContext , Resolver } ;
2121
@@ -417,28 +417,29 @@ where
417417 return Err ( QueryExecutionError :: TooExpensive ) ;
418418 }
419419
420- let mut public_poi_results = vec ! [ ] ;
421- for request in requests {
422- let ( poi_result, request) = match self
423- . store
424- . get_public_proof_of_indexing ( & request. deployment , request. block_number , self )
425- . await
426- {
427- Ok ( Some ( poi) ) => ( Some ( poi) , request) ,
428- Ok ( None ) => ( None , request) ,
429- Err ( e) => {
430- error ! (
431- self . logger,
432- "Failed to query public proof of indexing" ;
433- "subgraph" => & request. deployment,
434- "block" => format!( "{}" , request. block_number) ,
435- "error" => format!( "{:?}" , e)
436- ) ;
437- ( None , request)
438- }
439- } ;
420+ // Process all POI requests in parallel for better throughput
421+ let poi_futures: Vec < _ > = requests
422+ . into_iter ( )
423+ . map ( |request| async move {
424+ let poi_result = match self
425+ . store
426+ . get_public_proof_of_indexing ( & request. deployment , request. block_number , self )
427+ . await
428+ {
429+ Ok ( Some ( poi) ) => Some ( poi) ,
430+ Ok ( None ) => None ,
431+ Err ( e) => {
432+ error ! (
433+ self . logger,
434+ "Failed to query public proof of indexing" ;
435+ "subgraph" => & request. deployment,
436+ "block" => format!( "{}" , request. block_number) ,
437+ "error" => format!( "{:?}" , e)
438+ ) ;
439+ None
440+ }
441+ } ;
440442
441- public_poi_results. push (
442443 PublicProofOfIndexingResult {
443444 deployment : request. deployment ,
444445 block : match poi_result {
@@ -447,9 +448,11 @@ where
447448 } ,
448449 proof_of_indexing : poi_result. map ( |( _, poi) | poi) ,
449450 }
450- . into_value ( ) ,
451- )
452- }
451+ . into_value ( )
452+ } )
453+ . collect ( ) ;
454+
455+ let public_poi_results = future:: join_all ( poi_futures) . await ;
453456
454457 Ok ( r:: Value :: List ( public_poi_results) )
455458 }
0 commit comments