Skip to content

Commit f99d68c

Browse files
authored
timeout when trying to get net_identifiers at startup (#5568)
* timeout when trying to get net_identifiers at startup * fix genesis validation
1 parent 18d19bf commit f99d68c

File tree

8 files changed

+49
-14
lines changed

8 files changed

+49
-14
lines changed

graph/src/components/adapter.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -290,7 +290,6 @@ impl<T: NetIdentifiable + Clone + 'static> ProviderManager<T> {
290290
.unwrap_or_default()
291291
}
292292

293-
#[cfg(debug_assertions)]
294293
pub async fn mark_all_valid(&self) {
295294
for (_, status) in self.inner.status.iter() {
296295
let mut s = status.write().await;

graph/src/firehose/endpoints.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ impl GenesisDecoder for SubstreamsGenesisDecoder {
121121
start_cursor: "".to_string(),
122122
stop_block_num: 0,
123123
final_blocks_only: true,
124-
production_mode: false,
124+
production_mode: true,
125125
output_module: "map_blocks".to_string(),
126126
modules: package.modules,
127127
debug_initial_store_snapshot_for_modules: vec![],

node/src/bin/manager.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1009,7 +1009,7 @@ impl Context {
10091009
let logger = self.logger.clone();
10101010
let registry = self.metrics_registry();
10111011
let metrics = Arc::new(EndpointMetrics::mock());
1012-
Networks::from_config(logger, &self.config, registry, metrics, block_store).await
1012+
Networks::from_config(logger, &self.config, registry, metrics, block_store, false).await
10131013
}
10141014

10151015
fn chain_store(self, chain_name: &str) -> anyhow::Result<Arc<ChainStore>> {

node/src/chain.rs

Lines changed: 20 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ use graph::log::factory::LoggerFactory;
3232
use graph::prelude::anyhow;
3333
use graph::prelude::MetricsRegistry;
3434
use graph::slog::{debug, error, info, o, warn, Logger};
35+
use graph::tokio::time::timeout;
3536
use graph::url::Url;
3637
use graph::util::security::SafeDisplay;
3738
use graph_chain_ethereum::{self as ethereum, Transport};
@@ -432,13 +433,17 @@ pub async fn networks_as_chains(
432433
let chain_store = match store.chain_store(chain_id) {
433434
Some(c) => c,
434435
None => {
435-
let ident = match networks.chain_identifier(&logger, chain_id).await {
436-
Ok(ident) => ident,
437-
Err(err) if !config.genesis_validation_enabled => {
438-
warn!(&logger, "unable to fetch genesis for {}. Err: {}.falling back to the default value because validation is disabled", chain_id, err);
436+
let ident = match timeout(
437+
config.genesis_validation_timeout,
438+
networks.chain_identifier(&logger, chain_id),
439+
)
440+
.await
441+
{
442+
Ok(Ok(ident)) => ident,
443+
err => {
444+
warn!(&logger, "unable to fetch genesis for {}. Err: {:?}.falling back to the default value", chain_id, err);
439445
ChainIdentifier::default()
440446
}
441-
err => err.expect("must be able to get chain identity to create a store"),
442447
};
443448
store
444449
.create_chain_store(chain_id, ident)
@@ -708,10 +713,16 @@ mod test {
708713
let metrics_registry = Arc::new(MetricsRegistry::mock());
709714
let ident_validator = Arc::new(NoopIdentValidator);
710715

711-
let networks =
712-
Networks::from_config(logger, &config, metrics_registry, metrics, ident_validator)
713-
.await
714-
.expect("can parse config");
716+
let networks = Networks::from_config(
717+
logger,
718+
&config,
719+
metrics_registry,
720+
metrics,
721+
ident_validator,
722+
false,
723+
)
724+
.await
725+
.expect("can parse config");
715726
let mut network_names = networks
716727
.adapters
717728
.iter()

node/src/main.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -271,6 +271,7 @@ async fn main() {
271271
metrics_registry.cheap_clone(),
272272
endpoint_metrics,
273273
validator,
274+
env_vars.genesis_validation_enabled,
274275
)
275276
.await
276277
.expect("unable to parse network configuration");

node/src/manager/commands/config.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,7 @@ pub async fn provider(
177177
registry,
178178
metrics,
179179
Arc::new(NoopIdentValidator),
180+
false,
180181
)
181182
.await?;
182183
let network: ChainId = network.into();

node/src/manager/commands/run.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,7 @@ pub async fn run(
100100
metrics_registry.cheap_clone(),
101101
endpoint_metrics,
102102
ident_validator,
103+
env_vars.genesis_validation_enabled,
103104
)
104105
.await
105106
.expect("unable to parse network configuration");

node/src/network_setup.rs

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -239,6 +239,7 @@ impl Networks {
239239
registry: Arc<MetricsRegistry>,
240240
endpoint_metrics: Arc<EndpointMetrics>,
241241
store: Arc<dyn IdentValidator>,
242+
genesis_validation_enabled: bool,
242243
) -> Result<Networks> {
243244
if config.query_only(&config.node) {
244245
return Ok(Networks::noop());
@@ -264,13 +265,19 @@ impl Networks {
264265
.chain(substreams.into_iter())
265266
.collect();
266267

267-
Ok(Networks::new(&logger, adapters, store))
268+
Ok(Networks::new(
269+
&logger,
270+
adapters,
271+
store,
272+
genesis_validation_enabled,
273+
))
268274
}
269275

270276
fn new(
271277
logger: &Logger,
272278
adapters: Vec<AdapterConfiguration>,
273279
validator: Arc<dyn IdentValidator>,
280+
genesis_validation_enabled: bool,
274281
) -> Self {
275282
let adapters2 = adapters.clone();
276283
let eth_adapters = adapters.iter().flat_map(|a| a.as_rpc()).cloned().map(
@@ -316,7 +323,7 @@ impl Networks {
316323
)
317324
.collect_vec();
318325

319-
Self {
326+
let s = Self {
320327
adapters: adapters2,
321328
rpc_provider_manager: ProviderManager::new(
322329
logger.clone(),
@@ -337,7 +344,22 @@ impl Networks {
337344
.map(|(chain_id, endpoints)| (chain_id, endpoints)),
338345
validator.cheap_clone(),
339346
),
347+
};
348+
349+
if !genesis_validation_enabled {
350+
let (r, f, s) = (
351+
s.rpc_provider_manager.clone(),
352+
s.firehose_provider_manager.clone(),
353+
s.substreams_provider_manager.clone(),
354+
);
355+
graph::spawn(async move {
356+
r.mark_all_valid().await;
357+
f.mark_all_valid().await;
358+
s.mark_all_valid().await;
359+
});
340360
}
361+
362+
s
341363
}
342364

343365
pub async fn block_ingestors(

0 commit comments

Comments
 (0)