All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.infinispan.commands.SegmentSpecificCommand Maven / Gradle / Ivy

There is a newer version: 15.1.0.Dev04
Show newest version
package org.infinispan.commands;

import org.infinispan.commons.util.SegmentAwareKey;
import org.infinispan.distribution.ch.KeyPartitioner;

/**
 * Interface to be implemented when the command can define a single segment for its operation. This is useful so that
 * subsequent operations requiring a segment can retrieve it from the command and have it only computed once at creation
 * time.
 * 

* If a command implements this interface, the command MUST ensure that it is initialized properly to always * return a number 0 or greater when invoking {@link #getSegment()}. * * @author wburns * @since 9.3 */ public interface SegmentSpecificCommand { /** * Returns the segment that this key maps to. This must always return a number 0 or larger. * * @return the segment of the key */ int getSegment(); /** * Utility to extract the segment from a given command that may be a {@link SegmentSpecificCommand}. If the command * is a {@link SegmentSpecificCommand}, it will immediately return the value from {@link #getSegment()}. Otherwise it * will return the result from invoking {@link KeyPartitioner#getSegment(Object)} passing the provided key. * * @param command the command to extract the segment from * @param key the key the segment belongs to * @param keyPartitioner the partitioner to calculate the segment of the key * @return the segment value to use. */ static int extractSegment(ReplicableCommand command, Object key, KeyPartitioner keyPartitioner) { if (command instanceof SegmentSpecificCommand) { return ((SegmentSpecificCommand) command).getSegment(); } return keyPartitioner.getSegment(key); } /** * Create an {@link SegmentAwareKey} instance with the key and its segment. *

* If the {@code command} implements {@link SegmentSpecificCommand}, it will return the segment from {@link * #getSegment()} instead of computing it. * * @param command the command to extract the segment from * @param key the key the segment belongs to * @param keyPartitioner the partitioner to calculate the segment of the key * @param The key's type. * @return The {@link SegmentAwareKey} instance. */ static SegmentAwareKey extractSegmentAwareKey(ReplicableCommand command, K key, KeyPartitioner keyPartitioner) { int segment = command instanceof SegmentSpecificCommand ? ((SegmentSpecificCommand) command).getSegment() : keyPartitioner.getSegment(key); return new SegmentAwareKey<>(key, segment); } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy