Skip to content

Commit b4ad24f

Browse files
committed
graph: fix subgraph filter mismatch bug
1 parent 87d54ae commit b4ad24f

File tree

1 file changed

+23
-8
lines changed

1 file changed

+23
-8
lines changed

graph/src/blockchain/block_stream.rs

Lines changed: 23 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ use crate::components::store::{BlockNumber, DeploymentLocator, WritableStore};
2121
use crate::data::subgraph::UnifiedMappingApiVersion;
2222
use crate::firehose::{self, FirehoseEndpoint};
2323
use crate::futures03::stream::StreamExt as _;
24-
use crate::schema::InputSchema;
24+
use crate::schema::{EntityType, InputSchema};
2525
use crate::substreams_rpc::response::Message;
2626
use crate::{prelude::*, prometheus::labels};
2727

@@ -350,14 +350,14 @@ impl<C: Blockchain> TriggersAdapterWrapper<C> {
350350

351351
fn create_subgraph_trigger_from_entities(
352352
filter: &SubgraphFilter,
353-
entities: &Vec<Entity>,
353+
entities: &Vec<EntityWithType>,
354354
) -> Vec<subgraph::TriggerData> {
355355
entities
356356
.iter()
357357
.map(|e| subgraph::TriggerData {
358358
source: filter.subgraph.clone(),
359-
entity: e.clone(),
360-
entity_type: filter.entities.first().unwrap().clone(),
359+
entity: e.entity.clone(),
360+
entity_type: e.entity_type.as_str().to_string(),
361361
})
362362
.collect()
363363
}
@@ -366,7 +366,7 @@ async fn create_subgraph_triggers<C: Blockchain>(
366366
logger: Logger,
367367
blocks: Vec<C::Block>,
368368
filter: &SubgraphFilter,
369-
entities: BTreeMap<BlockNumber, Vec<Entity>>,
369+
entities: BTreeMap<BlockNumber, Vec<EntityWithType>>,
370370
) -> Result<Vec<BlockWithTriggers<C>>, Error> {
371371
let logger_clone = logger.cheap_clone();
372372

@@ -426,24 +426,39 @@ async fn scan_subgraph_triggers<C: Blockchain>(
426426
}
427427
}
428428

429+
pub struct EntityWithType {
430+
pub entity_type: EntityType,
431+
pub entity: Entity,
432+
}
433+
429434
async fn get_entities_for_range(
430435
store: &Arc<dyn WritableStore>,
431436
filter: &SubgraphFilter,
432437
schema: &InputSchema,
433438
from: BlockNumber,
434439
to: BlockNumber,
435-
) -> Result<BTreeMap<BlockNumber, Vec<Entity>>, Error> {
440+
) -> Result<BTreeMap<BlockNumber, Vec<EntityWithType>>, Error> {
436441
let mut entities_by_block = BTreeMap::new();
437442

438443
for entity_name in &filter.entities {
439444
let entity_type = schema.entity_type(entity_name)?;
440445

441446
let entity_ranges = store.get_range(&entity_type, from..to)?;
442447

443-
for (block_number, mut entity_vec) in entity_ranges {
448+
for (block_number, entity_vec) in entity_ranges {
449+
let mut entity_vec = entity_vec
450+
.into_iter()
451+
.map(|e| EntityWithType {
452+
entity_type: entity_type.clone(),
453+
entity: e,
454+
})
455+
.collect();
456+
444457
entities_by_block
445458
.entry(block_number)
446-
.and_modify(|existing_vec: &mut Vec<Entity>| existing_vec.append(&mut entity_vec))
459+
.and_modify(|existing_vec: &mut Vec<EntityWithType>| {
460+
existing_vec.append(&mut entity_vec);
461+
})
447462
.or_insert(entity_vec);
448463
}
449464
}

0 commit comments

Comments
 (0)