Skip to content

Commit b458331

Browse files
authored
minor fixes of TTL in SDK (#12152)
1 parent fbd9ae2 commit b458331

File tree

3 files changed

+54
-37
lines changed

3 files changed

+54
-37
lines changed

ydb/public/lib/experimental/ydb_logstore.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ namespace NYdb {
1616
namespace NLogStore {
1717

1818
TMaybe<TTtlSettings> TtlSettingsFromProto(const Ydb::Table::TtlSettings& proto) {
19-
if (auto settings = TTtlSettings::DeserializeFromProto(proto)) {
19+
if (auto settings = TTtlSettings::FromProto(proto)) {
2020
return *settings;
2121
}
2222
return Nothing();

ydb/public/sdk/cpp/client/ydb_table/table.cpp

Lines changed: 46 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -327,7 +327,7 @@ class TTableDescription::TImpl {
327327
}
328328

329329
// ttl settings
330-
if (auto ttlSettings = TTtlSettings::DeserializeFromProto(proto.ttl_settings())) {
330+
if (auto ttlSettings = TTtlSettings::FromProto(proto.ttl_settings())) {
331331
TtlSettings_ = std::move(*ttlSettings);
332332
}
333333

@@ -2932,13 +2932,13 @@ bool operator!=(const TChangefeedDescription& lhs, const TChangefeedDescription&
29322932

29332933
////////////////////////////////////////////////////////////////////////////////
29342934

2935-
TTtlTierSettings::TTtlTierSettings(TDuration evictionDelay, const TAction& action)
2936-
: EvictAfter_(evictionDelay)
2937-
, Action_(action) {
2938-
}
2935+
TTtlTierSettings::TTtlTierSettings(TDuration applyAfter, const TAction& action)
2936+
: ApplyAfter_(applyAfter)
2937+
, Action_(action)
2938+
{ }
29392939

29402940
TTtlTierSettings::TTtlTierSettings(const Ydb::Table::TtlTier& tier)
2941-
: EvictAfter_(TDuration::Seconds(tier.apply_after_seconds())) {
2941+
: ApplyAfter_(TDuration::Seconds(tier.apply_after_seconds())) {
29422942
switch (tier.action_case()) {
29432943
case Ydb::Table::TtlTier::kDelete:
29442944
Action_ = TTtlDeleteAction();
@@ -2952,7 +2952,7 @@ TTtlTierSettings::TTtlTierSettings(const Ydb::Table::TtlTier& tier)
29522952
}
29532953

29542954
void TTtlTierSettings::SerializeTo(Ydb::Table::TtlTier& proto) const {
2955-
proto.set_apply_after_seconds(EvictAfter_.Seconds());
2955+
proto.set_apply_after_seconds(ApplyAfter_.Seconds());
29562956

29572957
std::visit(TOverloaded{
29582958
[&proto](const TTtlDeleteAction&) { proto.mutable_delete_(); },
@@ -2964,8 +2964,8 @@ void TTtlTierSettings::SerializeTo(Ydb::Table::TtlTier& proto) const {
29642964
Action_);
29652965
}
29662966

2967-
TDuration TTtlTierSettings::GetEvictAfter() const {
2968-
return EvictAfter_;
2967+
TDuration TTtlTierSettings::GetApplyAfter() const {
2968+
return ApplyAfter_;
29692969
}
29702970

29712971
const TTtlTierSettings::TAction& TTtlTierSettings::GetAction() const {
@@ -3099,42 +3099,55 @@ const TValueSinceUnixEpochModeSettings& TTtlSettings::GetValueSinceUnixEpoch() c
30993099
return std::get<TValueSinceUnixEpochModeSettings>(Mode_);
31003100
}
31013101

3102-
std::optional<TTtlSettings> TTtlSettings::DeserializeFromProto(const Ydb::Table::TtlSettings& proto) {
3103-
TDuration legacyExpireAfter = TDuration::Max();
3102+
std::optional<TTtlSettings> TTtlSettings::FromProto(const Ydb::Table::TtlSettings& proto) {
3103+
TVector<TTtlTierSettings> tiers;
31043104
for (const auto& tier : proto.tiers()) {
3105-
if (tier.has_delete_()) {
3106-
legacyExpireAfter = TDuration::Seconds(tier.apply_after_seconds());
3107-
break;
3108-
}
3105+
tiers.emplace_back(tier);
31093106
}
3107+
TDuration legacyExpireAfter = GetExpireAfterFrom(tiers).value_or(TDuration::Max());
31103108

31113109
switch(proto.mode_case()) {
31123110
case Ydb::Table::TtlSettings::kDateTypeColumn:
31133111
return TTtlSettings(proto.date_type_column(), proto.run_interval_seconds());
31143112
case Ydb::Table::TtlSettings::kValueSinceUnixEpoch:
31153113
return TTtlSettings(proto.value_since_unix_epoch(), proto.run_interval_seconds());
31163114
case Ydb::Table::TtlSettings::kDateTypeColumnV1:
3117-
return TTtlSettings(TDateTypeColumnModeSettings(proto.date_type_column_v1().column_name(), legacyExpireAfter), proto.run_interval_seconds());
3115+
return TTtlSettings(
3116+
TDateTypeColumnModeSettings(proto.date_type_column_v1().column_name(), legacyExpireAfter), tiers, proto.run_interval_seconds());
31183117
case Ydb::Table::TtlSettings::kValueSinceUnixEpochV1:
3119-
return TTtlSettings(TValueSinceUnixEpochModeSettings(proto.value_since_unix_epoch_v1().column_name(), TProtoAccessor::FromProto(proto.value_since_unix_epoch_v1().column_unit()), legacyExpireAfter), proto.run_interval_seconds());
3118+
return TTtlSettings(TValueSinceUnixEpochModeSettings(proto.value_since_unix_epoch_v1().column_name(),
3119+
TProtoAccessor::FromProto(proto.value_since_unix_epoch_v1().column_unit()), legacyExpireAfter),
3120+
tiers, proto.run_interval_seconds());
31203121
case Ydb::Table::TtlSettings::MODE_NOT_SET:
31213122
return std::nullopt;
31223123
break;
31233124
}
31243125
}
31253126

31263127
void TTtlSettings::SerializeTo(Ydb::Table::TtlSettings& proto) const {
3127-
switch (GetMode()) {
3128-
case EMode::DateTypeColumn:
3129-
GetDateTypeColumn().SerializeTo(*proto.mutable_date_type_column_v1());
3130-
break;
3131-
case EMode::ValueSinceUnixEpoch:
3132-
GetValueSinceUnixEpoch().SerializeTo(*proto.mutable_value_since_unix_epoch_v1());
3133-
break;
3134-
}
3128+
if (Tiers_.size() == 1 && std::holds_alternative<TTtlDeleteAction>(Tiers_.back().GetAction())) {
3129+
// serialize DELETE-only TTL to legacy format for backwards-compatibility
3130+
switch (GetMode()) {
3131+
case EMode::DateTypeColumn:
3132+
GetDateTypeColumn().SerializeTo(*proto.mutable_date_type_column());
3133+
break;
3134+
case EMode::ValueSinceUnixEpoch:
3135+
GetValueSinceUnixEpoch().SerializeTo(*proto.mutable_value_since_unix_epoch());
3136+
break;
3137+
}
3138+
} else {
3139+
switch (GetMode()) {
3140+
case EMode::DateTypeColumn:
3141+
GetDateTypeColumn().SerializeTo(*proto.mutable_date_type_column_v1());
3142+
break;
3143+
case EMode::ValueSinceUnixEpoch:
3144+
GetValueSinceUnixEpoch().SerializeTo(*proto.mutable_value_since_unix_epoch_v1());
3145+
break;
3146+
}
31353147

3136-
for (const auto& tier : Tiers_) {
3137-
tier.SerializeTo(*proto.add_tiers());
3148+
for (const auto& tier : Tiers_) {
3149+
tier.SerializeTo(*proto.add_tiers());
3150+
}
31383151
}
31393152

31403153
if (RunInterval_) {
@@ -3166,13 +3179,17 @@ std::optional<TDuration> TTtlSettings::GetExpireAfter() const {
31663179
std::optional<TDuration> TTtlSettings::GetExpireAfterFrom(const TVector<TTtlTierSettings>& tiers) {
31673180
for (const auto& tier : tiers) {
31683181
if (std::holds_alternative<TTtlDeleteAction>(tier.GetAction())) {
3169-
return tier.GetEvictAfter();
3182+
return tier.GetApplyAfter();
31703183
}
31713184
}
31723185
return std::nullopt;
31733186
}
31743187

3175-
TTtlSettings::TTtlSettings(TMode mode, ui32 runIntervalSeconds) : Mode_(std::move(mode)), RunInterval_(TDuration::Seconds(runIntervalSeconds)) {}
3188+
TTtlSettings::TTtlSettings(TMode mode, const TVector<TTtlTierSettings>& tiers, ui32 runIntervalSeconds)
3189+
: Mode_(std::move(mode))
3190+
, Tiers_(tiers)
3191+
, RunInterval_(TDuration::Seconds(runIntervalSeconds))
3192+
{}
31763193

31773194
TAlterTtlSettings::EAction TAlterTtlSettings::GetAction() const {
31783195
return static_cast<EAction>(Action_.index());

ydb/public/sdk/cpp/client/ydb_table/table.h

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -439,15 +439,15 @@ class TTtlTierSettings {
439439
>;
440440

441441
public:
442-
explicit TTtlTierSettings(TDuration evictionDelay, const TAction& action);
442+
explicit TTtlTierSettings(TDuration applyAfter, const TAction& action);
443443
explicit TTtlTierSettings(const Ydb::Table::TtlTier& tier);
444444
void SerializeTo(Ydb::Table::TtlTier& proto) const;
445445

446-
TDuration GetEvictAfter() const;
446+
TDuration GetApplyAfter() const;
447447
const TAction& GetAction() const;
448448

449449
private:
450-
TDuration EvictAfter_;
450+
TDuration ApplyAfter_;
451451
TAction Action_;
452452
};
453453

@@ -516,16 +516,16 @@ class TTtlSettings {
516516
explicit TTtlSettings(const TString& columnName, const TVector<TTtlTierSettings>& tiers);
517517
explicit TTtlSettings(const TString& columnName, const TDuration& expireAfter);
518518
const TDateTypeColumnModeSettings& GetDateTypeColumn() const;
519-
// Deprecated. Use DeserializeFromProto()
519+
// Deprecated. Use FromProto()
520520
explicit TTtlSettings(const Ydb::Table::DateTypeColumnModeSettings& mode, ui32 runIntervalSeconds);
521521

522522
explicit TTtlSettings(const TString& columnName, EUnit columnUnit, const TVector<TTtlTierSettings>& tiers);
523523
explicit TTtlSettings(const TString& columnName, EUnit columnUnit, const TDuration& expireAfter);
524524
const TValueSinceUnixEpochModeSettings& GetValueSinceUnixEpoch() const;
525-
// Deprecated. Use DeserializeFromProto()
525+
// Deprecated. Use FromProto()
526526
explicit TTtlSettings(const Ydb::Table::ValueSinceUnixEpochModeSettings& mode, ui32 runIntervalSeconds);
527527

528-
static std::optional<TTtlSettings> DeserializeFromProto(const Ydb::Table::TtlSettings& proto);
528+
static std::optional<TTtlSettings> FromProto(const Ydb::Table::TtlSettings& proto);
529529
void SerializeTo(Ydb::Table::TtlSettings& proto) const;
530530
EMode GetMode() const;
531531

@@ -536,7 +536,7 @@ class TTtlSettings {
536536
std::optional<TDuration> GetExpireAfter() const;
537537

538538
private:
539-
explicit TTtlSettings(TMode mode, ui32 runIntervalSeconds);
539+
explicit TTtlSettings(TMode mode, const TVector<TTtlTierSettings>& tiers, ui32 runIntervalSeconds);
540540
static std::optional<TDuration> GetExpireAfterFrom(const TVector<TTtlTierSettings>& tiers);
541541

542542
private:

0 commit comments

Comments
 (0)