java.lang.Object
org.elasticsearch.env.NodeEnvironment
- All Implemented Interfaces:
Closeable,AutoCloseable
A component that holds all data paths for a single node.
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic classstatic final classstatic interfaceA functional interface that people can use to referenceshardLock(ShardId, String, long) -
Field Summary
Fields -
Constructor Summary
ConstructorsConstructorDescriptionNodeEnvironment(Settings settings, Environment environment) Setup the environment. -
Method Summary
Modifier and TypeMethodDescriptionstatic voidacquireFSLockForPaths(IndexSettings indexSettings, Path... shardPaths) Acquires, then releases, allwrite.lockfiles in the given shard paths.Returns all folder names in ${data.paths}/indices folderavailableIndexFolders(Predicate<String> excludeIndexPathIdsPredicate) Returns folder names in ${data.paths}/indices folder that don't match the given predicate.Return all directory names in the indices directory for the given node path.availableIndexFoldersForPath(NodeEnvironment.DataPath dataPath, Predicate<String> excludeIndexPathIdsPredicate) Return directory names in the indices directory for the given node path that don't match the given predicate.Path[]availableShardPaths(ShardId shardId) Returns all shard paths excluding custom shard path.voidclose()Returns an array of all of theNodeEnvironment.DataPaths.voiddeleteIndexDirectorySafe(Index index, long lockTimeoutMS, IndexSettings indexSettings, Consumer<Path[]> listener) Deletes an indexes data directory recursively iff all of the indexes shards locks were successfully acquired.voiddeleteIndexDirectoryUnderLock(Index index, IndexSettings indexSettings, Consumer<Path[]> listener) Deletes an indexes data directory recursively.voiddeleteShardDirectorySafe(ShardId shardId, IndexSettings indexSettings, Consumer<Path[]> listener) Deletes a shard data directory iff the shards locks were successfully acquired.voiddeleteShardDirectoryUnderLock(ShardLock lock, IndexSettings indexSettings, Consumer<Path[]> listener) Deletes a shard data directory.findAllShardIds(Index index) Tries to find all allocated shards for the given index on the current node.static StringgenerateNodeId(Settings settings) booleanPath[]indexPaths(Index index) Returns all index paths.lockAllForIndex(Index index, IndexSettings settings, String lockDetails, long lockTimeoutMS) Tries to lock all local shards for the given index.Returns all currently lock shards.Path[]Returns an array of all of the nodes data locations.nodeId()returns the unique uuid describing this node.Returns the loaded NodeMetadata for this nodestatic PathresolveBaseCustomLocation(String customDataPath, Path sharedDataPath) Resolve the custom path for a index's shard.resolveCustomLocation(String customDataPath, ShardId shardId) Resolve the custom path for a index's shard.static PathresolveCustomLocation(String customDataPath, ShardId shardId, Path sharedDataPath) Path[]resolveIndexFolder(String indexFolderName) Resolves all existing paths toindexFolderNamein ${data.paths}/indicesshardCountPerPath(Index index) Find all the shards for this index, returning a map of theDataPathto the number of shards on that pathTries to lock the given shards ID.Tries to lock the given shards ID.static PathshardStatePathToDataPath(Path shardPath) Returns theDataPath.pathfor this shard.Returns shared data path for this node environment
-
Field Details
-
NODE_ID_SEED_SETTING
Seed for determining a persisted unique uuid of this node. If the node has already a persisted uuid on disk, this seed will be ignored and the uuid from disk will be reused. -
ENABLE_LUCENE_SEGMENT_INFOS_TRACE_SETTING
If true the [verbose] SegmentInfos.infoStream logging is sent to System.out. -
INDICES_FOLDER
- See Also:
-
NODE_LOCK_FILENAME
- See Also:
-
-
Constructor Details
-
NodeEnvironment
Setup the environment.- Parameters:
settings- settings from elasticsearch.ymlenvironment- global environment- Throws:
IOException
-
-
Method Details
-
generateNodeId
-
deleteShardDirectorySafe
public void deleteShardDirectorySafe(ShardId shardId, IndexSettings indexSettings, Consumer<Path[]> listener) throws IOException, ShardLockObtainFailedException Deletes a shard data directory iff the shards locks were successfully acquired.- Parameters:
shardId- the id of the shard to delete to delete- Throws:
IOException- if an IOException occursShardLockObtainFailedException
-
acquireFSLockForPaths
public static void acquireFSLockForPaths(IndexSettings indexSettings, Path... shardPaths) throws IOException Acquires, then releases, allwrite.lockfiles in the given shard paths. The "write.lock" file is assumed to be under the shard path's "index" directory as used by Elasticsearch.- Throws:
org.apache.lucene.store.LockObtainFailedException- if any of the locks could not be acquiredIOException
-
deleteShardDirectoryUnderLock
public void deleteShardDirectoryUnderLock(ShardLock lock, IndexSettings indexSettings, Consumer<Path[]> listener) throws IOException Deletes a shard data directory. Note: this method assumes that the shard lock is acquired. This method will also attempt to acquire the write locks for the shard's paths before deleting the data, but this is best effort, as the lock is released before the deletion happens in order to allow the folder to be deleted- Parameters:
lock- the shards lock- Throws:
IOException- if an IOException occursElasticsearchException- if the write.lock is not acquirable
-
deleteIndexDirectorySafe
public void deleteIndexDirectorySafe(Index index, long lockTimeoutMS, IndexSettings indexSettings, Consumer<Path[]> listener) throws IOException, ShardLockObtainFailedException Deletes an indexes data directory recursively iff all of the indexes shards locks were successfully acquired. If any of the indexes shard directories can't be locked non of the shards will be deleted- Parameters:
index- the index to deletelockTimeoutMS- how long to wait for acquiring the indices shard locksindexSettings- settings for the index being deleted- Throws:
IOException- if any of the shards data directories can't be locked or deletedShardLockObtainFailedException
-
deleteIndexDirectoryUnderLock
public void deleteIndexDirectoryUnderLock(Index index, IndexSettings indexSettings, Consumer<Path[]> listener) throws IOException Deletes an indexes data directory recursively. Note: this method assumes that the shard lock is acquired- Parameters:
index- the index to deleteindexSettings- settings for the index being deleted- Throws:
IOException
-
lockAllForIndex
public List<ShardLock> lockAllForIndex(Index index, IndexSettings settings, String lockDetails, long lockTimeoutMS) throws ShardLockObtainFailedException Tries to lock all local shards for the given index. If any of the shard locks can't be acquired aShardLockObtainFailedExceptionis thrown and all previously acquired locks are released.- Parameters:
index- the index to lock shards forlockTimeoutMS- how long to wait for acquiring the indices shard locks- Returns:
- the
ShardLockinstances for this index. - Throws:
ShardLockObtainFailedException
-
shardLock
Tries to lock the given shards ID. A shard lock is required to perform any kind of write operation on a shards data directory like deleting files, creating a new index writer or recover from a different shard instance into it. If the shard lock can not be acquired aShardLockObtainFailedExceptionis thrown. Note: this method will return immediately if the lock can't be acquired.- Parameters:
id- the shard ID to lockdetails- information about why the shard is being locked- Returns:
- the shard lock. Call
ShardLock.close()to release the lock - Throws:
ShardLockObtainFailedException
-
shardLock
public ShardLock shardLock(ShardId shardId, String details, long lockTimeoutMS) throws ShardLockObtainFailedException Tries to lock the given shards ID. A shard lock is required to perform any kind of write operation on a shards data directory like deleting files, creating a new index writer or recover from a different shard instance into it. If the shard lock can not be acquired aShardLockObtainFailedExceptionis thrown- Parameters:
shardId- the shard ID to lockdetails- information about why the shard is being lockedlockTimeoutMS- the lock timeout in milliseconds- Returns:
- the shard lock. Call
ShardLock.close()to release the lock - Throws:
ShardLockObtainFailedException
-
lockedShards
Returns all currently lock shards. Note: the shard ids return do not contain a valid Index UUID -
hasNodeFile
public boolean hasNodeFile() -
nodeDataPaths
Returns an array of all of the nodes data locations.- Throws:
IllegalStateException- if the node is not configured to store local locations
-
nodeId
returns the unique uuid describing this node. The uuid is persistent in the data folder of this node and remains across restarts. -
nodeMetadata
Returns the loaded NodeMetadata for this node -
dataPaths
Returns an array of all of theNodeEnvironment.DataPaths. -
indexPaths
Returns all index paths. -
availableShardPaths
Returns all shard paths excluding custom shard path. Note: Shards are only allocated on one of the returned paths. The returned array may contain paths to non-existing directories.- See Also:
-
availableIndexFolders
Returns all folder names in ${data.paths}/indices folder- Throws:
IOException
-
availableIndexFolders
public Set<String> availableIndexFolders(Predicate<String> excludeIndexPathIdsPredicate) throws IOException Returns folder names in ${data.paths}/indices folder that don't match the given predicate.- Parameters:
excludeIndexPathIdsPredicate- folder names to exclude- Throws:
IOException
-
availableIndexFoldersForPath
public Set<String> availableIndexFoldersForPath(NodeEnvironment.DataPath dataPath) throws IOException Return all directory names in the indices directory for the given node path.- Parameters:
dataPath- the path- Returns:
- all directories that could be indices for the given node path.
- Throws:
IOException- if an I/O exception occurs traversing the filesystem
-
availableIndexFoldersForPath
public Set<String> availableIndexFoldersForPath(NodeEnvironment.DataPath dataPath, Predicate<String> excludeIndexPathIdsPredicate) throws IOException Return directory names in the indices directory for the given node path that don't match the given predicate.- Parameters:
dataPath- the pathexcludeIndexPathIdsPredicate- folder names to exclude- Returns:
- all directories that could be indices for the given node path.
- Throws:
IOException- if an I/O exception occurs traversing the filesystem
-
resolveIndexFolder
Resolves all existing paths toindexFolderNamein ${data.paths}/indices -
findAllShardIds
Tries to find all allocated shards for the given index on the current node. NOTE: This methods is prone to race-conditions on the filesystem layer since it might not see directories created concurrently or while it's traversing.- Parameters:
index- the index to filter shards- Returns:
- a set of shard IDs
- Throws:
IOException- if an IOException occurs
-
shardCountPerPath
Find all the shards for this index, returning a map of theDataPathto the number of shards on that path- Parameters:
index- the index by which to filter shards- Returns:
- a map of DataPath to count of the shards for the index on that path
- Throws:
IOException- if an IOException occurs
-
close
public void close()- Specified by:
closein interfaceAutoCloseable- Specified by:
closein interfaceCloseable
-
resolveBaseCustomLocation
Resolve the custom path for a index's shard. -
resolveCustomLocation
Resolve the custom path for a index's shard. Uses theIndexMetadata.SETTING_DATA_PATHsetting to determine the root path for the index.- Parameters:
customDataPath- the custom data pathshardId- shard to resolve the path to
-
resolveCustomLocation
-
shardStatePathToDataPath
Returns theDataPath.pathfor this shard.
-