Class: Gitlab::Database::SharedModel

Inherits:
ActiveRecord::Base
  • Object
show all
Defined in:
lib/gitlab/database/shared_model.rb

Overview

This abstract class is used for models which need to exist in multiple de-composed databases.

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.connectionObject



39
40
41
42
43
44
45
# File 'lib/gitlab/database/shared_model.rb', line 39

def connection
  if connection = self.overriding_connection
    connection
  else
    super
  end
end

.connection_poolObject

in case the connection has been switched with using_connection



48
49
50
# File 'lib/gitlab/database/shared_model.rb', line 48

def connection_pool
  connection.pool
end

.using_connection(connection) ⇒ Object



14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/gitlab/database/shared_model.rb', line 14

def using_connection(connection)
  previous_connection = self.overriding_connection

  unless previous_connection.nil? || previous_connection.equal?(connection)
    raise "Cannot change connection for Gitlab::Database::SharedModel "\
      "from '#{Gitlab::Database.db_config_name(previous_connection)}' "\
      "to '#{Gitlab::Database.db_config_name(connection)}'"
  end

  # connection might not be yet adopted (returning nil, and no gitlab_schemas)
  # in such cases it is fine to ignore such connections
  gitlab_schemas = Gitlab::Database.gitlab_schemas_for_connection(connection)

  unless gitlab_schemas.nil? || gitlab_schemas.include?(:gitlab_shared)
    raise "Cannot set `SharedModel` to connection from `#{Gitlab::Database.db_config_name(connection)}` " \
      "since this connection does not include `:gitlab_shared` schema."
  end

  self.overriding_connection = connection

  yield
ensure
  self.overriding_connection = previous_connection
end

Instance Method Details

#connection_db_configObject



63
64
65
# File 'lib/gitlab/database/shared_model.rb', line 63

def connection_db_config
  self.class.connection_db_config
end