Merge pull request #4570 from MetaMask/persistence-stream-fix

background - persistence pipeline - fix persistence bug
feature/default_network_editable
kumavis 7 years ago committed by GitHub
commit 66c77dc2bd
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 1
      CHANGELOG.md
  2. 14
      app/scripts/background.js
  3. 24
      app/scripts/lib/createStreamSink.js

@ -2,6 +2,7 @@
## Current Master ## Current Master
- Fix bug where metamask data would stop being written to disk after prolonged use
- Fix bug where account reset did not work with custom RPC providers. - Fix bug where account reset did not work with custom RPC providers.
- Fix bug where nonce mutex was never released - Fix bug where nonce mutex was never released
- Stop reloading browser page on Ethereum network change - Stop reloading browser page on Ethereum network change

@ -16,6 +16,7 @@ const ExtensionPlatform = require('./platforms/extension')
const Migrator = require('./lib/migrator/') const Migrator = require('./lib/migrator/')
const migrations = require('./migrations/') const migrations = require('./migrations/')
const PortStream = require('./lib/port-stream.js') const PortStream = require('./lib/port-stream.js')
const createStreamSink = require('./lib/createStreamSink')
const NotificationManager = require('./lib/notification-manager.js') const NotificationManager = require('./lib/notification-manager.js')
const MetamaskController = require('./metamask-controller') const MetamaskController = require('./metamask-controller')
const firstTimeState = require('./first-time-state') const firstTimeState = require('./first-time-state')
@ -273,7 +274,7 @@ function setupController (initState, initLangCode) {
asStream(controller.store), asStream(controller.store),
debounce(1000), debounce(1000),
storeTransform(versionifyData), storeTransform(versionifyData),
storeTransform(persistData), createStreamSink(persistData),
(error) => { (error) => {
log.error('MetaMask - Persistence pipeline failed', error) log.error('MetaMask - Persistence pipeline failed', error)
} }
@ -289,7 +290,7 @@ function setupController (initState, initLangCode) {
return versionedData return versionedData
} }
function persistData (state) { async function persistData (state) {
if (!state) { if (!state) {
throw new Error('MetaMask - updated state is missing', state) throw new Error('MetaMask - updated state is missing', state)
} }
@ -297,12 +298,13 @@ function setupController (initState, initLangCode) {
throw new Error('MetaMask - updated state does not have data', state) throw new Error('MetaMask - updated state does not have data', state)
} }
if (localStore.isSupported) { if (localStore.isSupported) {
localStore.set(state) try {
.catch((err) => { await localStore.set(state)
} catch (err) {
// log error so we dont break the pipeline
log.error('error setting state in local store:', err) log.error('error setting state in local store:', err)
}) }
} }
return state
} }
// //

@ -0,0 +1,24 @@
const WritableStream = require('readable-stream').Writable
const promiseToCallback = require('promise-to-callback')
module.exports = createStreamSink
function createStreamSink(asyncWriteFn, _opts) {
return new AsyncWritableStream(asyncWriteFn, _opts)
}
class AsyncWritableStream extends WritableStream {
constructor (asyncWriteFn, _opts) {
const opts = Object.assign({ objectMode: true }, _opts)
super(opts)
this._asyncWriteFn = asyncWriteFn
}
// write from incomming stream to state
_write (chunk, encoding, callback) {
promiseToCallback(this._asyncWriteFn(chunk, encoding))(callback)
}
}
Loading…
Cancel
Save