Avoid historical sync for block handlers and eth_getLogs without event handlers

This commit is contained in:
Nabarun 2024-06-19 18:03:49 +05:30
parent 981f70ec9b
commit 115c9de0f0
3 changed files with 25 additions and 3 deletions

View File

@ -60,6 +60,9 @@ export class GraphWatcher {
_context: Context; _context: Context;
_blockHandlerExists = false;
_eventHandlerExists = false;
constructor (database: GraphDatabase, ethClient: EthClient, ethProvider: providers.BaseProvider, serverConfig: ServerConfig) { constructor (database: GraphDatabase, ethClient: EthClient, ethProvider: providers.BaseProvider, serverConfig: ServerConfig) {
this._database = database; this._database = database;
this._ethClient = ethClient; this._ethClient = ethClient;
@ -110,6 +113,10 @@ export class GraphWatcher {
}; };
}, {}); }, {});
// Check if handlers exist for deciding watcher behaviour
this._blockHandlerExists = this._dataSources.some(dataSource => Boolean(dataSource.mapping.blockHandlers));
this._eventHandlerExists = this._dataSources.some(dataSource => Boolean(dataSource.mapping.eventHandlers));
const data = await Promise.all(dataPromises); const data = await Promise.all(dataPromises);
// Create a map from dataSource contract address to instance and contract interface. // Create a map from dataSource contract address to instance and contract interface.
@ -151,6 +158,14 @@ export class GraphWatcher {
return this._dataSources; return this._dataSources;
} }
get blockHandlerExists (): boolean {
return this._blockHandlerExists;
}
get eventHandlerExists (): boolean {
return this._eventHandlerExists;
}
async addContracts () { async addContracts () {
assert(this._indexer); assert(this._indexer);
assert(this._indexer.watchContract); assert(this._indexer.watchContract);

View File

@ -123,9 +123,15 @@ export class EventWatcher {
startBlockNumber = syncStatus.chainHeadBlockNumber + 1; startBlockNumber = syncStatus.chainHeadBlockNumber + 1;
} }
// Check if filter for logs is enabled // Perform checks before starting historical block processing
if (
// Check if useBlockRanges is enabled for historical blocks processing
this._config.jobQueue.useBlockRanges &&
// Check if starting block for watcher is before latest canonical block // Check if starting block for watcher is before latest canonical block
if (this._config.jobQueue.useBlockRanges && startBlockNumber < latestCanonicalBlockNumber) { startBlockNumber < latestCanonicalBlockNumber &&
// Check if any block handler exists in subgraph config
!this._indexer.graphWatcher?.blockHandlerExists
) {
await this.startHistoricalBlockProcessing(startBlockNumber, latestCanonicalBlockNumber); await this.startHistoricalBlockProcessing(startBlockNumber, latestCanonicalBlockNumber);
return; return;

View File

@ -288,6 +288,7 @@ export interface GraphDatabaseInterface {
} }
export interface GraphWatcherInterface { export interface GraphWatcherInterface {
readonly blockHandlerExists: boolean;
init (): Promise<void>; init (): Promise<void>;
setIndexer (indexer: IndexerInterface): void; setIndexer (indexer: IndexerInterface): void;
} }