@@ -327,7 +327,7 @@ class TTableDescription::TImpl {
327
327
}
328
328
329
329
// ttl settings
330
- if (auto ttlSettings = TTtlSettings::DeserializeFromProto (proto.ttl_settings ())) {
330
+ if (auto ttlSettings = TTtlSettings::FromProto (proto.ttl_settings ())) {
331
331
TtlSettings_ = std::move (*ttlSettings);
332
332
}
333
333
@@ -2932,13 +2932,13 @@ bool operator!=(const TChangefeedDescription& lhs, const TChangefeedDescription&
2932
2932
2933
2933
// //////////////////////////////////////////////////////////////////////////////
2934
2934
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
+ { }
2939
2939
2940
2940
TTtlTierSettings::TTtlTierSettings (const Ydb::Table::TtlTier& tier)
2941
- : EvictAfter_ (TDuration::Seconds(tier.apply_after_seconds())) {
2941
+ : ApplyAfter_ (TDuration::Seconds(tier.apply_after_seconds())) {
2942
2942
switch (tier.action_case ()) {
2943
2943
case Ydb::Table::TtlTier::kDelete :
2944
2944
Action_ = TTtlDeleteAction ();
@@ -2952,7 +2952,7 @@ TTtlTierSettings::TTtlTierSettings(const Ydb::Table::TtlTier& tier)
2952
2952
}
2953
2953
2954
2954
void TTtlTierSettings::SerializeTo (Ydb::Table::TtlTier& proto) const {
2955
- proto.set_apply_after_seconds (EvictAfter_ .Seconds ());
2955
+ proto.set_apply_after_seconds (ApplyAfter_ .Seconds ());
2956
2956
2957
2957
std::visit (TOverloaded{
2958
2958
[&proto](const TTtlDeleteAction&) { proto.mutable_delete_ (); },
@@ -2964,8 +2964,8 @@ void TTtlTierSettings::SerializeTo(Ydb::Table::TtlTier& proto) const {
2964
2964
Action_);
2965
2965
}
2966
2966
2967
- TDuration TTtlTierSettings::GetEvictAfter () const {
2968
- return EvictAfter_ ;
2967
+ TDuration TTtlTierSettings::GetApplyAfter () const {
2968
+ return ApplyAfter_ ;
2969
2969
}
2970
2970
2971
2971
const TTtlTierSettings::TAction& TTtlTierSettings::GetAction () const {
@@ -3099,42 +3099,55 @@ const TValueSinceUnixEpochModeSettings& TTtlSettings::GetValueSinceUnixEpoch() c
3099
3099
return std::get<TValueSinceUnixEpochModeSettings>(Mode_);
3100
3100
}
3101
3101
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 ;
3104
3104
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);
3109
3106
}
3107
+ TDuration legacyExpireAfter = GetExpireAfterFrom (tiers).value_or (TDuration::Max ());
3110
3108
3111
3109
switch (proto.mode_case ()) {
3112
3110
case Ydb::Table::TtlSettings::kDateTypeColumn :
3113
3111
return TTtlSettings (proto.date_type_column (), proto.run_interval_seconds ());
3114
3112
case Ydb::Table::TtlSettings::kValueSinceUnixEpoch :
3115
3113
return TTtlSettings (proto.value_since_unix_epoch (), proto.run_interval_seconds ());
3116
3114
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 ());
3118
3117
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 ());
3120
3121
case Ydb::Table::TtlSettings::MODE_NOT_SET:
3121
3122
return std::nullopt;
3122
3123
break ;
3123
3124
}
3124
3125
}
3125
3126
3126
3127
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
+ }
3135
3147
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
+ }
3138
3151
}
3139
3152
3140
3153
if (RunInterval_) {
@@ -3166,13 +3179,17 @@ std::optional<TDuration> TTtlSettings::GetExpireAfter() const {
3166
3179
std::optional<TDuration> TTtlSettings::GetExpireAfterFrom (const TVector<TTtlTierSettings>& tiers) {
3167
3180
for (const auto & tier : tiers) {
3168
3181
if (std::holds_alternative<TTtlDeleteAction>(tier.GetAction ())) {
3169
- return tier.GetEvictAfter ();
3182
+ return tier.GetApplyAfter ();
3170
3183
}
3171
3184
}
3172
3185
return std::nullopt;
3173
3186
}
3174
3187
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
+ {}
3176
3193
3177
3194
TAlterTtlSettings::EAction TAlterTtlSettings::GetAction () const {
3178
3195
return static_cast <EAction>(Action_.index ());
0 commit comments