This is an automated email from the ASF dual-hosted git repository.
lxy-9602 pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/paimon-cpp.git
The following commit(s) were added to refs/heads/main by this push:
new 99f8bf03 test(parquet): allocate raw Arrow reader buffers from the
default pool (#386)
99f8bf03 is described below
commit 99f8bf03c03eae9fc072538458489d9b4213ce2b
Author: Nicholas Jiang <[email protected]>
AuthorDate: Thu Sep 24 09:10:48 2026 +0800
test(parquet): allocate raw Arrow reader buffers from the default pool
(#386)
---
.../parquet/parquet_file_batch_reader_test.cpp | 14 ++++---
.../format/parquet/parquet_format_writer_test.cpp | 44 +++++++++++++---------
src/paimon/format/parquet/variant_parquet_test.cpp | 25 ++++++------
3 files changed, 48 insertions(+), 35 deletions(-)
diff --git a/src/paimon/format/parquet/parquet_file_batch_reader_test.cpp
b/src/paimon/format/parquet/parquet_file_batch_reader_test.cpp
index f25e0527..10253fb5 100644
--- a/src/paimon/format/parquet/parquet_file_batch_reader_test.cpp
+++ b/src/paimon/format/parquet/parquet_file_batch_reader_test.cpp
@@ -2056,11 +2056,12 @@ TEST_F(ParquetFileBatchReaderTest,
TestDictionaryPassthroughSkipsFallbackToPlain
// its presence cannot be the signal; the data pages are what say the
column went plain. Both
// are asserted so the test fails loudly if the fixture stops producing a
mixed chunk rather
// than quietly passing for the wrong reason.
- auto metadata_file = arrow::io::ReadableFile::Open(file_path, pool_.get());
+ auto metadata_file = arrow::io::ReadableFile::Open(file_path,
arrow::default_memory_pool());
ASSERT_TRUE(metadata_file.ok());
std::unique_ptr<::parquet::arrow::FileReader> metadata_reader;
- ASSERT_TRUE(
- ::parquet::arrow::OpenFile(metadata_file.ValueOrDie(), pool_.get(),
&metadata_reader).ok());
+ ASSERT_TRUE(::parquet::arrow::OpenFile(metadata_file.ValueOrDie(),
arrow::default_memory_pool(),
+ &metadata_reader)
+ .ok());
std::unique_ptr<::parquet::ColumnChunkMetaData> column_chunk =
metadata_reader->parquet_reader()->metadata()->RowGroup(0)->ColumnChunk(0);
ASSERT_TRUE(column_chunk->has_dictionary_page());
@@ -2151,11 +2152,12 @@ TEST_F(ParquetFileBatchReaderTest,
TestDictionaryPassthroughRequiresEveryRowGrou
// Pin the fixture: without this the read assertion below would also pass
on a file whose
// first row group was never dictionary-encoded in the first place.
- auto metadata_file = arrow::io::ReadableFile::Open(file_path, pool_.get());
+ auto metadata_file = arrow::io::ReadableFile::Open(file_path,
arrow::default_memory_pool());
ASSERT_TRUE(metadata_file.ok());
std::unique_ptr<::parquet::arrow::FileReader> metadata_reader;
- ASSERT_TRUE(
- ::parquet::arrow::OpenFile(metadata_file.ValueOrDie(), pool_.get(),
&metadata_reader).ok());
+ ASSERT_TRUE(::parquet::arrow::OpenFile(metadata_file.ValueOrDie(),
arrow::default_memory_pool(),
+ &metadata_reader)
+ .ok());
std::shared_ptr<::parquet::FileMetaData> metadata =
metadata_reader->parquet_reader()->metadata();
ASSERT_EQ(2, metadata->num_row_groups());
diff --git a/src/paimon/format/parquet/parquet_format_writer_test.cpp
b/src/paimon/format/parquet/parquet_format_writer_test.cpp
index 9ba27646..2915f9a0 100644
--- a/src/paimon/format/parquet/parquet_format_writer_test.cpp
+++ b/src/paimon/format/parquet/parquet_format_writer_test.cpp
@@ -142,10 +142,13 @@ class ParquetFormatWriterTest : public ::testing::Test {
void CheckResult(const std::string& file_path, int32_t row_count,
int32_t row_group_count) const {
- auto file = arrow::io::ReadableFile::Open(file_path,
arrow_pool_.get());
- ASSERT_TRUE(file.ok());
+ // Use the process-wide pool: pre-buffered reads may release their
buffers on Arrow IO
+ // threads after this fixture's pool is destroyed.
+ auto file = arrow::io::ReadableFile::Open(file_path,
arrow::default_memory_pool());
+ ASSERT_TRUE(file.ok()) << file.status().ToString();
std::unique_ptr<::parquet::arrow::FileReader> reader;
- auto status = ::parquet::arrow::OpenFile(file.ValueOrDie(),
arrow_pool_.get(), &reader);
+ auto status =
+ ::parquet::arrow::OpenFile(file.ValueOrDie(),
arrow::default_memory_pool(), &reader);
ASSERT_TRUE(status.ok()) << status.ToString();
const ::parquet::FileMetaData* metadata =
reader->parquet_reader()->metadata().get();
const ::parquet::SchemaDescriptor* schema = metadata->schema();
@@ -266,10 +269,11 @@ class ParquetFormatWriterTest : public ::testing::Test {
void CheckEncodedResult(const std::string& file_path, int32_t row_count,
bool null_in_dictionary) const {
- auto file = arrow::io::ReadableFile::Open(file_path,
arrow_pool_.get());
- ASSERT_TRUE(file.ok());
+ auto file = arrow::io::ReadableFile::Open(file_path,
arrow::default_memory_pool());
+ ASSERT_TRUE(file.ok()) << file.status().ToString();
std::unique_ptr<::parquet::arrow::FileReader> reader;
- auto status = ::parquet::arrow::OpenFile(file.ValueOrDie(),
arrow_pool_.get(), &reader);
+ auto status =
+ ::parquet::arrow::OpenFile(file.ValueOrDie(),
arrow::default_memory_pool(), &reader);
ASSERT_TRUE(status.ok()) << status.ToString();
const ::parquet::FileMetaData* metadata =
reader->parquet_reader()->metadata().get();
ASSERT_EQ(metadata->num_rows(), row_count);
@@ -636,10 +640,11 @@ TEST_F(ParquetFormatWriterTest,
TestWriteDictionaryChangingAcrossBatches) {
ASSERT_OK(out->Flush());
ASSERT_OK(out->Close());
- auto file = arrow::io::ReadableFile::Open(file_path, arrow_pool_.get());
- ASSERT_TRUE(file.ok());
+ auto file = arrow::io::ReadableFile::Open(file_path,
arrow::default_memory_pool());
+ ASSERT_TRUE(file.ok()) << file.status().ToString();
std::unique_ptr<::parquet::arrow::FileReader> reader;
- auto status = ::parquet::arrow::OpenFile(file.ValueOrDie(),
arrow_pool_.get(), &reader);
+ auto status =
+ ::parquet::arrow::OpenFile(file.ValueOrDie(),
arrow::default_memory_pool(), &reader);
ASSERT_TRUE(status.ok()) << status.ToString();
const ::parquet::FileMetaData* metadata =
reader->parquet_reader()->metadata().get();
ASSERT_EQ(3 * kBatchRows, metadata->num_rows());
@@ -708,10 +713,11 @@ TEST_F(ParquetFormatWriterTest,
TestWriteDictionaryWithNullRows) {
ASSERT_OK(out->Flush());
ASSERT_OK(out->Close());
- auto file = arrow::io::ReadableFile::Open(file_path, arrow_pool_.get());
- ASSERT_TRUE(file.ok());
+ auto file = arrow::io::ReadableFile::Open(file_path,
arrow::default_memory_pool());
+ ASSERT_TRUE(file.ok()) << file.status().ToString();
std::unique_ptr<::parquet::arrow::FileReader> reader;
- auto status = ::parquet::arrow::OpenFile(file.ValueOrDie(),
arrow_pool_.get(), &reader);
+ auto status =
+ ::parquet::arrow::OpenFile(file.ValueOrDie(),
arrow::default_memory_pool(), &reader);
ASSERT_TRUE(status.ok()) << status.ToString();
const ::parquet::FileMetaData* metadata =
reader->parquet_reader()->metadata().get();
ASSERT_EQ(6, metadata->num_rows());
@@ -766,10 +772,11 @@ TEST_F(ParquetFormatWriterTest,
TestWriteDictionaryWithDuplicateValues) {
ASSERT_OK(out->Flush());
ASSERT_OK(out->Close());
- auto file = arrow::io::ReadableFile::Open(file_path, arrow_pool_.get());
- ASSERT_TRUE(file.ok());
+ auto file = arrow::io::ReadableFile::Open(file_path,
arrow::default_memory_pool());
+ ASSERT_TRUE(file.ok()) << file.status().ToString();
std::unique_ptr<::parquet::arrow::FileReader> reader;
- auto status = ::parquet::arrow::OpenFile(file.ValueOrDie(),
arrow_pool_.get(), &reader);
+ auto status =
+ ::parquet::arrow::OpenFile(file.ValueOrDie(),
arrow::default_memory_pool(), &reader);
ASSERT_TRUE(status.ok()) << status.ToString();
const ::parquet::FileMetaData* metadata =
reader->parquet_reader()->metadata().get();
ASSERT_EQ(4, metadata->num_rows());
@@ -889,10 +896,11 @@ TEST_F(ParquetFormatWriterTest,
TestWriteDictionaryOfBinaryColumn) {
ASSERT_OK(out->Flush());
ASSERT_OK(out->Close());
- auto file = arrow::io::ReadableFile::Open(file_path, arrow_pool_.get());
- ASSERT_TRUE(file.ok());
+ auto file = arrow::io::ReadableFile::Open(file_path,
arrow::default_memory_pool());
+ ASSERT_TRUE(file.ok()) << file.status().ToString();
std::unique_ptr<::parquet::arrow::FileReader> reader;
- auto status = ::parquet::arrow::OpenFile(file.ValueOrDie(),
arrow_pool_.get(), &reader);
+ auto status =
+ ::parquet::arrow::OpenFile(file.ValueOrDie(),
arrow::default_memory_pool(), &reader);
ASSERT_TRUE(status.ok()) << status.ToString();
const ::parquet::FileMetaData* metadata =
reader->parquet_reader()->metadata().get();
ASSERT_EQ(4, metadata->num_rows());
diff --git a/src/paimon/format/parquet/variant_parquet_test.cpp
b/src/paimon/format/parquet/variant_parquet_test.cpp
index 94c501f5..c3bccce2 100644
--- a/src/paimon/format/parquet/variant_parquet_test.cpp
+++ b/src/paimon/format/parquet/variant_parquet_test.cpp
@@ -545,10 +545,11 @@ TEST_F(VariantParquetTest, PhysicalLayoutMatchesJava) {
// reader is required because these parquet-level properties (repetition,
physical types,
// field ids, the absence of a logical-type annotation) are not visible in
the Arrow schema
// surfaced by the paimon reader.
- auto file = arrow::io::ReadableFile::Open(file_path_, arrow_pool_.get());
- ASSERT_TRUE(file.ok());
+ auto file = arrow::io::ReadableFile::Open(file_path_,
arrow::default_memory_pool());
+ ASSERT_TRUE(file.ok()) << file.status().ToString();
std::unique_ptr<::parquet::arrow::FileReader> reader;
- auto status = ::parquet::arrow::OpenFile(file.ValueOrDie(),
arrow_pool_.get(), &reader);
+ auto status =
+ ::parquet::arrow::OpenFile(file.ValueOrDie(),
arrow::default_memory_pool(), &reader);
ASSERT_TRUE(status.ok()) << status.ToString();
const ::parquet::SchemaDescriptor* schema =
reader->parquet_reader()->metadata()->schema();
ASSERT_EQ(schema->num_columns(), 3);
@@ -591,12 +592,14 @@ TEST_F(VariantParquetTest, WriteAndReadRoundTrip) {
{
// Sanity-check the raw file through the plain parquet-arrow reader:
the struct child
- // arrays must align with the logical rows.
- auto file = arrow::io::ReadableFile::Open(file_path_,
arrow_pool_.get());
- ASSERT_TRUE(file.ok());
+ // arrays must align with the logical rows. Use the process-wide pool:
pre-buffered reads
+ // may release their buffers on Arrow IO threads after this fixture's
pool is destroyed.
+ auto file = arrow::io::ReadableFile::Open(file_path_,
arrow::default_memory_pool());
+ ASSERT_TRUE(file.ok()) << file.status().ToString();
std::unique_ptr<::parquet::arrow::FileReader> raw_reader;
ASSERT_TRUE(
- ::parquet::arrow::OpenFile(file.ValueOrDie(), arrow_pool_.get(),
&raw_reader).ok());
+ ::parquet::arrow::OpenFile(file.ValueOrDie(),
arrow::default_memory_pool(), &raw_reader)
+ .ok());
std::shared_ptr<arrow::Table> table;
ASSERT_TRUE(raw_reader->ReadTable(&table).ok());
auto raw_variant =
checked_pointer_cast<arrow::StructArray>(table->column(1)->chunk(0));
@@ -712,11 +715,11 @@ TEST_F(VariantParquetTest, ShreddedWriteAndReadRoundTrip)
{
}
{
- auto file = arrow::io::ReadableFile::Open(file_path_,
arrow_pool_.get());
- ASSERT_TRUE(file.ok());
+ auto file = arrow::io::ReadableFile::Open(file_path_,
arrow::default_memory_pool());
+ ASSERT_TRUE(file.ok()) << file.status().ToString();
std::unique_ptr<::parquet::arrow::FileReader> reader;
- auto status =
- ::parquet::arrow::OpenFile(file.ValueOrDie(),
arrow_pool_.get(), &reader);
+ auto status = ::parquet::arrow::OpenFile(file.ValueOrDie(),
+
arrow::default_memory_pool(), &reader);
ASSERT_TRUE(status.ok()) << status.ToString();
const auto* root =
reader->parquet_reader()->metadata()->schema()->group_node();
ASSERT_EQ(root->field_count(), 2);