Skip to content

Commit 05926cb

Browse files
eivanov89Gazizonoki
authored andcommitted
Tpcc import with arenas (#17333) (#20756)
1 parent 1c99cbc commit 05926cb

File tree

3 files changed

+38
-12
lines changed

3 files changed

+38
-12
lines changed

.github/last_commit.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
b221825ccb0f9e8813d5df19a7167ecdd5b9f098
1+
42da2fe1b7025f0f6c397b52f085d3ed54e5f690

include/ydb-cpp-sdk/client/value/value.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44

55
#include <util/datetime/base.h>
66

7+
#include <google/protobuf/arena.h>
8+
79
#include <optional>
810
#include <memory>
911

@@ -528,7 +530,7 @@ class TValueBuilderBase : public TMoveOnly {
528530
protected:
529531
TValueBuilderBase(TValueBuilderBase&&);
530532

531-
TValueBuilderBase();
533+
TValueBuilderBase(google::protobuf::Arena* arena = nullptr);
532534

533535
TValueBuilderBase(const TType& type);
534536

@@ -544,7 +546,7 @@ class TValueBuilderBase : public TMoveOnly {
544546

545547
class TValueBuilder : public TValueBuilderBase<TValueBuilder> {
546548
public:
547-
TValueBuilder();
549+
TValueBuilder(google::protobuf::Arena* arena = nullptr);
548550

549551
TValueBuilder(const TType& type);
550552

src/client/value/value.cpp

Lines changed: 33 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2061,19 +2061,33 @@ class TValueBuilderImpl {
20612061
public:
20622062
TValueBuilderImpl()
20632063
: TypeBuilder_()
2064+
, Arena(nullptr)
2065+
, ProtoValue_(ProtoValueHeap)
2066+
{
2067+
PushPath(ProtoValue_);
2068+
}
2069+
2070+
TValueBuilderImpl(google::protobuf::Arena* arena)
2071+
: TypeBuilder_()
2072+
, Arena(arena)
2073+
, ProtoValue_(*google::protobuf::Arena::CreateMessage<Ydb::Value>(Arena))
20642074
{
20652075
PushPath(ProtoValue_);
20662076
}
20672077

20682078
TValueBuilderImpl(const TType& type)
20692079
: TypeBuilder_()
2080+
, Arena(nullptr)
2081+
, ProtoValue_(ProtoValueHeap)
20702082
{
20712083
PushPath(ProtoValue_);
20722084
GetType().CopyFrom(type.GetProto());
20732085
}
20742086

20752087
TValueBuilderImpl(Ydb::Type& type, Ydb::Value& value)
20762088
: TypeBuilder_(type)
2089+
, Arena(nullptr)
2090+
, ProtoValue_(ProtoValueHeap)
20772091
{
20782092
PushPath(value);
20792093
}
@@ -2088,10 +2102,15 @@ class TValueBuilderImpl {
20882102
TValue BuildValue() {
20892103
CheckValue();
20902104

2091-
Ydb::Value value;
2092-
value.Swap(&ProtoValue_);
2093-
2094-
return TValue(TypeBuilder_.Build(), std::move(value));
2105+
if (Arena) {
2106+
auto* value = google::protobuf::Arena::CreateMessage<Ydb::Value>(Arena);
2107+
value->Swap(&ProtoValue_);
2108+
return TValue(TypeBuilder_.Build(), value);
2109+
} else {
2110+
Ydb::Value value;
2111+
value.Swap(&ProtoValue_);
2112+
return TValue(TypeBuilder_.Build(), std::move(value));
2113+
}
20952114
}
20962115

20972116
void Bool(bool value) {
@@ -2803,7 +2822,12 @@ class TValueBuilderImpl {
28032822
private:
28042823
//TTypeBuilder TypeBuilder_;
28052824
TTypeBuilder::TImpl TypeBuilder_;
2806-
Ydb::Value ProtoValue_;
2825+
google::protobuf::Arena* Arena;
2826+
Ydb::Value ProtoValueHeap;
2827+
2828+
// either ProtoValueHeap or a reference to the arena allocated protobuf
2829+
Ydb::Value& ProtoValue_;
2830+
28072831
std::map<const Ydb::StructType*, TMembersMap> StructsMap_;
28082832

28092833
TStackVec<TProtoPosition, 8> Path_;
@@ -2819,8 +2843,8 @@ template<typename TDerived>
28192843
TValueBuilderBase<TDerived>::~TValueBuilderBase() = default;
28202844

28212845
template<typename TDerived>
2822-
TValueBuilderBase<TDerived>::TValueBuilderBase()
2823-
: Impl_(new TValueBuilderImpl()) {}
2846+
TValueBuilderBase<TDerived>::TValueBuilderBase(google::protobuf::Arena* arena)
2847+
: Impl_(new TValueBuilderImpl(arena)) {}
28242848

28252849
template<typename TDerived>
28262850
TValueBuilderBase<TDerived>::TValueBuilderBase(const TType& type)
@@ -3382,8 +3406,8 @@ template class TValueBuilderBase<TParamValueBuilder>;
33823406

33833407
////////////////////////////////////////////////////////////////////////////////
33843408

3385-
TValueBuilder::TValueBuilder()
3386-
: TValueBuilderBase() {}
3409+
TValueBuilder::TValueBuilder(google::protobuf::Arena* arena)
3410+
: TValueBuilderBase(arena) {}
33873411

33883412
TValueBuilder::TValueBuilder(const TType& type)
33893413
: TValueBuilderBase(type) {}

0 commit comments

Comments
 (0)