mirror of https://codeberg.org/pzp/pzp-db.git
rename ghosts.add() opts.max to opts.span
This commit is contained in:
parent
4fff37ad02
commit
3fccd4d661
|
@ -118,23 +118,23 @@ class Ghosts {
|
||||||
* @param {string} tangleID
|
* @param {string} tangleID
|
||||||
* @param {string} msgID
|
* @param {string} msgID
|
||||||
* @param {number} depth
|
* @param {number} depth
|
||||||
* @param {number} max
|
* @param {number} span
|
||||||
* @param {CB<void>} cb
|
* @param {CB<void>} cb
|
||||||
*/
|
*/
|
||||||
save(tangleID, msgID, depth, max, cb) {
|
save(tangleID, msgID, depth, span, cb) {
|
||||||
this.#loaded.onReady(() => {
|
this.#loaded.onReady(() => {
|
||||||
if (!this.#maps.has(tangleID)) this.#maps.set(tangleID, new Map())
|
if (!this.#maps.has(tangleID)) this.#maps.set(tangleID, new Map())
|
||||||
const map = /** @type {Map<string, number>} */ (this.#maps.get(tangleID))
|
const map = /** @type {Map<string, number>} */ (this.#maps.get(tangleID))
|
||||||
const newMap = new Map(map)
|
const newMap = new Map(map)
|
||||||
newMap.set(msgID, depth)
|
newMap.set(msgID, depth)
|
||||||
|
|
||||||
// Garbage collect any ghost smaller than largestDepth - max
|
// Garbage collect any ghost smaller than largestDepth - span
|
||||||
let largestDepth = -1
|
let largestDepth = -1
|
||||||
for (const depth of newMap.values()) {
|
for (const depth of newMap.values()) {
|
||||||
if (depth > largestDepth) largestDepth = depth
|
if (depth > largestDepth) largestDepth = depth
|
||||||
}
|
}
|
||||||
for (const [x, depth] of newMap.entries()) {
|
for (const [x, depth] of newMap.entries()) {
|
||||||
if (depth <= largestDepth - max) newMap.delete(x)
|
if (depth <= largestDepth - span) newMap.delete(x)
|
||||||
}
|
}
|
||||||
|
|
||||||
atomic.writeFile(
|
atomic.writeFile(
|
||||||
|
|
|
@ -945,7 +945,7 @@ function initDB(peer, config) {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {{ tangleID: MsgID; msgID: MsgID; max: number; }} opts
|
* @param {{ tangleID: MsgID; msgID: MsgID; span: number; }} opts
|
||||||
* @param {CB<void>} cb
|
* @param {CB<void>} cb
|
||||||
*/
|
*/
|
||||||
function addGhost(opts, cb) {
|
function addGhost(opts, cb) {
|
||||||
|
@ -955,8 +955,8 @@ function initDB(peer, config) {
|
||||||
// prettier-ignore
|
// prettier-ignore
|
||||||
if (!opts.msgID || typeof opts.msgID !== 'string') return cb(new Error('ghosts.add() requires msgID of the deleted msg in `opts.msgID`'))
|
if (!opts.msgID || typeof opts.msgID !== 'string') return cb(new Error('ghosts.add() requires msgID of the deleted msg in `opts.msgID`'))
|
||||||
// prettier-ignore
|
// prettier-ignore
|
||||||
if (!opts.max || typeof opts.max !== 'number') return cb(new Error('ghosts.add() requires max depth distance in `opts.max`'))
|
if (!opts.span || typeof opts.span !== 'number') return cb(new Error('ghosts.add() requires span in `opts.span`'))
|
||||||
const { tangleID, msgID, max } = opts
|
const { tangleID, msgID, span} = opts
|
||||||
const rec = getRecord(msgID)
|
const rec = getRecord(msgID)
|
||||||
if (!rec) return cb()
|
if (!rec) return cb()
|
||||||
if (!rec.msg) return cb()
|
if (!rec.msg) return cb()
|
||||||
|
@ -965,7 +965,7 @@ function initDB(peer, config) {
|
||||||
if (!tangleData) return cb(new Error(`ghosts.add() opts.msg "${opts.msgID}" does not belong to opts.tangle "${opts.tangleID}"`))
|
if (!tangleData) return cb(new Error(`ghosts.add() opts.msg "${opts.msgID}" does not belong to opts.tangle "${opts.tangleID}"`))
|
||||||
const depth = tangleData.depth
|
const depth = tangleData.depth
|
||||||
|
|
||||||
ghosts.save(tangleID, msgID, depth, max, (err) => {
|
ghosts.save(tangleID, msgID, depth, span, (err) => {
|
||||||
// prettier-ignore
|
// prettier-ignore
|
||||||
if (err) cb(new Error('ghosts.add() failed to save to disk', { cause: err }))
|
if (err) cb(new Error('ghosts.add() failed to save to disk', { cause: err }))
|
||||||
else cb()
|
else cb()
|
||||||
|
|
|
@ -21,7 +21,7 @@ test('ghosts.add, ghosts.get, ghosts.getMinDepth', async (t) => {
|
||||||
await peer.db.loaded()
|
await peer.db.loaded()
|
||||||
|
|
||||||
const account = await p(peer.db.account.create)({ domain: 'person' })
|
const account = await p(peer.db.account.create)({ domain: 'person' })
|
||||||
const MAX = 5
|
const SPAN = 5
|
||||||
|
|
||||||
let msgIDs = []
|
let msgIDs = []
|
||||||
for (let i = 0; i < 10; i++) {
|
for (let i = 0; i < 10; i++) {
|
||||||
|
@ -32,27 +32,27 @@ test('ghosts.add, ghosts.get, ghosts.getMinDepth', async (t) => {
|
||||||
})
|
})
|
||||||
msgIDs.push(rec.id)
|
msgIDs.push(rec.id)
|
||||||
}
|
}
|
||||||
const feedID = peer.db.feed.getID(account, 'post')
|
const tangleID = peer.db.feed.getID(account, 'post')
|
||||||
|
|
||||||
const ghosts0 = peer.db.ghosts.get(feedID)
|
const ghosts0 = peer.db.ghosts.get(tangleID)
|
||||||
assert.deepEqual(ghosts0, [], 'no ghosts so far')
|
assert.deepEqual(ghosts0, [], 'no ghosts so far')
|
||||||
|
|
||||||
await p(peer.db.ghosts.add)({ msgID: msgIDs[0], tangleID: feedID, max: MAX })
|
await p(peer.db.ghosts.add)({ msgID: msgIDs[0], tangleID, span: SPAN })
|
||||||
await p(peer.db.ghosts.add)({ msgID: msgIDs[1], tangleID: feedID, max: MAX })
|
await p(peer.db.ghosts.add)({ msgID: msgIDs[1], tangleID, span: SPAN })
|
||||||
await p(peer.db.ghosts.add)({ msgID: msgIDs[2], tangleID: feedID, max: MAX })
|
await p(peer.db.ghosts.add)({ msgID: msgIDs[2], tangleID, span: SPAN })
|
||||||
await p(peer.db.ghosts.add)({ msgID: msgIDs[3], tangleID: feedID, max: MAX })
|
await p(peer.db.ghosts.add)({ msgID: msgIDs[3], tangleID, span: SPAN })
|
||||||
await p(peer.db.ghosts.add)({ msgID: msgIDs[4], tangleID: feedID, max: MAX })
|
await p(peer.db.ghosts.add)({ msgID: msgIDs[4], tangleID, span: SPAN })
|
||||||
|
|
||||||
const ghostsA = peer.db.ghosts.get(feedID)
|
const ghostsA = peer.db.ghosts.get(tangleID)
|
||||||
assert.deepEqual(ghostsA, msgIDs.slice(0, 5), 'ghosts so far')
|
assert.deepEqual(ghostsA, msgIDs.slice(0, 5), 'ghosts so far')
|
||||||
const depthA = peer.db.ghosts.getMinDepth(feedID)
|
const depthA = peer.db.ghosts.getMinDepth(tangleID)
|
||||||
assert.equal(depthA, 1, 'min depth so far')
|
assert.equal(depthA, 1, 'min depth so far')
|
||||||
|
|
||||||
await p(peer.db.ghosts.add)({ msgID: msgIDs[5], tangleID: feedID, max: MAX })
|
await p(peer.db.ghosts.add)({ msgID: msgIDs[5], tangleID, span: SPAN })
|
||||||
|
|
||||||
const ghostsB = peer.db.ghosts.get(feedID)
|
const ghostsB = peer.db.ghosts.get(tangleID)
|
||||||
assert.deepEqual(ghostsB, msgIDs.slice(1, 6), 'ghosts so far')
|
assert.deepEqual(ghostsB, msgIDs.slice(1, 6), 'ghosts so far')
|
||||||
const depthB = peer.db.ghosts.getMinDepth(feedID)
|
const depthB = peer.db.ghosts.getMinDepth(tangleID)
|
||||||
assert.equal(depthB, 2, 'min depth so far')
|
assert.equal(depthB, 2, 'min depth so far')
|
||||||
|
|
||||||
await p(peer.close)(true)
|
await p(peer.close)(true)
|
||||||
|
|
Loading…
Reference in New Issue