35 lines
863 B
Ruby
35 lines
863 B
Ruby
# frozen_string_literal: true
|
|
|
|
module Gitlab
|
|
module Database
|
|
module Reindexing
|
|
class ReindexAction < ActiveRecord::Base
|
|
self.table_name = 'postgres_reindex_actions'
|
|
|
|
enum state: { started: 0, finished: 1, failed: 2 }
|
|
|
|
def self.keep_track_of(index, &block)
|
|
action = create!(
|
|
index_identifier: index.identifier,
|
|
action_start: Time.zone.now,
|
|
ondisk_size_bytes_start: index.ondisk_size_bytes
|
|
)
|
|
|
|
yield
|
|
|
|
action.state = :finished
|
|
rescue
|
|
action.state = :failed
|
|
raise
|
|
ensure
|
|
index.reload # rubocop:disable Cop/ActiveRecordAssociationReload
|
|
|
|
action.action_end = Time.zone.now
|
|
action.ondisk_size_bytes_end = index.ondisk_size_bytes
|
|
|
|
action.save!
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|