fibered_mysql2 1.0.0.colin.2 → 1.0.0.colin.3
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/.github/workflows/build.yml +1 -2
- data/Appraisals +0 -4
- data/Gemfile.lock +2 -2
- data/README.md +5 -4
- data/bin/console +1 -0
- data/fibered_mysql2.gemspec +1 -1
- data/lib/active_record/connection_adapters/fibered_mysql2_adapter.rb +3 -6
- data/lib/fibered_mysql2/fibered_database_connection_pool.rb +1 -5
- data/lib/fibered_mysql2/version.rb +1 -1
- data/lib/fibered_mysql2.rb +4 -9
- metadata +4 -7
- data/gemfiles/rails_5.gemfile +0 -15
- data/lib/fibered_mysql2/async_task.rb +0 -18
- data/lib/fibered_mysql2/fibered_mutex_with_waiter_priority.rb +0 -33
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1edbb420eedd78ecab2ae0fef48554d968f01e44c791430262f55b43c280dea0
|
4
|
+
data.tar.gz: 676673438f5078176bfbd836d6e34d79283a1aa8874cbd32563266dbf163a5b3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a6de1e7d5bd5afe99bb1104d772dcef36bf5414d58e57b069bf2883e506c1a5f78551a429b4ee3098321373bee5ff83ee2a200ba3477ebde9bd15d26cd78fa4f
|
7
|
+
data.tar.gz: e506a05e2ffd01f2c0f7380a9fd644735aceb9843f43f683b1972533f5c37d783ef4aa2b8417aa9e25ef548c03bc837fec7aeb9b16a0e000d6683ab6619d3bf7
|
data/.github/workflows/build.yml
CHANGED
data/Appraisals
CHANGED
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -2,7 +2,8 @@
|
|
2
2
|
|
3
3
|
# FiberedMysql2
|
4
4
|
|
5
|
-
FiberedMysql2 adds Fiber support to `ActiveRecord::ConnectionAdapters::
|
5
|
+
FiberedMysql2 adds Fiber support to `ActiveRecord::ConnectionAdapters::Mysql2Adapter` for Rails 6.
|
6
|
+
This is a stop-gap until Rails 7, which adds `isolation_level: :fiber` to `ActiveRecord`.
|
6
7
|
|
7
8
|
## Installation
|
8
9
|
|
@@ -21,15 +22,15 @@ Or install it yourself as:
|
|
21
22
|
$ gem install fibered_mysql2
|
22
23
|
|
23
24
|
## Support
|
24
|
-
Tested with Rails
|
25
|
+
Tested with Rails 6.0, Ruby 3, and Async.
|
25
26
|
|
26
27
|
## Usage
|
27
28
|
|
28
|
-
Behaves the same as `ActiveRecord::ConnectionAdapters::
|
29
|
+
Behaves the same as `ActiveRecord::ConnectionAdapters::Mysql2Adapter` but with using Fibers rather than Threads for tracking ownership when leasing/expiring connections.
|
29
30
|
```ruby
|
30
31
|
connection = FiberedMysql2::FiberedMysql2Adapter.new(client, logger, options, config)
|
31
32
|
connection.lease
|
32
|
-
connection.expire
|
33
|
+
connection.expire
|
33
34
|
```
|
34
35
|
|
35
36
|
## Development
|
data/bin/console
CHANGED
data/fibered_mysql2.gemspec
CHANGED
@@ -61,12 +61,9 @@ module FiberedMysql2
|
|
61
61
|
end
|
62
62
|
|
63
63
|
class FiberedMysql2Adapter < ::ActiveRecord::ConnectionAdapters::Mysql2Adapter
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
else
|
68
|
-
raise ArgumentError, "unexpected Rails version #{Rails::VERSION::MAJOR}"
|
69
|
-
end
|
64
|
+
ActiveRecord::VERSION::MAJOR == 6 or raise ArgumentError, "unexpected Rails version #{ActiveRecord::VERSION::MAJOR}"
|
65
|
+
|
66
|
+
include FiberedMysql2Adapter_6
|
70
67
|
|
71
68
|
def initialize(*args)
|
72
69
|
super
|
@@ -4,11 +4,7 @@
|
|
4
4
|
|
5
5
|
module FiberedMysql2
|
6
6
|
module FiberedDatabaseConnectionPool
|
7
|
-
|
8
|
-
when 6
|
9
|
-
else
|
10
|
-
raise ArgumentError, "unexpected Rails version #{Rails::VERSION::MAJOR}"
|
11
|
-
end
|
7
|
+
ActiveRecord::VERSION::MAJOR == 6 or raise ArgumentError, "unexpected Rails version #{ActiveRecord::VERSION::MAJOR}"
|
12
8
|
|
13
9
|
def cached_connections
|
14
10
|
@thread_cached_conns
|
data/lib/fibered_mysql2.rb
CHANGED
@@ -1,13 +1,8 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require 'async'
|
4
|
-
require 'fibered_mysql2/version'
|
5
|
-
require_relative '../lib/active_record/connection_adapters/fibered_mysql2_adapter'
|
6
|
-
require 'fibered_mysql2/fibered_database_connection_pool'
|
7
|
-
require 'fibered_mysql2/fibered_mutex_with_waiter_priority'
|
8
|
-
require 'fibered_mysql2/fibered_mysql2_connection_factory'
|
9
4
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
5
|
+
require_relative 'active_record/connection_adapters/fibered_mysql2_adapter'
|
6
|
+
require_relative 'fibered_mysql2/fibered_database_connection_pool'
|
7
|
+
require_relative 'fibered_mysql2/fibered_mysql2_connection_factory'
|
8
|
+
require_relative 'fibered_mysql2/version'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fibered_mysql2
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.0.colin.
|
4
|
+
version: 1.0.0.colin.3
|
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-05-
|
11
|
+
date: 2023-05-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: async
|
@@ -30,7 +30,7 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
33
|
+
version: '6'
|
34
34
|
- - "<"
|
35
35
|
- !ruby/object:Gem::Version
|
36
36
|
version: '7'
|
@@ -40,7 +40,7 @@ dependencies:
|
|
40
40
|
requirements:
|
41
41
|
- - ">="
|
42
42
|
- !ruby/object:Gem::Version
|
43
|
-
version: '
|
43
|
+
version: '6'
|
44
44
|
- - "<"
|
45
45
|
- !ruby/object:Gem::Version
|
46
46
|
version: '7'
|
@@ -66,13 +66,10 @@ files:
|
|
66
66
|
- bin/console
|
67
67
|
- bin/setup
|
68
68
|
- fibered_mysql2.gemspec
|
69
|
-
- gemfiles/rails_5.gemfile
|
70
69
|
- gemfiles/rails_6.gemfile
|
71
70
|
- lib/active_record/connection_adapters/fibered_mysql2_adapter.rb
|
72
71
|
- lib/fibered_mysql2.rb
|
73
|
-
- lib/fibered_mysql2/async_task.rb
|
74
72
|
- lib/fibered_mysql2/fibered_database_connection_pool.rb
|
75
|
-
- lib/fibered_mysql2/fibered_mutex_with_waiter_priority.rb
|
76
73
|
- lib/fibered_mysql2/fibered_mysql2_connection_factory.rb
|
77
74
|
- lib/fibered_mysql2/version.rb
|
78
75
|
homepage: https://github.com/Invoca/fibered_mysql2
|
data/gemfiles/rails_5.gemfile
DELETED
@@ -1,15 +0,0 @@
|
|
1
|
-
# This file was generated by Appraisal
|
2
|
-
|
3
|
-
source "https://rubygems.org"
|
4
|
-
|
5
|
-
gem "appraisal"
|
6
|
-
gem "coveralls", require: false
|
7
|
-
gem "mysql2", "~> 0.5"
|
8
|
-
gem "nokogiri", "< 1.13"
|
9
|
-
gem "pry", "~> 0.13"
|
10
|
-
gem "pry-byebug", "~> 3.9"
|
11
|
-
gem "rails", "~> 5.2"
|
12
|
-
gem "rake", "~> 13.0"
|
13
|
-
gem "rspec", "~> 3.0"
|
14
|
-
|
15
|
-
gemspec path: "../"
|
@@ -1,18 +0,0 @@
|
|
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,33 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module FiberedMysql2
|
4
|
-
module FiberedMutexWithWaiterPriority
|
5
|
-
# Note: @waiters is a bit confusing because the first waiter is actually the current fiber that has it locked;
|
6
|
-
# the _rest_ of @waiters are the actual waiters
|
7
|
-
def sleep(timeout = nil)
|
8
|
-
unlock
|
9
|
-
beg = Time.now
|
10
|
-
current = Fiber.current
|
11
|
-
@slept[current] = true
|
12
|
-
if timeout
|
13
|
-
timer = EM.add_timer(timeout) do
|
14
|
-
_wakeup(current)
|
15
|
-
end
|
16
|
-
Fiber.yield
|
17
|
-
EM.cancel_timer(timer) # if we resumed not via timer
|
18
|
-
else
|
19
|
-
Fiber.yield
|
20
|
-
end
|
21
|
-
@slept.delete(current)
|
22
|
-
yield if block_given?
|
23
|
-
|
24
|
-
# Invoca patch: inline lock that puts us at the front of the mutex @waiters queue instead of the back
|
25
|
-
# ==========================
|
26
|
-
@waiters.unshift(current)
|
27
|
-
Fiber.yield if @waiters.size > 1
|
28
|
-
# ==========================
|
29
|
-
|
30
|
-
Time.now - beg
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|