Here’s a block of code I wrote to print out finger tables for Chord-like distributed hash tables. Just update the ‘nodes’ variable and the m-value to adjust to any system. Runs happily in Node.js 4.4.0.
// calculating finger tables for Chord-like distributed hash table.
// the size of the ring, as 2^m;
var m=9, ringSize = Math.pow(2,m);
// the nodes we know about
var nodes = [1, 12, 123, 234, 345, 456, 501];
// just make sure it's sorted
nodes = nodes.sort( (a,b) => a-b );
console.log('the finger tables for a ', ringSize,'-virtual-node system');
console.log('========');
console.log('nodes: ', nodes);
// calculate the finger table for each node
nodes.forEach(n => {
var fingerTable = [];
i = 1;
for(var x = 0; x < m; x++) {
var nodeId = (n + i) % ringSize;
// find the node after nodeId;
var ftEntry = nodes.filter(x => x > nodeId).concat(nodes)[0];
fingerTable.push(ftEntry);
i = i << 1;
}
console.log(n + ':', fingerTable);
});