better debugging, pretty print (no undefined) in logtable
This commit is contained in:
parent
153ec811e2
commit
82025c5de9
@ -367,7 +367,11 @@ module.exports = function (Y /* :any */) {
|
|||||||
!op.gc && !op.deleted
|
!op.gc && !op.deleted
|
||||||
) {
|
) {
|
||||||
// combine!
|
// combine!
|
||||||
left.originOf = op.originOf
|
if (op.originOf != null){
|
||||||
|
left.originOf = op.originOf
|
||||||
|
} else {
|
||||||
|
delete left.originOf
|
||||||
|
}
|
||||||
left.content = left.content.concat(op.content)
|
left.content = left.content.concat(op.content)
|
||||||
left.right = op.right
|
left.right = op.right
|
||||||
yield* this.os.delete(op.id)
|
yield* this.os.delete(op.id)
|
||||||
|
@ -195,7 +195,7 @@ module.exports = function (Y/* :any */) {
|
|||||||
// reconnect left and set right of op
|
// reconnect left and set right of op
|
||||||
if (op.left != null) {
|
if (op.left != null) {
|
||||||
left = yield* this.getInsertion(op.left)
|
left = yield* this.getInsertion(op.left)
|
||||||
// TODO: remove false
|
// TODO: remove false!!
|
||||||
if (false && op.content != null && left.content != null && left.id[0] === op.id[0] && left.id[1] + left.content.length === op.id[1] && left.originOf == null && left.deleted !== true && left.gc !== true) {
|
if (false && op.content != null && left.content != null && left.id[0] === op.id[0] && left.id[1] + left.content.length === op.id[1] && left.originOf == null && left.deleted !== true && left.gc !== true) {
|
||||||
// extend left
|
// extend left
|
||||||
left.content = left.content.concat(op.content)
|
left.content = left.content.concat(op.content)
|
||||||
|
@ -278,7 +278,7 @@ module.exports = function (Y/* :any */) {
|
|||||||
*/
|
*/
|
||||||
* markGarbageCollected (id, len) {
|
* markGarbageCollected (id, len) {
|
||||||
// this.mem.push(["gc", id]);
|
// this.mem.push(["gc", id]);
|
||||||
this.store.addToDebug('yield* this.markGarbageCollected(', id, len, ')')
|
this.store.addToDebug('yield* this.markGarbageCollected(', id, ', ', len, ')')
|
||||||
var n = yield* this.markDeleted(id, len)
|
var n = yield* this.markDeleted(id, len)
|
||||||
if (n.id[1] < id[1] && !n.gc) {
|
if (n.id[1] < id[1] && !n.gc) {
|
||||||
// un-extend left
|
// un-extend left
|
||||||
@ -292,10 +292,10 @@ module.exports = function (Y/* :any */) {
|
|||||||
var prev = yield* this.ds.findPrev(id)
|
var prev = yield* this.ds.findPrev(id)
|
||||||
var next = yield* this.ds.findNext(id)
|
var next = yield* this.ds.findNext(id)
|
||||||
|
|
||||||
if (id[1] < n.id[1] + n.len - len && !n.gc) {
|
if (id[1] + len < n.id[1] + n.len && !n.gc) {
|
||||||
// un-extend right
|
// un-extend right
|
||||||
yield* this.ds.put({id: [id[0], id[1] + 1], len: n.len - 1, gc: false})
|
yield* this.ds.put({id: [id[0], id[1] + len], len: n.len - len, gc: false})
|
||||||
n.len = 1
|
n.len = len
|
||||||
}
|
}
|
||||||
// set gc'd
|
// set gc'd
|
||||||
n.gc = true
|
n.gc = true
|
||||||
@ -637,12 +637,14 @@ module.exports = function (Y/* :any */) {
|
|||||||
* updateState (user) {
|
* updateState (user) {
|
||||||
var state = yield* this.getState(user)
|
var state = yield* this.getState(user)
|
||||||
yield* this.checkDeleteStoreForState(state)
|
yield* this.checkDeleteStoreForState(state)
|
||||||
var o = yield* this.getOperation([user, state.clock])
|
var o = yield* this.getInsertion([user, state.clock])
|
||||||
while (o != null && o.id[1] === state.clock && user === o.id[0]) {
|
var oLength = (o != null && o.content != null) ? o.content.length : 1
|
||||||
|
while (o != null && user === o.id[0] && o.id[1] <= state.clock && o.id[1] + oLength > state.clock) {
|
||||||
// either its a new operation (1. case), or it is an operation that was deleted, but is not yet in the OS
|
// either its a new operation (1. case), or it is an operation that was deleted, but is not yet in the OS
|
||||||
state.clock += o.content == null ? 1 : o.content.length
|
state.clock += oLength
|
||||||
yield* this.checkDeleteStoreForState(state)
|
yield* this.checkDeleteStoreForState(state)
|
||||||
o = yield* this.os.findNext(o.id)
|
o = yield* this.os.findNext(o.id)
|
||||||
|
oLength = (o != null && o.content != null) ? o.content.length : 1
|
||||||
}
|
}
|
||||||
yield* this.setState(state)
|
yield* this.setState(state)
|
||||||
}
|
}
|
||||||
@ -992,7 +994,12 @@ module.exports = function (Y/* :any */) {
|
|||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
var startPos = startSS[user] || 0
|
var startPos = startSS[user] || 0
|
||||||
|
if (startPos > 0) {
|
||||||
|
var firstMissing = yield* this.getInsertion([user, startPos])
|
||||||
|
if (firstMissing != null) {
|
||||||
|
// TODO: Send missing depending on content! Also try to recognize this on the receiving end!
|
||||||
|
}
|
||||||
|
}
|
||||||
yield* this.os.iterate(this, [user, startPos], [user, Number.MAX_VALUE], function * (op) {
|
yield* this.os.iterate(this, [user, startPos], [user, Number.MAX_VALUE], function * (op) {
|
||||||
op = Y.Struct[op.struct].encode(op)
|
op = Y.Struct[op.struct].encode(op)
|
||||||
if (op.struct !== 'Insert') {
|
if (op.struct !== 'Insert') {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user