Skip to content

Commit 9967168

Browse files
committed
chain: Add debug log for duplicate triggers
1 parent 84bee2c commit 9967168

File tree

9 files changed

+49
-15
lines changed

9 files changed

+49
-15
lines changed

chain/arweave/src/chain.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -191,7 +191,7 @@ impl TriggersAdapterTrait<Chain> for TriggersAdapter {
191191

192192
async fn triggers_in_block(
193193
&self,
194-
_logger: &Logger,
194+
logger: &Logger,
195195
block: codec::Block,
196196
filter: &TriggerFilter,
197197
) -> Result<BlockWithTriggers<Chain>, Error> {
@@ -223,7 +223,7 @@ impl TriggersAdapterTrait<Chain> for TriggersAdapter {
223223
trigger_data.push(ArweaveTrigger::Block(shared_block.cheap_clone()));
224224
}
225225

226-
Ok(BlockWithTriggers::new(block, trigger_data))
226+
Ok(BlockWithTriggers::new(block, trigger_data, logger))
227227
}
228228

229229
async fn is_on_main_chain(&self, _ptr: BlockPtr) -> Result<bool, Error> {

chain/cosmos/src/chain.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -197,7 +197,7 @@ impl TriggersAdapterTrait<Chain> for TriggersAdapter {
197197

198198
async fn triggers_in_block(
199199
&self,
200-
_logger: &Logger,
200+
logger: &Logger,
201201
block: codec::Block,
202202
filter: &TriggerFilter,
203203
) -> Result<BlockWithTriggers<Chain>, Error> {
@@ -277,7 +277,7 @@ impl TriggersAdapterTrait<Chain> for TriggersAdapter {
277277
triggers.push(CosmosTrigger::Block(shared_block.cheap_clone()));
278278
}
279279

280-
Ok(BlockWithTriggers::new(block, triggers))
280+
Ok(BlockWithTriggers::new(block, triggers, logger))
281281
}
282282

283283
async fn is_on_main_chain(&self, _ptr: BlockPtr) -> Result<bool, Error> {

chain/ethereum/src/chain.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -533,7 +533,7 @@ impl TriggersAdapterTrait<Chain> for TriggersAdapter {
533533
));
534534
triggers.append(&mut parse_call_triggers(&filter.call, &full_block)?);
535535
triggers.append(&mut parse_block_triggers(&filter.block, &full_block));
536-
Ok(BlockWithTriggers::new(block, triggers))
536+
Ok(BlockWithTriggers::new(block, triggers, logger))
537537
}
538538
}
539539
}

chain/ethereum/src/ethereum_adapter.rs

+3
Original file line numberDiff line numberDiff line change
@@ -1433,13 +1433,16 @@ pub(crate) async fn blocks_with_triggers(
14331433
block_hashes.insert(to_hash);
14341434
triggers_by_block.entry(to).or_insert(Vec::new());
14351435

1436+
let logger2 = logger.cheap_clone();
1437+
14361438
let blocks = adapter
14371439
.load_blocks(logger.cheap_clone(), chain_store.clone(), block_hashes)
14381440
.and_then(
14391441
move |block| match triggers_by_block.remove(&(block.number() as BlockNumber)) {
14401442
Some(triggers) => Ok(BlockWithTriggers::new(
14411443
BlockFinality::Final(block),
14421444
triggers,
1445+
&logger2,
14431446
)),
14441447
None => Err(anyhow!(
14451448
"block {} not found in `triggers_by_block`",

chain/ethereum/src/tests.rs

+17-3
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,9 @@ use graph::{
44
blockchain::{block_stream::BlockWithTriggers, BlockPtr},
55
prelude::{
66
web3::types::{Address, Bytes, Log, H160, H256, U64},
7-
EthereumCall,
7+
EthereumCall, LightEthereumBlock,
88
},
9+
slog::{self, o, Logger},
910
};
1011

1112
use crate::{
@@ -89,9 +90,22 @@ fn test_trigger_ordering() {
8990
log1.clone(),
9091
];
9192

93+
let logger = Logger::root(slog::Discard, o!());
94+
95+
let mut b: LightEthereumBlock = Default::default();
96+
97+
// This is necessary because inside of BlockWithTriggers::new
98+
// there's a log for both fields. So just using Default above
99+
// gives None on them.
100+
b.number = Some(Default::default());
101+
b.hash = Some(Default::default());
102+
92103
// Test that `BlockWithTriggers` sorts the triggers.
93-
let block_with_triggers =
94-
BlockWithTriggers::<crate::Chain>::new(BlockFinality::Final(Default::default()), triggers);
104+
let block_with_triggers = BlockWithTriggers::<crate::Chain>::new(
105+
BlockFinality::Final(Arc::new(b)),
106+
triggers,
107+
&logger,
108+
);
95109

96110
assert_eq!(
97111
block_with_triggers.trigger_data,

chain/near/src/chain.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -235,7 +235,7 @@ impl TriggersAdapterTrait<Chain> for TriggersAdapter {
235235

236236
async fn triggers_in_block(
237237
&self,
238-
_logger: &Logger,
238+
logger: &Logger,
239239
block: codec::Block,
240240
filter: &TriggerFilter,
241241
) -> Result<BlockWithTriggers<Chain>, Error> {
@@ -292,7 +292,7 @@ impl TriggersAdapterTrait<Chain> for TriggersAdapter {
292292
trigger_data.push(NearTrigger::Block(shared_block.cheap_clone()));
293293
}
294294

295-
Ok(BlockWithTriggers::new(block, trigger_data))
295+
Ok(BlockWithTriggers::new(block, trigger_data, logger))
296296
}
297297

298298
async fn is_on_main_chain(&self, _ptr: BlockPtr) -> Result<bool, Error> {

chain/substreams/src/mapper.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ pub struct Mapper {}
1616
impl SubstreamsMapper<Chain> for Mapper {
1717
async fn to_block_stream_event(
1818
&self,
19-
_logger: &Logger,
19+
logger: &Logger,
2020
block_scoped_data: &BlockScopedData,
2121
) -> Result<Option<BlockStreamEvent<Chain>>, SubstreamsError> {
2222
let step = ForkStep::from_i32(block_scoped_data.step).unwrap_or_else(|| {
@@ -52,7 +52,7 @@ impl SubstreamsMapper<Chain> for Mapper {
5252

5353
// TODO(filipe): Fix once either trigger data can be empty
5454
// or we move the changes into trigger data.
55-
BlockWithTriggers::new(changes, vec![TriggerData {}]),
55+
BlockWithTriggers::new(changes, vec![TriggerData {}], logger),
5656
FirehoseCursor::from(cursor.clone()),
5757
))),
5858
StepUndo => {

graph/src/blockchain/block_stream.rs

+18-1
Original file line numberDiff line numberDiff line change
@@ -173,12 +173,29 @@ where
173173
}
174174

175175
impl<C: Blockchain> BlockWithTriggers<C> {
176-
pub fn new(block: C::Block, mut trigger_data: Vec<C::TriggerData>) -> Self {
176+
pub fn new(block: C::Block, mut trigger_data: Vec<C::TriggerData>, logger: &Logger) -> Self {
177177
// This is where triggers get sorted.
178178
trigger_data.sort();
179+
180+
let old_len = trigger_data.len();
181+
179182
// This is removing the duplicate triggers in the case of multiple
180183
// data sources fetching the same event/call/etc.
181184
trigger_data.dedup();
185+
186+
let new_len = trigger_data.len();
187+
188+
if new_len != old_len {
189+
debug!(
190+
logger,
191+
"Trigger data had duplicate triggers";
192+
"block_number" => block.number(),
193+
"block_hash" => block.hash().hash_hex(),
194+
"old_length" => old_len,
195+
"new_length" => new_len,
196+
);
197+
}
198+
182199
Self {
183200
block,
184201
trigger_data,

tests/src/fixture.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -512,12 +512,12 @@ impl<C: Blockchain> TriggersAdapter<C> for NoopTriggersAdapter<C> {
512512

513513
async fn triggers_in_block(
514514
&self,
515-
_logger: &Logger,
515+
logger: &Logger,
516516
block: <C as Blockchain>::Block,
517517
_filter: &<C as Blockchain>::TriggerFilter,
518518
) -> Result<BlockWithTriggers<C>, Error> {
519519
// Return no triggers on data source reprocessing.
520-
Ok(BlockWithTriggers::new(block, Vec::new()))
520+
Ok(BlockWithTriggers::new(block, Vec::new(), logger))
521521
}
522522

523523
async fn is_on_main_chain(&self, _ptr: BlockPtr) -> Result<bool, Error> {

0 commit comments

Comments
 (0)