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

#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