package org.infinispan.client.hotrod.impl.consistenthash;
import org.infinispan.client.hotrod.configuration.Configuration;
import org.infinispan.commons.util.Util;
/**
* Factory for {@link org.infinispan.client.hotrod.impl.consistenthash.ConsistentHash} function. It will try to look
* into the configuration for consistent hash definitions as follows:
* consistent-hash.[version]=[fully qualified class implementing ConsistentHash]
* e.g.
* <code>infinispan.client.hotrod.hash_function_impl.3=org.infinispan.client.hotrod.impl.consistenthash.SegmentConsistentHash</code>
* or if using the {@link Configuration} API,
* <code>configuration.consistentHashImpl(3, org.infinispan.client.hotrod.impl.consistenthash.SegmentConsistentHash.class);</code>
* <p/>
*
* <p>The defaults are:</p>
* <ol>
* <li>N/A (No longer used.)</li>
* <li>org.infinispan.client.hotrod.impl.ConsistentHashV2</li>
* <li>org.infinispan.client.hotrod.impl.SegmentConsistentHash</li>
* </ol>
*
* @author Mircea.Markus@jboss.com
* @since 4.1
*/
public class ConsistentHashFactory {
private Configuration configuration;
public void init(Configuration configuration) {
this.configuration = configuration;
}
public <T extends ConsistentHash> T newConsistentHash(int version) {
Class<? extends ConsistentHash> hashFunctionClass = configuration.consistentHashImpl(version);
// TODO: Why create a brand new instance via reflection everytime a new hash topology is received? Caching???
return (T) Util.getInstance(hashFunctionClass);
}
}