From 82025c5de9372129d88771b2cbcb15315ee9233e Mon Sep 17 00:00:00 2001 From: Kevin Jahns Date: Tue, 19 Apr 2016 16:34:14 +0200 Subject: [PATCH] better debugging, pretty print (no undefined) in logtable --- src/Database.js | 6 +++++- src/Struct.js | 2 +- src/Transaction.js | 23 +++++++++++++++-------- 3 files changed, 21 insertions(+), 10 deletions(-) diff --git a/src/Database.js b/src/Database.js index a2a641fa..67b52657 100644 --- a/src/Database.js +++ b/src/Database.js @@ -367,7 +367,11 @@ module.exports = function (Y /* :any */) { !op.gc && !op.deleted ) { // 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.right = op.right yield* this.os.delete(op.id) diff --git a/src/Struct.js b/src/Struct.js index 76868621..21a53c88 100644 --- a/src/Struct.js +++ b/src/Struct.js @@ -195,7 +195,7 @@ module.exports = function (Y/* :any */) { // reconnect left and set right of op if (op.left != null) { 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) { // extend left left.content = left.content.concat(op.content) diff --git a/src/Transaction.js b/src/Transaction.js index 64585176..3f1e83ed 100644 --- a/src/Transaction.js +++ b/src/Transaction.js @@ -278,7 +278,7 @@ module.exports = function (Y/* :any */) { */ * markGarbageCollected (id, len) { // 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) if (n.id[1] < id[1] && !n.gc) { // un-extend left @@ -292,10 +292,10 @@ module.exports = function (Y/* :any */) { var prev = yield* this.ds.findPrev(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 - yield* this.ds.put({id: [id[0], id[1] + 1], len: n.len - 1, gc: false}) - n.len = 1 + yield* this.ds.put({id: [id[0], id[1] + len], len: n.len - len, gc: false}) + n.len = len } // set gc'd n.gc = true @@ -637,12 +637,14 @@ module.exports = function (Y/* :any */) { * updateState (user) { var state = yield* this.getState(user) yield* this.checkDeleteStoreForState(state) - var o = yield* this.getOperation([user, state.clock]) - while (o != null && o.id[1] === state.clock && user === o.id[0]) { + var o = yield* this.getInsertion([user, state.clock]) + 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 - state.clock += o.content == null ? 1 : o.content.length + state.clock += oLength yield* this.checkDeleteStoreForState(state) o = yield* this.os.findNext(o.id) + oLength = (o != null && o.content != null) ? o.content.length : 1 } yield* this.setState(state) } @@ -992,7 +994,12 @@ module.exports = function (Y/* :any */) { continue } 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) { op = Y.Struct[op.struct].encode(op) if (op.struct !== 'Insert') {