fibered_mysql2 0.2.0.pre.1 → 1.0.0.colin.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c336888076880a85f5be10b2784991a2a27784e9a3858bf97f79fe782ac6417f
4
- data.tar.gz: 59b46276bb6fbc0f6ee2c609195e438cc440dc160b13b26b2d113d034fac004f
3
+ metadata.gz: 75d1eaf3701caa8823cdfbec61e7d9734d1e5f463e7936010c5636715591c2c9
4
+ data.tar.gz: 715db9f2e07df69a6cf51a2389404f030cd9c257524544cb77c16f53de36b944
5
5
  SHA512:
6
- metadata.gz: 4df7a46c2f65f930c08fc5233e73d4fd8b13d4b899feffe04b40d45ea944e4e35c89eae567d77187fdc6fd416a25b6080bb0fd2de7b4a1d8dc10e054c508f692
7
- data.tar.gz: 38300d691395f2f0c89cc4304c9e9f44df21f6e7df479ca9369e34829faa6eb3a366a0b0c470e1121a3311e8704f3b536fbcdff22fc7a974ff1ef0944ba00e50
6
+ metadata.gz: 9a21b639b0b0ab6afcb558978a7e1060510e7fc7ca5e9a833b27d2b8c9eb49d023ac5beb5e0c500c3a3ff711d7f6ee0e49ae61f4e72f941c7a07420f60b9c866
7
+ data.tar.gz: 99adce5422229bdea37a08ed76a4dad71c6f4108ce3588d42dadc3b6c6fbb2895f65532842739dbe83cd7d6c748ea4b0cf7d57d05ca8fc26cbd0c6e65ab17e41
@@ -0,0 +1 @@
1
+ * @Invoca/octothorpe
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- 2.7.5
1
+ 3.2.1
data/CHANGELOG.md CHANGED
@@ -4,6 +4,10 @@ Inspired by [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
4
4
 
5
5
  Note: this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
6
6
 
7
+ ## [0.2.0] - 2023-01-12
8
+ ### Added
9
+ - Added support for Rails 6+ by adding knowledge of lazy transactions to the adapter.
10
+
7
11
  ## [0.1.5] - 2022-03-25
8
12
  ### Changed
9
13
  - Upgraded Bundler to 2.2.29 and Ruby to 2.7.5. Removed support for Rails 4.
@@ -37,6 +41,7 @@ threaded, not fibered.
37
41
  - Added TravisCI unit test pipeline.
38
42
  - Added coverage reports via Coveralls.
39
43
 
44
+ [0.2.0]: https://github.com/Invoca/fibered_mysql2/compare/v0.1.5..v0.2.0
40
45
  [0.1.5]: https://github.com/Invoca/fibered_mysql2/compare/v0.1.4..v0.1.5
41
46
  [0.1.4]: https://github.com/Invoca/fibered_mysql2/compare/v0.1.3..v0.1.4
42
47
  [0.1.3]: https://github.com/Invoca/fibered_mysql2/compare/v0.1.2..v0.1.3
data/Gemfile.lock CHANGED
@@ -1,8 +1,8 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- fibered_mysql2 (0.2.0.pre.1)
5
- em-synchrony (~> 1.0)
4
+ fibered_mysql2 (1.0.0.colin.1)
5
+ async
6
6
  rails (>= 5.2, < 7)
7
7
 
8
8
  GEM
@@ -67,10 +67,16 @@ GEM
67
67
  bundler
68
68
  rake
69
69
  thor (>= 0.14.0)
70
+ async (2.5.1)
71
+ console (~> 1.10)
72
+ io-event (~> 1.1)
73
+ timers (~> 4.1)
70
74
  builder (3.2.4)
71
75
  byebug (11.1.3)
72
76
  coderay (1.1.3)
73
77
  concurrent-ruby (1.1.8)
78
+ console (1.16.2)
79
+ fiber-local
74
80
  coveralls (0.8.23)
75
81
  json (>= 1.8, < 3)
76
82
  simplecov (~> 0.16.1)
@@ -80,14 +86,13 @@ GEM
80
86
  crass (1.0.6)
81
87
  diff-lcs (1.4.4)
82
88
  docile (1.3.2)
83
- em-synchrony (1.0.6)
84
- eventmachine (>= 1.0.0.beta.1)
85
89
  erubi (1.10.0)
86
- eventmachine (1.2.7)
90
+ fiber-local (1.0.0)
87
91
  globalid (0.4.2)
88
92
  activesupport (>= 4.2.0)
89
93
  i18n (1.8.7)
90
94
  concurrent-ruby (~> 1.0)
95
+ io-event (1.2.2)
91
96
  json (2.3.1)
92
97
  loofah (2.8.0)
93
98
  crass (~> 1.0.2)
@@ -103,7 +108,7 @@ GEM
103
108
  mini_mime (1.0.2)
104
109
  mini_portile2 (2.6.1)
105
110
  minitest (5.14.3)
106
- mysql2 (0.5.3)
111
+ mysql2 (0.5.5)
107
112
  nio4r (2.5.4)
108
113
  nokogiri (1.12.5)
109
114
  mini_portile2 (~> 2.6.1)
@@ -175,6 +180,7 @@ GEM
175
180
  tins (~> 1.0)
176
181
  thor (1.0.1)
177
182
  thread_safe (0.3.6)
183
+ timers (4.3.5)
178
184
  tins (1.25.0)
179
185
  sync
180
186
  tzinfo (1.2.9)
@@ -29,6 +29,6 @@ Gem::Specification.new do |spec|
29
29
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
30
30
  spec.require_paths = ["lib"]
31
31
 
32
- spec.add_dependency 'em-synchrony', '~> 1.0'
32
+ spec.add_dependency 'async'
33
33
  spec.add_dependency 'rails', '>= 5.2', '< 7'
34
34
  end
@@ -1,88 +1,72 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'em-synchrony'
4
3
  require 'active_model'
5
4
  require 'active_record/errors'
6
- require 'active_record/connection_adapters/em_mysql2_adapter'
5
+ require 'active_record/connection_adapters/mysql2_adapter'
6
+ require_relative '../../fibered_mysql2/async_task'
7
7
 
8
8
  module FiberedMysql2
9
- module FiberedMysql2Adapter_4_2
9
+ module FiberedMysql2Adapter_6
10
10
  def lease
11
- synchronize do
12
- unless in_use?
13
- @owner = Fiber.current
14
- end
15
- end
16
- end
17
- end
18
-
19
- module FiberedMysql2Adapter_5_2
20
- def lease
21
- if in_use?
22
- msg = "Cannot lease connection, ".dup
23
- if owner_fiber == Fiber.current
24
- msg << "it is already leased by the current fiber."
11
+ if (ot = owner_task)
12
+ msg = +"Cannot lease connection; "
13
+ if ot == (current_task = AsyncTask.current_or_none)
14
+ msg << "it is already leased by the current Async::Task."
25
15
  else
26
- msg << "it is already in use by a different fiber: #{owner_fiber}. " \
27
- "Current fiber: #{Fiber.current}."
16
+ msg << "it is already in use by a different Async::Task: #{ot}. " \
17
+ "Current Async::Task: #{current_task}."
28
18
  end
29
19
  raise ::ActiveRecord::ActiveRecordError, msg
30
20
  end
31
21
 
32
- @owner = Fiber.current
22
+ @owner = AsyncTask.current_or_none
33
23
  end
34
24
 
35
25
  def expire
36
- if in_use?
37
- # Because we are actively releasing connections from dead fibers, we only want
38
- # to enforce that we're expiring the current fibers connection, iff the owner
26
+ if (ot = owner_task)
27
+ # Because we are actively releasing connections from dead tasks, we only want
28
+ # to enforce that we're expiring the current task's connection, iff the owner
39
29
  # of the connection is still alive.
40
- if owner_fiber.alive? && owner_fiber != Fiber.current
41
- raise ::ActiveRecord::ActiveRecordError, "Cannot expire connection, " \
42
- "it is owned by a different fiber: #{owner_fiber}. " \
43
- "Current fiber: #{Fiber.current}."
30
+ if ot.alive? && ot != (current_task = AsyncTask.current_or_none)
31
+ raise ::ActiveRecord::ActiveRecordError, "Cannot expire connection; " \
32
+ "it is owned by a different Async::Task: #{ot}. " \
33
+ "Current Async::Task: #{current_task}."
44
34
  end
45
35
 
46
36
  @idle_since = ::Concurrent.monotonic_time
47
37
  @owner = nil
48
38
  else
49
- raise ::ActiveRecord::ActiveRecordError, "Cannot expire connection, it is not currently leased."
39
+ raise ::ActiveRecord::ActiveRecordError, "Cannot expire connection; it is not currently leased."
50
40
  end
51
41
  end
52
42
 
53
43
  def steal!
54
- if in_use?
55
- if owner_fiber != Fiber.current
56
- pool.send :remove_connection_from_thread_cache, self, owner_fiber
44
+ if (ot = owner_task)
45
+ if ot != (current_task = AsyncTask.current_or_none)
46
+ pool.send :remove_connection_from_thread_cache, self, ot
57
47
 
58
- @owner = Fiber.current
48
+ @owner = current_task
59
49
  end
60
50
  else
61
- raise ::ActiveRecord::ActiveRecordError, "Cannot steal connection, it is not currently leased."
51
+ raise ::ActiveRecord::ActiveRecordError, "Cannot steal connection; it is not currently leased."
62
52
  end
63
53
  end
64
54
 
65
55
  private
66
56
 
67
- def owner_fiber
68
- @owner.nil? || @owner.is_a?(Fiber) or
69
- raise "@owner must be a Fiber! Found #{@owner.inspect}"
57
+ def owner_task
58
+ @owner.nil? || @owner == AsyncTask::NoTaskPlaceholder || @owner.is_a?(Async::Task) or
59
+ raise "@owner must be an Async::Task or FiberedMysql2::AsyncTask::NoTaskPlaceholder! Found #{@owner.inspect}"
70
60
  @owner
71
61
  end
72
62
  end
73
63
 
74
- class FiberedMysql2Adapter < ::ActiveRecord::ConnectionAdapters::EMMysql2Adapter
64
+ class FiberedMysql2Adapter < ::ActiveRecord::ConnectionAdapters::Mysql2Adapter
75
65
  case ::Rails::VERSION::MAJOR
76
- when 4
77
- include FiberedMysql2Adapter_4_2
78
- when 5
79
- include FiberedMysql2Adapter_5_2
80
66
  when 6
81
- include FiberedMysql2Adapter_5_2
82
-
83
- def supports_lazy_transactions?
84
- false
85
- end
67
+ include FiberedMysql2Adapter_6
68
+ else
69
+ raise ArgumentError, "unexpected Rails version #{Rails::VERSION::MAJOR}"
86
70
  end
87
71
 
88
72
  def initialize(*args)
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ module FiberedMysql2
4
+ module AsyncTask
5
+ class NoTaskPlaceholder
6
+ class << self
7
+ def alive? = true
8
+ end
9
+ end
10
+
11
+ class << self
12
+ # Adapted from https://github.com/socketry/async/blob/main/lib/async/task.rb#L236-L238
13
+ def current_or_none
14
+ Thread.current[:async_task] || NoTaskPlaceholder
15
+ end
16
+ end
17
+ end
18
+ end
@@ -1,240 +1,39 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # This class behaves the same as ActiveRecord's ConnectionPool, but synchronizes with fibers rather than threads.
3
+ # This class behaves the same as ActiveRecord's ConnectionPool, but synchronizes with Async::Task fibers rather than threads.
4
4
 
5
5
  # Note - trace statements have been commented out. This is useful trace but we do not want it on by default.
6
6
  # When we have configurable logging we can put this back and have it off by default.
7
7
 
8
- require 'em-synchrony'
9
- require 'em-synchrony/thread'
10
- require 'fibered_mysql2/fibered_mutex_with_waiter_priority'
11
-
12
- EventMachine::Synchrony::Thread::Mutex.prepend(FiberedMysql2::FiberedMutexWithWaiterPriority)
13
-
14
8
  module FiberedMysql2
15
- class FiberedConditionVariable
16
- EXCEPTION_NEVER = {Exception => :never}.freeze
17
- EXCEPTION_IMMEDIATE = {Exception => :immediate}.freeze
18
-
19
- #
20
- # FIXME: This isn't documented in Nutshell.
21
- #
22
- # Since MonitorMixin.new_cond returns a ConditionVariable, and the example
23
- # above calls while_wait and signal, this class should be documented.
24
- #
25
- class Timeout < Exception; end
26
-
27
- #
28
- # Releases the lock held in the associated monitor and waits; reacquires the lock on wakeup.
29
- #
30
- # If +timeout+ is given, this method returns after +timeout+ seconds passed,
31
- # even if no other thread doesn't signal.
32
- #
33
- def wait(timeout = nil)
34
- Thread.handle_interrupt(EXCEPTION_NEVER) do
35
- @monitor.__send__(:mon_check_owner)
36
- count = @monitor.__send__(:mon_exit_for_cond)
37
- begin
38
- Thread.handle_interrupt(EXCEPTION_IMMEDIATE) do
39
- @cond.wait(@monitor.instance_variable_get(:@mon_mutex), timeout)
40
- end
41
- return true
42
- ensure
43
- @monitor.__send__(:mon_enter_for_cond, count)
44
- end
45
- end
46
- end
47
-
48
- #
49
- # Calls wait repeatedly while the given block yields a truthy value.
50
- #
51
- def wait_while
52
- while yield
53
- wait
54
- end
55
- end
56
-
57
- #
58
- # Calls wait repeatedly until the given block yields a truthy value.
59
- #
60
- def wait_until
61
- until yield
62
- wait
63
- end
64
- end
65
-
66
- #
67
- # Wakes up the first thread in line waiting for this lock.
68
- #
69
- def signal
70
- @monitor.__send__(:mon_check_owner)
71
- @cond.signal
72
- end
73
-
74
- #
75
- # Wakes up all threads waiting for this lock.
76
- #
77
- def broadcast
78
- @monitor.__send__(:mon_check_owner)
79
- @cond.broadcast
80
- end
81
-
82
- def initialize(monitor)
83
- @monitor = monitor
84
- @cond = EM::Synchrony::Thread::ConditionVariable.new
85
- end
86
- end
87
-
88
- # From Ruby's MonitorMixin, with all occurrences of Thread changed to Fiber
89
- module FiberedMonitorMixin
90
- def self.extend_object(obj)
91
- super
92
- obj.__send__(:mon_initialize)
93
- end
94
-
95
- #
96
- # Attempts to enter exclusive section. Returns +false+ if lock fails.
97
- #
98
- def mon_try_enter
99
- if @mon_owner != Fiber.current
100
- @mon_mutex.try_lock or return false
101
- @mon_owner = Fiber.current
102
- @mon_count = 0
103
- end
104
- @mon_count += 1
105
- true
9
+ module FiberedDatabaseConnectionPool
10
+ case ::Rails::VERSION::MAJOR
11
+ when 6
12
+ else
13
+ raise ArgumentError, "unexpected Rails version #{Rails::VERSION::MAJOR}"
106
14
  end
107
15
 
108
- #
109
- # Enters exclusive section.
110
- #
111
- def mon_enter
112
- if @mon_owner != Fiber.current
113
- @mon_mutex.lock
114
- @mon_owner = Fiber.current
115
- @mon_count = 0
116
- end
117
- @mon_count += 1
16
+ def cached_connections
17
+ @thread_cached_conns
118
18
  end
119
19
 
120
- #
121
- # Leaves exclusive section.
122
- #
123
- def mon_exit
124
- mon_check_owner
125
- @mon_count -= 1
126
- if @mon_count == 0
127
- @mon_owner = nil
128
- @mon_mutex.unlock
129
- end
20
+ def current_connection_id
21
+ connection_cache_key(current_thread)
130
22
  end
131
23
 
132
- #
133
- # Enters exclusive section and executes the block. Leaves the exclusive
134
- # section automatically when the block exits. See example under
135
- # +MonitorMixin+.
136
- #
137
- def mon_synchronize
138
- mon_enter
24
+ def checkout(checkout_timeout = @checkout_timeout)
139
25
  begin
140
- yield
141
- ensure
142
- begin
143
- mon_exit
144
- rescue => ex
145
- ActiveRecord::Base.logger.error("Exception occurred while executing mon_exit: #{ex}")
146
- end
147
- end
148
- end
149
- alias synchronize mon_synchronize
150
-
151
- #
152
- # Creates a new FiberedConditionVariable associated with the
153
- # receiver.
154
- #
155
- def new_cond
156
- FiberedConditionVariable.new(self)
157
- end
158
-
159
- # Initializes the FiberedMonitorMixin after being included in a class
160
- def mon_initialize
161
- @mon_owner = nil
162
- @mon_count = 0
163
- @mon_mutex = EM::Synchrony::Thread::Mutex.new
164
- end
165
-
166
- def mon_check_owner
167
- @mon_owner == Fiber.current or raise FiberError, "current fiber not owner"
168
- end
169
-
170
- private
171
-
172
- def mon_enter_for_cond(count)
173
- @mon_owner = Fiber.current
174
- @mon_count = count
175
- end
176
-
177
- # returns the old mon_count
178
- def mon_exit_for_cond
179
- count = @mon_count
180
- @mon_owner = nil
181
- @mon_count = 0
182
- count
183
- end
184
- end
185
-
186
- module FiberedDatabaseConnectionPool
187
- include FiberedMonitorMixin
188
-
189
- module Adapter_4_2
190
- def cached_connections
191
- @reserved_connections
192
- end
193
-
194
- def current_connection_id
195
- ActiveRecord::Base.connection_id ||= Fiber.current.object_id
196
- end
197
-
198
- def checkout
199
- begin
200
- reap_connections
201
- rescue => ex
202
- ActiveRecord::Base.logger.error("Exception occurred while executing reap_connections: #{ex}")
203
- end
204
- super
26
+ reap_connections
27
+ rescue => ex
28
+ ActiveRecord::Base.logger.error("Exception occurred while executing reap_connections: #{ex.class}: #{ex.message}")
205
29
  end
30
+ super
206
31
  end
207
32
 
208
- module Adapter_5_2
209
- def cached_connections
210
- @thread_cached_conns
211
- end
212
-
213
- def current_connection_id
214
- connection_cache_key(current_thread)
33
+ def release_connection(owner_task = AsyncTask.current_or_none)
34
+ if (conn = @thread_cached_conns.delete(connection_cache_key(owner_task)))
35
+ checkin(conn)
215
36
  end
216
-
217
- def checkout(checkout_timeout = @checkout_timeout)
218
- begin
219
- reap_connections
220
- rescue => ex
221
- ActiveRecord::Base.logger.error("Exception occurred while executing reap_connections: #{ex}")
222
- end
223
- super
224
- end
225
-
226
- def release_connection(owner_thread = Fiber.current)
227
- if (conn = @thread_cached_conns.delete(connection_cache_key(owner_thread)))
228
- checkin(conn)
229
- end
230
- end
231
- end
232
-
233
- case Rails::VERSION::MAJOR
234
- when 4
235
- include Adapter_4_2
236
- when 5, 6
237
- include Adapter_5_2
238
37
  end
239
38
 
240
39
  def initialize(connection_spec, *args, **keyword_args)
@@ -282,7 +81,7 @@ module FiberedMysql2
282
81
  end
283
82
 
284
83
  def current_thread
285
- Fiber.current
84
+ AsyncTask.current_or_none
286
85
  end
287
86
  end
288
87
  end
@@ -2,57 +2,6 @@
2
2
 
3
3
  require_relative '../active_record/connection_adapters/fibered_mysql2_adapter'
4
4
 
5
- module EM::Synchrony
6
- module ActiveRecord
7
- _ = Adapter_4_2
8
- module Adapter_4_2
9
- def configure_connection
10
- super # undo EM::Synchrony's override here
11
- end
12
-
13
- def transaction(*args)
14
- super # and here
15
- end
16
-
17
- _ = TransactionManager
18
- class TransactionManager < _
19
- if Rails::VERSION::MAJOR > 5
20
- # Overriding the em-synchrony override to bring it up to rails 6 requirements.
21
- # Changes from the original Rails 6 source are:
22
- # 1. the usage of _current_stack created by em-synchrony instead of the Rails provided @stack instance variable
23
- # 2. the usage of Fiber.current.object_id as a part of the savepoint transaction name
24
- #
25
- # Original EM Synchrony Source:
26
- # https://github.com/igrigorik/em-synchrony/blob/master/lib/em-synchrony/activerecord_4_2.rb#L35-L44
27
- #
28
- # Original Rails Source:
29
- # https://github.com/rails/rails/blob/6-0-stable/activerecord/lib/active_record/connection_adapters/abstract/transaction.rb#L205-L224
30
- def begin_transaction(options = {})
31
- @connection.lock.synchronize do
32
- run_commit_callbacks = !current_transaction.joinable?
33
- transaction =
34
- if _current_stack.empty?
35
- ::ActiveRecord::ConnectionAdapters::RealTransaction.new(@connection, options, run_commit_callbacks: run_commit_callbacks)
36
- else
37
- ::ActiveRecord::ConnectionAdapters::SavepointTransaction.new(@connection, "active_record_#{Fiber.current.object_id}_#{open_transactions}", _current_stack.last, options,
38
- run_commit_callbacks: run_commit_callbacks)
39
- end
40
-
41
- if @connection.supports_lazy_transactions? && lazy_transactions_enabled? && options[:_lazy] != false
42
- @has_unmaterialized_transactions = true
43
- else
44
- transaction.materialize!
45
- end
46
- _current_stack.push(transaction)
47
- transaction
48
- end
49
- end
50
- end
51
- end
52
- end
53
- end
54
- end
55
-
56
5
  module FiberedMysql2
57
6
  module FiberedMysql2ConnectionFactory
58
7
  def fibered_mysql2_connection(raw_config)
@@ -63,10 +12,10 @@ module FiberedMysql2
63
12
 
64
13
  client =
65
14
  begin
66
- Mysql2::EM::Client.new(config)
15
+ Mysql2::Client.new(config)
67
16
  rescue Mysql2::Error => error
68
17
  if error.message.include?("Unknown database")
69
- raise ActiveRecord::NoDatabaseError.new(error.message, error)
18
+ raise ActiveRecord::NoDatabaseError.new(error.message)
70
19
  else
71
20
  raise
72
21
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module FiberedMysql2
4
- VERSION = "0.2.0.pre.1"
4
+ VERSION = "1.0.0.colin.1"
5
5
  end
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'async'
3
4
  require 'fibered_mysql2/version'
4
5
  require_relative '../lib/active_record/connection_adapters/fibered_mysql2_adapter'
5
6
  require 'fibered_mysql2/fibered_database_connection_pool'
metadata CHANGED
@@ -1,29 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fibered_mysql2
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0.pre.1
4
+ version: 1.0.0.colin.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Invoca Development
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-01-10 00:00:00.000000000 Z
11
+ date: 2023-05-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: em-synchrony
14
+ name: async
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '1.0'
19
+ version: '0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - "~>"
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: '1.0'
26
+ version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rails
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -51,6 +51,7 @@ executables: []
51
51
  extensions: []
52
52
  extra_rdoc_files: []
53
53
  files:
54
+ - ".github/CODEOWNERS"
54
55
  - ".github/workflows/build.yml"
55
56
  - ".github/workflows/release.yml"
56
57
  - ".gitignore"
@@ -69,6 +70,7 @@ files:
69
70
  - gemfiles/rails_6.gemfile
70
71
  - lib/active_record/connection_adapters/fibered_mysql2_adapter.rb
71
72
  - lib/fibered_mysql2.rb
73
+ - lib/fibered_mysql2/async_task.rb
72
74
  - lib/fibered_mysql2/fibered_database_connection_pool.rb
73
75
  - lib/fibered_mysql2/fibered_mutex_with_waiter_priority.rb
74
76
  - lib/fibered_mysql2/fibered_mysql2_connection_factory.rb
@@ -93,7 +95,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
93
95
  - !ruby/object:Gem::Version
94
96
  version: 1.3.1
95
97
  requirements: []
96
- rubygems_version: 3.1.6
98
+ rubygems_version: 3.4.6
97
99
  signing_key:
98
100
  specification_version: 4
99
101
  summary: An adapter for fibered mysql2