Skip to content

Commit ac7ab39

Browse files
committed
Use unique pointer in OrcGroup::pax_columns_
The function OrcGroup::GetColumnValue() has a critical performance issue cause by shared smart pointer. This commit replace the shared pointer by unique pointer to eliminate the lock issue.
1 parent aae0191 commit ac7ab39

File tree

3 files changed

+6
-6
lines changed

3 files changed

+6
-6
lines changed

contrib/pax_storage/src/cpp/storage/micro_partition.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,7 @@ class MicroPartitionReader {
181181
// fetch, compression/encoding. At the same time, pax column can also be
182182
// used as a general interface for internal using, because it's zero copy
183183
// from buffer. more details in `storage/columns`
184-
virtual const std::shared_ptr<PaxColumns> &GetAllColumns() const = 0;
184+
virtual const std::unique_ptr<PaxColumns> &GetAllColumns() const = 0;
185185

186186
virtual void SetVisibilityMap(
187187
std::shared_ptr<Bitmap8> visibility_bitmap) = 0;

contrib/pax_storage/src/cpp/storage/orc/orc_group.cc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ inline static std::pair<Datum, bool> GetColumnDatum(PaxColumn *column,
6464
return {rc, false};
6565
}
6666

67-
OrcGroup::OrcGroup(std::unique_ptr<PaxColumns> &&pax_column, size_t row_offset,
67+
OrcGroup::OrcGroup(std::unique_ptr<PaxColumns> pax_column, size_t row_offset,
6868
const std::vector<int> *proj_col_index,
6969
std::shared_ptr<Bitmap8> micro_partition_visibility_bitmap)
7070
: pax_columns_(std::move(pax_column)),
@@ -88,7 +88,7 @@ size_t OrcGroup::GetRows() const { return pax_columns_->GetRows(); }
8888

8989
size_t OrcGroup::GetRowOffset() const { return row_offset_; }
9090

91-
const std::shared_ptr<PaxColumns> &OrcGroup::GetAllColumns() const {
91+
const std::unique_ptr<PaxColumns> &OrcGroup::GetAllColumns() const {
9292
return pax_columns_;
9393
}
9494

contrib/pax_storage/src/cpp/storage/orc/orc_group.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ class OrcDumpReader;
4040
class OrcGroup : public MicroPartitionReader::Group {
4141
public:
4242
OrcGroup(
43-
std::unique_ptr<PaxColumns> &&pax_column, size_t row_offset,
43+
std::unique_ptr<PaxColumns> pax_column, size_t row_offset,
4444
const std::vector<int> *proj_col_index,
4545
std::shared_ptr<Bitmap8> micro_partition_visibility_bitmap = nullptr);
4646

@@ -50,7 +50,7 @@ class OrcGroup : public MicroPartitionReader::Group {
5050

5151
size_t GetRowOffset() const override;
5252

53-
const std::shared_ptr<PaxColumns> &GetAllColumns() const override;
53+
const std::unique_ptr<PaxColumns> &GetAllColumns() const override;
5454

5555
virtual std::pair<bool, size_t> ReadTuple(TupleTableSlot *slot) override;
5656

@@ -74,7 +74,7 @@ class OrcGroup : public MicroPartitionReader::Group {
7474
size_t row_index);
7575

7676
protected:
77-
std::shared_ptr<PaxColumns> pax_columns_;
77+
std::unique_ptr<PaxColumns> pax_columns_;
7878
std::shared_ptr<Bitmap8> micro_partition_visibility_bitmap_;
7979
size_t row_offset_;
8080
size_t current_row_index_;

0 commit comments

Comments
 (0)