From 4b65ff78e050916ce420184d21a7337b98276a7b Mon Sep 17 00:00:00 2001 From: Zehua Zou <41586196+HuaHuaY@users.noreply.github.com> Date: Fri, 27 Feb 2026 11:50:43 +0800 Subject: [PATCH] fix TestByteBitPacking512VectorLE.unpackValuesUsingVector randomly oom --- .../TestByteBitPacking512VectorLE.java | 62 ++++++++++--------- 1 file changed, 32 insertions(+), 30 deletions(-) diff --git a/parquet-plugins/parquet-encoding-vector/src/test/java/org/apache/parquet/column/values/bitpacking/TestByteBitPacking512VectorLE.java b/parquet-plugins/parquet-encoding-vector/src/test/java/org/apache/parquet/column/values/bitpacking/TestByteBitPacking512VectorLE.java index 8664b8f81b..3a510d2696 100644 --- a/parquet-plugins/parquet-encoding-vector/src/test/java/org/apache/parquet/column/values/bitpacking/TestByteBitPacking512VectorLE.java +++ b/parquet-plugins/parquet-encoding-vector/src/test/java/org/apache/parquet/column/values/bitpacking/TestByteBitPacking512VectorLE.java @@ -22,8 +22,9 @@ import java.math.BigDecimal; import java.nio.ByteBuffer; -import java.util.ArrayList; -import java.util.List; +import java.util.Arrays; +import java.util.stream.IntStream; +import java.util.stream.Stream; import org.junit.Assume; import org.junit.Test; import org.slf4j.Logger; @@ -41,30 +42,31 @@ public void unpackValuesUsingVector() { } private void unpackValuesUsingVectorBitWidth(int bitWidth) { - List intInputs = getRangeData(bitWidth); - - for (int[] intInput : intInputs) { - int pack8Count = intInput.length / 8; - int byteOutputSize = pack8Count * bitWidth; - byte[] byteOutput = new byte[byteOutputSize]; - int[] output1 = new int[intInput.length]; - int[] output2 = new int[intInput.length]; - int[] output3 = new int[intInput.length]; - - BytePacker bytePacker = Packer.LITTLE_ENDIAN.newBytePacker(bitWidth); - for (int i = 0; i < pack8Count; i++) { - bytePacker.pack8Values(intInput, 8 * i, byteOutput, bitWidth * i); - } + try (Stream intInputs = getRangeData(bitWidth)) { + intInputs.forEach(intInput -> { + int pack8Count = intInput.length / 8; + int byteOutputSize = pack8Count * bitWidth; + byte[] byteOutput = new byte[byteOutputSize]; + int[] output = new int[intInput.length]; + + BytePacker bytePacker = Packer.LITTLE_ENDIAN.newBytePacker(bitWidth); + for (int i = 0; i < pack8Count; i++) { + bytePacker.pack8Values(intInput, 8 * i, byteOutput, bitWidth * i); + } - unpack8Values(bitWidth, byteOutput, output1); - unpackValuesUsingVectorArray(bitWidth, byteOutput, output2); + unpack8Values(bitWidth, byteOutput, output); + assertArrayEquals(intInput, output); + Arrays.fill(output, 0); - ByteBuffer byteBuffer = ByteBuffer.wrap(byteOutput); - unpackValuesUsingVectorByteBuffer(bitWidth, byteBuffer, output3); + unpackValuesUsingVectorArray(bitWidth, byteOutput, output); + assertArrayEquals(intInput, output); + Arrays.fill(output, 0); - assertArrayEquals(intInput, output1); - assertArrayEquals(intInput, output2); - assertArrayEquals(intInput, output3); + ByteBuffer byteBuffer = ByteBuffer.wrap(byteOutput); + unpackValuesUsingVectorByteBuffer(bitWidth, byteBuffer, output); + assertArrayEquals(intInput, output); + Arrays.fill(output, 0); + }); } } @@ -119,8 +121,7 @@ public void unpackValuesUsingVectorByteBuffer(int bitWidth, ByteBuffer input, in } } - private List getRangeData(int bitWidth) { - List result = new ArrayList<>(); + private Stream getRangeData(int bitWidth) { int itemMax = 268435456; long maxValue = getMaxValue(bitWidth); @@ -131,9 +132,11 @@ private List getRangeData(int bitWidth) { ++itemCount; } - for (int i = 0; i < itemCount; i++) { + final int finalItemCount = itemCount; + + return IntStream.range(0, finalItemCount).mapToObj(i -> { int len; - if ((i == itemCount - 1) && mode != 0) { + if ((i == finalItemCount - 1) && mode != 0) { len = mode; } else { len = itemMax; @@ -162,9 +165,8 @@ private List getRangeData(int bitWidth) { array[j] = value; j++; } - result.add(array); - } - return result; + return array; + }); } private long getMaxValue(int bitWidth) {