So, ['1.1.1.1:11211', '2.2.2.2:11211', '1.1.1.1:11212'] builds a an identical continuum to ['1.1.1.1', '2.2.2.2', '1.1.1.1:11212'] in libmemcached (using ketama_weighted). In node-hashring the port is always hashed, so there is an incompatibility if you specify :11211 in your node-hashring server list.
To match the libmemcached behaviour, I added a default_port option, and if the server port matches the default port it isn't used in the continuum hash. ie:
new HashRing(servers, 'md5', {default_port:11211})
libmemcached ignores the default memcached port when hashing via ketama_weighted: http://bazaar.launchpad.net/~tangent-trunk/libmemcached/1.2/view/head:/libmemcached/hosts.cc#L293
So,
['1.1.1.1:11211', '2.2.2.2:11211', '1.1.1.1:11212']
builds a an identical continuum to['1.1.1.1', '2.2.2.2', '1.1.1.1:11212']
in libmemcached (usingketama_weighted
). In node-hashring the port is always hashed, so there is an incompatibility if you specify:11211
in your node-hashring server list.To match the libmemcached behaviour, I added a
default_port
option, and if the server port matches the default port it isn't used in the continuum hash. ie: