diff --git a/src/Storages/MergeTree/MergeTreeIndexGranuleBloomFilter.cpp b/src/Storages/MergeTree/MergeTreeIndexGranuleBloomFilter.cpp index deed9b3f071..8654b166f89 100644 --- a/src/Storages/MergeTree/MergeTreeIndexGranuleBloomFilter.cpp +++ b/src/Storages/MergeTree/MergeTreeIndexGranuleBloomFilter.cpp @@ -96,6 +96,10 @@ void MergeTreeIndexGranuleBloomFilter::deserializeBinary(ReadBuffer & istr, Merg static size_t atom_size = 8; size_t bytes_size = (bits_per_row * total_rows + atom_size - 1) / atom_size; filter = std::make_shared(bytes_size, hash_functions, 0); + +#if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ + bytes_size = std::max(atom_size, bytes_size); +#endif istr.readStrict(reinterpret_cast(filter->getFilter().data()), bytes_size); } } @@ -107,7 +111,11 @@ void MergeTreeIndexGranuleBloomFilter::serializeBinary(WriteBuffer & ostr) const static size_t atom_size = 8; writeVarUInt(total_rows, ostr); +#if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ + size_t bytes_size = std::max(atom_size, (bits_per_row * total_rows + atom_size - 1) / atom_size); +#else size_t bytes_size = (bits_per_row * total_rows + atom_size - 1) / atom_size; +#endif for (const auto & bloom_filter : bloom_filters) ostr.write(reinterpret_cast(bloom_filter->getFilter().data()), bytes_size); }