From 0768e8d3e054970af028eed0d8db2512a3789f0b Mon Sep 17 00:00:00 2001 From: Alexey Kasyanchuk Date: Sat, 21 Apr 2018 01:02:45 +0300 Subject: [PATCH] perf(peerdb): faster store sync --- src/background/p2p.js | 3 +++ src/background/store.js | 22 ++++++++++++++++------ 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/src/background/p2p.js b/src/background/p2p.js index f14d36b..535eb3f 100644 --- a/src/background/p2p.js +++ b/src/background/p2p.js @@ -5,10 +5,12 @@ const net = require('net') const JsonSocket = require('json-socket') const os = require('os'); const isPortReachable = require('./isPortReachable') +const EventEmitter = require('events'); class p2p { constructor(send = () => {}) { + this.events = new EventEmitter this.peers = [] this.ignoreAddresses = ['127.0.0.1'] this.messageHandlers = {} @@ -263,6 +265,7 @@ class p2p { size: this.size, torrents: data.info ? data.info.torrents || 0 : 0 }) + this.events.emit('peer', address) console.log('new peer', address) // add some other peers diff --git a/src/background/store.js b/src/background/store.js index 2bf9039..6aed198 100644 --- a/src/background/store.js +++ b/src/background/store.js @@ -6,6 +6,7 @@ module.exports = class P2PStore extends EventEmitter { { super() this.id = 0 + this.synchronized = false console.log('connect p2p store...') this.p2p = p2p @@ -20,13 +21,13 @@ module.exports = class P2PStore extends EventEmitter { console.log('store db index', this.id) - const syncTimeout = setInterval(() => { - if(this.p2p.size <= 0) + let lock = false + this.p2p.events.on('peer', () => { + if(lock) return - - clearInterval(syncTimeout) - this.sync() - }, 10000) + lock = true + setTimeout(() => this.sync(), 1000) + }) }) this.p2p.on('dbStore', (record) => { @@ -73,6 +74,7 @@ module.exports = class P2PStore extends EventEmitter { data.records.forEach(record => this._syncRecord(record)) }) + this.synchronized = true } _syncRecord(record, callback) @@ -130,6 +132,12 @@ module.exports = class P2PStore extends EventEmitter { store(obj) { + if(!this.synchronized) + { + console.log('cant store item on unsync db') + return false + } + // clean temp from object const temp = obj._temp delete obj._temp @@ -150,6 +158,8 @@ module.exports = class P2PStore extends EventEmitter { // store record this.p2p.emit('dbStore', value) }) + + return true } find(index)