diff --git a/server/src/main/java/org/elasticsearch/index/engine/Engine.java b/server/src/main/java/org/elasticsearch/index/engine/Engine.java index 94bd82934c769..423ef199e03b4 100644 --- a/server/src/main/java/org/elasticsearch/index/engine/Engine.java +++ b/server/src/main/java/org/elasticsearch/index/engine/Engine.java @@ -262,6 +262,15 @@ public ShardFieldStats shardFieldStats() { } } + /** + * @throws AlreadyClosedException if the shard is closed + */ + public FieldInfos shardFieldInfos() { + try (var searcher = acquireSearcher("field_has_value")) { + return FieldInfos.getMergedFieldInfos(searcher.getIndexReader()); + } + } + protected static ShardFieldStats shardFieldStats(List leaves) { int numSegments = 0; int totalFields = 0; @@ -2407,6 +2416,13 @@ public final EngineConfig getEngineConfig() { return engineConfig; } + public static SeqNoStats buildSeqNoStats(EngineConfig config, SegmentInfos infos) { + final SequenceNumbers.CommitInfo seqNoStats = SequenceNumbers.loadSeqNoInfoFromLuceneCommit(infos.userData.entrySet()); + long maxSeqNo = seqNoStats.maxSeqNo(); + long localCheckpoint = seqNoStats.localCheckpoint(); + return new SeqNoStats(maxSeqNo, localCheckpoint, config.getGlobalCheckpointSupplier().getAsLong()); + } + /** * Allows registering a listener for when the index shard is on a segment generation >= minGeneration. * diff --git a/server/src/main/java/org/elasticsearch/index/engine/ReadOnlyEngine.java b/server/src/main/java/org/elasticsearch/index/engine/ReadOnlyEngine.java index 11ba440a3d6ea..2388154494ad4 100644 --- a/server/src/main/java/org/elasticsearch/index/engine/ReadOnlyEngine.java +++ b/server/src/main/java/org/elasticsearch/index/engine/ReadOnlyEngine.java @@ -243,13 +243,6 @@ protected void closeNoLock(String reason, CountDownLatch closedLatch) { } } - private static SeqNoStats buildSeqNoStats(EngineConfig config, SegmentInfos infos) { - final SequenceNumbers.CommitInfo seqNoStats = SequenceNumbers.loadSeqNoInfoFromLuceneCommit(infos.userData.entrySet()); - long maxSeqNo = seqNoStats.maxSeqNo(); - long localCheckpoint = seqNoStats.localCheckpoint(); - return new SeqNoStats(maxSeqNo, localCheckpoint, config.getGlobalCheckpointSupplier().getAsLong()); - } - private static TranslogStats translogStats(final EngineConfig config, final SegmentInfos infos) throws IOException { assert config.getTranslogConfig().hasTranslog(); final String translogUuid = infos.getUserData().get(Translog.TRANSLOG_UUID_KEY); diff --git a/server/src/main/java/org/elasticsearch/index/shard/IndexShard.java b/server/src/main/java/org/elasticsearch/index/shard/IndexShard.java index 01b7e63280d77..f5a0b83242112 100644 --- a/server/src/main/java/org/elasticsearch/index/shard/IndexShard.java +++ b/server/src/main/java/org/elasticsearch/index/shard/IndexShard.java @@ -4308,9 +4308,9 @@ public void afterRefresh(boolean didRefresh) { } private FieldInfos loadFieldInfos() { - try (Engine.Searcher hasValueSearcher = getEngine().acquireSearcher("field_has_value")) { - return FieldInfos.getMergedFieldInfos(hasValueSearcher.getIndexReader()); - } catch (AlreadyClosedException ignore) { + try { + return getEngine().shardFieldInfos(); + } catch (AlreadyClosedException ignored) { // engine is closed - no update to FieldInfos is fine } return FieldInfos.EMPTY;