Skip to content

Commit 5764ac8

Browse files
author
Kaival Parikh
committed
Also align temp file used during merge
1 parent 6839182 commit 5764ac8

File tree

1 file changed

+12
-5
lines changed

1 file changed

+12
-5
lines changed

lucene/core/src/java/org/apache/lucene/codecs/lucene99/Lucene99FlatVectorsWriter.java

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -257,13 +257,13 @@ public void mergeOneField(FieldInfo fieldInfo, MergeState mergeState) throws IOE
257257
@Override
258258
public CloseableRandomVectorScorerSupplier mergeOneFieldToIndex(
259259
FieldInfo fieldInfo, MergeState mergeState) throws IOException {
260-
long vectorDataOffset = alignOutput(vectorData, fieldInfo.getVectorEncoding());
261260
IndexOutput tempVectorData =
262261
segmentWriteState.directory.createTempOutput(
263262
vectorData.getName(), "temp", segmentWriteState.context);
264263
IndexInput vectorDataInput = null;
265264
try {
266265
// write the vector data to a temporary file
266+
long tempVectorDataOffset = alignOutput(tempVectorData, fieldInfo.getVectorEncoding());
267267
DocsWithFieldSet docsWithField =
268268
switch (fieldInfo.getVectorEncoding()) {
269269
case BYTE ->
@@ -277,6 +277,8 @@ public CloseableRandomVectorScorerSupplier mergeOneFieldToIndex(
277277
KnnVectorsWriter.MergedVectorValues.mergeFloatVectorValues(
278278
fieldInfo, mergeState));
279279
};
280+
long vectorDataLength = tempVectorData.getFilePointer() - tempVectorDataOffset;
281+
280282
CodecUtil.writeFooter(tempVectorData);
281283
IOUtils.close(tempVectorData);
282284

@@ -288,10 +290,13 @@ public CloseableRandomVectorScorerSupplier mergeOneFieldToIndex(
288290
tempVectorData.getName(),
289291
IOContext.DEFAULT.withHints(
290292
FileTypeHint.DATA, FileDataHint.KNN_VECTORS, DataAccessHint.RANDOM));
293+
vectorDataInput.seek(tempVectorDataOffset);
294+
291295
// copy the temporary file vectors to the actual data file
292-
vectorData.copyBytes(vectorDataInput, vectorDataInput.length() - CodecUtil.footerLength());
296+
long vectorDataOffset = alignOutput(vectorData, fieldInfo.getVectorEncoding());
297+
vectorData.copyBytes(vectorDataInput, vectorDataLength);
298+
293299
CodecUtil.retrieveChecksum(vectorDataInput);
294-
long vectorDataLength = vectorData.getFilePointer() - vectorDataOffset;
295300
writeMeta(
296301
fieldInfo,
297302
segmentWriteState.segmentInfo.maxDoc(),
@@ -310,7 +315,8 @@ public CloseableRandomVectorScorerSupplier mergeOneFieldToIndex(
310315
new OffHeapByteVectorValues.DenseOffHeapVectorValues(
311316
fieldInfo.getVectorDimension(),
312317
docsWithField.cardinality(),
313-
finalVectorDataInput,
318+
finalVectorDataInput.slice(
319+
"temp-vector-data", tempVectorDataOffset, vectorDataLength),
314320
fieldInfo.getVectorDimension() * Byte.BYTES,
315321
vectorsScorer,
316322
fieldInfo.getVectorSimilarityFunction()));
@@ -320,7 +326,8 @@ public CloseableRandomVectorScorerSupplier mergeOneFieldToIndex(
320326
new OffHeapFloatVectorValues.DenseOffHeapVectorValues(
321327
fieldInfo.getVectorDimension(),
322328
docsWithField.cardinality(),
323-
finalVectorDataInput,
329+
finalVectorDataInput.slice(
330+
"temp-vector-data", tempVectorDataOffset, vectorDataLength),
324331
fieldInfo.getVectorDimension() * Float.BYTES,
325332
vectorsScorer,
326333
fieldInfo.getVectorSimilarityFunction()));

0 commit comments

Comments
 (0)