Skip to content

Commit b5f9496

Browse files
committed
chain, core, graph: Make subgraph startup less chatty
Instead of logging lots of messages that are uninteresting on the happy path, make sure that errors contain context that allow tracing back to which operation failed. Also add a little more information in the higher-level 'resolveing from IPFS' messages
1 parent d2c7cd7 commit b5f9496

File tree

7 files changed

+102
-50
lines changed

7 files changed

+102
-50
lines changed

chain/arweave/src/data_source.rs

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
use graph::anyhow::Context;
12
use graph::blockchain::{Block, TriggerWithHandler};
23
use graph::components::store::StoredDynamicDataSource;
34
use graph::data::subgraph::DataSourceContext;
@@ -6,7 +7,7 @@ use graph::{
67
anyhow::{anyhow, Error},
78
blockchain::{self, Blockchain},
89
prelude::{
9-
async_trait, info, BlockNumber, CheapClone, DataSourceTemplateInfo, Deserialize, Link,
10+
async_trait, BlockNumber, CheapClone, DataSourceTemplateInfo, Deserialize, Link,
1011
LinkResolver, Logger,
1112
},
1213
semver,
@@ -231,9 +232,14 @@ impl blockchain::UnresolvedDataSource<Chain> for UnresolvedDataSource {
231232
context,
232233
} = self;
233234

234-
info!(logger, "Resolve data source"; "name" => &name, "source_address" => format_args!("{:?}", base64_url::encode(&source.owner.clone().unwrap_or_default())), "source_start_block" => source.start_block);
235-
236-
let mapping = mapping.resolve(resolver, logger).await?;
235+
let mapping = mapping.resolve(resolver, logger).await.with_context(|| {
236+
format!(
237+
"failed to resolve data source {} with source_address {:?} and start_block {}",
238+
name,
239+
base64_url::encode(&source.owner.clone().unwrap_or_default()),
240+
source.start_block
241+
)
242+
})?;
237243

238244
DataSource::from_manifest(kind, network, name, source, mapping, context)
239245
}
@@ -265,13 +271,16 @@ impl blockchain::UnresolvedDataSourceTemplate<Chain> for UnresolvedDataSourceTem
265271
mapping,
266272
} = self;
267273

268-
info!(logger, "Resolve data source template"; "name" => &name);
274+
let mapping = mapping
275+
.resolve(resolver, logger)
276+
.await
277+
.with_context(|| format!("failed to resolve data source template {}", name))?;
269278

270279
Ok(DataSourceTemplate {
271280
kind,
272281
network,
273282
name,
274-
mapping: mapping.resolve(resolver, logger).await?,
283+
mapping,
275284
})
276285
}
277286
}
@@ -324,8 +333,10 @@ impl UnresolvedMapping {
324333

325334
let api_version = semver::Version::parse(&api_version)?;
326335

327-
info!(logger, "Resolve mapping"; "link" => &link.link);
328-
let module_bytes = resolver.cat(logger, &link).await?;
336+
let module_bytes = resolver
337+
.cat(logger, &link)
338+
.await
339+
.with_context(|| format!("failed to resolve mapping {}", link.link))?;
329340

330341
Ok(Mapping {
331342
api_version,

chain/cosmos/src/data_source.rs

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
use std::collections::{HashMap, HashSet};
22
use std::sync::Arc;
33

4-
use anyhow::{Error, Result};
4+
use anyhow::{Context, Error, Result};
55

66
use graph::{
77
blockchain::{self, Block, Blockchain, TriggerWithHandler},
88
components::store::StoredDynamicDataSource,
99
data::subgraph::DataSourceContext,
1010
prelude::{
11-
anyhow, async_trait, info, BlockNumber, CheapClone, DataSourceTemplateInfo, Deserialize,
12-
Link, LinkResolver, Logger,
11+
anyhow, async_trait, BlockNumber, CheapClone, DataSourceTemplateInfo, Deserialize, Link,
12+
LinkResolver, Logger,
1313
},
1414
};
1515

@@ -320,9 +320,12 @@ impl blockchain::UnresolvedDataSource<Chain> for UnresolvedDataSource {
320320
context,
321321
} = self;
322322

323-
info!(logger, "Resolve data source"; "name" => &name, "source" => &source.start_block);
324-
325-
let mapping = mapping.resolve(resolver, logger).await?;
323+
let mapping = mapping.resolve(resolver, logger).await.with_context(|| {
324+
format!(
325+
"failed to resolve data source {} with source {}",
326+
name, source.start_block
327+
)
328+
})?;
326329

327330
DataSource::from_manifest(kind, network, name, source, mapping, context)
328331
}
@@ -405,8 +408,10 @@ impl UnresolvedMapping {
405408

406409
let api_version = semver::Version::parse(&api_version)?;
407410

408-
info!(logger, "Resolve mapping"; "link" => &link.link);
409-
let module_bytes = resolver.cat(logger, &link).await?;
411+
let module_bytes = resolver
412+
.cat(logger, &link)
413+
.await
414+
.with_context(|| format!("failed to resolve mapping {}", link.link))?;
410415

411416
Ok(Mapping {
412417
api_version,

chain/ethereum/src/data_source.rs

Lines changed: 20 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ use graph::{
1818
prelude::{
1919
async_trait,
2020
ethabi::{Address, Contract, Event, Function, LogParam, ParamType, RawLog},
21-
info, serde_json, warn,
21+
serde_json, warn,
2222
web3::types::{Log, Transaction, H256},
2323
BlockNumber, CheapClone, DataSourceTemplateInfo, Deserialize, EthereumCall,
2424
LightEthereumBlock, LightEthereumBlockExt, LinkResolver, Logger, TryStreamExt,
@@ -802,9 +802,12 @@ impl blockchain::UnresolvedDataSource<Chain> for UnresolvedDataSource {
802802
context,
803803
} = self;
804804

805-
info!(logger, "Resolve data source"; "name" => &name, "source_address" => format_args!("{:?}", source.address), "source_start_block" => source.start_block);
806-
807-
let mapping = mapping.resolve(resolver, logger).await?;
805+
let mapping = mapping.resolve(resolver, logger).await.with_context(|| {
806+
format!(
807+
"failed to resolve data source {} with source_address {:?} and source_start_block {}",
808+
name, source.address, source.start_block
809+
)
810+
})?;
808811

809812
DataSource::from_manifest(kind, network, name, source, mapping, context, manifest_idx)
810813
}
@@ -845,15 +848,18 @@ impl blockchain::UnresolvedDataSourceTemplate<Chain> for UnresolvedDataSourceTem
845848
mapping,
846849
} = self;
847850

848-
info!(logger, "Resolve data source template"; "name" => &name);
851+
let mapping = mapping
852+
.resolve(resolver, logger)
853+
.await
854+
.with_context(|| format!("failed to resolve data source template {}", name))?;
849855

850856
Ok(DataSourceTemplate {
851857
kind,
852858
network,
853859
name,
854860
manifest_idx,
855861
source,
856-
mapping: mapping.resolve(resolver, logger).await?,
862+
mapping,
857863
})
858864
}
859865
}
@@ -950,8 +956,6 @@ impl UnresolvedMapping {
950956
file: link,
951957
} = self;
952958

953-
info!(logger, "Resolve mapping"; "link" => &link.link);
954-
955959
let api_version = semver::Version::parse(&api_version)?;
956960

957961
let (abis, runtime) = try_join(
@@ -969,7 +973,8 @@ impl UnresolvedMapping {
969973
Ok(Arc::new(module_bytes))
970974
},
971975
)
972-
.await?;
976+
.await
977+
.with_context(|| format!("failed to resolve mapping {}", link.link))?;
973978

974979
Ok(Mapping {
975980
kind,
@@ -1004,14 +1009,12 @@ impl UnresolvedMappingABI {
10041009
resolver: &Arc<dyn LinkResolver>,
10051010
logger: &Logger,
10061011
) -> Result<MappingABI, anyhow::Error> {
1007-
info!(
1008-
logger,
1009-
"Resolve ABI";
1010-
"name" => &self.name,
1011-
"link" => &self.file.link
1012-
);
1013-
1014-
let contract_bytes = resolver.cat(logger, &self.file).await?;
1012+
let contract_bytes = resolver.cat(logger, &self.file).await.with_context(|| {
1013+
format!(
1014+
"failed to resolve ABI {} from {}",
1015+
self.name, self.file.link
1016+
)
1017+
})?;
10151018
let contract = Contract::load(&*contract_bytes)?;
10161019
Ok(MappingABI {
10171020
name: self.name,

chain/near/src/data_source.rs

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
use graph::anyhow::Context;
12
use graph::blockchain::{Block, TriggerWithHandler};
23
use graph::components::store::StoredDynamicDataSource;
34
use graph::data::subgraph::DataSourceContext;
@@ -6,7 +7,7 @@ use graph::{
67
anyhow::{anyhow, Error},
78
blockchain::{self, Blockchain},
89
prelude::{
9-
async_trait, info, BlockNumber, CheapClone, DataSourceTemplateInfo, Deserialize, Link,
10+
async_trait, BlockNumber, CheapClone, DataSourceTemplateInfo, Deserialize, Link,
1011
LinkResolver, Logger,
1112
},
1213
semver,
@@ -319,9 +320,12 @@ impl blockchain::UnresolvedDataSource<Chain> for UnresolvedDataSource {
319320
context,
320321
} = self;
321322

322-
info!(logger, "Resolve data source"; "name" => &name, "source_account" => format_args!("{:?}", source.account), "source_start_block" => source.start_block);
323-
324-
let mapping = mapping.resolve(resolver, logger).await?;
323+
let mapping = mapping.resolve(resolver, logger).await.with_context(|| {
324+
format!(
325+
"failed to resolve data source {} with source_account {:?} and source_start_block {}",
326+
name, source.account, source.start_block
327+
)
328+
})?;
325329

326330
DataSource::from_manifest(kind, network, name, source, mapping, context)
327331
}
@@ -353,13 +357,16 @@ impl blockchain::UnresolvedDataSourceTemplate<Chain> for UnresolvedDataSourceTem
353357
mapping,
354358
} = self;
355359

356-
info!(logger, "Resolve data source template"; "name" => &name);
360+
let mapping = mapping
361+
.resolve(resolver, logger)
362+
.await
363+
.with_context(|| format!("failed to resolve data source template {}", name))?;
357364

358365
Ok(DataSourceTemplate {
359366
kind,
360367
network,
361368
name,
362-
mapping: mapping.resolve(resolver, logger).await?,
369+
mapping,
363370
})
364371
}
365372
}
@@ -412,8 +419,10 @@ impl UnresolvedMapping {
412419

413420
let api_version = semver::Version::parse(&api_version)?;
414421

415-
info!(logger, "Resolve mapping"; "link" => &link.link);
416-
let module_bytes = resolver.cat(logger, &link).await?;
422+
let module_bytes = resolver
423+
.cat(logger, &link)
424+
.await
425+
.with_context(|| format!("failed to resolve mapping {}", link.link))?;
417426

418427
Ok(Mapping {
419428
api_version,

core/src/subgraph/instance_manager.rs

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -229,13 +229,32 @@ impl<S: SubgraphStore> SubgraphInstanceManager<S> {
229229
}
230230
}
231231

232-
info!(logger, "Resolve subgraph files using IPFS");
232+
info!(logger, "Resolve subgraph files using IPFS";
233+
"n_data_sources" => manifest.data_sources.len(),
234+
"n_templates" => manifest.templates.len(),
235+
);
233236

234237
let mut manifest = manifest
235238
.resolve(&link_resolver, &logger, ENV_VARS.max_spec_version.clone())
236239
.await?;
237240

238-
info!(logger, "Successfully resolved subgraph files using IPFS");
241+
{
242+
let features = if manifest.features.is_empty() {
243+
"ø".to_string()
244+
} else {
245+
manifest
246+
.features
247+
.iter()
248+
.map(|f| f.to_string())
249+
.collect::<Vec<_>>()
250+
.join(", ")
251+
};
252+
info!(logger, "Successfully resolved subgraph files using IPFS";
253+
"n_data_sources" => manifest.data_sources.len(),
254+
"n_templates" => manifest.templates.len(),
255+
"features" => features
256+
);
257+
}
239258

240259
let manifest_idx_and_name: Vec<(u32, String)> = manifest.template_idx_and_name().collect();
241260

graph/src/data/subgraph/mod.rs

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,12 @@ pub mod status;
1010

1111
pub use features::{SubgraphFeature, SubgraphFeatureValidationError};
1212

13-
use anyhow::{anyhow, Error};
13+
use anyhow::{anyhow, Context, Error};
1414
use futures03::{future::try_join3, stream::FuturesOrdered, TryStreamExt as _};
1515
use semver::Version;
1616
use serde::{de, ser};
1717
use serde_yaml;
18-
use slog::{info, Logger};
18+
use slog::Logger;
1919
use stable_hash::{FieldAddress, StableHash};
2020
use stable_hash_legacy::SequenceNumber;
2121
use std::{collections::BTreeSet, marker::PhantomData};
@@ -388,9 +388,10 @@ impl UnresolvedSchema {
388388
resolver: &Arc<dyn LinkResolver>,
389389
logger: &Logger,
390390
) -> Result<Schema, anyhow::Error> {
391-
info!(logger, "Resolve schema"; "link" => &self.file.link);
392-
393-
let schema_bytes = resolver.cat(logger, &self.file).await?;
391+
let schema_bytes = resolver
392+
.cat(logger, &self.file)
393+
.await
394+
.with_context(|| format!("failed to resolve schema {}", &self.file.link))?;
394395
Schema::parse(&String::from_utf8(schema_bytes)?, id)
395396
}
396397
}

graph/src/data_source/offchain.rs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -353,14 +353,18 @@ impl UnresolvedDataSourceTemplate {
353353
logger: &Logger,
354354
manifest_idx: u32,
355355
) -> Result<DataSourceTemplate, Error> {
356-
info!(logger, "Resolve data source template"; "name" => &self.name);
356+
let mapping = self
357+
.mapping
358+
.resolve(resolver, logger)
359+
.await
360+
.with_context(|| format!("failed to resolve data source template {}", self.name))?;
357361

358362
Ok(DataSourceTemplate {
359363
kind: self.kind,
360364
network: self.network,
361365
name: self.name,
362366
manifest_idx,
363-
mapping: self.mapping.resolve(resolver, logger).await?,
367+
mapping,
364368
})
365369
}
366370
}

0 commit comments

Comments
 (0)