package org.infinispan.distribution.ch.impl;
import org.infinispan.distribution.ch.AffinityTaggedKey;
/**
* Key partitioner that maps keys to segments using information contained in {@link AffinityTaggedKey}.
* <p>If the segment is not defined (value -1) or the key is not an AffinityTaggedKey, will fallback to a {@link HashFunctionPartitioner}
*
* @author gustavonalle
* @since 8.2
*/
public class AffinityPartitioner extends HashFunctionPartitioner {
@Override
public int getSegment(Object key) {
if (key instanceof AffinityTaggedKey) {
int affinitySegmentId = ((AffinityTaggedKey) key).getAffinitySegmentId();
if (affinitySegmentId != -1) {
return affinitySegmentId;
}
}
return super.getSegment(key);
}
}