Skip to content

Commit bcc8d26

Browse files
committed
Add a generic method for reading shard stats from an Engine
1 parent 92290aa commit bcc8d26

File tree

2 files changed

+30
-22
lines changed

2 files changed

+30
-22
lines changed

server/src/main/java/org/elasticsearch/index/engine/Engine.java

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@
6060
import org.elasticsearch.core.TimeValue;
6161
import org.elasticsearch.index.IndexVersion;
6262
import org.elasticsearch.index.VersionType;
63+
import org.elasticsearch.index.codec.FieldInfosWithUsages;
6364
import org.elasticsearch.index.mapper.DocumentParser;
6465
import org.elasticsearch.index.mapper.FieldNamesFieldMapper;
6566
import org.elasticsearch.index.mapper.LuceneDocument;
@@ -76,6 +77,7 @@
7677
import org.elasticsearch.index.shard.DenseVectorStats;
7778
import org.elasticsearch.index.shard.DocsStats;
7879
import org.elasticsearch.index.shard.IndexShard;
80+
import org.elasticsearch.index.shard.ShardFieldStats;
7981
import org.elasticsearch.index.shard.ShardId;
8082
import org.elasticsearch.index.shard.ShardLongFieldRange;
8183
import org.elasticsearch.index.shard.SparseVectorStats;
@@ -243,6 +245,33 @@ protected final DocsStats docsStats(IndexReader indexReader) {
243245
return new DocsStats(numDocs, numDeletedDocs, sizeInBytes);
244246
}
245247

248+
public ShardFieldStats getShardFieldStats() {
249+
try (var searcher = acquireSearcher("shard_field_stats", Engine.SearcherScope.INTERNAL)) {
250+
return getShardFieldStats(searcher.getLeafContexts());
251+
} catch (AlreadyClosedException ignored) {
252+
return null;
253+
}
254+
}
255+
256+
protected ShardFieldStats getShardFieldStats(List<LeafReaderContext> leaves) {
257+
int numSegments = 0;
258+
int totalFields = 0;
259+
long usages = 0;
260+
for (LeafReaderContext leaf : leaves) {
261+
numSegments++;
262+
var fieldInfos = leaf.reader().getFieldInfos();
263+
totalFields += fieldInfos.size();
264+
if (fieldInfos instanceof FieldInfosWithUsages ft) {
265+
if (usages != -1) {
266+
usages += ft.getTotalUsages();
267+
}
268+
} else {
269+
usages = -1;
270+
}
271+
}
272+
return new ShardFieldStats(numSegments, totalFields, usages);
273+
}
274+
246275
/**
247276
* Returns the {@link DenseVectorStats} for this engine
248277
*/

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

Lines changed: 1 addition & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818
import org.apache.lucene.index.FilterDirectoryReader;
1919
import org.apache.lucene.index.IndexCommit;
2020
import org.apache.lucene.index.LeafReader;
21-
import org.apache.lucene.index.LeafReaderContext;
2221
import org.apache.lucene.index.SegmentInfos;
2322
import org.apache.lucene.search.QueryCachingPolicy;
2423
import org.apache.lucene.search.ReferenceManager;
@@ -84,7 +83,6 @@
8483
import org.elasticsearch.index.cache.query.TrivialQueryCachingPolicy;
8584
import org.elasticsearch.index.cache.request.ShardRequestCache;
8685
import org.elasticsearch.index.codec.CodecService;
87-
import org.elasticsearch.index.codec.FieldInfosWithUsages;
8886
import org.elasticsearch.index.engine.CommitStats;
8987
import org.elasticsearch.index.engine.Engine;
9088
import org.elasticsearch.index.engine.Engine.GetResult;
@@ -4142,26 +4140,7 @@ public void beforeRefresh() {
41424140
@Override
41434141
public void afterRefresh(boolean didRefresh) {
41444142
if (shardFieldStats == null || didRefresh) {
4145-
try (var searcher = getEngine().acquireSearcher("shard_field_stats", Engine.SearcherScope.INTERNAL)) {
4146-
int numSegments = 0;
4147-
int totalFields = 0;
4148-
long usages = 0;
4149-
for (LeafReaderContext leaf : searcher.getLeafContexts()) {
4150-
numSegments++;
4151-
var fieldInfos = leaf.reader().getFieldInfos();
4152-
totalFields += fieldInfos.size();
4153-
if (fieldInfos instanceof FieldInfosWithUsages ft) {
4154-
if (usages != -1) {
4155-
usages += ft.getTotalUsages();
4156-
}
4157-
} else {
4158-
usages = -1;
4159-
}
4160-
}
4161-
shardFieldStats = new ShardFieldStats(numSegments, totalFields, usages);
4162-
} catch (AlreadyClosedException ignored) {
4163-
4164-
}
4143+
shardFieldStats = getEngine().getShardFieldStats();
41654144
}
41664145
}
41674146
}

0 commit comments

Comments
 (0)