From 4850336ca39ae4fe87ef3aa5a1a64846fd0f0460 Mon Sep 17 00:00:00 2001 From: congqixia Date: Wed, 10 Jul 2024 11:12:14 +0800 Subject: [PATCH] fix: Write padding at end of mmap file not chunk (#34529) Related to #34508 The padding bytes shall be written only at the end of the mmap file not the chunk of each field data file. Signed-off-by: Congqi Xia --- internal/core/src/mmap/Utils.h | 27 ++++++++++--------- .../core/src/segcore/SegmentSealedImpl.cpp | 1 + 2 files changed, 16 insertions(+), 12 deletions(-) diff --git a/internal/core/src/mmap/Utils.h b/internal/core/src/mmap/Utils.h index e67582da2e..f63f65ff7a 100644 --- a/internal/core/src/mmap/Utils.h +++ b/internal/core/src/mmap/Utils.h @@ -66,6 +66,21 @@ PaddingSize(const DataType& type) { return 0; } +inline void +WriteFieldPadding(File& file, DataType data_type, uint64_t& total_written) { + // write padding 0 in file content directly + // see also https://github.com/milvus-io/milvus/issues/34442 + auto padding_size = PaddingSize(data_type); + if (padding_size > 0) { + std::vector padding(padding_size, 0); + ssize_t written = file.Write(padding.data(), padding_size); + if (written < padding_size) { + THROW_FILE_WRITE_ERROR + } + total_written += written; + } +} + inline void WriteFieldData(File& file, DataType data_type, @@ -155,17 +170,5 @@ WriteFieldData(File& file, total_written += data->Size(i); } } - - // write padding 0 in file content directly - // see also https://github.com/milvus-io/milvus/issues/34442 - auto padding_size = PaddingSize(data_type); - if (padding_size > 0 ) { - std::vector padding(padding_size, 0); - ssize_t written = file.Write(padding.data(), padding_size); - if (written < padding_size) { - THROW_FILE_WRITE_ERROR - } - total_written += written; - } } } // namespace milvus diff --git a/internal/core/src/segcore/SegmentSealedImpl.cpp b/internal/core/src/segcore/SegmentSealedImpl.cpp index 9c9c5e8a6e..0d10868328 100644 --- a/internal/core/src/segcore/SegmentSealedImpl.cpp +++ b/internal/core/src/segcore/SegmentSealedImpl.cpp @@ -541,6 +541,7 @@ SegmentSealedImpl::MapFieldData(const FieldId field_id, FieldDataInfo& data) { indices, element_indices); } + WriteFieldPadding(file, data_type, total_written); auto num_rows = data.row_count; std::shared_ptr column{};