Add workaround for broken save method

This commit is contained in:
Alex Browne
2018-11-14 18:39:06 -08:00
committed by Fred Carlsen
parent a0a41b1b5d
commit 6bab2f70b9
2 changed files with 22 additions and 2 deletions

View File

@@ -26,7 +26,7 @@ const config: ConnectionOptions = {
type: 'postgres',
url: process.env.ZEROEX_DATA_PIPELINE_DB_URL,
synchronize: false,
logging: ['error', 'warn'],
// logging: ['error'],
entities,
migrations: ['./lib/migrations/**/*.js'],
};

View File

@@ -38,7 +38,27 @@ async function getExchangeEventsAsync(provider: Web3ProviderEngine): Promise<voi
const events = parseExchangeEvents(eventLogs);
console.log(`Retrieved and parsed ${events.length} total events.`);
console.log('Saving events...');
await eventsRepository.save(events, { chunk: Math.ceil(events.length / BATCH_SAVE_SIZE) });
// Note(albrow): This is a temporary hack because `save` is not working as
// documented and is causing a foreign key constraint violation. Hopefully
// can remove later because this "poor man's upsert" implementation operates
// on one event at a time and is therefore much slower.
// await eventsRepository.save(events, { chunk: Math.ceil(events.length / BATCH_SAVE_SIZE) });
for (const event of events) {
try {
await eventsRepository.save(event);
} catch {
// Assume this is a foreign key constraint error and try doing an
// update instead.
await eventsRepository.update(
{
contractAddress: event.contractAddress,
blockNumber: event.blockNumber,
logIndex: event.logIndex,
},
event,
);
}
}
const totalEvents = await eventsRepository.count();
console.log(`Done saving events. There are now ${totalEvents} total events.`);
}