Skip to content

Commit 796fd18

Browse files
committed
refactor(avro): address review feedback
Place the mutable builder parameter last and express debug-only array validation with assert.
1 parent fccd8eb commit 796fd18

4 files changed

Lines changed: 16 additions & 17 deletions

File tree

src/paimon/format/avro/avro_direct_decoder.cpp

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ Status DecodeFieldToBuilder(const ::avro::NodePtr& avro_node,
5757
::avro::Decoder* decoder, arrow::ArrayBuilder* array_builder,
5858
AvroDirectDecoder::DecodeContext* ctx);
5959

60-
Status ReserveBuilderCapacityImpl(arrow::ArrayBuilder* array_builder, int64_t capacity) {
60+
Status ReserveBuilderCapacityImpl(int64_t capacity, arrow::ArrayBuilder* array_builder) {
6161
PAIMON_RETURN_NOT_OK_FROM_ARROW(array_builder->Reserve(capacity));
6262
if (array_builder->type()->id() != arrow::Type::STRUCT) {
6363
return Status::OK();
@@ -66,7 +66,7 @@ Status ReserveBuilderCapacityImpl(arrow::ArrayBuilder* array_builder, int64_t ca
6666
auto* struct_builder = checked_cast<arrow::StructBuilder*>(array_builder);
6767
for (int32_t i = 0; i < struct_builder->num_fields(); ++i) {
6868
PAIMON_RETURN_NOT_OK(
69-
ReserveBuilderCapacityImpl(struct_builder->field_builder(i), capacity));
69+
ReserveBuilderCapacityImpl(capacity, struct_builder->field_builder(i)));
7070
}
7171
return Status::OK();
7272
}
@@ -207,7 +207,7 @@ Status DecodeListToBuilder(const ::avro::NodePtr& avro_node, ::avro::Decoder* de
207207
// Read array block count
208208
int64_t block_count = decoder->arrayStart();
209209
while (block_count != 0) {
210-
PAIMON_RETURN_NOT_OK(ReserveBuilderCapacityImpl(value_builder, block_count));
210+
PAIMON_RETURN_NOT_OK(ReserveBuilderCapacityImpl(block_count, value_builder));
211211
for (int64_t i = 0; i < block_count; ++i) {
212212
PAIMON_RETURN_NOT_OK(DecodeFieldToBuilder(element_node, /*projection=*/std::nullopt,
213213
decoder, value_builder, ctx));
@@ -236,8 +236,8 @@ Status DecodeMapToBuilder(const ::avro::NodePtr& avro_node, ::avro::Decoder* dec
236236
// Read map block count
237237
int64_t block_count = decoder->mapStart();
238238
while (block_count != 0) {
239-
PAIMON_RETURN_NOT_OK(ReserveBuilderCapacityImpl(key_builder, block_count));
240-
PAIMON_RETURN_NOT_OK(ReserveBuilderCapacityImpl(item_builder, block_count));
239+
PAIMON_RETURN_NOT_OK(ReserveBuilderCapacityImpl(block_count, key_builder));
240+
PAIMON_RETURN_NOT_OK(ReserveBuilderCapacityImpl(block_count, item_builder));
241241
for (int64_t i = 0; i < block_count; ++i) {
242242
PAIMON_RETURN_NOT_OK(DecodeFieldToBuilder(key_node, /*projection=*/std::nullopt,
243243
decoder, key_builder, ctx));
@@ -265,8 +265,8 @@ Status DecodeMapToBuilder(const ::avro::NodePtr& avro_node, ::avro::Decoder* dec
265265
// Read array block count
266266
int64_t block_count = decoder->arrayStart();
267267
while (block_count != 0) {
268-
PAIMON_RETURN_NOT_OK(ReserveBuilderCapacityImpl(key_builder, block_count));
269-
PAIMON_RETURN_NOT_OK(ReserveBuilderCapacityImpl(item_builder, block_count));
268+
PAIMON_RETURN_NOT_OK(ReserveBuilderCapacityImpl(block_count, key_builder));
269+
PAIMON_RETURN_NOT_OK(ReserveBuilderCapacityImpl(block_count, item_builder));
270270
for (int64_t i = 0; i < block_count; ++i) {
271271
PAIMON_RETURN_NOT_OK(DecodeFieldToBuilder(key_node, /*projection=*/std::nullopt,
272272
decoder, key_builder, ctx));
@@ -466,9 +466,9 @@ Status AvroDirectDecoder::DecodeAvroToBuilder(const ::avro::NodePtr& avro_node,
466466
return DecodeFieldToBuilder(avro_node, projection, decoder, array_builder, ctx);
467467
}
468468

469-
Status AvroDirectDecoder::ReserveBuilderCapacity(arrow::ArrayBuilder* array_builder,
470-
int64_t capacity) {
471-
return ReserveBuilderCapacityImpl(array_builder, capacity);
469+
Status AvroDirectDecoder::ReserveBuilderCapacity(int64_t capacity,
470+
arrow::ArrayBuilder* array_builder) {
471+
return ReserveBuilderCapacityImpl(capacity, array_builder);
472472
}
473473

474474
} // namespace paimon::avro

src/paimon/format/avro/avro_direct_decoder.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -83,10 +83,10 @@ class AvroDirectDecoder {
8383
DecodeContext* ctx);
8484

8585
/// Reserve slots for a builder and any struct children with the same cardinality.
86-
/// @param array_builder Builder to reserve.
8786
/// @param capacity Number of additional values to append.
87+
/// @param array_builder Builder to reserve.
8888
/// @return Status::OK if all reservations succeed.
89-
static Status ReserveBuilderCapacity(arrow::ArrayBuilder* array_builder, int64_t capacity);
89+
static Status ReserveBuilderCapacity(int64_t capacity, arrow::ArrayBuilder* array_builder);
9090
};
9191

9292
} // namespace paimon::avro

src/paimon/format/avro/avro_direct_encoder_decoder_test.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -373,7 +373,7 @@ TEST_F(AvroDirectEncoderDecoderTest, TestReserveBuilderCapacity) {
373373
std::unique_ptr<arrow::ArrayBuilder> builder = std::move(builder_result).ValueOrDie();
374374

375375
constexpr int64_t capacity = 1024;
376-
ASSERT_OK(AvroDirectDecoder::ReserveBuilderCapacity(builder.get(), capacity));
376+
ASSERT_OK(AvroDirectDecoder::ReserveBuilderCapacity(capacity, builder.get()));
377377

378378
auto* root_builder = checked_cast<arrow::StructBuilder*>(builder.get());
379379
ASSERT_GE(root_builder->capacity(), capacity);

src/paimon/format/avro/avro_file_batch_reader.cpp

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818

1919
#include "paimon/format/avro/avro_file_batch_reader.h"
2020

21+
#include <cassert>
2122
#include <limits>
2223
#include <memory>
2324
#include <utility>
@@ -112,7 +113,7 @@ Result<BatchReader::ReadBatch> AvroFileBatchReader::NextBatch() {
112113
}
113114
if (array_builder_->length() == 0) {
114115
PAIMON_RETURN_NOT_OK(
115-
AvroDirectDecoder::ReserveBuilderCapacity(array_builder_.get(), batch_size_));
116+
AvroDirectDecoder::ReserveBuilderCapacity(batch_size_, array_builder_.get()));
116117
}
117118
reader_->decr();
118119
PAIMON_RETURN_NOT_OK(AvroDirectDecoder::DecodeAvroToBuilder(
@@ -127,9 +128,7 @@ Result<BatchReader::ReadBatch> AvroFileBatchReader::NextBatch() {
127128
}
128129
PAIMON_ASSIGN_OR_RAISE_FROM_ARROW(std::shared_ptr<arrow::Array> array,
129130
array_builder_->Finish());
130-
#ifndef NDEBUG
131-
PAIMON_RETURN_NOT_OK_FROM_ARROW(array->Validate());
132-
#endif
131+
assert(array->Validate().ok());
133132
std::unique_ptr<ArrowArray> c_array = std::make_unique<ArrowArray>();
134133
std::unique_ptr<ArrowSchema> c_schema = std::make_unique<ArrowSchema>();
135134
PAIMON_RETURN_NOT_OK_FROM_ARROW(arrow::ExportArray(*array, c_array.get(), c_schema.get()));

0 commit comments

Comments
 (0)