Skip to content

Commit

Permalink
fix(indexer): use db lock mode to prevent multiple records in last pr…
Browse files Browse the repository at this point in the history
…ocessed event table
  • Loading branch information
metmirr committed Jun 14, 2020
1 parent 8524ac4 commit 91fe1dd
Showing 1 changed file with 30 additions and 9 deletions.
39 changes: 30 additions & 9 deletions substrate-query-framework/index-builder/src/db/entities.ts
Expand Up @@ -35,16 +35,37 @@ export class SavedEntityEvent {
* @param event
*/
static async update(event: SubstrateEvent, manager: EntityManager): Promise<void> {
let lastProcessedEvent = await manager.findOne(SavedEntityEvent);
let lastProcessedEvent = await manager
.getRepository(SavedEntityEvent)
.createQueryBuilder('saved_entity_event')
.select()
.limit(1)
.setLock('pessimistic_read')
.getOne();

if (!lastProcessedEvent) {
lastProcessedEvent = new SavedEntityEvent();
}

lastProcessedEvent.index = event.index;
lastProcessedEvent.eventName = event.event_method;
lastProcessedEvent.blockNumber = event.block_number;
if (lastProcessedEvent) {
await manager
.getRepository(SavedEntityEvent)
.createQueryBuilder()
.setLock('pessimistic_write')
.update()
.set({ index: event.index, eventName: event.event_method, blockNumber: event.block_number })
.execute();
} else {
lastProcessedEvent = new SavedEntityEvent({
index: event.index,
eventName: event.event_method,
blockNumber: event.block_number,
});

await manager.save(lastProcessedEvent);
await manager
.getRepository(SavedEntityEvent)
.createQueryBuilder()
.setLock('pessimistic_write')
.insert()
.into(SavedEntityEvent)
.values(lastProcessedEvent)
.execute();
}
}
}

0 comments on commit 91fe1dd

Please sign in to comment.