summaryrefslogtreecommitdiff
path: root/lib/gitlab/database/reindexing/reindex_action.rb
blob: 0928ef90e5deb00c2d04bdac8b0d765aa950cece (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# 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