@@ -28,9 +28,12 @@ class KMeansTreeSettings;
2828class PartitioningSettings ;
2929class DateTypeColumnModeSettings ;
3030class TtlSettings ;
31+ class TtlTier ;
3132class TableIndex ;
3233class TableIndexDescription ;
3334class ValueSinceUnixEpochModeSettings ;
35+ class DateTypeColumnModeSettingsV1 ;
36+ class ValueSinceUnixEpochModeSettingsV1 ;
3437
3538} // namespace Table
3639} // namespace Ydb
@@ -427,17 +430,46 @@ struct TPartitionStats {
427430 uint32_t LeaderNodeId = 0 ;
428431};
429432
433+ struct TTtlDeleteAction {};
434+
435+ struct TTtlEvictToExternalStorageAction {
436+ std::string StorageName;
437+ };
438+
439+ class TTtlTierSettings {
440+ public:
441+ using TAction = std::variant<
442+ std::monostate,
443+ TTtlDeleteAction,
444+ TTtlEvictToExternalStorageAction
445+ >;
446+
447+ public:
448+ explicit TTtlTierSettings (TDuration applyAfter, const TAction& action);
449+ explicit TTtlTierSettings (const Ydb::Table::TtlTier& tier);
450+ void SerializeTo (Ydb::Table::TtlTier& proto) const ;
451+
452+ TDuration GetApplyAfter () const ;
453+ const TAction& GetAction () const ;
454+
455+ private:
456+ TDuration ApplyAfter_;
457+ TAction Action_;
458+ };
459+
430460class TDateTypeColumnModeSettings {
431461public:
432- explicit TDateTypeColumnModeSettings (const std::string& columnName, const TDuration& expireAfter );
462+ explicit TDateTypeColumnModeSettings (const std::string& columnName, const TDuration& deprecatedExpireAfter = TDuration::Max() );
433463 void SerializeTo (Ydb::Table::DateTypeColumnModeSettings& proto) const ;
464+ void SerializeTo (Ydb::Table::DateTypeColumnModeSettingsV1& proto) const ;
434465
435466 const std::string& GetColumnName () const ;
467+ // Deprecated. Use TTtlSettings::GetExpireAfter()
436468 const TDuration& GetExpireAfter () const ;
437469
438470private:
439471 std::string ColumnName_;
440- TDuration ExpireAfter_ ;
472+ TDuration DeprecatedExpireAfter_ ;
441473};
442474
443475class TValueSinceUnixEpochModeSettings {
@@ -452,8 +484,9 @@ class TValueSinceUnixEpochModeSettings {
452484 };
453485
454486public:
455- explicit TValueSinceUnixEpochModeSettings (const std::string& columnName, EUnit columnUnit, const TDuration& expireAfter );
487+ explicit TValueSinceUnixEpochModeSettings (const std::string& columnName, EUnit columnUnit, const TDuration& deprecatedExpireAfter = TDuration::Max() );
456488 void SerializeTo (Ydb::Table::ValueSinceUnixEpochModeSettings& proto) const ;
489+ void SerializeTo (Ydb::Table::ValueSinceUnixEpochModeSettingsV1& proto) const ;
457490
458491 const std::string& GetColumnName () const ;
459492 EUnit GetColumnUnit () const ;
@@ -466,11 +499,17 @@ class TValueSinceUnixEpochModeSettings {
466499private:
467500 std::string ColumnName_;
468501 EUnit ColumnUnit_;
469- TDuration ExpireAfter_ ;
502+ TDuration DeprecatedExpireAfter_ ;
470503};
471504
472505// ! Represents ttl settings
473506class TTtlSettings {
507+ private:
508+ using TMode = std::variant<
509+ TDateTypeColumnModeSettings,
510+ TValueSinceUnixEpochModeSettings
511+ >;
512+
474513public:
475514 using EUnit = TValueSinceUnixEpochModeSettings::EUnit;
476515
@@ -479,25 +518,35 @@ class TTtlSettings {
479518 ValueSinceUnixEpoch = 1 ,
480519 };
481520
521+ explicit TTtlSettings (const std::string& columnName, const std::vector<TTtlTierSettings>& tiers);
482522 explicit TTtlSettings (const std::string& columnName, const TDuration& expireAfter);
483- explicit TTtlSettings (const Ydb::Table::DateTypeColumnModeSettings& mode, uint32_t runIntervalSeconds);
484523 const TDateTypeColumnModeSettings& GetDateTypeColumn () const ;
524+ // Deprecated. Use FromProto()
525+ explicit TTtlSettings (const Ydb::Table::DateTypeColumnModeSettings& mode, uint32_t runIntervalSeconds);
485526
527+ explicit TTtlSettings (const std::string& columnName, EUnit columnUnit, const std::vector<TTtlTierSettings>& tiers);
486528 explicit TTtlSettings (const std::string& columnName, EUnit columnUnit, const TDuration& expireAfter);
487- explicit TTtlSettings (const Ydb::Table::ValueSinceUnixEpochModeSettings& mode, uint32_t runIntervalSeconds);
488529 const TValueSinceUnixEpochModeSettings& GetValueSinceUnixEpoch () const ;
530+ // Deprecated. Use FromProto()
531+ explicit TTtlSettings (const Ydb::Table::ValueSinceUnixEpochModeSettings& mode, uint32_t runIntervalSeconds);
489532
533+ static std::optional<TTtlSettings> FromProto (const Ydb::Table::TtlSettings& proto);
490534 void SerializeTo (Ydb::Table::TtlSettings& proto) const ;
491535 EMode GetMode () const ;
492536
493537 TTtlSettings& SetRunInterval (const TDuration& value);
494538 const TDuration& GetRunInterval () const ;
495539
540+ const std::vector<TTtlTierSettings>& GetTiers () const ;
541+ std::optional<TDuration> GetExpireAfter () const ;
542+
496543private:
497- std::variant<
498- TDateTypeColumnModeSettings,
499- TValueSinceUnixEpochModeSettings
500- > Mode_;
544+ explicit TTtlSettings (TMode mode, const std::vector<TTtlTierSettings>& tiers, ui32 runIntervalSeconds);
545+ static std::optional<TDuration> GetExpireAfterFrom (const std::vector<TTtlTierSettings>& tiers);
546+
547+ private:
548+ TMode Mode_;
549+ std::vector<TTtlTierSettings> Tiers_;
501550 TDuration RunInterval_ = TDuration::Zero();
502551};
503552
0 commit comments