From 90a2d4ae384ff2dec2b8f179b87f335a2b87ea95 Mon Sep 17 00:00:00 2001 From: Viktor Lofgren Date: Sun, 29 Sep 2024 17:53:40 +0200 Subject: [PATCH] (index) Fix partial buffer writing in PrioDocIdsTransformer Ensure all data is written to writeChannel by looping until the buffer is fully drained. This prevents potential data loss during the close operation and maintains data integrity. --- .../index/construction/prio/PrioDocIdsTransformer.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/code/index/index-reverse/java/nu/marginalia/index/construction/prio/PrioDocIdsTransformer.java b/code/index/index-reverse/java/nu/marginalia/index/construction/prio/PrioDocIdsTransformer.java index 4ecb1cb3..72be8c17 100644 --- a/code/index/index-reverse/java/nu/marginalia/index/construction/prio/PrioDocIdsTransformer.java +++ b/code/index/index-reverse/java/nu/marginalia/index/construction/prio/PrioDocIdsTransformer.java @@ -142,8 +142,10 @@ public class PrioDocIdsTransformer implements LongArrayTransformations.LongIOTra @Override public void close() throws IOException { writeBuffer.flip(); - int written = writeChannel.write(writeBuffer, writeOffsetB); - writeOffsetB += written; + while (writeBuffer.hasRemaining()) { + int written = writeChannel.write(writeBuffer, writeOffsetB); + writeOffsetB += written; + } writeBuffer.clear(); } }