mirror of
https://github.com/hedgedoc/hedgedoc.git
synced 2024-11-25 03:06:31 -05:00
Automatically retry DB connection on startup
This adds retry logic to the initial DB connection on startup. HedgeDoc now tries connecting to the database up to 30 times, waiting one second after each try. This gives a database that was simultaneously started (e.g. via docker-compose) enough time to get ready to accept connections. Signed-off-by: David Mehren <git@herrmehren.de>
This commit is contained in:
parent
936b87f3b4
commit
44ebf12d25
1 changed files with 29 additions and 12 deletions
41
app.js
41
app.js
|
@ -272,21 +272,38 @@ function startListen () {
|
|||
}
|
||||
}
|
||||
|
||||
// sync db then start listen
|
||||
models.sequelize.authenticate().then(function () {
|
||||
models.runMigrations().then(() => {
|
||||
sessionStore.sync()
|
||||
// check if realtime is ready
|
||||
if (realtime.isReady()) {
|
||||
models.Revision.checkAllNotesRevision(function (err, notes) {
|
||||
if (err) throw new Error(err)
|
||||
if (!notes || notes.length <= 0) return startListen()
|
||||
})
|
||||
const maxDBTries = 30
|
||||
let currentDBTry = 1
|
||||
function syncAndListen () {
|
||||
// sync db then start listen
|
||||
models.sequelize.authenticate().then(function () {
|
||||
models.runMigrations().then(() => {
|
||||
sessionStore.sync()
|
||||
// check if realtime is ready
|
||||
if (realtime.isReady()) {
|
||||
models.Revision.checkAllNotesRevision(function (err, notes) {
|
||||
if (err) throw new Error(err)
|
||||
if (!notes || notes.length <= 0) return startListen()
|
||||
})
|
||||
} else {
|
||||
logger.error('server still not ready after db synced')
|
||||
process.exit(1)
|
||||
}
|
||||
})
|
||||
}).catch(() => {
|
||||
if (currentDBTry < maxDBTries) {
|
||||
logger.warn(`Database cannot be reached. Try ${currentDBTry} of ${maxDBTries}.`)
|
||||
currentDBTry++
|
||||
setTimeout(function () {
|
||||
syncAndListen()
|
||||
}, 1000)
|
||||
} else {
|
||||
throw new Error('server still not ready after db synced')
|
||||
logger.error('Cannot reach database! Exiting.')
|
||||
process.exit(1)
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
syncAndListen()
|
||||
|
||||
// log uncaught exception
|
||||
process.on('uncaughtException', function (err) {
|
||||
|
|
Loading…
Reference in a new issue