From 7b60fe13dcd6e473fb3e7d9f40f8b78182bf7987 Mon Sep 17 00:00:00 2001 From: "guofeng.my" Date: Tue, 16 Jan 2024 14:15:00 +0800 Subject: [PATCH] Rollback the tmp storage of BytesRefHash to -1 after sort --- .../org/apache/lucene/util/BytesRefHash.java | 1 + .../apache/lucene/util/TestBytesRefHash.java | 18 +++++++++++------- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/lucene/core/src/java/org/apache/lucene/util/BytesRefHash.java b/lucene/core/src/java/org/apache/lucene/util/BytesRefHash.java index 6e1b8fc385e4..f65a4e38deb0 100644 --- a/lucene/core/src/java/org/apache/lucene/util/BytesRefHash.java +++ b/lucene/core/src/java/org/apache/lucene/util/BytesRefHash.java @@ -214,6 +214,7 @@ protected void get(BytesRefBuilder builder, BytesRef result, int i) { pool.fillBytesRef(result, bytesStart[compact[i]]); } }.sort(0, count); + Arrays.fill(compact, tmpOffset, compact.length, -1); return compact; } diff --git a/lucene/core/src/test/org/apache/lucene/util/TestBytesRefHash.java b/lucene/core/src/test/org/apache/lucene/util/TestBytesRefHash.java index 8f887257df94..c73b1182505a 100644 --- a/lucene/core/src/test/org/apache/lucene/util/TestBytesRefHash.java +++ b/lucene/core/src/test/org/apache/lucene/util/TestBytesRefHash.java @@ -176,13 +176,17 @@ public void testSort() { hash.add(ref.get()); strings.add(str); } - int[] sort = hash.sort(); - assertTrue(strings.size() < sort.length); - int i = 0; - BytesRef scratch = new BytesRef(); - for (String string : strings) { - ref.copyChars(string); - assertEquals(ref.get(), hash.get(sort[i++], scratch)); + for (int iter = 0; iter < 3; iter++) { + // Test duplicate sort on a BytesRefHash instance work well. This makes no sense but some + // users need that. + int[] sort = hash.sort(); + assertTrue(strings.size() < sort.length); + int i = 0; + BytesRef scratch = new BytesRef(); + for (String string : strings) { + ref.copyChars(string); + assertEquals(ref.get(), hash.get(sort[i++], scratch)); + } } hash.clear(); assertEquals(0, hash.size());