diff --git a/src/exportManager.ts b/src/exportManager.ts index 33cacf3..913f304 100644 --- a/src/exportManager.ts +++ b/src/exportManager.ts @@ -38,7 +38,8 @@ export class ExportManager { await this._loadNextExporter(i + 1, merge); if (finishUp) await finishUp(); } catch (e) { - this.logger.error(e); + this.logger.error(`Failed loading "${this.exporters[i]!.exporter.name}".`); + throw e; } } diff --git a/src/index.ts b/src/index.ts index 91e925e..9d26ae0 100644 --- a/src/index.ts +++ b/src/index.ts @@ -95,6 +95,10 @@ const registerHook: HookConfig = async ({ action, init }, { env, services, datab await updateManager.commitUpdates(); clearAdminSchema(); + } catch (e) { + logger.error(e); + logger.info('Releasing lock...'); + await updateManager.releaseLock(); } finally { await attachExporters(); } diff --git a/src/updateManager.ts b/src/updateManager.ts index f970338..dd3ed80 100644 --- a/src/updateManager.ts +++ b/src/updateManager.ts @@ -43,9 +43,6 @@ export class UpdateManager { if (rows.length) { await trx(this.tableName).where('id', this.rowId).update({ mv_locked: true, - // We set this to newer than isoTS, while we do the migration - // If the migration fails, we can reset the lock - mv_ts: ExportHelper.utcTS(), }); this._locked = { hash: newHash, @@ -74,6 +71,17 @@ export class UpdateManager { return true; } + public async releaseLock() { + if (!this._locked) return false; + + await this.db(this.tableName).where('id', this.rowId).update({ + mv_locked: false, + }); + + this._locked = false; + return true; + } + public async ensureInstalled() { const tableName = 'directus_settings';