mirror of
https://github.com/ether/etherpad-lite.git
synced 2026-07-17 16:47:05 +00:00
fix(bin): close DBs in migrateDB so it flushes and exits (#7982)
`bin/migrateDB.ts` opens a source and target ueberdb2 Database, copies all keys, then resolves without closing either connection or calling process.exit(). Two problems with ueberdb2 6.1.x: - 6.1.x keeps an internal keep-alive timer running until close() is called, so the migration process hangs forever after "Done syncing dbs" instead of exiting. (Pre-6.1.x it exited on its own once the work was done.) - Target writes are buffered and only guaranteed flushed to disk on close() /flush(), so an operator who Ctrl-Cs the apparently-finished process could end up with an incomplete migration. Close the target then the source on both the success and error paths (which flushes buffered writes and clears the keep-alive timer) and exit with an explicit status code, matching the pattern already used in migrateDirtyDBtoRealDB.ts. Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
32249d99e2
commit
9d2dae1b63
1 changed files with 12 additions and 2 deletions
|
|
@ -74,10 +74,20 @@ const handleSync = async ()=>{
|
|||
}
|
||||
}
|
||||
|
||||
handleSync().then(()=>{
|
||||
handleSync().then(async ()=>{
|
||||
// Closing flushes any buffered writes to the target DB and clears
|
||||
// ueberdb2's keep-alive timer (added in 6.1.x). Without this the migrated
|
||||
// data may not be fully persisted and the process would hang forever
|
||||
// instead of exiting once the sync is done.
|
||||
await ueberdb2.close()
|
||||
await ueberdb1.close()
|
||||
console.log("Done syncing dbs")
|
||||
}).catch(e=>{
|
||||
process.exit(0)
|
||||
}).catch(async e=>{
|
||||
console.log(`Error syncing db ${e}`)
|
||||
await ueberdb2.close().catch(()=>{})
|
||||
await ueberdb1.close().catch(()=>{})
|
||||
process.exit(1)
|
||||
})
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue