Class AsyncShardFetch<T extends BaseNodeResponse>

  • All Implemented Interfaces:
    java.io.Closeable, java.lang.AutoCloseable, Releasable

    public abstract class AsyncShardFetch<T extends BaseNodeResponse>
    extends java.lang.Object
    implements Releasable
    Allows to asynchronously fetch shard related data from other nodes for allocation, without blocking the cluster update thread.

    The async fetch logic maintains a map of which nodes are being fetched from in an async manner, and once the results are back, it makes sure to schedule a reroute to make sure those results will be taken into account.

    • Field Detail

      • logger

        protected final org.apache.logging.log4j.Logger logger
      • type

        protected final java.lang.String type
      • shardId

        protected final ShardId shardId
    • Method Detail

      • close

        public void close()
        Specified by:
        close in interface java.lang.AutoCloseable
        Specified by:
        close in interface java.io.Closeable
        Specified by:
        close in interface Releasable
      • getNumberOfInFlightFetches

        public int getNumberOfInFlightFetches()
        Returns the number of async fetches that are currently ongoing.
      • fetchData

        public AsyncShardFetch.FetchResult<T> fetchData​(DiscoveryNodes nodes,
                                                        java.util.Set<java.lang.String> ignoreNodes)
        Fetches the data for the relevant shard. If there any ongoing async fetches going on, or new ones have been initiated by this call, the result will have no data.

        The ignoreNodes are nodes that are supposed to be ignored for this round, since fetching is async, we need to keep them around and make sure we add them back when all the responses are fetched and returned.

      • processAsyncFetch

        protected void processAsyncFetch​(java.util.List<T> responses,
                                         java.util.List<FailedNodeException> failures,
                                         long fetchingRound)
        Called by the response handler of the async action to fetch data. Verifies that its still working on the same cache generation, otherwise the results are discarded. It then goes and fills the relevant data for the shard (response + failures), issuing a reroute at the end of it to make sure there will be another round of allocations taking this new data into account.
      • reroute

        protected abstract void reroute​(ShardId shardId,
                                        java.lang.String reason)
        Implement this in order to scheduled another round that causes a call to fetch data.