fix(store): fix potential out of records on find request
This commit is contained in:
parent
1fbc889011
commit
9502e53fc1
@ -1,5 +1,6 @@
|
|||||||
const objectHash = require('object-hash');
|
const objectHash = require('object-hash');
|
||||||
const EventEmitter = require('events');
|
const EventEmitter = require('events');
|
||||||
|
const forBigTable = require('./forBigTable')
|
||||||
|
|
||||||
module.exports = class P2PStore extends EventEmitter {
|
module.exports = class P2PStore extends EventEmitter {
|
||||||
constructor(p2p, sphinx)
|
constructor(p2p, sphinx)
|
||||||
@ -127,7 +128,6 @@ module.exports = class P2PStore extends EventEmitter {
|
|||||||
|
|
||||||
_pushToDb(value, callback)
|
_pushToDb(value, callback)
|
||||||
{
|
{
|
||||||
this.emit('store', value)
|
|
||||||
const data = this.sphinx.escape(JSON.stringify(value.data))
|
const data = this.sphinx.escape(JSON.stringify(value.data))
|
||||||
this.sphinx.query(
|
this.sphinx.query(
|
||||||
`insert into store(id, hash, peerId, data` + (value.index || value.data._index ? ', storeIndex' : '') + `)
|
`insert into store(id, hash, peerId, data` + (value.index || value.data._index ? ', storeIndex' : '') + `)
|
||||||
@ -142,6 +142,7 @@ module.exports = class P2PStore extends EventEmitter {
|
|||||||
if(callback)
|
if(callback)
|
||||||
callback()
|
callback()
|
||||||
})
|
})
|
||||||
|
this.emit('store', value)
|
||||||
}
|
}
|
||||||
|
|
||||||
store(obj)
|
store(obj)
|
||||||
@ -176,19 +177,10 @@ module.exports = class P2PStore extends EventEmitter {
|
|||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
find(index)
|
async find(index)
|
||||||
{
|
{
|
||||||
return new Promise((resolve) => {
|
const records = []
|
||||||
this.sphinx.query(`select * from store where match(${this.sphinx.escape(index)}) LIMIT 50000`, (err, records) => {
|
await forBigTable(this.sphinx, 'store', (record) => records.push(record), null, 1000, `and match(${this.sphinx.escape(index)})`)
|
||||||
if(err)
|
return records.map( ({data, peerid}) => Object.assign(JSON.parse(data), { _peerId: peerid }) )
|
||||||
{
|
|
||||||
console.log(err)
|
|
||||||
resolve(false)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
resolve(records.map( ({data, peerid}) => Object.assign(JSON.parse(data), { _peerId: peerid }) ))
|
|
||||||
})
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user