Skip to content

Commit 2a1947d

Browse files
authored
SeekStatsService.registerIndex() needs to be idempotent (#94762)
SeekTrackerPlugin.onModule() can be called multiple times if extra validation is enabled, so we need to ensure that we always return the same IndexSeekTracker for a given index from registerIndex().
1 parent a497c21 commit 2a1947d

File tree

3 files changed

+10
-4
lines changed

3 files changed

+10
-4
lines changed

test/external-modules/seek-tracking-directory/src/internalClusterTest/java/org/elasticsearch/test/seektracker/SeekTrackerPluginIT.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,6 @@ protected Settings nodeSettings(int nodeOrdinal, Settings otherSettings) {
3636
.build();
3737
}
3838

39-
@AwaitsFix(bugUrl = "https://github.com/elastic/elasticsearch/issues/94727")
4039
public void testSeekTrackerPlugin() throws InterruptedException {
4140

4241
assertAcked(client().admin().indices().prepareCreate("index"));

test/external-modules/seek-tracking-directory/src/main/java/org/elasticsearch/test/seektracker/IndexSeekTracker.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,13 @@
1717

1818
public class IndexSeekTracker {
1919

20+
private final String index;
2021
private final Map<String, Map<String, LongAdder>> seeks = new HashMap<>();
2122

23+
public IndexSeekTracker(String index) {
24+
this.index = index;
25+
}
26+
2227
public void track(String shard) {
2328
seeks.computeIfAbsent(shard, k -> new ConcurrentHashMap<>()); // increment can be called by multiple threads
2429
}
@@ -39,4 +44,8 @@ private ShardSeekStats getSeeksForShard(String shard) {
3944
return new ShardSeekStats(shard, seeksPerFile);
4045
}
4146

47+
@Override
48+
public String toString() {
49+
return "seeks for " + index + ": " + seeks;
50+
}
4251
}

test/external-modules/seek-tracking-directory/src/main/java/org/elasticsearch/test/seektracker/SeekStatsService.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,7 @@ public class SeekStatsService {
1616
private final Map<String, IndexSeekTracker> seeks = new HashMap<>();
1717

1818
public IndexSeekTracker registerIndex(String index) {
19-
IndexSeekTracker tracker = new IndexSeekTracker();
20-
seeks.put(index, tracker);
21-
return tracker;
19+
return seeks.computeIfAbsent(index, IndexSeekTracker::new);
2220
}
2321

2422
public Map<String, IndexSeekTracker> getSeekStats() {

0 commit comments

Comments
 (0)