Merge branch 'master' into staging
This commit is contained in:
@@ -407,19 +407,9 @@ const getHistoryOffset = (Env, channelName, lastKnownHash, _cb) => {
|
||||
|
||||
// check if the "hash" the client is requesting exists in the index
|
||||
const lkh = index.offsetByHash[lastKnownHash];
|
||||
// we evict old hashes from the index as new checkpoints are discovered.
|
||||
// if someone connects and asks for a hash that is no longer relevant,
|
||||
// we tell them it's an invalid request. This is because of the semantics of "GET_HISTORY"
|
||||
// which is only ever used when connecting or reconnecting in typical uses of history...
|
||||
// this assumption should hold for uses by chainpad, but perhaps not for other uses cases.
|
||||
// EXCEPT: other cases don't use checkpoints!
|
||||
// clients that are told that their request is invalid should just make another request
|
||||
// without specifying the hash, and just trust the server to give them the relevant data.
|
||||
// QUESTION: does this mean mailboxes are causing the server to store too much stuff in memory?
|
||||
if (lastKnownHash && typeof(lkh) !== "number") {
|
||||
waitFor.abort();
|
||||
return void cb(new Error('EUNKNOWN'));
|
||||
}
|
||||
|
||||
// fall through to the next block if the offset of the hash in question is not in memory
|
||||
if (lastKnownHash && typeof(lkh) !== "number") { return; }
|
||||
|
||||
// Since last 2 checkpoints
|
||||
if (!lastKnownHash) {
|
||||
@@ -441,13 +431,13 @@ const getHistoryOffset = (Env, channelName, lastKnownHash, _cb) => {
|
||||
offset = lkh;
|
||||
}));
|
||||
}).nThen((w) => {
|
||||
// if offset is less than zero then presumably the channel has no messages
|
||||
// returning falls through to the next block and therefore returns -1
|
||||
// skip past this block if the offset is anything other than -1
|
||||
// this basically makes these first two nThen blocks behave like if-else
|
||||
if (offset !== -1) { return; }
|
||||
|
||||
// do a lookup from the index
|
||||
// FIXME maybe we don't need this anymore?
|
||||
// otherwise we have a non-negative offset and we can start to read from there
|
||||
// either the message exists in history but is not in the cached index
|
||||
// or it does not exist at all. In either case 'getHashOffset' is expected
|
||||
// to return a number: -1 if not present, positive interger otherwise
|
||||
Env.getHashOffset(channelName, lastKnownHash, w(function (err, _offset) {
|
||||
if (err) {
|
||||
w.abort();
|
||||
@@ -482,7 +472,9 @@ const getHistoryAsync = (Env, channelName, lastKnownHash, beforeHash, handler, c
|
||||
offset = os;
|
||||
}));
|
||||
}).nThen((waitFor) => {
|
||||
if (offset === -1) { return void cb(new Error("could not find offset")); }
|
||||
if (offset === -1) {
|
||||
return void cb(new Error('EUNKNOWN'));
|
||||
}
|
||||
const start = (beforeHash) ? 0 : offset;
|
||||
store.readMessagesBin(channelName, start, (msgObj, readMore, abort) => {
|
||||
if (beforeHash && msgObj.offset >= offset) { return void abort(); }
|
||||
|
||||
@@ -153,7 +153,8 @@ const computeIndex = function (data, cb) {
|
||||
messageBuf = [];
|
||||
}
|
||||
} else if (messageBuf.length > 100 && cpIndex.length === 0) {
|
||||
messageBuf = messageBuf.slice(0, 50);
|
||||
// take the last 50 messages
|
||||
messageBuf = messageBuf.slice(-50);
|
||||
}
|
||||
// if it's not metadata or a checkpoint then it should be a regular message
|
||||
// store it in the buffer
|
||||
@@ -352,7 +353,8 @@ const getMultipleFileSize = function (data, cb) {
|
||||
|
||||
const getHashOffset = function (data, cb) {
|
||||
const channelName = data.channel;
|
||||
const lastKnownHash = data.lastKnownHash;
|
||||
const lastKnownHash = data.hash;
|
||||
if (typeof(lastKnownHash) !== 'string') { return void cb("INVALID_HASH"); }
|
||||
|
||||
var offset = -1;
|
||||
store.readMessagesBin(channelName, 0, (msgObj, readMore, abort) => {
|
||||
|
||||
Reference in New Issue
Block a user