Skip to content

Commit c4994f1

Browse files
committed
Followers support for secondary indexes (#17965)
1 parent 34861e2 commit c4994f1

File tree

3 files changed

+61
-58
lines changed

3 files changed

+61
-58
lines changed

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

Lines changed: 23 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ class GlobalIndexSettings;
3131
class VectorIndexSettings;
3232
class KMeansTreeSettings;
3333
class PartitioningSettings;
34+
class ReadReplicasSettings;
3435
class DateTypeColumnModeSettings;
3536
class TtlSettings;
3637
class TtlTier;
@@ -200,11 +201,33 @@ struct TExplicitPartitions {
200201
void SerializeTo(Ydb::Table::ExplicitPartitions& proto) const;
201202
};
202203

204+
//! Represents table read replicas settings
205+
class TReadReplicasSettings {
206+
public:
207+
enum class EMode {
208+
PerAz = 0,
209+
AnyAz = 1
210+
};
211+
212+
TReadReplicasSettings(EMode mode, uint64_t readReplicasCount);
213+
214+
EMode GetMode() const;
215+
uint64_t GetReadReplicasCount() const;
216+
217+
static std::optional<TReadReplicasSettings> FromProto(const Ydb::Table::ReadReplicasSettings& proto);
218+
void SerializeTo(Ydb::Table::ReadReplicasSettings& proto) const;
219+
220+
private:
221+
EMode Mode_;
222+
uint64_t ReadReplicasCount_;
223+
};
224+
203225
struct TGlobalIndexSettings {
204226
using TUniformOrExplicitPartitions = std::variant<std::monostate, uint64_t, TExplicitPartitions>;
205227

206228
TPartitioningSettings PartitioningSettings;
207229
TUniformOrExplicitPartitions Partitions;
230+
std::optional<TReadReplicasSettings> ReadReplicasSettings;
208231

209232
static TGlobalIndexSettings FromProto(const Ydb::Table::GlobalIndexSettings& proto);
210233

@@ -630,24 +653,6 @@ class TColumnFamilyDescription {
630653
std::shared_ptr<TImpl> Impl_;
631654
};
632655

633-
//! Represents table read replicas settings
634-
class TReadReplicasSettings {
635-
public:
636-
enum class EMode {
637-
PerAz = 0,
638-
AnyAz = 1
639-
};
640-
641-
TReadReplicasSettings(EMode mode, uint64_t readReplicasCount);
642-
643-
EMode GetMode() const;
644-
uint64_t GetReadReplicasCount() const;
645-
646-
private:
647-
EMode Mode_;
648-
uint64_t ReadReplicasCount_;
649-
};
650-
651656
enum class EStoreType {
652657
Row = 0,
653658
Column = 1

src/api/protos/ydb_table.proto

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ message GlobalIndexSettings {
5858
}
5959
// Partitioning settings for the table that implements the index.
6060
PartitioningSettings partitioning_settings = 3;
61+
ReadReplicasSettings read_replicas_settings = 4;
6162
}
6263

6364
message VectorIndexSettings {

src/client/table/table.cpp

Lines changed: 37 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -359,23 +359,7 @@ class TTableDescription::TImpl {
359359
}
360360

361361
// read replicas settings
362-
if (proto.has_read_replicas_settings()) {
363-
const auto settings = proto.read_replicas_settings();
364-
switch (settings.settings_case()) {
365-
case Ydb::Table::ReadReplicasSettings::kPerAzReadReplicasCount:
366-
ReadReplicasSettings_ = TReadReplicasSettings(
367-
TReadReplicasSettings::EMode::PerAz,
368-
settings.per_az_read_replicas_count());
369-
break;
370-
case Ydb::Table::ReadReplicasSettings::kAnyAzReadReplicasCount:
371-
ReadReplicasSettings_ = TReadReplicasSettings(
372-
TReadReplicasSettings::EMode::AnyAz,
373-
settings.any_az_read_replicas_count());
374-
break;
375-
default:
376-
break;
377-
}
378-
}
362+
ReadReplicasSettings_ = TReadReplicasSettings::FromProto(proto.read_replicas_settings());
379363
}
380364

381365
public:
@@ -973,16 +957,7 @@ void TTableDescription::SerializeTo(Ydb::Table::CreateTableRequest& request) con
973957
}
974958

975959
if (const auto& settings = Impl_->GetReadReplicasSettings()) {
976-
switch (settings->GetMode()) {
977-
case TReadReplicasSettings::EMode::PerAz:
978-
request.mutable_read_replicas_settings()->set_per_az_read_replicas_count(settings->GetReadReplicasCount());
979-
break;
980-
case TReadReplicasSettings::EMode::AnyAz:
981-
request.mutable_read_replicas_settings()->set_any_az_read_replicas_count(settings->GetReadReplicasCount());
982-
break;
983-
default:
984-
break;
985-
}
960+
settings->SerializeTo(*request.mutable_read_replicas_settings());
986961
}
987962
}
988963

@@ -1745,18 +1720,7 @@ static Ydb::Table::AlterTableRequest MakeAlterTableProtoRequest(
17451720

17461721
if (settings.SetReadReplicasSettings_.has_value()) {
17471722
const auto& replSettings = settings.SetReadReplicasSettings_.value();
1748-
switch (replSettings.GetMode()) {
1749-
case TReadReplicasSettings::EMode::PerAz:
1750-
request.mutable_set_read_replicas_settings()->set_per_az_read_replicas_count(
1751-
replSettings.GetReadReplicasCount());
1752-
break;
1753-
case TReadReplicasSettings::EMode::AnyAz:
1754-
request.mutable_set_read_replicas_settings()->set_any_az_read_replicas_count(
1755-
replSettings.GetReadReplicasCount());
1756-
break;
1757-
default:
1758-
break;
1759-
}
1723+
replSettings.SerializeTo(*request.mutable_set_read_replicas_settings());
17601724
}
17611725

17621726
return request;
@@ -2373,6 +2337,34 @@ uint64_t TIndexDescription::GetSizeBytes() const {
23732337
return SizeBytes_;
23742338
}
23752339

2340+
std::optional<TReadReplicasSettings> TReadReplicasSettings::FromProto(const Ydb::Table::ReadReplicasSettings& proto) {
2341+
switch (proto.settings_case()) {
2342+
case Ydb::Table::ReadReplicasSettings::kPerAzReadReplicasCount:
2343+
return TReadReplicasSettings(
2344+
TReadReplicasSettings::EMode::PerAz,
2345+
proto.per_az_read_replicas_count());
2346+
case Ydb::Table::ReadReplicasSettings::kAnyAzReadReplicasCount:
2347+
return TReadReplicasSettings(
2348+
TReadReplicasSettings::EMode::AnyAz,
2349+
proto.any_az_read_replicas_count());
2350+
default:
2351+
return { };
2352+
}
2353+
}
2354+
2355+
void TReadReplicasSettings::SerializeTo(Ydb::Table::ReadReplicasSettings& proto) const {
2356+
switch (GetMode()) {
2357+
case TReadReplicasSettings::EMode::PerAz:
2358+
proto.set_per_az_read_replicas_count(GetReadReplicasCount());
2359+
break;
2360+
case TReadReplicasSettings::EMode::AnyAz:
2361+
proto.set_any_az_read_replicas_count(GetReadReplicasCount());
2362+
break;
2363+
default:
2364+
break;
2365+
}
2366+
}
2367+
23762368
TGlobalIndexSettings TGlobalIndexSettings::FromProto(const Ydb::Table::GlobalIndexSettings& proto) {
23772369
auto partitionsFromProto = [](const Ydb::Table::GlobalIndexSettings& proto) -> TUniformOrExplicitPartitions {
23782370
switch (proto.partitions_case()) {
@@ -2387,7 +2379,8 @@ TGlobalIndexSettings TGlobalIndexSettings::FromProto(const Ydb::Table::GlobalInd
23872379

23882380
return {
23892381
.PartitioningSettings = TPartitioningSettings(proto.partitioning_settings()),
2390-
.Partitions = partitionsFromProto(proto)
2382+
.Partitions = partitionsFromProto(proto),
2383+
.ReadReplicasSettings = TReadReplicasSettings::FromProto(proto.read_replicas_settings())
23912384
};
23922385
}
23932386

@@ -2403,6 +2396,10 @@ void TGlobalIndexSettings::SerializeTo(Ydb::Table::GlobalIndexSettings& settings
24032396
}
24042397
};
24052398
std::visit(std::move(variantVisitor), Partitions);
2399+
2400+
if (ReadReplicasSettings) {
2401+
ReadReplicasSettings->SerializeTo(*settings.mutable_read_replicas_settings());
2402+
}
24062403
}
24072404

24082405
TVectorIndexSettings TVectorIndexSettings::FromProto(const Ydb::Table::VectorIndexSettings& proto) {

0 commit comments

Comments
 (0)