Class IndexRouting

java.lang.Object
org.elasticsearch.cluster.routing.IndexRouting
Direct Known Subclasses:
IndexRouting.ExtractFromSource

public abstract class IndexRouting extends Object
Generates the shard id for (id, routing) pairs.
  • Field Details

    • indexName

      protected final String indexName
    • creationVersion

      protected final IndexVersion creationVersion
  • Method Details

    • fromIndexMetadata

      public static IndexRouting fromIndexMetadata(IndexMetadata metadata)
      Build the routing from IndexMetadata.
    • preProcess

      public void preProcess(IndexRequest indexRequest)
      Finalize the request before routing, with data needed for routing decisions.
    • postProcess

      public void postProcess(IndexRequest indexRequest)
      Finalize the request after routing, incorporating data produced by the routing logic.
    • indexShard

      public abstract int indexShard(IndexRequest indexRequest)
      Called when indexing a document to generate the shard id that should contain a document with the provided parameters.
    • rerouteToTarget

      public abstract int rerouteToTarget(IndexRequest indexRequest)
      Called when indexing a document must be rerouted from the source shard to the target during resharding. Should be similar to indexShard(IndexRequest) while avoiding the initial expense of having to calculate the routing parameters.
    • updateShard

      public abstract int updateShard(String id, @Nullable String routing)
      Called when updating a document to generate the shard id that should contain a document with the provided _id and (optional) _routing.
    • deleteShard

      public abstract int deleteShard(String id, @Nullable String routing)
      Called when deleting a document to generate the shard id that should contain a document with the provided _id and (optional) _routing.
    • getShard

      public abstract int getShard(String id, @Nullable String routing)
      Called when getting a document to generate the shard id that should contain a document with the provided _id and (optional) _routing.
    • collectSearchShards

      public abstract void collectSearchShards(String routing, IntConsumer consumer)
      Collect all of the shard ids that *may* contain documents with the provided routing. Indices with a routing_partition will collect more than one shard. Indices without a partition will collect the same shard id as would be returned by getShard(java.lang.String, java.lang.String).

      Note: This is called for any search-like requests that have a routing specified but only if they have a routing specified. If they do not have a routing they just use all shards in the index.

    • shouldUseShardCountModRouting

      public static boolean shouldUseShardCountModRouting(IndexVersion creationVersion)
    • hashToShardId

      protected final int hashToShardId(int hash)
      Convert a hash generated from an (id, routing) pair into a shard id.
    • hashToShardIdOld

      protected final int hashToShardIdOld(int hash)
      Convert a hash generated from an (id, routing) pair into a shard id using the old routingNumShards mechanism.
    • checkIndexSplitAllowed

      public void checkIndexSplitAllowed()
      Check if the _split index operation is allowed for an index
      Throws:
      IllegalArgumentException - if the operation is not allowed
    • shardMatcherForSplit

      public abstract BiPredicate<String,String> shardMatcherForSplit(int shardId)
    • rerouteWritesIfResharding

      protected final int rerouteWritesIfResharding(int shardId)
      If this index is in the process of resharding, and the shard to which this request is being routed, is a target shard that is not yet in HANDOFF state, then route it to the source shard.
      Parameters:
      shardId - shardId to which the current document is routed based on hashing
      Returns:
      Updated shardId
    • rerouteSearchIfResharding

      protected final int rerouteSearchIfResharding(int shardId)