private List<Long> ketamaNodePositionsAtIteration(MemcachedNode node, int iteration) { List<Long> positions = new ArrayList<Long>(); byte[] digest = DefaultHashAlgorithm.computeMd5(config.getKeyForNode(node, iteration)); for (int h = 0; h < 4; h++) { Long k = ((long) (digest[3 + h * 4] & 0xFF) << 24) | ((long) (digest[2 + h * 4] & 0xFF) << 16); k |= ((long) (digest[1 + h * 4] & 0xFF) << 8) | (digest[h * 4] & 0xFF); positions.add(k); } return positions; } }
final String hashString = config.getKeyForNode(node, i); byte[] digest = DefaultHashAlgorithm.computeMd5(hashString); if (log.isDebugEnabled()) log.debug("digest : " + digest); final Long hashL = Long.valueOf(hashingAlgorithm.hash(config.getKeyForNode(node, i))); newNodeMap.put(hashL, node);
newNodeMap.put(hashAlg.hash(config.getKeyForNode(node, i)), node);
private List<Long> ketamaNodePositionsAtIteration(MemcachedNode node, int iteration) { List<Long> positions = new ArrayList<Long>(); byte[] digest = DefaultHashAlgorithm.computeMd5(config.getKeyForNode(node, iteration)); for (int h = 0; h < 4; h++) { Long k = ((long) (digest[3 + h * 4] & 0xFF) << 24) | ((long) (digest[2 + h * 4] & 0xFF) << 16); k |= ((long) (digest[1 + h * 4] & 0xFF) << 8) | (digest[h * 4] & 0xFF); positions.add(k); } return positions; } }
private List<Long> ketamaNodePositionsAtIteration(MemcachedNode node, int iteration) { List<Long> positions = new ArrayList<Long>(); byte[] digest = DefaultHashAlgorithm.computeMd5(config.getKeyForNode(node, iteration)); 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); positions.add(k); } return positions; } }
private List<Long> ketamaNodePositionsAtIteration(MemcachedNode node, int iteration) { List<Long> positions = new ArrayList<Long>(); byte[] digest = DefaultHashAlgorithm.computeMd5(config.getKeyForNode(node, iteration)); 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); positions.add(k); } return positions; } }
public KetamaNodeLocator(List<MemcachedNode> nodes, HashAlgorithm alg, KetamaNodeLocatorConfiguration conf) { super(); allNodes = nodes; hashAlg = alg; ketamaNodes = new TreeMap<Long, MemcachedNode>(); config = conf; int numReps = config.getNodeRepetitions(); for (MemcachedNode node : nodes) { // Ketama does some special work with md5 where it reuses chunks. if (alg == HashAlgorithm.KETAMA_HASH) { for (int i = 0; i < numReps / 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); ketamaNodes.put(k, node); } } } else { for (int i = 0; i < numReps; i++) { ketamaNodes.put(hashAlg.hash(config.getKeyForNode(node, i)), node); } } } assert ketamaNodes.size() == numReps * nodes.size(); }
public KetamaNodeLocator(List<MemcachedNode> nodes, HashAlgorithm alg, KetamaNodeLocatorConfiguration conf) { super(); allNodes = nodes; hashAlg = alg; ketamaNodes=new TreeMap<Long, MemcachedNode>(); config= conf; int numReps= config.getNodeRepetitions(); for(MemcachedNode node : nodes) { // Ketama does some special work with md5 where it reuses chunks. if(alg == HashAlgorithm.KETAMA_HASH) { for(int i=0; i<numReps / 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); ketamaNodes.put(k, node); } } } else { for(int i=0; i<numReps; i++) { ketamaNodes.put(hashAlg.hash(config.getKeyForNode(node, i)), node); } } } assert ketamaNodes.size() == numReps * nodes.size(); }
byte[] digest=HashAlgorithm.computeMd5(config.getKeyForNode(node, i)); for(int h=0;h<4;h++) { Long k = ((long)(digest[3+h*4]&0xFF) << 24) newNodeMap.put(hashAlg.hash(config.getKeyForNode(node, i)), node);
for (int i = 0; i < numReps / 4; i++) { byte[] digest = DefaultHashAlgorithm.computeMd5(config.getKeyForNode(node, i)); for (int h = 0; h < 4; h++) { Long k = ((long) (digest[3 + h * 4] & 0xFF) << 24) newNodeMap.put(hashAlg.hash(config.getKeyForNode(node, i)), node);
/** * Setup the KetamaNodeLocator with the list of nodes it should use. * * @param nodes a List of MemcachedNodes for this KetamaNodeLocator to use in * its continuum */ protected void setKetamaNodes(List<MemcachedNode> nodes) { TreeMap<Long, MemcachedNode> newNodeMap = new TreeMap<Long, MemcachedNode>(); int numReps = config.getNodeRepetitions(); for (MemcachedNode node : nodes) { for (int i = 0; i < numReps / 4; i++) { byte[] digest = DefaultHashAlgorithm.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); newNodeMap.put(k, node); getLogger().debug("Adding node %s in position %d", node, k); } } } assert newNodeMap.size() == numReps * nodes.size(); ketamaNodes = newNodeMap; } }
newNodeMap.put(hashAlg.hash(config.getKeyForNode(node, i)), node);
newNodeMap.put(hashAlg.hash(config.getKeyForNode(node, i)), node);
newNodeMap.put(hashAlg.hash(config.getKeyForNode(node, i)), node);