From 2b880dd4e060f8f7f95afe9ff2a3e2e6d540c922 Mon Sep 17 00:00:00 2001 From: kumavis Date: Thu, 5 Apr 2018 13:15:08 -0700 Subject: migrations - report migrations errors to sentry with vault structure --- app/scripts/lib/migrator/index.js | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) (limited to 'app/scripts/lib/migrator/index.js') diff --git a/app/scripts/lib/migrator/index.js b/app/scripts/lib/migrator/index.js index 4fd2cae92..203b2ddc9 100644 --- a/app/scripts/lib/migrator/index.js +++ b/app/scripts/lib/migrator/index.js @@ -1,6 +1,9 @@ -class Migrator { +const EventEmitter = require('events') + +class Migrator extends EventEmitter { constructor (opts = {}) { + super() const migrations = opts.migrations || [] // sort migrations by version this.migrations = migrations.sort((a, b) => a.version - b.version) @@ -12,13 +15,26 @@ class Migrator { // run all pending migrations on meta in place async migrateData (versionedData = this.generateInitialState()) { + // get all migrations that have not yet been run const pendingMigrations = this.migrations.filter(migrationIsPending) + // perform each migration for (const index in pendingMigrations) { const migration = pendingMigrations[index] - versionedData = await migration.migrate(versionedData) - if (!versionedData.data) throw new Error('Migrator - migration returned empty data') - if (versionedData.version !== undefined && versionedData.meta.version !== migration.version) throw new Error('Migrator - Migration did not update version number correctly') + try { + // attempt migration and validate + const migratedData = await migration.migrate(versionedData) + if (!migratedData.data) throw new Error('Migrator - migration returned empty data') + if (migratedData.version !== undefined && migratedData.meta.version !== migration.version) throw new Error('Migrator - Migration did not update version number correctly') + // accept the migration as good + versionedData = migratedData + } catch (err) { + // emit error instead of throw so as to not break the run (gracefully fail) + const error = new Error(`MetaMask Migration Error #${version}:\n${err.stack}`) + this.emit('error', error) + // stop migrating and use state as is + return versionedData + } } return versionedData -- cgit v1.2.3 From 7fdf663ea7ae4b3c6bb5cdefb1f33729f5cf4422 Mon Sep 17 00:00:00 2001 From: kumavis Date: Thu, 5 Apr 2018 13:21:00 -0700 Subject: migrator - fix typo --- app/scripts/lib/migrator/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'app/scripts/lib/migrator/index.js') diff --git a/app/scripts/lib/migrator/index.js b/app/scripts/lib/migrator/index.js index 203b2ddc9..ea9af3c80 100644 --- a/app/scripts/lib/migrator/index.js +++ b/app/scripts/lib/migrator/index.js @@ -30,7 +30,7 @@ class Migrator extends EventEmitter { versionedData = migratedData } catch (err) { // emit error instead of throw so as to not break the run (gracefully fail) - const error = new Error(`MetaMask Migration Error #${version}:\n${err.stack}`) + const error = new Error(`MetaMask Migration Error #${migration.version}:\n${err.stack}`) this.emit('error', error) // stop migrating and use state as is return versionedData -- cgit v1.2.3 From ffc71ff7d2c27d419bff4ca127ed5219bf9261c3 Mon Sep 17 00:00:00 2001 From: kumavis Date: Thu, 5 Apr 2018 13:38:34 -0700 Subject: migrator - dont overwrite error stack and warn to console --- app/scripts/lib/migrator/index.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'app/scripts/lib/migrator/index.js') diff --git a/app/scripts/lib/migrator/index.js b/app/scripts/lib/migrator/index.js index ea9af3c80..85c2717ea 100644 --- a/app/scripts/lib/migrator/index.js +++ b/app/scripts/lib/migrator/index.js @@ -29,9 +29,12 @@ class Migrator extends EventEmitter { // accept the migration as good versionedData = migratedData } catch (err) { + // rewrite error message to add context without clobbering stack + const originalErrorMessage = err.message + err.message = `MetaMask Migration Error #${migration.version}: ${originalErrorMessage}` + console.warn(err.stack) // emit error instead of throw so as to not break the run (gracefully fail) - const error = new Error(`MetaMask Migration Error #${migration.version}:\n${err.stack}`) - this.emit('error', error) + this.emit('error', err) // stop migrating and use state as is return versionedData } -- cgit v1.2.3