Class: TrilogyAurora::Client

Inherits:
Object
  • Object
show all
Defined in:
lib/trilogy_aurora/client.rb

Overview

Trilogy Aurora wrapper

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(options = {}) ⇒ Client

Returns a new instance of Client.



10
11
12
# File 'lib/trilogy_aurora/client.rb', line 10

def initialize(options = {})
  @trilogy = TrilogyAurora::Trilogy.new(options)
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missingObject

Delegate instance method calls to TrilogyAurora::Trilogy instance.



62
63
64
# File 'lib/trilogy_aurora/client.rb', line 62

def method_missing(...)
  trilogy.public_send(...)
end

Instance Attribute Details

#trilogyObject (readonly)

Returns the value of attribute trilogy.



8
9
10
# File 'lib/trilogy_aurora/client.rb', line 8

def trilogy
  @trilogy
end

Class Method Details

.const_defined?Boolean

Delegate const_defined? to TrilogyAurora::Trilogy.

Returns:

  • (Boolean)


87
88
89
# File 'lib/trilogy_aurora/client.rb', line 87

def self.const_defined?(...)
  TrilogyAurora::Trilogy.const_defined?(...)
end

.const_missingObject

Delegate const reference to TrilogyAurora::Trilogy.



82
83
84
# File 'lib/trilogy_aurora/client.rb', line 82

def self.const_missing(...)
  TrilogyAurora::Trilogy.const_get(...)
end

.method_missingObject

Delegate class method calls to TrilogyAurora::Trilogy.



72
73
74
# File 'lib/trilogy_aurora/client.rb', line 72

def self.method_missing(...)
  TrilogyAurora::Trilogy.public_send(...)
end

.respond_to_missing?Boolean

Delegate respond_to? to TrilogyAurora::Trilogy.

Returns:

  • (Boolean)


77
78
79
# File 'lib/trilogy_aurora/client.rb', line 77

def self.respond_to_missing?(...)
  TrilogyAurora::Trilogy.respond_to?(...)
end

Instance Method Details

#disconnect!Object

Close TrilogyAurora::Trilogy connection



22
23
24
25
26
# File 'lib/trilogy_aurora/client.rb', line 22

def disconnect!
  trilogy&.close
rescue StandardError
  nil
end

#queryObject

Execute a TrilogyAurora::Trilogy query, disconnecting or reconnecting after read-only errors based on initialization options.



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
# File 'lib/trilogy_aurora/client.rb', line 30

def query(...) # rubocop:disable Metrics/AbcSize
  try_count = 0

  begin
    trilogy.query(...)
  rescue TrilogyAurora::Trilogy::Error => e
    raise unless e.message&.include?('--read-only')

    try_count += 1

    if trilogy.connection_options[:aurora_disconnect_on_readonly]
      warn <<~WARNING
        [trilogy_aurora] Database is readonly, Aurora failover event likely occured. \
        Closing database connection
      WARNING
      disconnect!
    elsif try_count <= trilogy.connection_options[:aurora_max_retry]
      retry_interval_seconds = [1.5 * (try_count - 1), 10].min
      warn <<~WARNING
        [trilogy_aurora] Database is readonly. \
        Retry after #{retry_interval_seconds} seconds
      WARNING
      sleep retry_interval_seconds
      reconnect!
      retry
    end

    raise
  end
end

#reconnect!Object

Disconnect and re-initialize TrilogyAurora::Trilogy



15
16
17
18
19
# File 'lib/trilogy_aurora/client.rb', line 15

def reconnect!
  disconnect!

  @trilogy = TrilogyAurora::Trilogy.new(@trilogy.connection_options.dup)
end

#respond_to_missing?Boolean

Delegate respond_to? to TrilogyAurora::Trilogy instance.

Returns:

  • (Boolean)


67
68
69
# File 'lib/trilogy_aurora/client.rb', line 67

def respond_to_missing?(...)
  trilogy.respond_to?(...)
end