aws_advanced_ruby_driver_wrapper 1.0.1 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +32 -2
- data/README.md +115 -6
- data/THIRD-PARTY-LICENSES +70 -11
- data/aws_advanced_ruby_driver_wrapper.gemspec +9 -0
- data/lib/aws_advanced_ruby_driver_wrapper/active_record/aws_postgresql_adapter.rb +17 -3
- data/lib/aws_advanced_ruby_driver_wrapper/active_record/aws_trilogy_adapter.rb +80 -0
- data/lib/aws_advanced_ruby_driver_wrapper/active_record/type_adapter_alias.rb +1 -1
- data/lib/aws_advanced_ruby_driver_wrapper/driver_dialects/driver_dialect.rb +43 -0
- data/lib/aws_advanced_ruby_driver_wrapper/driver_dialects/driver_dialect_manager.rb +11 -4
- data/lib/aws_advanced_ruby_driver_wrapper/driver_dialects/mysql2_driver_dialect.rb +129 -0
- data/lib/aws_advanced_ruby_driver_wrapper/driver_dialects/mysql_driver_dialect.rb +9 -91
- data/lib/aws_advanced_ruby_driver_wrapper/driver_dialects/pg_driver_dialect.rb +18 -0
- data/lib/aws_advanced_ruby_driver_wrapper/driver_dialects/trilogy_driver_dialect.rb +118 -0
- data/lib/aws_advanced_ruby_driver_wrapper/errors/error_handler.rb +16 -0
- data/lib/aws_advanced_ruby_driver_wrapper/errors/mysql_error_handler.rb +10 -5
- data/lib/aws_advanced_ruby_driver_wrapper/errors/trilogy_error_handler.rb +127 -0
- data/lib/aws_advanced_ruby_driver_wrapper/errors.rb +1 -0
- data/lib/aws_advanced_ruby_driver_wrapper/monitoring/cluster_topology_monitor.rb +1 -0
- data/lib/aws_advanced_ruby_driver_wrapper/mysql.rb +27 -9
- data/lib/aws_advanced_ruby_driver_wrapper/plugins/blue_green/blue_green_plugin.rb +115 -7
- data/lib/aws_advanced_ruby_driver_wrapper/plugins/blue_green/drop_blue_connections_marker.rb +84 -0
- data/lib/aws_advanced_ruby_driver_wrapper/plugins/blue_green/host_mapper.rb +3 -1
- data/lib/aws_advanced_ruby_driver_wrapper/plugins/blue_green/routing/base_routing.rb +7 -0
- data/lib/aws_advanced_ruby_driver_wrapper/plugins/blue_green/routing/substitute_connect_routing.rb +68 -41
- data/lib/aws_advanced_ruby_driver_wrapper/plugins/blue_green/routing/suspend_connect_routing.rb +4 -2
- data/lib/aws_advanced_ruby_driver_wrapper/plugins/blue_green/routing/suspend_execute_routing.rb +5 -3
- data/lib/aws_advanced_ruby_driver_wrapper/plugins/blue_green/routing/suspend_until_corresponding_host_found_connect_routing.rb +7 -1
- data/lib/aws_advanced_ruby_driver_wrapper/plugins/blue_green/status_builder.rb +1 -1
- data/lib/aws_advanced_ruby_driver_wrapper/plugins/blue_green/status_monitor.rb +6 -13
- data/lib/aws_advanced_ruby_driver_wrapper/plugins/blue_green/status_provider.rb +90 -3
- data/lib/aws_advanced_ruby_driver_wrapper/plugins/custom_endpoint/custom_endpoint_monitor.rb +11 -1
- data/lib/aws_advanced_ruby_driver_wrapper/plugins/custom_endpoint/custom_endpoint_plugin.rb +4 -1
- data/lib/aws_advanced_ruby_driver_wrapper/plugins/default_plugin.rb +14 -3
- data/lib/aws_advanced_ruby_driver_wrapper/plugins/failover_plugin.rb +68 -3
- data/lib/aws_advanced_ruby_driver_wrapper/plugins/federated_auth/base_saml_auth_plugin.rb +266 -0
- data/lib/aws_advanced_ruby_driver_wrapper/plugins/federated_auth/federated_auth_plugin.rb +134 -0
- data/lib/aws_advanced_ruby_driver_wrapper/plugins/federated_auth/okta_auth_plugin.rb +113 -0
- data/lib/aws_advanced_ruby_driver_wrapper/plugins/gdb/gdb_failover_plugin.rb +30 -9
- data/lib/aws_advanced_ruby_driver_wrapper/plugins/iam_auth_plugin.rb +16 -2
- data/lib/aws_advanced_ruby_driver_wrapper/plugins/initial_connection_strategy_plugin.rb +4 -1
- data/lib/aws_advanced_ruby_driver_wrapper/plugins/kms_encryption/key_management_utility.rb +6 -3
- data/lib/aws_advanced_ruby_driver_wrapper/plugins/kms_encryption/key_manager.rb +13 -4
- data/lib/aws_advanced_ruby_driver_wrapper/plugins/kms_encryption/kms_encryption_plugin.rb +29 -6
- data/lib/aws_advanced_ruby_driver_wrapper/plugins/kms_encryption/sql/trigger_mysql.sql +108 -0
- data/lib/aws_advanced_ruby_driver_wrapper/plugins/kms_encryption/sql/trigger_pg.sql +54 -0
- data/lib/aws_advanced_ruby_driver_wrapper/plugins/secrets_manager_plugin.rb +14 -0
- data/lib/aws_advanced_ruby_driver_wrapper/postgresql.rb +41 -23
- data/lib/aws_advanced_ruby_driver_wrapper/property_definition.rb +63 -1
- data/lib/aws_advanced_ruby_driver_wrapper/ruby_method.rb +3 -0
- data/lib/aws_advanced_ruby_driver_wrapper/services/dialect_service.rb +20 -7
- data/lib/aws_advanced_ruby_driver_wrapper/services/host_service.rb +34 -8
- data/lib/aws_advanced_ruby_driver_wrapper/services/monitor_service.rb +1 -1
- data/lib/aws_advanced_ruby_driver_wrapper/services/plugin_manager.rb +80 -29
- data/lib/aws_advanced_ruby_driver_wrapper/services/service_container.rb +10 -2
- data/lib/aws_advanced_ruby_driver_wrapper/services/service_utility.rb +4 -1
- data/lib/aws_advanced_ruby_driver_wrapper/trilogy.rb +167 -0
- data/lib/aws_advanced_ruby_driver_wrapper/utils/connection_config.rb +1 -1
- data/lib/aws_advanced_ruby_driver_wrapper/utils/connection_config_parser.rb +25 -15
- data/lib/aws_advanced_ruby_driver_wrapper/utils/global_aurora_topology_utils.rb +2 -2
- data/lib/aws_advanced_ruby_driver_wrapper/utils/iam_auth_utils.rb +13 -4
- data/lib/aws_advanced_ruby_driver_wrapper/utils/parser/encryption_annotation_parser.rb +15 -31
- data/lib/aws_advanced_ruby_driver_wrapper/utils/parser/mysql_statement_analyzer.rb +55 -76
- data/lib/aws_advanced_ruby_driver_wrapper/utils/parser/mysql_text.rb +215 -0
- data/lib/aws_advanced_ruby_driver_wrapper/utils/parser/pg_statement_analyzer.rb +11 -20
- data/lib/aws_advanced_ruby_driver_wrapper/utils/parser/query_analysis.rb +2 -3
- data/lib/aws_advanced_ruby_driver_wrapper/utils/parser/sql_parser.rb +21 -14
- data/lib/aws_advanced_ruby_driver_wrapper/utils/retry_util.rb +2 -1
- data/lib/aws_advanced_ruby_driver_wrapper/utils/saml_utils.rb +133 -0
- data/lib/aws_advanced_ruby_driver_wrapper/utils/storage/storage_service.rb +9 -5
- data/lib/aws_advanced_ruby_driver_wrapper/utils/telemetry/null_telemetry.rb +89 -0
- data/lib/aws_advanced_ruby_driver_wrapper/utils/telemetry/open_telemetry_context.rb +124 -0
- data/lib/aws_advanced_ruby_driver_wrapper/utils/telemetry/open_telemetry_counter.rb +39 -0
- data/lib/aws_advanced_ruby_driver_wrapper/utils/telemetry/open_telemetry_factory.rb +122 -0
- data/lib/aws_advanced_ruby_driver_wrapper/utils/telemetry/open_telemetry_gauge.rb +36 -0
- data/lib/aws_advanced_ruby_driver_wrapper/utils/telemetry/telemetry_const.rb +50 -0
- data/lib/aws_advanced_ruby_driver_wrapper/utils/telemetry/telemetry_factory.rb +143 -0
- data/lib/aws_advanced_ruby_driver_wrapper/utils/topology_utils.rb +9 -2
- data/lib/aws_advanced_ruby_driver_wrapper/version.rb +1 -1
- data/lib/aws_advanced_ruby_driver_wrapper.rb +9 -2
- metadata +54 -2
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
4
|
+
#
|
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License").
|
|
6
|
+
# You may not use this file except in compliance with the License.
|
|
7
|
+
# You may obtain a copy of the License at
|
|
8
|
+
#
|
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
#
|
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
# See the License for the specific language governing permissions and
|
|
15
|
+
# limitations under the License.
|
|
16
|
+
|
|
17
|
+
module AwsAdvancedRubyDriverWrapper
|
|
18
|
+
module Utils
|
|
19
|
+
module Telemetry
|
|
20
|
+
# The levels a telemetry context can be opened at. Callers name a level with one of these
|
|
21
|
+
# constants, so that a mistyped level raises NameError where it is written.
|
|
22
|
+
module TraceLevel
|
|
23
|
+
# Always starts a new trace, whatever the settings say.
|
|
24
|
+
FORCE_TOP_LEVEL = :force_top_level
|
|
25
|
+
# Starts a new trace when +telemetry_submit_top_level+ is enabled, and is otherwise treated
|
|
26
|
+
# as {NESTED}.
|
|
27
|
+
TOP_LEVEL = :top_level
|
|
28
|
+
# Becomes a child of the current span. Outside of any trace nothing is recorded, so the
|
|
29
|
+
# wrapper does not start traces of its own unless asked to.
|
|
30
|
+
NESTED = :nested
|
|
31
|
+
# Records nothing.
|
|
32
|
+
NO_TRACE = :no_trace
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
# Instrumentation scope name the wrapper's tracer and meter are registered under.
|
|
36
|
+
INSTRUMENTATION_NAME = 'aws-advanced-ruby-driver-wrapper'
|
|
37
|
+
|
|
38
|
+
# Span attribute names, and the prefix of the name of a copied span.
|
|
39
|
+
module TelemetryConst
|
|
40
|
+
TRACE_NAME_ANNOTATION = 'trace_name'
|
|
41
|
+
RUBY_CALL_ANNOTATION = 'ruby_call'
|
|
42
|
+
PARENT_TRACE_ANNOTATION = 'parent_trace_id'
|
|
43
|
+
EXCEPTION_TYPE_ANNOTATION = 'exception_type'
|
|
44
|
+
EXCEPTION_MESSAGE_ANNOTATION = 'exception_message'
|
|
45
|
+
SOURCE_TRACE_ANNOTATION = 'source_trace_id'
|
|
46
|
+
COPY_TRACE_NAME_PREFIX = 'copy: '
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
4
|
+
#
|
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License").
|
|
6
|
+
# You may not use this file except in compliance with the License.
|
|
7
|
+
# You may obtain a copy of the License at
|
|
8
|
+
#
|
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
#
|
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
# See the License for the specific language governing permissions and
|
|
15
|
+
# limitations under the License.
|
|
16
|
+
|
|
17
|
+
require_relative '../../errors'
|
|
18
|
+
require_relative '../../property_definition'
|
|
19
|
+
require_relative 'telemetry_const'
|
|
20
|
+
require_relative 'null_telemetry'
|
|
21
|
+
require_relative 'open_telemetry_factory'
|
|
22
|
+
|
|
23
|
+
module AwsAdvancedRubyDriverWrapper
|
|
24
|
+
module Utils
|
|
25
|
+
module Telemetry
|
|
26
|
+
# Records the wrapper's traces and metrics through the backends selected by the connection
|
|
27
|
+
# properties. Traces and metrics are configured separately; whichever is disabled is not recorded.
|
|
28
|
+
class TelemetryFactory
|
|
29
|
+
TRACES_BACKENDS = { 'otlp' => OpenTelemetryFactory, 'none' => nil }.freeze
|
|
30
|
+
METRICS_BACKENDS = { 'otlp' => OpenTelemetryFactory, 'none' => nil }.freeze
|
|
31
|
+
|
|
32
|
+
# @param wrapper_props [Hash, Concurrent::Map] the wrapper properties of the connection
|
|
33
|
+
# @raise [Errors::AwsError] if telemetry is enabled and a backend is missing or not recognized
|
|
34
|
+
# @raise [LoadError] if a selected backend's gem is not installed
|
|
35
|
+
def initialize(wrapper_props)
|
|
36
|
+
@submit_top_level = PropertyDefinition::TELEMETRY_SUBMIT_TOP_LEVEL.get_bool(wrapper_props)
|
|
37
|
+
|
|
38
|
+
if PropertyDefinition::ENABLE_TELEMETRY.get_bool(wrapper_props)
|
|
39
|
+
@traces_factory = backend(PropertyDefinition::TELEMETRY_TRACES_BACKEND, TRACES_BACKENDS, wrapper_props)
|
|
40
|
+
@metrics_factory = backend(PropertyDefinition::TELEMETRY_METRICS_BACKEND, METRICS_BACKENDS, wrapper_props)
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
@traces_factory&.require_traces_api!
|
|
44
|
+
@metrics_factory&.require_metrics_api!
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
# Opens a context that the caller must close. Prefer {#in_context}, which closes it.
|
|
48
|
+
#
|
|
49
|
+
# @param name [String] the span name
|
|
50
|
+
# @param trace_level [Symbol] one of the {TraceLevel} constants
|
|
51
|
+
# @return [OpenTelemetryContext, NullTelemetryContext]
|
|
52
|
+
def open_telemetry_context(name, trace_level)
|
|
53
|
+
return NullTelemetryContext::INSTANCE if @traces_factory.nil?
|
|
54
|
+
|
|
55
|
+
trace_level = TraceLevel::NESTED if trace_level == TraceLevel::TOP_LEVEL && !@submit_top_level
|
|
56
|
+
@traces_factory.open_telemetry_context(name, trace_level)
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
# Runs the block inside a new context and closes the context when the block finishes.
|
|
60
|
+
#
|
|
61
|
+
# @param record_result [Boolean] whether to mark the span as succeeded or failed according to
|
|
62
|
+
# how the block finishes. An error raised by the block marks it failed and is recorded on the
|
|
63
|
+
# span. Leaving the block early with +break+, +next+, +return+ or +throw+ is not an error, so
|
|
64
|
+
# it marks the span as succeeded.
|
|
65
|
+
# @param record_failure [Boolean] whether to mark the span as failed, recording the error, when
|
|
66
|
+
# the block raises, while leaving its status unset when it does not. Implied by +record_result+.
|
|
67
|
+
# @yieldparam context [OpenTelemetryContext, NullTelemetryContext]
|
|
68
|
+
# @return the block's result
|
|
69
|
+
def in_context(name, trace_level, record_result: false, record_failure: false)
|
|
70
|
+
return yield NullTelemetryContext::INSTANCE if @traces_factory.nil?
|
|
71
|
+
|
|
72
|
+
context = open_telemetry_context(name, trace_level)
|
|
73
|
+
failed = false
|
|
74
|
+
begin
|
|
75
|
+
yield context
|
|
76
|
+
rescue Exception => e # rubocop:disable Lint/RescueException -- recorded, then re-raised
|
|
77
|
+
failed = true
|
|
78
|
+
if record_result || record_failure
|
|
79
|
+
context.record_exception(e)
|
|
80
|
+
context.success = false
|
|
81
|
+
end
|
|
82
|
+
raise
|
|
83
|
+
ensure
|
|
84
|
+
context.success = true if record_result && !failed
|
|
85
|
+
context.close
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
# Records a copy of a closed context's span at another trace level, typically {TraceLevel::FORCE_TOP_LEVEL},
|
|
90
|
+
# so that work recorded inside a trace, such as a failover, can also be found as a trace of
|
|
91
|
+
# its own. The copy has the same timings, attributes and status, is named with a +copy: +
|
|
92
|
+
# prefix, and is linked to the original.
|
|
93
|
+
#
|
|
94
|
+
# @param context [OpenTelemetryContext, NullTelemetryContext] a context that has been closed
|
|
95
|
+
def post_copy(context, trace_level)
|
|
96
|
+
@traces_factory&.post_copy(context, trace_level)
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
# @return [OpenTelemetryCounter, NullTelemetryCounter]
|
|
100
|
+
def create_counter(name)
|
|
101
|
+
return NullTelemetryCounter::INSTANCE if @metrics_factory.nil?
|
|
102
|
+
|
|
103
|
+
@metrics_factory.create_counter(name)
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
# A gauge reports one value for the whole process: creating a gauge with a name that already
|
|
107
|
+
# exists, from this connection or any other, replaces the callback it is read from. So the
|
|
108
|
+
# callback should report state shared by all connections (such as the size of a shared
|
|
109
|
+
# cache) rather than state of its own connection.
|
|
110
|
+
#
|
|
111
|
+
# @yieldreturn [Numeric] the gauge's current value, read each time metrics are collected
|
|
112
|
+
# @return [OpenTelemetryGauge, NullTelemetryGauge]
|
|
113
|
+
def create_gauge(name, &callback)
|
|
114
|
+
return NullTelemetryGauge::INSTANCE if @metrics_factory.nil?
|
|
115
|
+
|
|
116
|
+
@metrics_factory.create_gauge(name, callback)
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
# @return [Boolean] whether traces or metrics are being recorded
|
|
120
|
+
def in_use?
|
|
121
|
+
traces_in_use? || !@metrics_factory.nil?
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
# @return [Boolean] whether traces are being recorded
|
|
125
|
+
def traces_in_use?
|
|
126
|
+
!@traces_factory.nil?
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
private
|
|
130
|
+
|
|
131
|
+
def backend(property, backends, wrapper_props)
|
|
132
|
+
value = property.get_string(wrapper_props)
|
|
133
|
+
key = value&.downcase
|
|
134
|
+
return backends[key] if backends.key?(key)
|
|
135
|
+
|
|
136
|
+
raise Errors::AwsError,
|
|
137
|
+
"#{value.inspect} is not a valid #{property.name}. " \
|
|
138
|
+
"When enable_telemetry is true, #{property.name} must be one of: #{backends.keys.join(', ')}"
|
|
139
|
+
end
|
|
140
|
+
end
|
|
141
|
+
end
|
|
142
|
+
end
|
|
143
|
+
end
|
|
@@ -73,8 +73,8 @@ module AwsAdvancedRubyDriverWrapper
|
|
|
73
73
|
def query_topology(conn, initial_host_info, instance_template)
|
|
74
74
|
results = @dialect.execute(conn, @dialect.topology_query)
|
|
75
75
|
# We expect at least 4 columns. Note that the server may return 0 columns if failover has occurred.
|
|
76
|
-
if results
|
|
77
|
-
logger.debug('The topology query returned a result with
|
|
76
|
+
if topology_result_empty?(results)
|
|
77
|
+
logger.debug('The topology query returned a result with no rows or rows with no columns. ' \
|
|
78
78
|
'This may occur if the topology query is executed when the server is failing over.')
|
|
79
79
|
return nil
|
|
80
80
|
end
|
|
@@ -84,6 +84,13 @@ module AwsAdvancedRubyDriverWrapper
|
|
|
84
84
|
|
|
85
85
|
private
|
|
86
86
|
|
|
87
|
+
# True if the topology query returned no rows, or rows without columns (the server may return
|
|
88
|
+
# no columns while failing over).
|
|
89
|
+
def topology_result_empty?(results)
|
|
90
|
+
first_row = results.first
|
|
91
|
+
first_row.nil? || first_row.empty?
|
|
92
|
+
end
|
|
93
|
+
|
|
87
94
|
# Verifies the writer in the host list. If multiple writers exist, the one with the most recent
|
|
88
95
|
# last_update_time is used as the current writer.
|
|
89
96
|
#
|
|
@@ -33,11 +33,12 @@ module AwsAdvancedRubyDriverWrapper
|
|
|
33
33
|
@config = Configuration.new
|
|
34
34
|
|
|
35
35
|
# Direct-driver connection classes are autoloaded so requiring this file alone is enough to use them:
|
|
36
|
-
# referencing
|
|
37
|
-
# for one driver never loads
|
|
36
|
+
# referencing any of them loads its driver-specific file on demand. Loading stays lazy - a client
|
|
37
|
+
# for one driver never loads another driver's code, and the underlying 'pg'/'mysql2'/'trilogy' gem is only
|
|
38
38
|
# required when a connection is actually opened.
|
|
39
39
|
autoload :WrapperPgConnection, 'aws_advanced_ruby_driver_wrapper/postgresql'
|
|
40
40
|
autoload :WrapperMysql2Client, 'aws_advanced_ruby_driver_wrapper/mysql'
|
|
41
|
+
autoload :WrapperTrilogyClient, 'aws_advanced_ruby_driver_wrapper/trilogy'
|
|
41
42
|
|
|
42
43
|
# Other public entry points are autoloaded for the same reason, so they work from code that runs
|
|
43
44
|
# before any connection is opened, such as a Rails initializer or a setup script.
|
|
@@ -148,6 +149,12 @@ if defined?(ActiveSupport) && ActiveSupport.respond_to?(:on_load)
|
|
|
148
149
|
'ActiveRecord::ConnectionAdapters::AwsMysql2Adapter',
|
|
149
150
|
'aws_advanced_ruby_driver_wrapper/active_record/aws_mysql2_adapter'
|
|
150
151
|
)
|
|
152
|
+
|
|
153
|
+
ActiveRecord::ConnectionAdapters.register(
|
|
154
|
+
'aws_trilogy',
|
|
155
|
+
'ActiveRecord::ConnectionAdapters::AwsTrilogyAdapter',
|
|
156
|
+
'aws_advanced_ruby_driver_wrapper/active_record/aws_trilogy_adapter'
|
|
157
|
+
)
|
|
151
158
|
end
|
|
152
159
|
end
|
|
153
160
|
|
metadata
CHANGED
|
@@ -1,15 +1,29 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: aws_advanced_ruby_driver_wrapper
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.0
|
|
4
|
+
version: 1.1.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Amazon Web Services
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2026-
|
|
11
|
+
date: 2026-11-05 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
|
+
- !ruby/object:Gem::Dependency
|
|
14
|
+
name: bigdecimal
|
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
|
16
|
+
requirements:
|
|
17
|
+
- - ">="
|
|
18
|
+
- !ruby/object:Gem::Version
|
|
19
|
+
version: '0'
|
|
20
|
+
type: :runtime
|
|
21
|
+
prerelease: false
|
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
23
|
+
requirements:
|
|
24
|
+
- - ">="
|
|
25
|
+
- !ruby/object:Gem::Version
|
|
26
|
+
version: '0'
|
|
13
27
|
- !ruby/object:Gem::Dependency
|
|
14
28
|
name: concurrent-ruby
|
|
15
29
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -30,6 +44,20 @@ dependencies:
|
|
|
30
44
|
- - ">="
|
|
31
45
|
- !ruby/object:Gem::Version
|
|
32
46
|
version: 1.3.7
|
|
47
|
+
- !ruby/object:Gem::Dependency
|
|
48
|
+
name: logger
|
|
49
|
+
requirement: !ruby/object:Gem::Requirement
|
|
50
|
+
requirements:
|
|
51
|
+
- - ">="
|
|
52
|
+
- !ruby/object:Gem::Version
|
|
53
|
+
version: '0'
|
|
54
|
+
type: :runtime
|
|
55
|
+
prerelease: false
|
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
57
|
+
requirements:
|
|
58
|
+
- - ">="
|
|
59
|
+
- !ruby/object:Gem::Version
|
|
60
|
+
version: '0'
|
|
33
61
|
description: A Ruby DB driver wrapper that provides enhanced features for AWS RDS
|
|
34
62
|
MySQL/PostgreSQL databases
|
|
35
63
|
email:
|
|
@@ -48,6 +76,7 @@ files:
|
|
|
48
76
|
- lib/aws_advanced_ruby_driver_wrapper/active_record/aws_connection_handler.rb
|
|
49
77
|
- lib/aws_advanced_ruby_driver_wrapper/active_record/aws_mysql2_adapter.rb
|
|
50
78
|
- lib/aws_advanced_ruby_driver_wrapper/active_record/aws_postgresql_adapter.rb
|
|
79
|
+
- lib/aws_advanced_ruby_driver_wrapper/active_record/aws_trilogy_adapter.rb
|
|
51
80
|
- lib/aws_advanced_ruby_driver_wrapper/active_record/type_adapter_alias.rb
|
|
52
81
|
- lib/aws_advanced_ruby_driver_wrapper/custom_configuration.rb
|
|
53
82
|
- lib/aws_advanced_ruby_driver_wrapper/db_dialects/aurora_mysql_dialect.rb
|
|
@@ -65,12 +94,15 @@ files:
|
|
|
65
94
|
- lib/aws_advanced_ruby_driver_wrapper/db_dialects/utils/dialect_utils.rb
|
|
66
95
|
- lib/aws_advanced_ruby_driver_wrapper/driver_dialects/driver_dialect.rb
|
|
67
96
|
- lib/aws_advanced_ruby_driver_wrapper/driver_dialects/driver_dialect_manager.rb
|
|
97
|
+
- lib/aws_advanced_ruby_driver_wrapper/driver_dialects/mysql2_driver_dialect.rb
|
|
68
98
|
- lib/aws_advanced_ruby_driver_wrapper/driver_dialects/mysql_driver_dialect.rb
|
|
69
99
|
- lib/aws_advanced_ruby_driver_wrapper/driver_dialects/pg_driver_dialect.rb
|
|
100
|
+
- lib/aws_advanced_ruby_driver_wrapper/driver_dialects/trilogy_driver_dialect.rb
|
|
70
101
|
- lib/aws_advanced_ruby_driver_wrapper/errors.rb
|
|
71
102
|
- lib/aws_advanced_ruby_driver_wrapper/errors/error_handler.rb
|
|
72
103
|
- lib/aws_advanced_ruby_driver_wrapper/errors/mysql_error_handler.rb
|
|
73
104
|
- lib/aws_advanced_ruby_driver_wrapper/errors/pg_error_handler.rb
|
|
105
|
+
- lib/aws_advanced_ruby_driver_wrapper/errors/trilogy_error_handler.rb
|
|
74
106
|
- lib/aws_advanced_ruby_driver_wrapper/host/connection_string_host_list_provider.rb
|
|
75
107
|
- lib/aws_advanced_ruby_driver_wrapper/host/global_aurora_host_list_provider.rb
|
|
76
108
|
- lib/aws_advanced_ruby_driver_wrapper/host/host_availability.rb
|
|
@@ -87,6 +119,7 @@ files:
|
|
|
87
119
|
- lib/aws_advanced_ruby_driver_wrapper/monitoring/monitor_state.rb
|
|
88
120
|
- lib/aws_advanced_ruby_driver_wrapper/mysql.rb
|
|
89
121
|
- lib/aws_advanced_ruby_driver_wrapper/plugins/blue_green/blue_green_plugin.rb
|
|
122
|
+
- lib/aws_advanced_ruby_driver_wrapper/plugins/blue_green/drop_blue_connections_marker.rb
|
|
90
123
|
- lib/aws_advanced_ruby_driver_wrapper/plugins/blue_green/host_mapper.rb
|
|
91
124
|
- lib/aws_advanced_ruby_driver_wrapper/plugins/blue_green/iam_host_tracker.rb
|
|
92
125
|
- lib/aws_advanced_ruby_driver_wrapper/plugins/blue_green/interim_status.rb
|
|
@@ -116,6 +149,9 @@ files:
|
|
|
116
149
|
- lib/aws_advanced_ruby_driver_wrapper/plugins/default_plugin.rb
|
|
117
150
|
- lib/aws_advanced_ruby_driver_wrapper/plugins/failover_mode.rb
|
|
118
151
|
- lib/aws_advanced_ruby_driver_wrapper/plugins/failover_plugin.rb
|
|
152
|
+
- lib/aws_advanced_ruby_driver_wrapper/plugins/federated_auth/base_saml_auth_plugin.rb
|
|
153
|
+
- lib/aws_advanced_ruby_driver_wrapper/plugins/federated_auth/federated_auth_plugin.rb
|
|
154
|
+
- lib/aws_advanced_ruby_driver_wrapper/plugins/federated_auth/okta_auth_plugin.rb
|
|
119
155
|
- lib/aws_advanced_ruby_driver_wrapper/plugins/gdb/gdb_failover_mode.rb
|
|
120
156
|
- lib/aws_advanced_ruby_driver_wrapper/plugins/gdb/gdb_failover_plugin.rb
|
|
121
157
|
- lib/aws_advanced_ruby_driver_wrapper/plugins/iam_auth_plugin.rb
|
|
@@ -139,6 +175,8 @@ files:
|
|
|
139
175
|
- lib/aws_advanced_ruby_driver_wrapper/plugins/kms_encryption/sanitizer.rb
|
|
140
176
|
- lib/aws_advanced_ruby_driver_wrapper/plugins/kms_encryption/schema_name.rb
|
|
141
177
|
- lib/aws_advanced_ruby_driver_wrapper/plugins/kms_encryption/schema_validator.rb
|
|
178
|
+
- lib/aws_advanced_ruby_driver_wrapper/plugins/kms_encryption/sql/trigger_mysql.sql
|
|
179
|
+
- lib/aws_advanced_ruby_driver_wrapper/plugins/kms_encryption/sql/trigger_pg.sql
|
|
142
180
|
- lib/aws_advanced_ruby_driver_wrapper/plugins/kms_encryption/sql_runner.rb
|
|
143
181
|
- lib/aws_advanced_ruby_driver_wrapper/plugins/kms_encryption/type_marker.rb
|
|
144
182
|
- lib/aws_advanced_ruby_driver_wrapper/plugins/secrets_manager_plugin.rb
|
|
@@ -154,6 +192,7 @@ files:
|
|
|
154
192
|
- lib/aws_advanced_ruby_driver_wrapper/services/service_container.rb
|
|
155
193
|
- lib/aws_advanced_ruby_driver_wrapper/services/service_utility.rb
|
|
156
194
|
- lib/aws_advanced_ruby_driver_wrapper/services/session_state_service.rb
|
|
195
|
+
- lib/aws_advanced_ruby_driver_wrapper/trilogy.rb
|
|
157
196
|
- lib/aws_advanced_ruby_driver_wrapper/utils/accessible_regions.rb
|
|
158
197
|
- lib/aws_advanced_ruby_driver_wrapper/utils/aurora_topology_utils.rb
|
|
159
198
|
- lib/aws_advanced_ruby_driver_wrapper/utils/aws_credentials_utils.rb
|
|
@@ -169,6 +208,7 @@ files:
|
|
|
169
208
|
- lib/aws_advanced_ruby_driver_wrapper/utils/multi_az_topology_utils.rb
|
|
170
209
|
- lib/aws_advanced_ruby_driver_wrapper/utils/parser/encryption_annotation_parser.rb
|
|
171
210
|
- lib/aws_advanced_ruby_driver_wrapper/utils/parser/mysql_statement_analyzer.rb
|
|
211
|
+
- lib/aws_advanced_ruby_driver_wrapper/utils/parser/mysql_text.rb
|
|
172
212
|
- lib/aws_advanced_ruby_driver_wrapper/utils/parser/pg_statement_analyzer.rb
|
|
173
213
|
- lib/aws_advanced_ruby_driver_wrapper/utils/parser/query_analysis.rb
|
|
174
214
|
- lib/aws_advanced_ruby_driver_wrapper/utils/parser/query_type.rb
|
|
@@ -178,12 +218,20 @@ files:
|
|
|
178
218
|
- lib/aws_advanced_ruby_driver_wrapper/utils/rds_url_type.rb
|
|
179
219
|
- lib/aws_advanced_ruby_driver_wrapper/utils/rds_utils.rb
|
|
180
220
|
- lib/aws_advanced_ruby_driver_wrapper/utils/retry_util.rb
|
|
221
|
+
- lib/aws_advanced_ruby_driver_wrapper/utils/saml_utils.rb
|
|
181
222
|
- lib/aws_advanced_ruby_driver_wrapper/utils/sql_encoding.rb
|
|
182
223
|
- lib/aws_advanced_ruby_driver_wrapper/utils/sql_method_analyzer.rb
|
|
183
224
|
- lib/aws_advanced_ruby_driver_wrapper/utils/storage/cache_entry.rb
|
|
184
225
|
- lib/aws_advanced_ruby_driver_wrapper/utils/storage/expiration_cache.rb
|
|
185
226
|
- lib/aws_advanced_ruby_driver_wrapper/utils/storage/sliding_expiration_cache.rb
|
|
186
227
|
- lib/aws_advanced_ruby_driver_wrapper/utils/storage/storage_service.rb
|
|
228
|
+
- lib/aws_advanced_ruby_driver_wrapper/utils/telemetry/null_telemetry.rb
|
|
229
|
+
- lib/aws_advanced_ruby_driver_wrapper/utils/telemetry/open_telemetry_context.rb
|
|
230
|
+
- lib/aws_advanced_ruby_driver_wrapper/utils/telemetry/open_telemetry_counter.rb
|
|
231
|
+
- lib/aws_advanced_ruby_driver_wrapper/utils/telemetry/open_telemetry_factory.rb
|
|
232
|
+
- lib/aws_advanced_ruby_driver_wrapper/utils/telemetry/open_telemetry_gauge.rb
|
|
233
|
+
- lib/aws_advanced_ruby_driver_wrapper/utils/telemetry/telemetry_const.rb
|
|
234
|
+
- lib/aws_advanced_ruby_driver_wrapper/utils/telemetry/telemetry_factory.rb
|
|
187
235
|
- lib/aws_advanced_ruby_driver_wrapper/utils/topology_utils.rb
|
|
188
236
|
- lib/aws_advanced_ruby_driver_wrapper/version.rb
|
|
189
237
|
- lib/aws_advanced_ruby_driver_wrapper/wrapper_property.rb
|
|
@@ -202,6 +250,10 @@ post_install_message: |
|
|
|
202
250
|
gem install mysql2
|
|
203
251
|
require 'aws_advanced_ruby_driver_wrapper/mysql'
|
|
204
252
|
|
|
253
|
+
To use with MySQL through trilogy:
|
|
254
|
+
gem install trilogy
|
|
255
|
+
require 'aws_advanced_ruby_driver_wrapper/trilogy'
|
|
256
|
+
|
|
205
257
|
To use with PostgreSQL:
|
|
206
258
|
gem install pg
|
|
207
259
|
require 'aws_advanced_ruby_driver_wrapper/postgresql'
|