mirror of
https://github.com/discourse/discourse.git
synced 2025-05-21 18:12:32 +08:00
FEATURE: Drop "backup" schema 7 days after restore
The "backup" schema is used to rollback a failed restore. It isn't useful after a longer period of time and turns into a waste of disk space.
This commit is contained in:
@ -8,6 +8,7 @@ module BackupRestore
|
||||
|
||||
MAIN_SCHEMA = "public"
|
||||
BACKUP_SCHEMA = "backup"
|
||||
DROP_BACKUP_SCHEMA_AFTER_DAYS = 7
|
||||
|
||||
def initialize(logger, current_db)
|
||||
@logger = logger
|
||||
@ -25,6 +26,8 @@ module BackupRestore
|
||||
restore_dump
|
||||
migrate_database
|
||||
reconnect_database
|
||||
|
||||
self.class.update_last_restore_date
|
||||
end
|
||||
|
||||
def rollback
|
||||
@ -42,6 +45,20 @@ module BackupRestore
|
||||
drop_created_discourse_functions
|
||||
end
|
||||
|
||||
def self.drop_backup_schema
|
||||
if backup_schema_dropable?
|
||||
ActiveRecord::Base.connection.drop_schema(BACKUP_SCHEMA)
|
||||
end
|
||||
end
|
||||
|
||||
def self.update_last_restore_date
|
||||
BackupMetadata.where(name: BackupMetadata::LAST_RESTORE_DATE).delete_all
|
||||
BackupMetadata.create!(
|
||||
name: BackupMetadata::LAST_RESTORE_DATE,
|
||||
value: Time.zone.now.iso8601
|
||||
)
|
||||
end
|
||||
|
||||
protected
|
||||
|
||||
def restore_dump
|
||||
@ -178,5 +195,20 @@ module BackupRestore
|
||||
rescue => ex
|
||||
log "Something went wrong while dropping functions from the discourse_functions schema", ex
|
||||
end
|
||||
|
||||
def self.backup_schema_dropable?
|
||||
return false unless ActiveRecord::Base.connection.schema_exists?(BACKUP_SCHEMA)
|
||||
|
||||
last_restore_date = BackupMetadata.value_for(BackupMetadata::LAST_RESTORE_DATE)
|
||||
|
||||
if last_restore_date.present?
|
||||
last_restore_date = Time.zone.parse(last_restore_date)
|
||||
return last_restore_date + DROP_BACKUP_SCHEMA_AFTER_DAYS.days < Time.zone.now
|
||||
end
|
||||
|
||||
update_last_restore_date
|
||||
false
|
||||
end
|
||||
private_class_method :backup_schema_dropable?
|
||||
end
|
||||
end
|
||||
|
Reference in New Issue
Block a user