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 <congqi.xia@zilliz.com>
This commit is contained in:
congqixia 2024-07-10 11:12:14 +08:00 committed by GitHub
parent 9b37d3f517
commit 4850336ca3
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 16 additions and 12 deletions

View File

@ -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<char> 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<char> 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

View File

@ -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<ColumnBase> column{};