@@ -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
29402940TTtlTierSettings::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
29542954void 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
29712971const 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
31263127void 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 {
31663179std::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
31773194TAlterTtlSettings::EAction TAlterTtlSettings::GetAction () const {
31783195 return static_cast <EAction>(Action_.index ());
0 commit comments