[MM-53990] Support a global retention time of less than 1 day (#25196)
* adding new MessageRetentionHours config --------- Co-authored-by: Mattermost Build <build@mattermost.com>
Этот коммит содержится в:
@@ -207,7 +207,9 @@ const (
|
||||
BleveSettingsDefaultBatchSize = 10000
|
||||
|
||||
DataRetentionSettingsDefaultMessageRetentionDays = 365
|
||||
DataRetentionSettingsDefaultMessageRetentionHours = 0
|
||||
DataRetentionSettingsDefaultFileRetentionDays = 365
|
||||
DataRetentionSettingsDefaultFileRetentionHours = 0
|
||||
DataRetentionSettingsDefaultBoardsRetentionDays = 365
|
||||
DataRetentionSettingsDefaultDeletionJobStartTime = "02:00"
|
||||
DataRetentionSettingsDefaultBatchSize = 3000
|
||||
@@ -2911,8 +2913,10 @@ type DataRetentionSettings struct {
|
||||
EnableMessageDeletion *bool `access:"compliance_data_retention_policy"`
|
||||
EnableFileDeletion *bool `access:"compliance_data_retention_policy"`
|
||||
EnableBoardsDeletion *bool `access:"compliance_data_retention_policy"`
|
||||
MessageRetentionDays *int `access:"compliance_data_retention_policy"`
|
||||
FileRetentionDays *int `access:"compliance_data_retention_policy"`
|
||||
MessageRetentionDays *int `access:"compliance_data_retention_policy"` // Deprecated: use `MessageRetentionHours`
|
||||
MessageRetentionHours *int `access:"compliance_data_retention_policy"`
|
||||
FileRetentionDays *int `access:"compliance_data_retention_policy"` // Deprecated: use `FileRetentionHours`
|
||||
FileRetentionHours *int `access:"compliance_data_retention_policy"`
|
||||
BoardsRetentionDays *int `access:"compliance_data_retention_policy"`
|
||||
DeletionJobStartTime *string `access:"compliance_data_retention_policy"`
|
||||
BatchSize *int `access:"compliance_data_retention_policy"`
|
||||
@@ -2937,10 +2941,18 @@ func (s *DataRetentionSettings) SetDefaults() {
|
||||
s.MessageRetentionDays = NewInt(DataRetentionSettingsDefaultMessageRetentionDays)
|
||||
}
|
||||
|
||||
if s.MessageRetentionHours == nil {
|
||||
s.MessageRetentionHours = NewInt(DataRetentionSettingsDefaultMessageRetentionHours)
|
||||
}
|
||||
|
||||
if s.FileRetentionDays == nil {
|
||||
s.FileRetentionDays = NewInt(DataRetentionSettingsDefaultFileRetentionDays)
|
||||
}
|
||||
|
||||
if s.FileRetentionHours == nil {
|
||||
s.FileRetentionHours = NewInt(DataRetentionSettingsDefaultFileRetentionHours)
|
||||
}
|
||||
|
||||
if s.BoardsRetentionDays == nil {
|
||||
s.BoardsRetentionDays = NewInt(DataRetentionSettingsDefaultBoardsRetentionDays)
|
||||
}
|
||||
@@ -2961,6 +2973,30 @@ func (s *DataRetentionSettings) SetDefaults() {
|
||||
}
|
||||
}
|
||||
|
||||
// GetMessageRetentionHours returns the message retention time as an int.
|
||||
// MessageRetentionHours takes precedence over the deprecated MessageRetentionDays.
|
||||
func (s *DataRetentionSettings) GetMessageRetentionHours() int {
|
||||
if s.MessageRetentionHours != nil && *s.MessageRetentionHours > 0 {
|
||||
return *s.MessageRetentionHours
|
||||
}
|
||||
if s.MessageRetentionDays != nil && *s.MessageRetentionDays > 0 {
|
||||
return *s.MessageRetentionDays * 24
|
||||
}
|
||||
return DataRetentionSettingsDefaultMessageRetentionDays * 24
|
||||
}
|
||||
|
||||
// GetFileRetentionHours returns the message retention time as an int.
|
||||
// FileRetentionHours takes precedence over the deprecated FileRetentionDays.
|
||||
func (s *DataRetentionSettings) GetFileRetentionHours() int {
|
||||
if s.FileRetentionHours != nil && *s.FileRetentionHours > 0 {
|
||||
return *s.FileRetentionHours
|
||||
}
|
||||
if s.FileRetentionDays != nil && *s.FileRetentionDays > 0 {
|
||||
return *s.FileRetentionDays * 24
|
||||
}
|
||||
return DataRetentionSettingsDefaultFileRetentionDays * 24
|
||||
}
|
||||
|
||||
type JobSettings struct {
|
||||
RunJobs *bool `access:"write_restrictable,cloud_restrictable"` // telemetry: none
|
||||
RunScheduler *bool `access:"write_restrictable,cloud_restrictable"` // telemetry: none
|
||||
@@ -4141,14 +4177,38 @@ func (bs *BleveSettings) isValid() *AppError {
|
||||
}
|
||||
|
||||
func (s *DataRetentionSettings) isValid() *AppError {
|
||||
if *s.MessageRetentionDays <= 0 {
|
||||
if s.MessageRetentionDays == nil || *s.MessageRetentionDays < 0 {
|
||||
return NewAppError("Config.IsValid", "model.config.is_valid.data_retention.message_retention_days_too_low.app_error", nil, "", http.StatusBadRequest)
|
||||
}
|
||||
|
||||
if *s.FileRetentionDays <= 0 {
|
||||
if s.MessageRetentionHours == nil || *s.MessageRetentionHours < 0 {
|
||||
return NewAppError("Config.IsValid", "model.config.is_valid.data_retention.message_retention_hours_too_low.app_error", nil, "", http.StatusBadRequest)
|
||||
}
|
||||
|
||||
if s.FileRetentionDays == nil || *s.FileRetentionDays < 0 {
|
||||
return NewAppError("Config.IsValid", "model.config.is_valid.data_retention.file_retention_days_too_low.app_error", nil, "", http.StatusBadRequest)
|
||||
}
|
||||
|
||||
if s.FileRetentionHours == nil || *s.FileRetentionHours < 0 {
|
||||
return NewAppError("Config.IsValid", "model.config.is_valid.data_retention.file_retention_hours_too_low.app_error", nil, "", http.StatusBadRequest)
|
||||
}
|
||||
|
||||
if *s.MessageRetentionDays > 0 && *s.MessageRetentionHours > 0 {
|
||||
return NewAppError("Config.IsValid", "model.config.is_valid.data_retention.message_retention_misconfiguration.app_error", nil, "", http.StatusBadRequest)
|
||||
}
|
||||
|
||||
if *s.FileRetentionDays > 0 && *s.FileRetentionHours > 0 {
|
||||
return NewAppError("Config.IsValid", "model.config.is_valid.data_retention.file_retention_misconfiguration.app_error", nil, "", http.StatusBadRequest)
|
||||
}
|
||||
|
||||
if *s.MessageRetentionDays == 0 && *s.MessageRetentionHours == 0 {
|
||||
return NewAppError("Config.IsValid", "model.config.is_valid.data_retention.message_retention_both_zero.app_error", nil, "", http.StatusBadRequest)
|
||||
}
|
||||
|
||||
if *s.FileRetentionDays == 0 && *s.FileRetentionHours == 0 {
|
||||
return NewAppError("Config.IsValid", "model.config.is_valid.data_retention.file_retention_both_zero.app_error", nil, "", http.StatusBadRequest)
|
||||
}
|
||||
|
||||
if _, err := time.Parse("15:04", *s.DeletionJobStartTime); err != nil {
|
||||
return NewAppError("Config.IsValid", "model.config.is_valid.data_retention.deletion_job_start_time.app_error", nil, "", http.StatusBadRequest).Wrap(err)
|
||||
}
|
||||
|
||||
Ссылка в новой задаче
Block a user