Skip to content

Commit b69dde6

Browse files
authored
Merge pull request #1198 from Altinity/max_message_side_reader_v3
Set max message size on parquet v3 reader
2 parents bba5b98 + 8b96e89 commit b69dde6

File tree

1 file changed

+7
-1
lines changed

1 file changed

+7
-1
lines changed

src/Processors/Formats/Impl/Parquet/ThriftUtil.cpp

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,13 @@ size_t deserializeThriftStruct(T & out, const char * buf, size_t limit)
4545
/// TMemoryBuffer promises to not write to the buffer (in OBSERVE mode),
4646
/// so it should be ok to const_cast.
4747
uint8_t * cast_buf = const_cast<uint8_t *>(reinterpret_cast<const uint8_t *>(buf));
48-
auto trans = std::make_shared<apache::thrift::transport::TMemoryBuffer>(cast_buf, uint32_t(limit));
48+
49+
/// Set max message size to avoid 'apache::thrift::transport::TTransportException: MaxMessageSize reached' on big files
50+
/// Similar to https://github.com/ClickHouse/arrow/blob/5cfccd8ea65f33d4517e7409815d761c7650b45d/cpp/src/parquet/thrift_internal.h#L437
51+
auto configuration = std::make_shared<apache::thrift::TConfiguration>();
52+
configuration->setMaxMessageSize(std::numeric_limits<int>::max());
53+
auto trans = std::make_shared<apache::thrift::transport::TMemoryBuffer>(cast_buf, uint32_t(limit), apache::thrift::transport::TMemoryBuffer::OBSERVE, configuration);
54+
4955
apache::thrift::protocol::TCompactProtocolT<apache::thrift::transport::TMemoryBuffer> proto(trans);
5056
uint32_t bytes_read = out.read(&proto);
5157
chassert(size_t(bytes_read + trans->available_read()) == limit);

0 commit comments

Comments
 (0)