Skip to content

Commit fd138f5

Browse files
authored
Convert index path listeners to single path (#72511)
The listeners for deletion of index and shard paths previously accepted an array of paths, since they could exist on several different data paths. This commit converts the consumer to take a single path. relates #71205
1 parent 8602688 commit fd138f5

10 files changed

Lines changed: 38 additions & 42 deletions

File tree

server/src/internalClusterTest/java/org/elasticsearch/plugins/IndexFoldersDeletionListenerIT.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -325,12 +325,12 @@ public static class IndexFoldersDeletionListenerPlugin extends Plugin implements
325325
public List<IndexFoldersDeletionListener> getIndexFoldersDeletionListeners() {
326326
return List.of(new IndexFoldersDeletionListener() {
327327
@Override
328-
public void beforeIndexFoldersDeleted(Index index, IndexSettings indexSettings, Path[] indexPaths) {
328+
public void beforeIndexFoldersDeleted(Index index, IndexSettings indexSettings, Path indexPath) {
329329
deletedIndices.add(index);
330330
}
331331

332332
@Override
333-
public void beforeShardFoldersDeleted(ShardId shardId, IndexSettings indexSettings, Path[] shardPaths) {
333+
public void beforeShardFoldersDeleted(ShardId shardId, IndexSettings indexSettings, Path shardPath) {
334334
deletedShards.computeIfAbsent(shardId.getIndex(), i -> new ArrayList<>()).add(shardId);
335335
}
336336
});

server/src/main/java/org/elasticsearch/env/NodeEnvironment.java

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -547,7 +547,7 @@ private static String toString(Collection<String> items) {
547547
public void deleteShardDirectorySafe(
548548
ShardId shardId,
549549
IndexSettings indexSettings,
550-
Consumer<Path[]> listener
550+
Consumer<Path> listener
551551
) throws IOException, ShardLockObtainFailedException {
552552
final Path path = availableShardPath(shardId);
553553
logger.trace("deleting shard {} directory, path: [{}]", shardId, path);
@@ -600,21 +600,21 @@ public static void acquireFSLockForPaths(IndexSettings indexSettings, Path... sh
600600
public void deleteShardDirectoryUnderLock(
601601
ShardLock lock,
602602
IndexSettings indexSettings,
603-
Consumer<Path[]> listener
603+
Consumer<Path> listener
604604
) throws IOException {
605605
final ShardId shardId = lock.getShardId();
606606
assert isShardLocked(shardId) : "shard " + shardId + " is not locked";
607607
final Path path = availableShardPath(shardId);
608608
logger.trace("acquiring locks for {}, path: [{}]", shardId, path);
609609
acquireFSLockForPaths(indexSettings, path);
610-
listener.accept(new Path[] { path });
610+
listener.accept(path);
611611
IOUtils.rm(path);
612612
if (indexSettings.hasCustomDataPath()) {
613613
Path customLocation = resolveCustomLocation(indexSettings.customDataPath(), shardId);
614614
logger.trace("acquiring lock for {}, custom path: [{}]", shardId, customLocation);
615615
acquireFSLockForPaths(indexSettings, customLocation);
616616
logger.trace("deleting custom shard {} directory [{}]", shardId, customLocation);
617-
listener.accept(new Path[]{customLocation});
617+
listener.accept(customLocation);
618618
IOUtils.rm(customLocation);
619619
}
620620
logger.trace("deleted shard {} directory, path: [{}]", shardId, path);
@@ -670,7 +670,7 @@ public void deleteIndexDirectorySafe(
670670
Index index,
671671
long lockTimeoutMS,
672672
IndexSettings indexSettings,
673-
Consumer<Path[]> listener
673+
Consumer<Path> listener
674674
) throws IOException, ShardLockObtainFailedException {
675675
final List<ShardLock> locks = lockAllForIndex(index, indexSettings, "deleting index directory", lockTimeoutMS);
676676
try {
@@ -683,19 +683,19 @@ public void deleteIndexDirectorySafe(
683683
/**
684684
* Deletes an indexes data directory recursively.
685685
* Note: this method assumes that the shard lock is acquired
686-
*
687-
* @param index the index to delete
686+
* @param index the index to delete
688687
* @param indexSettings settings for the index being deleted
688+
* @param listener
689689
*/
690-
public void deleteIndexDirectoryUnderLock(Index index, IndexSettings indexSettings, Consumer<Path[]> listener) throws IOException {
690+
public void deleteIndexDirectoryUnderLock(Index index, IndexSettings indexSettings, Consumer<Path> listener) throws IOException {
691691
final Path indexPath = indexPath(index);
692692
logger.trace("deleting index {} directory: [{}]", index, indexPath);
693-
listener.accept(new Path[] { indexPath });
693+
listener.accept(indexPath);
694694
IOUtils.rm(indexPath);
695695
if (indexSettings.hasCustomDataPath()) {
696696
Path customLocation = resolveIndexCustomLocation(indexSettings.customDataPath(), index.getUUID());
697697
logger.trace("deleting custom index {} directory [{}]", index, customLocation);
698-
listener.accept(new Path[]{customLocation});
698+
listener.accept(customLocation);
699699
IOUtils.rm(customLocation);
700700
}
701701
}

server/src/main/java/org/elasticsearch/index/IndexService.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -411,8 +411,8 @@ public synchronized IndexShard createShard(
411411
} catch (IllegalStateException ex) {
412412
logger.warn("{} failed to load shard path, trying to remove leftover", shardId);
413413
try {
414-
ShardPath.deleteLeftoverShardDirectory(logger, nodeEnv, lock, this.indexSettings, shardPaths ->
415-
indexFoldersDeletionListener.beforeShardFoldersDeleted(shardId, this.indexSettings, shardPaths));
414+
ShardPath.deleteLeftoverShardDirectory(logger, nodeEnv, lock, this.indexSettings, shardPath ->
415+
indexFoldersDeletionListener.beforeShardFoldersDeleted(shardId, this.indexSettings, shardPath));
416416
path = ShardPath.loadShardPath(logger, nodeEnv, shardId, this.indexSettings.customDataPath());
417417
} catch (Exception inner) {
418418
ex.addSuppressed(inner);

server/src/main/java/org/elasticsearch/index/shard/ShardPath.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,7 @@ public static void deleteLeftoverShardDirectory(
167167
final NodeEnvironment env,
168168
final ShardLock lock,
169169
final IndexSettings indexSettings,
170-
final Consumer<Path[]> listener
170+
final Consumer<Path> listener
171171
) throws IOException {
172172
final String indexUUID = indexSettings.getUUID();
173173
final Path path = env.availableShardPath(lock.getShardId());
@@ -178,7 +178,7 @@ public static void deleteLeftoverShardDirectory(
178178
logger.warn("{} deleting leftover shard on path: [{}] with a different index UUID", lock.getShardId(), path);
179179
assert Files.isDirectory(path) : path + " is not a directory";
180180
NodeEnvironment.acquireFSLockForPaths(indexSettings, path);
181-
listener.accept(new Path[]{path});
181+
listener.accept(path);
182182
IOUtils.rm(path);
183183
}
184184
}

server/src/main/java/org/elasticsearch/indices/IndicesService.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -976,7 +976,7 @@ public void deleteShardStore(String reason, ShardId shardId, ClusterState cluste
976976
throw new IllegalStateException("Can't delete shard " + shardId + " (cause: " + shardDeletionCheckResult + ")");
977977
}
978978
nodeEnv.deleteShardDirectorySafe(shardId, indexSettings,
979-
paths -> indexFoldersDeletionListeners.beforeShardFoldersDeleted(shardId, indexSettings, paths));
979+
path -> indexFoldersDeletionListeners.beforeShardFoldersDeleted(shardId, indexSettings, path));
980980
logger.debug("{} deleted shard reason [{}]", shardId, reason);
981981

982982
if (canDeleteIndexContents(shardId.getIndex(), indexSettings)) {

server/src/main/java/org/elasticsearch/indices/store/CompositeIndexFoldersDeletionListener.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,10 @@ public CompositeIndexFoldersDeletionListener(List<IndexStorePlugin.IndexFoldersD
3030
}
3131

3232
@Override
33-
public void beforeIndexFoldersDeleted(Index index, IndexSettings indexSettings, Path[] indexPaths) {
33+
public void beforeIndexFoldersDeleted(Index index, IndexSettings indexSettings, Path indexPath) {
3434
for (IndexStorePlugin.IndexFoldersDeletionListener listener : listeners) {
3535
try {
36-
listener.beforeIndexFoldersDeleted(index, indexSettings, indexPaths);
36+
listener.beforeIndexFoldersDeleted(index, indexSettings, indexPath);
3737
} catch (Exception e) {
3838
assert false : new AssertionError(e);
3939
throw e;
@@ -42,10 +42,10 @@ public void beforeIndexFoldersDeleted(Index index, IndexSettings indexSettings,
4242
}
4343

4444
@Override
45-
public void beforeShardFoldersDeleted(ShardId shardId, IndexSettings indexSettings, Path[] shardPaths) {
45+
public void beforeShardFoldersDeleted(ShardId shardId, IndexSettings indexSettings, Path shardPath) {
4646
for (IndexStorePlugin.IndexFoldersDeletionListener listener : listeners) {
4747
try {
48-
listener.beforeShardFoldersDeleted(shardId, indexSettings, shardPaths);
48+
listener.beforeShardFoldersDeleted(shardId, indexSettings, shardPath);
4949
} catch (Exception e) {
5050
assert false : new AssertionError(e);
5151
throw e;

server/src/main/java/org/elasticsearch/plugins/IndexStorePlugin.java

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -83,24 +83,22 @@ default Map<String, RecoveryStateFactory> getRecoveryStateFactories() {
8383
*/
8484
interface IndexFoldersDeletionListener {
8585
/**
86-
* Invoked before the folders of an index are deleted from disk. The list of folders contains {@link Path}s that may or may not
86+
* Invoked before the folders of an index are deleted from disk. The folder's {@link Path} may or may not
8787
* exist on disk. Shard locks are expected to be acquired at the time this method is invoked.
88-
*
8988
* @param index the {@link Index} of the index whose folders are going to be deleted
9089
* @param indexSettings settings for the index whose folders are going to be deleted
91-
* @param indexPaths the paths of the folders that are going to be deleted
90+
* @param indexPath the path of the folders that will be deleted
9291
*/
93-
void beforeIndexFoldersDeleted(Index index, IndexSettings indexSettings, Path[] indexPaths);
92+
void beforeIndexFoldersDeleted(Index index, IndexSettings indexSettings, Path indexPath);
9493

9594
/**
96-
* Invoked before the folders of a shard are deleted from disk. The list of folders contains {@link Path}s that may or may not
95+
* Invoked before the folders of a shard are deleted from disk. The folder's {@link Path} may or may not
9796
* exist on disk. Shard locks are expected to be acquired at the time this method is invoked.
98-
*
9997
* @param shardId the {@link ShardId} of the shard whose folders are going to be deleted
10098
* @param indexSettings index settings of the shard whose folders are going to be deleted
101-
* @param shardPaths the paths of the folders that are going to be deleted
99+
* @param shardPath the path of the folder that will be deleted
102100
*/
103-
void beforeShardFoldersDeleted(ShardId shardId, IndexSettings indexSettings, Path[] shardPaths);
101+
void beforeShardFoldersDeleted(ShardId shardId, IndexSettings indexSettings, Path shardPath);
104102
}
105103

106104
/**

server/src/test/java/org/elasticsearch/env/NodeEnvironmentTests.java

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -200,21 +200,19 @@ public void testDeleteSafe() throws Exception {
200200
Files.createDirectories(path.resolve("1"));
201201

202202
expectThrows(ShardLockObtainFailedException.class,
203-
() -> env.deleteShardDirectorySafe(new ShardId(index, 0), idxSettings, shardPaths -> {
204-
assert false : "should not be called " + shardPaths;
203+
() -> env.deleteShardDirectorySafe(new ShardId(index, 0), idxSettings, shardPath -> {
204+
assert false : "should not be called " + shardPath;
205205
}));
206206

207207
path = env.indexPath(index);
208208
assertTrue(Files.exists(path.resolve("0")));
209209
assertTrue(Files.exists(path.resolve("1")));
210210

211211
{
212-
SetOnce<Path[]> listener = new SetOnce<>();
212+
SetOnce<Path> listener = new SetOnce<>();
213213
env.deleteShardDirectorySafe(new ShardId(index, 1), idxSettings, listener::set);
214-
Path[] deletedPaths = listener.get();
215-
for (int i = 0; i < env.nodePaths().length; i++) {
216-
assertThat(deletedPaths[i], equalTo(env.nodePaths()[i].resolve(index).resolve("1")));
217-
}
214+
Path deletedPath = listener.get();
215+
assertThat(deletedPath, equalTo(env.nodePaths()[0].resolve(index).resolve("1")));
218216
}
219217

220218
path = env.indexPath(index);
@@ -263,9 +261,9 @@ protected void doRun() throws Exception {
263261
start.countDown();
264262
blockLatch.await();
265263

266-
final SetOnce<Path[]> listener = new SetOnce<>();
264+
final SetOnce<Path> listener = new SetOnce<>();
267265
env.deleteIndexDirectorySafe(index, 5000, idxSettings, listener::set);
268-
assertThat(listener.get()[0], equalTo(env.indexPath(index)));
266+
assertThat(listener.get(), equalTo(env.indexPath(index)));
269267
assertNull(threadException.get());
270268

271269
path = env.indexPath(index);

server/src/test/java/org/elasticsearch/index/IndexModuleTests.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -122,11 +122,11 @@ public void addPendingDelete(ShardId shardId, IndexSettings indexSettings) {
122122

123123
private IndexStorePlugin.IndexFoldersDeletionListener indexDeletionListener = new IndexStorePlugin.IndexFoldersDeletionListener() {
124124
@Override
125-
public void beforeIndexFoldersDeleted(Index index, IndexSettings indexSettings, Path[] indexPaths) {
125+
public void beforeIndexFoldersDeleted(Index index, IndexSettings indexSettings, Path indexPath) {
126126
}
127127

128128
@Override
129-
public void beforeShardFoldersDeleted(ShardId shardId, IndexSettings indexSettings, Path[] shardPaths) {
129+
public void beforeShardFoldersDeleted(ShardId shardId, IndexSettings indexSettings, Path shardPath) {
130130
}
131131
};
132132

x-pack/plugin/searchable-snapshots/src/main/java/org/elasticsearch/xpack/searchablesnapshots/allocation/SearchableSnapshotIndexFoldersDeletionListener.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ public SearchableSnapshotIndexFoldersDeletionListener(
4545
}
4646

4747
@Override
48-
public void beforeIndexFoldersDeleted(Index index, IndexSettings indexSettings, Path[] indexPaths) {
48+
public void beforeIndexFoldersDeleted(Index index, IndexSettings indexSettings, Path indexPath) {
4949
if (SearchableSnapshotsConstants.isSearchableSnapshotStore(indexSettings.getSettings())) {
5050
for (int shard = 0; shard < indexSettings.getNumberOfShards(); shard++) {
5151
markShardAsEvictedInCache(new ShardId(index, shard), indexSettings);
@@ -54,7 +54,7 @@ public void beforeIndexFoldersDeleted(Index index, IndexSettings indexSettings,
5454
}
5555

5656
@Override
57-
public void beforeShardFoldersDeleted(ShardId shardId, IndexSettings indexSettings, Path[] shardPaths) {
57+
public void beforeShardFoldersDeleted(ShardId shardId, IndexSettings indexSettings, Path shardPath) {
5858
if (SearchableSnapshotsConstants.isSearchableSnapshotStore(indexSettings.getSettings())) {
5959
markShardAsEvictedInCache(shardId, indexSettings);
6060
}

0 commit comments

Comments
 (0)