nodeway-raft
Version:
It is an implementation of the Raft consensus algorithm in Nodeway.
35 lines (29 loc) • 815 B
JavaScript
var sequenceNum = 0; // FIFO scheduling algorithm used
var clientStack = []; // client request stack
function isOwner(entry) {
return clientStack.length && clientStack[0].serverId===entry.serverId;
}
function push(args, cb) {
args.sequenceNum = ++sequenceNum;
clientStack.push({
serverId: args.serverId,
sequenceNum: args.sequenceNum,
callback: cb
});
}
function cb(entry, err, response) {
while(isOwner(entry) && clientStack[0].sequenceNum<=entry.sequenceNum) {
let request = clientStack.shift();
if (request.sequenceNum===entry.sequenceNum) {
request.callback(err, response);
break;
}
request.callback(new Error('SESSION_EXPIRED'));
}
}
module.exports = {
isOwner,
push,
cb
};
;