Welcome to mirror list, hosted at ThFree Co, Russian Federation.

transactions.rb « concerns « models « app - gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: a186ebc847570e31f815eb8710641442727f45fa (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
# frozen_string_literal: true

module Transactions
  extend ActiveSupport::Concern

  class_methods do
    # inside_transaction? will return true if the caller is running within a
    # transaction. Handles special cases when running inside a test environment,
    # where tests may be wrapped in transactions
    def inside_transaction?
      base = Rails.env.test? ? @open_transactions_baseline.to_i : 0

      connection.open_transactions > base
    end

    # These methods that access @open_transactions_baseline are not thread-safe.
    # These are fine though because we only call these in RSpec's main thread.
    # If we decide to run specs multi-threaded, we would need to use something
    # like ThreadGroup to keep track of this value
    def set_open_transactions_baseline
      @open_transactions_baseline = connection.open_transactions
    end

    def reset_open_transactions_baseline
      @open_transactions_baseline = 0
    end
  end
end