3rd-Eden / node-hashring

hashring is a consistent hashing algorithm for Node.js that is compatible with libketama and python's hash_ring package
MIT License
350 stars 57 forks source link

Add `default_port` option for compatibility with libmemcached. #23

Closed rcoup closed 10 years ago

rcoup commented 10 years ago

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 (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})
3rd-Eden commented 10 years ago

@rcoup Thanks a lot for catching this and providing me with a pull request and a test.

You da real mvp

rcoup commented 10 years ago

It was a complete bugger to track down :sob:, thanks for the quick merge!