Package org.elasticsearch.gateway
Class AsyncShardFetch<T extends BaseNodeResponse>
java.lang.Object
org.elasticsearch.gateway.AsyncShardFetch<T>
- All Implemented Interfaces:
java.io.Closeable
,java.lang.AutoCloseable
,org.elasticsearch.common.lease.Releasable
public abstract class AsyncShardFetch<T extends BaseNodeResponse>
extends java.lang.Object
implements org.elasticsearch.common.lease.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.
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
AsyncShardFetch.FetchResult<T extends BaseNodeResponse>
The result of a fetch operation.static interface
AsyncShardFetch.Lister<NodesResponse extends BaseNodesResponse<NodeResponse>,NodeResponse extends BaseNodeResponse>
An action that lists the relevant shard data that needs to be fetched. -
Field Summary
Fields Modifier and Type Field Description protected java.lang.String
customDataPath
protected org.apache.logging.log4j.Logger
logger
protected ShardId
shardId
protected java.lang.String
type
-
Constructor Summary
Constructors Modifier Constructor Description protected
AsyncShardFetch(org.apache.logging.log4j.Logger logger, java.lang.String type, ShardId shardId, java.lang.String customDataPath, AsyncShardFetch.Lister<? extends BaseNodesResponse<T>,T> action)
-
Method Summary
Modifier and Type Method Description void
close()
AsyncShardFetch.FetchResult<T>
fetchData(DiscoveryNodes nodes, java.util.Set<java.lang.String> ignoreNodes)
Fetches the data for the relevant shard.int
getNumberOfInFlightFetches()
Returns the number of async fetches that are currently ongoing.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.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.Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Field Details
-
logger
protected final org.apache.logging.log4j.Logger logger -
type
protected final java.lang.String type -
shardId
-
customDataPath
protected final java.lang.String customDataPath
-
-
Constructor Details
-
AsyncShardFetch
protected AsyncShardFetch(org.apache.logging.log4j.Logger logger, java.lang.String type, ShardId shardId, java.lang.String customDataPath, AsyncShardFetch.Lister<? extends BaseNodesResponse<T>,T> action)
-
-
Method Details
-
close
public void close()- Specified by:
close
in interfacejava.lang.AutoCloseable
- Specified by:
close
in interfacejava.io.Closeable
- Specified by:
close
in interfaceorg.elasticsearch.common.lease.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
Implement this in order to scheduled another round that causes a call to fetch data.
-