Skip to content

Commit e01899f

Browse files
committed
minor fixes of TTL in SDK (ydb-platform#12152)
1 parent 72d6eff commit e01899f

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
@@ -325,7 +325,7 @@ class TTableDescription::TImpl {
325325
}
326326

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

@@ -2729,13 +2729,13 @@ bool operator!=(const TChangefeedDescription& lhs, const TChangefeedDescription&
27292729

27302730
////////////////////////////////////////////////////////////////////////////////
27312731

2732-
TTtlTierSettings::TTtlTierSettings(TDuration evictionDelay, const TAction& action)
2733-
: EvictAfter_(evictionDelay)
2734-
, Action_(action) {
2735-
}
2732+
TTtlTierSettings::TTtlTierSettings(TDuration applyAfter, const TAction& action)
2733+
: ApplyAfter_(applyAfter)
2734+
, Action_(action)
2735+
{ }
27362736

27372737
TTtlTierSettings::TTtlTierSettings(const Ydb::Table::TtlTier& tier)
2738-
: EvictAfter_(TDuration::Seconds(tier.apply_after_seconds())) {
2738+
: ApplyAfter_(TDuration::Seconds(tier.apply_after_seconds())) {
27392739
switch (tier.action_case()) {
27402740
case Ydb::Table::TtlTier::kDelete:
27412741
Action_ = TTtlDeleteAction();
@@ -2749,7 +2749,7 @@ TTtlTierSettings::TTtlTierSettings(const Ydb::Table::TtlTier& tier)
27492749
}
27502750

27512751
void TTtlTierSettings::SerializeTo(Ydb::Table::TtlTier& proto) const {
2752-
proto.set_apply_after_seconds(EvictAfter_.Seconds());
2752+
proto.set_apply_after_seconds(ApplyAfter_.Seconds());
27532753

27542754
std::visit(TOverloaded{
27552755
[&proto](const TTtlDeleteAction&) { proto.mutable_delete_(); },
@@ -2761,8 +2761,8 @@ void TTtlTierSettings::SerializeTo(Ydb::Table::TtlTier& proto) const {
27612761
Action_);
27622762
}
27632763

2764-
TDuration TTtlTierSettings::GetEvictAfter() const {
2765-
return EvictAfter_;
2764+
TDuration TTtlTierSettings::GetApplyAfter() const {
2765+
return ApplyAfter_;
27662766
}
27672767

27682768
const TTtlTierSettings::TAction& TTtlTierSettings::GetAction() const {
@@ -2896,42 +2896,55 @@ const TValueSinceUnixEpochModeSettings& TTtlSettings::GetValueSinceUnixEpoch() c
28962896
return std::get<TValueSinceUnixEpochModeSettings>(Mode_);
28972897
}
28982898

2899-
std::optional<TTtlSettings> TTtlSettings::DeserializeFromProto(const Ydb::Table::TtlSettings& proto) {
2900-
TDuration legacyExpireAfter = TDuration::Max();
2899+
std::optional<TTtlSettings> TTtlSettings::FromProto(const Ydb::Table::TtlSettings& proto) {
2900+
TVector<TTtlTierSettings> tiers;
29012901
for (const auto& tier : proto.tiers()) {
2902-
if (tier.has_delete_()) {
2903-
legacyExpireAfter = TDuration::Seconds(tier.apply_after_seconds());
2904-
break;
2905-
}
2902+
tiers.emplace_back(tier);
29062903
}
2904+
TDuration legacyExpireAfter = GetExpireAfterFrom(tiers).value_or(TDuration::Max());
29072905

29082906
switch(proto.mode_case()) {
29092907
case Ydb::Table::TtlSettings::kDateTypeColumn:
29102908
return TTtlSettings(proto.date_type_column(), proto.run_interval_seconds());
29112909
case Ydb::Table::TtlSettings::kValueSinceUnixEpoch:
29122910
return TTtlSettings(proto.value_since_unix_epoch(), proto.run_interval_seconds());
29132911
case Ydb::Table::TtlSettings::kDateTypeColumnV1:
2914-
return TTtlSettings(TDateTypeColumnModeSettings(proto.date_type_column_v1().column_name(), legacyExpireAfter), proto.run_interval_seconds());
2912+
return TTtlSettings(
2913+
TDateTypeColumnModeSettings(proto.date_type_column_v1().column_name(), legacyExpireAfter), tiers, proto.run_interval_seconds());
29152914
case Ydb::Table::TtlSettings::kValueSinceUnixEpochV1:
2916-
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());
2915+
return TTtlSettings(TValueSinceUnixEpochModeSettings(proto.value_since_unix_epoch_v1().column_name(),
2916+
TProtoAccessor::FromProto(proto.value_since_unix_epoch_v1().column_unit()), legacyExpireAfter),
2917+
tiers, proto.run_interval_seconds());
29172918
case Ydb::Table::TtlSettings::MODE_NOT_SET:
29182919
return std::nullopt;
29192920
break;
29202921
}
29212922
}
29222923

29232924
void TTtlSettings::SerializeTo(Ydb::Table::TtlSettings& proto) const {
2924-
switch (GetMode()) {
2925-
case EMode::DateTypeColumn:
2926-
GetDateTypeColumn().SerializeTo(*proto.mutable_date_type_column_v1());
2927-
break;
2928-
case EMode::ValueSinceUnixEpoch:
2929-
GetValueSinceUnixEpoch().SerializeTo(*proto.mutable_value_since_unix_epoch_v1());
2930-
break;
2931-
}
2925+
if (Tiers_.size() == 1 && std::holds_alternative<TTtlDeleteAction>(Tiers_.back().GetAction())) {
2926+
// serialize DELETE-only TTL to legacy format for backwards-compatibility
2927+
switch (GetMode()) {
2928+
case EMode::DateTypeColumn:
2929+
GetDateTypeColumn().SerializeTo(*proto.mutable_date_type_column());
2930+
break;
2931+
case EMode::ValueSinceUnixEpoch:
2932+
GetValueSinceUnixEpoch().SerializeTo(*proto.mutable_value_since_unix_epoch());
2933+
break;
2934+
}
2935+
} else {
2936+
switch (GetMode()) {
2937+
case EMode::DateTypeColumn:
2938+
GetDateTypeColumn().SerializeTo(*proto.mutable_date_type_column_v1());
2939+
break;
2940+
case EMode::ValueSinceUnixEpoch:
2941+
GetValueSinceUnixEpoch().SerializeTo(*proto.mutable_value_since_unix_epoch_v1());
2942+
break;
2943+
}
29322944

2933-
for (const auto& tier : Tiers_) {
2934-
tier.SerializeTo(*proto.add_tiers());
2945+
for (const auto& tier : Tiers_) {
2946+
tier.SerializeTo(*proto.add_tiers());
2947+
}
29352948
}
29362949

29372950
if (RunInterval_) {
@@ -2963,13 +2976,17 @@ std::optional<TDuration> TTtlSettings::GetExpireAfter() const {
29632976
std::optional<TDuration> TTtlSettings::GetExpireAfterFrom(const TVector<TTtlTierSettings>& tiers) {
29642977
for (const auto& tier : tiers) {
29652978
if (std::holds_alternative<TTtlDeleteAction>(tier.GetAction())) {
2966-
return tier.GetEvictAfter();
2979+
return tier.GetApplyAfter();
29672980
}
29682981
}
29692982
return std::nullopt;
29702983
}
29712984

2972-
TTtlSettings::TTtlSettings(TMode mode, ui32 runIntervalSeconds) : Mode_(std::move(mode)), RunInterval_(TDuration::Seconds(runIntervalSeconds)) {}
2985+
TTtlSettings::TTtlSettings(TMode mode, const TVector<TTtlTierSettings>& tiers, ui32 runIntervalSeconds)
2986+
: Mode_(std::move(mode))
2987+
, Tiers_(tiers)
2988+
, RunInterval_(TDuration::Seconds(runIntervalSeconds))
2989+
{}
29732990

29742991
TAlterTtlSettings::EAction TAlterTtlSettings::GetAction() const {
29752992
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
@@ -375,15 +375,15 @@ class TTtlTierSettings {
375375
>;
376376

377377
public:
378-
explicit TTtlTierSettings(TDuration evictionDelay, const TAction& action);
378+
explicit TTtlTierSettings(TDuration applyAfter, const TAction& action);
379379
explicit TTtlTierSettings(const Ydb::Table::TtlTier& tier);
380380
void SerializeTo(Ydb::Table::TtlTier& proto) const;
381381

382-
TDuration GetEvictAfter() const;
382+
TDuration GetApplyAfter() const;
383383
const TAction& GetAction() const;
384384

385385
private:
386-
TDuration EvictAfter_;
386+
TDuration ApplyAfter_;
387387
TAction Action_;
388388
};
389389

@@ -452,16 +452,16 @@ class TTtlSettings {
452452
explicit TTtlSettings(const TString& columnName, const TVector<TTtlTierSettings>& tiers);
453453
explicit TTtlSettings(const TString& columnName, const TDuration& expireAfter);
454454
const TDateTypeColumnModeSettings& GetDateTypeColumn() const;
455-
// Deprecated. Use DeserializeFromProto()
455+
// Deprecated. Use FromProto()
456456
explicit TTtlSettings(const Ydb::Table::DateTypeColumnModeSettings& mode, ui32 runIntervalSeconds);
457457

458458
explicit TTtlSettings(const TString& columnName, EUnit columnUnit, const TVector<TTtlTierSettings>& tiers);
459459
explicit TTtlSettings(const TString& columnName, EUnit columnUnit, const TDuration& expireAfter);
460460
const TValueSinceUnixEpochModeSettings& GetValueSinceUnixEpoch() const;
461-
// Deprecated. Use DeserializeFromProto()
461+
// Deprecated. Use FromProto()
462462
explicit TTtlSettings(const Ydb::Table::ValueSinceUnixEpochModeSettings& mode, ui32 runIntervalSeconds);
463463

464-
static std::optional<TTtlSettings> DeserializeFromProto(const Ydb::Table::TtlSettings& proto);
464+
static std::optional<TTtlSettings> FromProto(const Ydb::Table::TtlSettings& proto);
465465
void SerializeTo(Ydb::Table::TtlSettings& proto) const;
466466
EMode GetMode() const;
467467

@@ -472,7 +472,7 @@ class TTtlSettings {
472472
std::optional<TDuration> GetExpireAfter() const;
473473

474474
private:
475-
explicit TTtlSettings(TMode mode, ui32 runIntervalSeconds);
475+
explicit TTtlSettings(TMode mode, const TVector<TTtlTierSettings>& tiers, ui32 runIntervalSeconds);
476476
static std::optional<TDuration> GetExpireAfterFrom(const TVector<TTtlTierSettings>& tiers);
477477

478478
private:

0 commit comments

Comments
 (0)