Module: OverSIP::Modules::Mysql

Extended by:
Logger
Defined in:
lib/oversip-mod-mysql.rb,
lib/oversip-mod-mysql/version.rb

Defined Under Namespace

Modules: Version

Constant Summary collapse

DEFAULT_POOL_SIZE =
10
DEFAULT_SYNCHRONY =
false
VERSION =
[Version::MAJOR, Version::MINOR, Version::TINY].join(".")

Class Method Summary collapse

Class Method Details

.add_pool(options, db_data) ⇒ Object

Raises:

  • (::ArgumentError)


20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# File 'lib/oversip-mod-mysql.rb', line 20

def self.add_pool options, db_data
  raise ::ArgumentError, "`options' must be a Hash"  unless options.is_a? ::Hash
  raise ::ArgumentError, "`db_data' must be a Hash"  unless db_data.is_a? ::Hash

  name, pool_size, synchrony = options.values_at(:name, :pool_size, :synchrony)
  pool_size ||= DEFAULT_POOL_SIZE
  synchrony ||= DEFAULT_SYNCHRONY

  raise ::ArgumentError, "`options[:name]' must be a Symbol"  unless name.is_a? ::Symbol
  raise ::ArgumentError, "`options[:pool_size]' must be a positive Fixnum"  unless pool_size.is_a? ::Fixnum and pool_size > 0

  # Forcing DB autoreconnect.
  db_data[:reconnect] = true

  # Use em-synchrony for serial coding.
  if synchrony
    begin
      require "em-synchrony"
      require "em-synchrony/mysql2"
    rescue ::LoadError
      OverSIP::Launcher.fatal "em-synchrony not installed: gem install em-synchrony"
    end

    OverSIP::SystemCallbacks.on_started do
      log_system_info "Adding a sync pool with name #{name.inspect}..."
      @pools[name] = ::EM::Synchrony::ConnectionPool.new(size: pool_size) do
        ::Mysql2::EM::Client.new(db_data)
      end
    end

  # Don't use em-synchrony but pure callbacks.
  else
    OverSIP::SystemCallbacks.on_started do
      log_system_info "Adding an async pool with name #{name.inspect}..."
      pool = @pools[name] = ::EM::Pool.new
      pool_size.times do
        pool.add ::Mysql2::EM::Client.new(db_data)
      end
    end
  end
end

.pool(name) ⇒ Object

def self.add_pool

Raises:

  • (::ArgumentError)


62
63
64
65
66
# File 'lib/oversip-mod-mysql.rb', line 62

def self.pool name
  pool = @pools[name]
  raise ::ArgumentError, "no pool with `name' #{name.inspect}"  unless pool
  pool
end