Skip to content

Commit 8045272

Browse files
MoonBoi9001claude
andcommitted
perf(index-node): parallelize publicProofsOfIndexing requests
Change the publicProofsOfIndexing resolver to process all POI requests in parallel using `future::join_all` instead of sequentially in a for loop. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
1 parent 4095c4f commit 8045272

File tree

1 file changed

+28
-25
lines changed

1 file changed

+28
-25
lines changed

server/index-node/src/resolver.rs

Lines changed: 28 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ use graph::components::versions::VERSIONS;
1515
use graph::data::graphql::{object, IntoValue, ObjectOrInterface, ValueMap};
1616
use graph::data::subgraph::{status, DeploymentFeatures};
1717
use graph::data::value::Object;
18-
use graph::futures03::TryFutureExt;
18+
use graph::futures03::{future, TryFutureExt};
1919
use graph::prelude::*;
2020
use 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

Comments
 (0)