From f29964bd170b77cfb951189f806aa7f55e20d0a7 Mon Sep 17 00:00:00 2001 From: congqixia Date: Thu, 31 Jul 2025 18:53:36 +0800 Subject: [PATCH] fix: Add padding for sorted index preventing 0 length mmap (#43663) Related to #43655 This patch add a padding when writing mmap file for ScalarSortedIndex in case of mmap falure due to 0 mmap length. Signed-off-by: Congqi Xia --- internal/core/src/index/ScalarIndexSort.cpp | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/internal/core/src/index/ScalarIndexSort.cpp b/internal/core/src/index/ScalarIndexSort.cpp index 3d793f7cb6..9ce2732bf9 100644 --- a/internal/core/src/index/ScalarIndexSort.cpp +++ b/internal/core/src/index/ScalarIndexSort.cpp @@ -40,6 +40,8 @@ const std::string STLSORT_INDEX_FILE_NAME = "stlsort-index"; constexpr size_t ALIGNMENT = 32; // 32-byte alignment +const uint64_t MMAP_INDEX_PADDING = 1; + template ScalarIndexSort::ScalarIndexSort( const storage::FileManagerContext& file_manager_context) @@ -219,12 +221,19 @@ ScalarIndexSort::LoadWithoutAssemble(const BinarySet& index_binary, 0); file_writer.Write(padding.data(), padding.size()); } + // write padding in case of all null values + std::vector padding(MMAP_INDEX_PADDING, 0); + file_writer.Write(padding.data(), padding.size()); file_writer.Finish(); } auto file = File::Open(mmap_filepath_, O_RDONLY); - mmap_data_ = static_cast(mmap( - NULL, aligned_size, PROT_READ, MAP_PRIVATE, file.Descriptor(), 0)); + mmap_data_ = static_cast(mmap(NULL, + aligned_size + MMAP_INDEX_PADDING, + PROT_READ, + MAP_PRIVATE, + file.Descriptor(), + 0)); if (mmap_data_ == MAP_FAILED) { file.Close(); @@ -234,7 +243,7 @@ ScalarIndexSort::LoadWithoutAssemble(const BinarySet& index_binary, strerror(errno)); } - mmap_size_ = aligned_size; + mmap_size_ = aligned_size + MMAP_INDEX_PADDING; data_size_ = index_data->size; file.Close();