From 0ff861c298ab21ec484b537f88629654662d52e0 Mon Sep 17 00:00:00 2001 From: Tim Grein Date: Thu, 25 Jun 2026 11:49:16 +0200 Subject: [PATCH 1/4] Fix inconsistent null handling between array and single object version for Accountable in RamUsageEstimator. --- .../org/apache/lucene/util/RamUsageEstimator.java | 3 +++ .../org/apache/lucene/util/TestRamUsageEstimator.java | 11 +++++++++++ 2 files changed, 14 insertions(+) diff --git a/lucene/core/src/java/org/apache/lucene/util/RamUsageEstimator.java b/lucene/core/src/java/org/apache/lucene/util/RamUsageEstimator.java index 08b3cd1fb3e1..7a0d46dd28a4 100644 --- a/lucene/core/src/java/org/apache/lucene/util/RamUsageEstimator.java +++ b/lucene/core/src/java/org/apache/lucene/util/RamUsageEstimator.java @@ -428,6 +428,9 @@ private static long sizeOfObject(Object o, int depth, long defSize) { * Accountable#ramBytesUsed()} method. */ public static long sizeOf(Accountable accountable) { + if(accountable == null){ + return 0; + } return accountable.ramBytesUsed(); } diff --git a/lucene/core/src/test/org/apache/lucene/util/TestRamUsageEstimator.java b/lucene/core/src/test/org/apache/lucene/util/TestRamUsageEstimator.java index 8e0bd13507ea..4e3992cde727 100644 --- a/lucene/core/src/test/org/apache/lucene/util/TestRamUsageEstimator.java +++ b/lucene/core/src/test/org/apache/lucene/util/TestRamUsageEstimator.java @@ -150,6 +150,11 @@ public void testMap() { assertEquals((double) actual, (double) estimated, (double) actual * errorFactor); } + public void testAccountable(){ + assertEquals(0L, RamUsageEstimator.sizeOf((Accountable) null)); + assertEquals(1L, RamUsageEstimator.sizeOf(new DummyAccountable())); + } + public void testCollection() { List list = new ArrayList<>(); list.add(1234L); @@ -252,4 +257,10 @@ private static class HolderSubclass extends Holder { private static class HolderSubclass2 extends Holder { // empty, only inherits all fields -> size should be identical to superclass } + + private static class DummyAccountable implements Accountable { + public long ramBytesUsed() { + return 1L; + } + } } From 5f603f045820742a78c6227e40279f5e5f5bf231 Mon Sep 17 00:00:00 2001 From: Tim Grein Date: Thu, 25 Jun 2026 12:09:31 +0200 Subject: [PATCH 2/4] Tidy --- .../core/src/java/org/apache/lucene/util/RamUsageEstimator.java | 2 +- .../src/test/org/apache/lucene/util/TestRamUsageEstimator.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lucene/core/src/java/org/apache/lucene/util/RamUsageEstimator.java b/lucene/core/src/java/org/apache/lucene/util/RamUsageEstimator.java index 7a0d46dd28a4..6fc276472ce5 100644 --- a/lucene/core/src/java/org/apache/lucene/util/RamUsageEstimator.java +++ b/lucene/core/src/java/org/apache/lucene/util/RamUsageEstimator.java @@ -428,7 +428,7 @@ private static long sizeOfObject(Object o, int depth, long defSize) { * Accountable#ramBytesUsed()} method. */ public static long sizeOf(Accountable accountable) { - if(accountable == null){ + if (accountable == null) { return 0; } return accountable.ramBytesUsed(); diff --git a/lucene/core/src/test/org/apache/lucene/util/TestRamUsageEstimator.java b/lucene/core/src/test/org/apache/lucene/util/TestRamUsageEstimator.java index 4e3992cde727..00114d5a9454 100644 --- a/lucene/core/src/test/org/apache/lucene/util/TestRamUsageEstimator.java +++ b/lucene/core/src/test/org/apache/lucene/util/TestRamUsageEstimator.java @@ -150,7 +150,7 @@ public void testMap() { assertEquals((double) actual, (double) estimated, (double) actual * errorFactor); } - public void testAccountable(){ + public void testAccountable() { assertEquals(0L, RamUsageEstimator.sizeOf((Accountable) null)); assertEquals(1L, RamUsageEstimator.sizeOf(new DummyAccountable())); } From 9922cd0838764646e470cd153802775c4a10a1c8 Mon Sep 17 00:00:00 2001 From: Tim Grein Date: Thu, 25 Jun 2026 12:13:20 +0200 Subject: [PATCH 3/4] Add changelog entry --- lucene/CHANGES.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lucene/CHANGES.txt b/lucene/CHANGES.txt index 42a6e8073576..c1b1ab7859c2 100644 --- a/lucene/CHANGES.txt +++ b/lucene/CHANGES.txt @@ -162,6 +162,9 @@ Optimizations Bug Fixes --------------------- +* Fix missing null check in RamUsageEstimator.sizeOf(Accountable) to be consistent + with sizeOf(String) and sizeOf(Accountable[]). (Tim Grein) + * GITHUB#14049: Randomize KNN codec params in RandomCodec. Fixes scalar quantization div-by-zero when all values are identical. (Mike Sokolov) From eb565d5201c883cab7e245d91abdba00e34d57f5 Mon Sep 17 00:00:00 2001 From: Tim Grein Date: Thu, 25 Jun 2026 13:21:03 +0200 Subject: [PATCH 4/4] Add missing override --- .../src/test/org/apache/lucene/util/TestRamUsageEstimator.java | 1 + 1 file changed, 1 insertion(+) diff --git a/lucene/core/src/test/org/apache/lucene/util/TestRamUsageEstimator.java b/lucene/core/src/test/org/apache/lucene/util/TestRamUsageEstimator.java index 00114d5a9454..5ffb7e9c3e01 100644 --- a/lucene/core/src/test/org/apache/lucene/util/TestRamUsageEstimator.java +++ b/lucene/core/src/test/org/apache/lucene/util/TestRamUsageEstimator.java @@ -259,6 +259,7 @@ private static class HolderSubclass2 extends Holder { } private static class DummyAccountable implements Accountable { + @Override public long ramBytesUsed() { return 1L; }