Skip to content

Commit 0b3ac96

Browse files
Fix ShardFieldStats.liveDocsBytes (#142711)
The estimate was wrong because RamUsageEstimator.sizeOf(Long) returns a constant, fixed. Assisted by cursor
1 parent 4209c10 commit 0b3ac96

File tree

3 files changed

+9
-3
lines changed

3 files changed

+9
-3
lines changed

docs/changelog/142711.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
area: Engine
2+
issues: []
3+
pr: 142711
4+
summary: Fix `ShardFieldStats.liveDocsBytes`
5+
type: bug

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -327,7 +327,7 @@ protected static ShardFieldStats shardFieldStats(List<LeafReaderContext> leaves,
327327
private static long getLiveDocsBytes(Bits liveDocs) {
328328
int words = FixedBitSet.bits2words(liveDocs.length());
329329
return ShardFieldStats.FIXED_BITSET_BASE_RAM_BYTES_USED + RamUsageEstimator.alignObjectSize(
330-
RamUsageEstimator.sizeOf(RamUsageEstimator.NUM_BYTES_ARRAY_HEADER + (long) Long.BYTES * words)
330+
RamUsageEstimator.NUM_BYTES_ARRAY_HEADER + (long) Long.BYTES * words
331331
);
332332
}
333333

server/src/test/java/org/elasticsearch/index/shard/LiveDocsEstimationTests.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,9 @@ public void testShardFieldStatsWithDeletes() throws IOException {
3636
assertNull(shard.getShardFieldStats());
3737
recoverShardFromStore(shard);
3838

39-
// index some documents
40-
int numDocs = 10;
39+
// Use enough docs so the live docs FixedBitSet backing array requires multiple words (>64 bits),
40+
// ensuring the byte estimation scales with segment size rather than being a constant.
41+
int numDocs = randomIntBetween(100, 1000);
4142
for (int i = 0; i < numDocs; i++) {
4243
indexDoc(shard, "_doc", "first_" + i, """
4344
{

0 commit comments

Comments
 (0)