2020-09-29 15:10:08 +00:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
|
|
|
module Gitlab
|
|
|
|
module Database
|
|
|
|
module Reindexing
|
2021-10-28 21:10:02 +00:00
|
|
|
class ReindexAction < SharedModel
|
2020-09-29 15:10:08 +00:00
|
|
|
self.table_name = 'postgres_reindex_actions'
|
|
|
|
|
2020-12-10 12:09:43 +00:00
|
|
|
belongs_to :index, foreign_key: :index_identifier, class_name: 'Gitlab::Database::PostgresIndex'
|
2020-09-29 15:10:08 +00:00
|
|
|
enum state: { started: 0, finished: 1, failed: 2 }
|
|
|
|
|
2020-12-10 12:09:43 +00:00
|
|
|
# Amount of time to consider a previous reindexing *recent*
|
2021-07-08 18:09:32 +00:00
|
|
|
RECENT_THRESHOLD = 10.days
|
2020-12-10 12:09:43 +00:00
|
|
|
|
|
|
|
scope :recent, -> { where(state: :finished).where('action_end > ?', Time.zone.now - RECENT_THRESHOLD) }
|
|
|
|
|
2020-12-31 09:10:34 +00:00
|
|
|
def self.create_for(index)
|
|
|
|
create!(
|
2020-09-29 15:10:08 +00:00
|
|
|
index_identifier: index.identifier,
|
|
|
|
action_start: Time.zone.now,
|
2020-12-11 21:10:13 +00:00
|
|
|
ondisk_size_bytes_start: index.ondisk_size_bytes,
|
|
|
|
bloat_estimate_bytes_start: index.bloat_size
|
2020-09-29 15:10:08 +00:00
|
|
|
)
|
2020-12-31 09:10:34 +00:00
|
|
|
end
|
2020-09-29 15:10:08 +00:00
|
|
|
|
2020-12-31 09:10:34 +00:00
|
|
|
def finish
|
2020-09-29 15:10:08 +00:00
|
|
|
index.reload # rubocop:disable Cop/ActiveRecordAssociationReload
|
|
|
|
|
2020-12-31 09:10:34 +00:00
|
|
|
self.state = :finished unless failed?
|
|
|
|
self.action_end = Time.zone.now
|
|
|
|
self.ondisk_size_bytes_end = index.ondisk_size_bytes
|
2020-09-29 15:10:08 +00:00
|
|
|
|
2020-12-31 09:10:34 +00:00
|
|
|
save!
|
2020-09-29 15:10:08 +00:00
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|