mirror of
https://github.com/mempool/mempool.git
synced 2024-11-19 09:52:14 +01:00
Fix silently unhandled database exceptions
This commit is contained in:
parent
cbe1ec4e72
commit
1ae34e069c
@ -761,8 +761,13 @@ class Blocks {
|
|||||||
this.updateTimerProgress(timer, `saved ${this.currentBlockHeight} to database`);
|
this.updateTimerProgress(timer, `saved ${this.currentBlockHeight} to database`);
|
||||||
|
|
||||||
if (!fastForwarded) {
|
if (!fastForwarded) {
|
||||||
const lastestPriceId = await PricesRepository.$getLatestPriceId();
|
let lastestPriceId;
|
||||||
this.updateTimerProgress(timer, `got latest price id ${this.currentBlockHeight}`);
|
try {
|
||||||
|
lastestPriceId = await PricesRepository.$getLatestPriceId();
|
||||||
|
this.updateTimerProgress(timer, `got latest price id ${this.currentBlockHeight}`);
|
||||||
|
} catch (e) {
|
||||||
|
logger.debug('failed to fetch latest price id from db: ' + (e instanceof Error ? e.message : e));
|
||||||
|
}
|
||||||
if (priceUpdater.historyInserted === true && lastestPriceId !== null) {
|
if (priceUpdater.historyInserted === true && lastestPriceId !== null) {
|
||||||
await blocksRepository.$saveBlockPrices([{
|
await blocksRepository.$saveBlockPrices([{
|
||||||
height: blockExtended.height,
|
height: blockExtended.height,
|
||||||
|
@ -55,14 +55,20 @@ import { execSync } from 'child_process';
|
|||||||
}).then(result => {
|
}).then(result => {
|
||||||
resolve(result);
|
resolve(result);
|
||||||
}).catch(error => {
|
}).catch(error => {
|
||||||
|
logger.debug(`database query "${query.slice(0, 100)}" failed!`);
|
||||||
reject(error);
|
reject(error);
|
||||||
}).finally(() => {
|
}).finally(() => {
|
||||||
clearTimeout(timer);
|
clearTimeout(timer);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
const pool = await this.getPool();
|
try {
|
||||||
return pool.query(query, params);
|
const pool = await this.getPool();
|
||||||
|
return pool.query(query, params);
|
||||||
|
} catch (e) {
|
||||||
|
logger.debug(`database query "${query.slice(0, 100)}" failed!`);
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -92,9 +92,15 @@ class Server {
|
|||||||
logger.notice(`Starting Mempool Server${worker ? ' (worker)' : ''}... (${backendInfo.getShortCommitHash()})`);
|
logger.notice(`Starting Mempool Server${worker ? ' (worker)' : ''}... (${backendInfo.getShortCommitHash()})`);
|
||||||
|
|
||||||
// Register cleanup listeners for exit events
|
// Register cleanup listeners for exit events
|
||||||
['exit', 'SIGHUP', 'SIGINT', 'SIGTERM', 'SIGUSR1', 'SIGUSR2', 'uncaughtException', 'unhandledRejection'].forEach(event => {
|
['exit', 'SIGHUP', 'SIGINT', 'SIGTERM', 'SIGUSR1', 'SIGUSR2'].forEach(event => {
|
||||||
process.on(event, () => { this.onExit(event); });
|
process.on(event, () => { this.onExit(event); });
|
||||||
});
|
});
|
||||||
|
process.on('uncaughtException', (error) => {
|
||||||
|
this.onUnhandledException('uncaughtException', error);
|
||||||
|
});
|
||||||
|
process.on('unhandledRejection', (reason, promise) => {
|
||||||
|
this.onUnhandledException('unhandledRejection', reason);
|
||||||
|
});
|
||||||
|
|
||||||
if (config.MEMPOOL.BACKEND === 'esplora') {
|
if (config.MEMPOOL.BACKEND === 'esplora') {
|
||||||
bitcoinApi.startHealthChecks();
|
bitcoinApi.startHealthChecks();
|
||||||
@ -314,14 +320,18 @@ class Server {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
onExit(exitEvent): void {
|
onExit(exitEvent, code = 0): void {
|
||||||
|
logger.debug(`onExit for signal: ${exitEvent}`);
|
||||||
if (config.DATABASE.ENABLED) {
|
if (config.DATABASE.ENABLED) {
|
||||||
DB.releasePidLock();
|
DB.releasePidLock();
|
||||||
}
|
}
|
||||||
process.exit(0);
|
process.exit(code);
|
||||||
|
}
|
||||||
|
|
||||||
|
onUnhandledException(type, error): void {
|
||||||
|
console.error(`${type}:`, error);
|
||||||
|
this.onExit(type, 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
((): Server => new Server())();
|
((): Server => new Server())();
|
||||||
|
@ -76,7 +76,12 @@ class Indexer {
|
|||||||
|
|
||||||
if (task === 'blocksPrices' && !this.tasksRunning.includes(task) && !['testnet', 'signet'].includes(config.MEMPOOL.NETWORK)) {
|
if (task === 'blocksPrices' && !this.tasksRunning.includes(task) && !['testnet', 'signet'].includes(config.MEMPOOL.NETWORK)) {
|
||||||
this.tasksRunning.push(task);
|
this.tasksRunning.push(task);
|
||||||
const lastestPriceId = await PricesRepository.$getLatestPriceId();
|
let lastestPriceId;
|
||||||
|
try {
|
||||||
|
lastestPriceId = await PricesRepository.$getLatestPriceId();
|
||||||
|
} catch (e) {
|
||||||
|
logger.debug('failed to fetch latest price id from db: ' + (e instanceof Error ? e.message : e));
|
||||||
|
}
|
||||||
if (priceUpdater.historyInserted === false || lastestPriceId === null) {
|
if (priceUpdater.historyInserted === false || lastestPriceId === null) {
|
||||||
logger.debug(`Blocks prices indexer is waiting for the price updater to complete`, logger.tags.mining);
|
logger.debug(`Blocks prices indexer is waiting for the price updater to complete`, logger.tags.mining);
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
|
Loading…
Reference in New Issue
Block a user