public final class NodeEnvironment
extends java.lang.Object
implements java.io.Closeable
Modifier and Type | Class and Description |
---|---|
static class |
NodeEnvironment.NodePath |
static interface |
NodeEnvironment.ShardLocker
A functional interface that people can use to reference
shardLock(ShardId, long) |
Modifier and Type | Field and Description |
---|---|
static Setting<java.lang.Boolean> |
ADD_NODE_LOCK_ID_TO_CUSTOM_PATH
If true automatically append node lock id to custom data paths.
|
static Setting<java.lang.Boolean> |
ENABLE_LUCENE_SEGMENT_INFOS_TRACE_SETTING
If true the [verbose] SegmentInfos.infoStream logging is sent to System.out.
|
static java.lang.String |
INDICES_FOLDER |
static Setting<java.lang.Integer> |
MAX_LOCAL_STORAGE_NODES_SETTING
Maximum number of data nodes that should run in an environment.
|
static Setting<java.lang.Long> |
NODE_ID_SEED_SETTING
Seed for determining a persisted unique uuid of this node.
|
static java.lang.String |
NODE_LOCK_FILENAME |
static java.lang.String |
NODES_FOLDER |
Constructor and Description |
---|
NodeEnvironment(Settings settings,
Environment environment) |
Modifier and Type | Method and Description |
---|---|
static void |
acquireFSLockForPaths(IndexSettings indexSettings,
java.nio.file.Path... shardPaths)
Acquires, then releases, all
write.lock files in the given
shard paths. |
java.util.Set<java.lang.String> |
availableIndexFolders()
Returns all folder names in ${data.paths}/nodes/{node.id}/indices folder
|
java.util.Set<java.lang.String> |
availableIndexFoldersForPath(NodeEnvironment.NodePath nodePath)
Return all directory names in the nodes/{node.id}/indices directory for the given node path.
|
java.nio.file.Path[] |
availableShardPaths(ShardId shardId)
Returns all shard paths excluding custom shard path.
|
void |
close() |
void |
deleteIndexDirectorySafe(Index index,
long lockTimeoutMS,
IndexSettings indexSettings)
Deletes an indexes data directory recursively iff all of the indexes
shards locks were successfully acquired.
|
void |
deleteIndexDirectoryUnderLock(Index index,
IndexSettings indexSettings)
Deletes an indexes data directory recursively.
|
void |
deleteShardDirectorySafe(ShardId shardId,
IndexSettings indexSettings)
Deletes a shard data directory iff the shards locks were successfully acquired.
|
void |
deleteShardDirectoryUnderLock(ShardLock lock,
IndexSettings indexSettings)
Deletes a shard data directory.
|
void |
ensureAtomicMoveSupported()
This method tries to write an empty file and moves it using an atomic move operation.
|
java.util.Set<ShardId> |
findAllShardIds(Index index)
Tries to find all allocated shards for the given index
on the current node.
|
static java.lang.String |
generateNodeId(Settings settings) |
int |
getNodeLockId() |
boolean |
hasNodeFile() |
java.nio.file.Path[] |
indexPaths(Index index)
Returns all index paths.
|
java.util.List<ShardLock> |
lockAllForIndex(Index index,
IndexSettings settings,
long lockTimeoutMS)
Tries to lock all local shards for the given index.
|
java.util.Set<ShardId> |
lockedShards()
Returns all currently lock shards.
|
java.nio.file.Path[] |
nodeDataPaths()
Returns an array of all of the nodes data locations.
|
java.lang.String |
nodeId()
returns the unique uuid describing this node.
|
NodeEnvironment.NodePath[] |
nodePaths()
Returns an array of all of the
NodeEnvironment.NodePath s. |
java.nio.file.Path |
resolveBaseCustomLocation(IndexSettings indexSettings)
Resolve the custom path for a index's shard.
|
java.nio.file.Path |
resolveCustomLocation(IndexSettings indexSettings,
ShardId shardId)
Resolve the custom path for a index's shard.
|
java.nio.file.Path[] |
resolveIndexFolder(java.lang.String indexFolderName)
Resolves all existing paths to
indexFolderName in ${data.paths}/nodes/{node.id}/indices |
static java.nio.file.Path |
resolveNodePath(java.nio.file.Path path,
int nodeLockId)
Resolve a specific nodes/{node.id} path for the specified path and node lock id.
|
ShardLock |
shardLock(ShardId id)
Tries to lock the given shards ID.
|
ShardLock |
shardLock(ShardId shardId,
long lockTimeoutMS)
Tries to lock the given shards ID.
|
static java.nio.file.Path |
shardStatePathToDataPath(java.nio.file.Path shardPath)
Returns the
NodePath.path for this shard. |
public static final Setting<java.lang.Integer> MAX_LOCAL_STORAGE_NODES_SETTING
public static final Setting<java.lang.Boolean> ADD_NODE_LOCK_ID_TO_CUSTOM_PATH
public static final Setting<java.lang.Long> NODE_ID_SEED_SETTING
public static final Setting<java.lang.Boolean> ENABLE_LUCENE_SEGMENT_INFOS_TRACE_SETTING
public static final java.lang.String NODES_FOLDER
public static final java.lang.String INDICES_FOLDER
public static final java.lang.String NODE_LOCK_FILENAME
public NodeEnvironment(Settings settings, Environment environment) throws java.io.IOException
java.io.IOException
public static java.nio.file.Path resolveNodePath(java.nio.file.Path path, int nodeLockId)
path
- the pathnodeLockId
- the node lock idpublic static java.lang.String generateNodeId(Settings settings)
public void deleteShardDirectorySafe(ShardId shardId, IndexSettings indexSettings) throws java.io.IOException, ShardLockObtainFailedException
shardId
- the id of the shard to delete to deletejava.io.IOException
- if an IOException occursShardLockObtainFailedException
public static void acquireFSLockForPaths(IndexSettings indexSettings, java.nio.file.Path... shardPaths) throws java.io.IOException
write.lock
files in the given
shard paths. The "write.lock" file is assumed to be under the shard
path's "index" directory as used by Elasticsearch.org.apache.lucene.store.LockObtainFailedException
- if any of the locks could not be acquiredjava.io.IOException
public void deleteShardDirectoryUnderLock(ShardLock lock, IndexSettings indexSettings) throws java.io.IOException
lock
- the shards lockjava.io.IOException
- if an IOException occursElasticsearchException
- if the write.lock is not acquirablepublic void deleteIndexDirectorySafe(Index index, long lockTimeoutMS, IndexSettings indexSettings) throws java.io.IOException, ShardLockObtainFailedException
index
- the index to deletelockTimeoutMS
- how long to wait for acquiring the indices shard locksindexSettings
- settings for the index being deletedjava.io.IOException
- if any of the shards data directories can't be locked or deletedShardLockObtainFailedException
public void deleteIndexDirectoryUnderLock(Index index, IndexSettings indexSettings) throws java.io.IOException
index
- the index to deleteindexSettings
- settings for the index being deletedjava.io.IOException
public java.util.List<ShardLock> lockAllForIndex(Index index, IndexSettings settings, long lockTimeoutMS) throws java.io.IOException, ShardLockObtainFailedException
ShardLockObtainFailedException
is thrown and all previously acquired locks are released.index
- the index to lock shards forlockTimeoutMS
- how long to wait for acquiring the indices shard locksShardLock
instances for this index.java.io.IOException
- if an IOException occurs.ShardLockObtainFailedException
public ShardLock shardLock(ShardId id) throws ShardLockObtainFailedException
ShardLockObtainFailedException
is thrown.
Note: this method will return immediately if the lock can't be acquired.id
- the shard ID to lockShardLock.close()
to release the lockShardLockObtainFailedException
public ShardLock shardLock(ShardId shardId, long lockTimeoutMS) throws ShardLockObtainFailedException
ShardLockObtainFailedException
is thrownshardId
- the shard ID to locklockTimeoutMS
- the lock timeout in millisecondsShardLock.close()
to release the lockShardLockObtainFailedException
public java.util.Set<ShardId> lockedShards()
public boolean hasNodeFile()
public java.nio.file.Path[] nodeDataPaths()
java.lang.IllegalStateException
- if the node is not configured to store local locationspublic java.lang.String nodeId()
public NodeEnvironment.NodePath[] nodePaths()
NodeEnvironment.NodePath
s.public int getNodeLockId()
public java.nio.file.Path[] indexPaths(Index index)
public java.nio.file.Path[] availableShardPaths(ShardId shardId)
public java.util.Set<java.lang.String> availableIndexFolders() throws java.io.IOException
java.io.IOException
public java.util.Set<java.lang.String> availableIndexFoldersForPath(NodeEnvironment.NodePath nodePath) throws java.io.IOException
nodePath
- the pathjava.io.IOException
- if an I/O exception occurs traversing the filesystempublic java.nio.file.Path[] resolveIndexFolder(java.lang.String indexFolderName) throws java.io.IOException
indexFolderName
in ${data.paths}/nodes/{node.id}/indicesjava.io.IOException
public java.util.Set<ShardId> findAllShardIds(Index index) throws java.io.IOException
index
- the index to filter shardsjava.io.IOException
- if an IOException occurspublic void close()
close
in interface java.io.Closeable
close
in interface java.lang.AutoCloseable
public void ensureAtomicMoveSupported() throws java.io.IOException
IllegalStateException
if this operation is
not supported by the filesystem. This test is executed on each of the data directories.
This method cleans up all files even in the case of an error.java.io.IOException
public java.nio.file.Path resolveBaseCustomLocation(IndexSettings indexSettings)
IndexMetaData.SETTING_DATA_PATH
setting to determine
the root path for the index.indexSettings
- settings for the indexpublic java.nio.file.Path resolveCustomLocation(IndexSettings indexSettings, ShardId shardId)
IndexMetaData.SETTING_DATA_PATH
setting to determine
the root path for the index.indexSettings
- settings for the indexshardId
- shard to resolve the path topublic static java.nio.file.Path shardStatePathToDataPath(java.nio.file.Path shardPath)
NodePath.path
for this shard.