123456789_123456789_123456789_123456789_123456789_

Class: ActiveRecord::ConnectionAdapters::PoolConfig

Do not use. This class is for internal use only.
Relationships & Source Files
Super Chains via Extension / Inclusion / Inheritance
Instance Chain:
self, MonitorMixin
Inherits: Object
Defined in: activerecord/lib/active_record/connection_adapters/pool_config.rb

Constant Summary

Class Method Summary

Instance Attribute Summary

Instance Method Summary

Constructor Details

.new(connection_class, db_config, role, shard) ⇒ PoolConfig

[ GitHub ]

  
# File 'activerecord/lib/active_record/connection_adapters/pool_config.rb', line 36

def initialize(connection_class, db_config, role, shard)
  super()
  @server_version = nil
  self.connection_descriptor = connection_class
  @db_config = db_config
  @role = role
  @shard = shard
  @pool = nil
  @pool_token = nil
  INSTANCES[self] = self
end

Class Method Details

.discard_pools!

[ GitHub ]

  
# File 'activerecord/lib/active_record/connection_adapters/pool_config.rb', line 27

def discard_pools!
  INSTANCES.each_key(&:discard_pool!)
end

.disconnect_all!

[ GitHub ]

  
# File 'activerecord/lib/active_record/connection_adapters/pool_config.rb', line 31

def disconnect_all!
  INSTANCES.each_key { |c| c.disconnect!(automatic_reconnect: true) }
end

.next_pool_token

[ GitHub ]

  
# File 'activerecord/lib/active_record/connection_adapters/pool_config.rb', line 23

def next_pool_token
  @pool_token_lock.synchronize { @next_pool_token += 1 }
end

Instance Attribute Details

#connection_descriptor (rw)

[ GitHub ]

  
# File 'activerecord/lib/active_record/connection_adapters/pool_config.rb', line 9

attr_reader :db_config, :role, :shard, :connection_descriptor

#connection_descriptor=(connection_descriptor) (rw)

[ GitHub ]

  
# File 'activerecord/lib/active_record/connection_adapters/pool_config.rb', line 52

def connection_descriptor=(connection_descriptor)
  case connection_descriptor
  when ConnectionHandler::ConnectionDescriptor
    @connection_descriptor = connection_descriptor
  else
    @connection_descriptor = ConnectionHandler::ConnectionDescriptor.new(connection_descriptor.name, connection_descriptor.primary_class?)
  end
end

#db_config (readonly)

[ GitHub ]

  
# File 'activerecord/lib/active_record/connection_adapters/pool_config.rb', line 9

attr_reader :db_config, :role, :shard, :connection_descriptor

#role (readonly)

[ GitHub ]

  
# File 'activerecord/lib/active_record/connection_adapters/pool_config.rb', line 9

attr_reader :db_config, :role, :shard, :connection_descriptor

#schema_reflection (rw)

[ GitHub ]

  
# File 'activerecord/lib/active_record/connection_adapters/pool_config.rb', line 12

def schema_reflection
  @schema_reflection ||= SchemaReflection.new(db_config.lazy_schema_cache_path)
end

#schema_reflection=(value) (rw)

[ GitHub ]

  
# File 'activerecord/lib/active_record/connection_adapters/pool_config.rb', line 10

attr_writer :schema_reflection

#shard (readonly)

[ GitHub ]

  
# File 'activerecord/lib/active_record/connection_adapters/pool_config.rb', line 9

attr_reader :db_config, :role, :shard, :connection_descriptor

Instance Method Details

#discard_pool!

[ GitHub ]

  
# File 'activerecord/lib/active_record/connection_adapters/pool_config.rb', line 93

def discard_pool!
  return unless @pool

  synchronize do
    return unless @pool

    @pool.discard!
    @pool = nil
    @pool_token = nil
  end
end

#disconnect!(automatic_reconnect: false)

[ GitHub ]

  
# File 'activerecord/lib/active_record/connection_adapters/pool_config.rb', line 61

def disconnect!(automatic_reconnect: false)
  return unless @pool

  synchronize do
    return unless @pool

    @pool.automatic_reconnect = automatic_reconnect
    @pool.disconnect!
  end

  nil
end

#pool

[ GitHub ]

  
# File 'activerecord/lib/active_record/connection_adapters/pool_config.rb', line 74

def pool
  @pool || synchronize { @pool ||= ConnectionAdapters::ConnectionPool.new(self) }
end

#pool_spec

[ GitHub ]

  
# File 'activerecord/lib/active_record/connection_adapters/pool_config.rb', line 82

def pool_spec
  spec = {
    db_config: db_config,
    connection_name: connection_descriptor.name.to_s.freeze,
    role: role,
    shard: shard,
    pool_token: pool_token,
  }
  ActiveSupport::Ractors.make_shareable(spec, copy: true)
end

#pool_token

[ GitHub ]

  
# File 'activerecord/lib/active_record/connection_adapters/pool_config.rb', line 78

def pool_token
  @pool_token || synchronize { @pool_token ||= self.class.next_pool_token }
end

#server_version(connection)

[ GitHub ]

  
# File 'activerecord/lib/active_record/connection_adapters/pool_config.rb', line 48

def server_version(connection)
  @server_version || synchronize { @server_version ||= connection.get_database_version }
end