36 lines
863 B
Ruby
36 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
|