private void updateHash(MemcachedNode node, boolean remove) { if (!remove) { config.insertNode(node); } // Ketama does some special work with md5 where it reuses chunks. for (int i = 0; i < config.getNodeRepetitions() / 4; i++) { byte[] digest = HashAlgorithm.computeMd5(config.getKeyForNode(node, i)); for (int h = 0; h < 4; h++) { Long k = ((long) (digest[3 + h * 4] & 0xFF) << 24) | ((long) (digest[2 + h * 4] & 0xFF) << 16) | ((long) (digest[1 + h * 4] & 0xFF) << 8) | (digest[h * 4] & 0xFF); if (remove) { ketamaNodes.remove(k); } else { ketamaNodes.put(k, node); } } } if (remove) { config.removeNode(node); } }