umbrellio-sequel-plugins 0.13.0.172 → 0.13.0.185
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +1 -0
- data/Gemfile.lock +13 -1
- data/README.md +42 -18
- data/lib/sequel/extensions/fibered_connection_pool.rb +90 -0
- data/utils/database.rb +1 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2e73343a56718daadf888b113d611970815cd0061776219e1d119cfedd899a0a
|
4
|
+
data.tar.gz: 80b5c588f80b8ffdc7cb72e4f53551db1e63833e50158a0370927b92b535aa41
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ce4bb7cd35a3c372738cffea7320cc87b70cb5228b3b9f372d126dab7ea5be0878c8d27a02d7f662b310766b141887831bc4c2da5d561900c9eae2625a3dc2ab
|
7
|
+
data.tar.gz: 39c5ddb279c2985caa8dec93bd9ac92c4ffbb68f49d184eacfa7ad0f8a23e3012ee4828ae9609965d5d10fb4a2aaf695c65094867d6265b6bc8e23eb70c955ec
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -14,10 +14,19 @@ GEM
|
|
14
14
|
minitest (>= 5.1)
|
15
15
|
tzinfo (~> 2.0)
|
16
16
|
ast (2.4.2)
|
17
|
+
async (1.31.0)
|
18
|
+
console (~> 1.10)
|
19
|
+
nio4r (~> 2.3)
|
20
|
+
timers (~> 4.1)
|
17
21
|
coderay (1.1.3)
|
18
22
|
concurrent-ruby (1.2.2)
|
23
|
+
console (1.17.2)
|
24
|
+
fiber-annotation
|
25
|
+
fiber-local
|
19
26
|
diff-lcs (1.5.0)
|
20
27
|
docile (1.4.0)
|
28
|
+
fiber-annotation (0.2.0)
|
29
|
+
fiber-local (1.0.0)
|
21
30
|
i18n (1.14.1)
|
22
31
|
concurrent-ruby (~> 1.0)
|
23
32
|
json (2.6.3)
|
@@ -25,6 +34,7 @@ GEM
|
|
25
34
|
minitest (5.18.1)
|
26
35
|
money (6.16.0)
|
27
36
|
i18n (>= 0.6.4, <= 2)
|
37
|
+
nio4r (2.5.9)
|
28
38
|
parallel (1.23.0)
|
29
39
|
parser (3.2.2.3)
|
30
40
|
ast (~> 2.4.1)
|
@@ -48,7 +58,7 @@ GEM
|
|
48
58
|
rspec-expectations (3.12.3)
|
49
59
|
diff-lcs (>= 1.2.0, < 2.0)
|
50
60
|
rspec-support (~> 3.12.0)
|
51
|
-
rspec-mocks (3.12.
|
61
|
+
rspec-mocks (3.12.6)
|
52
62
|
diff-lcs (>= 1.2.0, < 2.0)
|
53
63
|
rspec-support (~> 3.12.0)
|
54
64
|
rspec-support (3.12.1)
|
@@ -97,6 +107,7 @@ GEM
|
|
97
107
|
simplecov-lcov (0.8.0)
|
98
108
|
simplecov_json_formatter (0.1.4)
|
99
109
|
symbiont-ruby (0.7.0)
|
110
|
+
timers (4.3.5)
|
100
111
|
tzinfo (2.0.6)
|
101
112
|
concurrent-ruby (~> 1.0)
|
102
113
|
unicode-display_width (2.4.2)
|
@@ -105,6 +116,7 @@ PLATFORMS
|
|
105
116
|
ruby
|
106
117
|
|
107
118
|
DEPENDENCIES
|
119
|
+
async (= 1.31.0)
|
108
120
|
money
|
109
121
|
pg
|
110
122
|
pry
|
data/README.md
CHANGED
@@ -17,29 +17,30 @@ $ bundle
|
|
17
17
|
|
18
18
|
# Extensions
|
19
19
|
|
20
|
-
- [`CurrencyRates`](#
|
21
|
-
- [`PGTools`](#
|
22
|
-
- [`Slave`](#
|
23
|
-
- [`Synchronize`](#
|
24
|
-
- [`Methods in Migrations`](#
|
25
|
-
- [`Deferrable Foreign Keys`](#
|
26
|
-
- [`Set Local`](#
|
27
|
-
- [`Migration Transaction Options`](#
|
20
|
+
- [`CurrencyRates`](#currencyrates)
|
21
|
+
- [`PGTools`](#pgtools)
|
22
|
+
- [`Slave`](#slave)
|
23
|
+
- [`Synchronize`](#synchronize)
|
24
|
+
- [`Methods in Migrations`](#methods-in-migrations)
|
25
|
+
- [`Deferrable Foreign Keys`](#deferrable-foreign-keys)
|
26
|
+
- [`Set Local`](#set-local)
|
27
|
+
- [`Migration Transaction Options`](#migration-transaction-options)
|
28
|
+
- [`Fibered Connection Pool`](#fibered-connection-pool)
|
28
29
|
|
29
30
|
# Plugins
|
30
31
|
|
31
|
-
- [`AttrEncrypted`](#
|
32
|
-
- [`Duplicate`](#
|
33
|
-
- [`GetColumnValue`](#
|
34
|
-
- [`MoneyAccessors`](#
|
35
|
-
- [`StoreAccessors`](#
|
36
|
-
- [`Synchronize`](#
|
37
|
-
- [`Upsert`](#
|
38
|
-
- [`WithLock`](#
|
32
|
+
- [`AttrEncrypted`](#attrencrypted)
|
33
|
+
- [`Duplicate`](#duplicate)
|
34
|
+
- [`GetColumnValue`](#getcolumnvalue)
|
35
|
+
- [`MoneyAccessors`](#moneyaccessors)
|
36
|
+
- [`StoreAccessors`](#storeaccessors)
|
37
|
+
- [`Synchronize`](#synchronize)
|
38
|
+
- [`Upsert`](#upsert)
|
39
|
+
- [`WithLock`](#withlock)
|
39
40
|
|
40
41
|
# Tools
|
41
|
-
- [`TimestampMigratorUndoExtension`](#
|
42
|
-
- [`Rails DBConsole`](#
|
42
|
+
- [`TimestampMigratorUndoExtension`](#timestampmigratorundoextension)
|
43
|
+
- [`Rails DBConsole`](#rails-dbconsole)
|
43
44
|
|
44
45
|
## CurrencyRates
|
45
46
|
|
@@ -248,6 +249,29 @@ SELECT '1';
|
|
248
249
|
ROLLBACK;
|
249
250
|
```
|
250
251
|
|
252
|
+
## Fibered Connection Pool
|
253
|
+
|
254
|
+
Sequel connection pool for fiber powered web servers or applications
|
255
|
+
(e.g. [falcon](https://github.com/socketry/falcon), [async](https://github.com/socketry/async))
|
256
|
+
|
257
|
+
Runtime dependency: [async](https://github.com/socketry/async)
|
258
|
+
|
259
|
+
You need to make sure that command `require "async"` works for your project.
|
260
|
+
|
261
|
+
The main difference from default `Sequel::ThreadedConnectionPool` that you can skip max_connections
|
262
|
+
configuration to produce as much connection as your application neeeded.
|
263
|
+
|
264
|
+
Also there is no any thead-safe code with synchronize and etc. So this connection pool works much
|
265
|
+
faster.
|
266
|
+
|
267
|
+
Enable:
|
268
|
+
|
269
|
+
Put this code before your application connects to database
|
270
|
+
```ruby
|
271
|
+
Sequel.extension(:fiber_concurrency) # Default Sequel extension for fiber isolation level
|
272
|
+
Sequel.extension(:fibered_connection_pool)
|
273
|
+
```
|
274
|
+
|
251
275
|
## AttrEncrypted
|
252
276
|
|
253
277
|
Enable: `Sequel::Model.plugin :attr_encrypted`
|
@@ -0,0 +1,90 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "async"
|
4
|
+
require "async/notification"
|
5
|
+
|
6
|
+
class Sequel::FiberedConnectionPool < Sequel::ConnectionPool
|
7
|
+
def initialize(db, opts = Sequel::OPTS)
|
8
|
+
super(db, opts)
|
9
|
+
|
10
|
+
@max_connections = opts[:max_connections]
|
11
|
+
@available_connections = []
|
12
|
+
@notification = Async::Notification.new
|
13
|
+
@size = 0
|
14
|
+
end
|
15
|
+
|
16
|
+
def hold(*)
|
17
|
+
connection = wait_for_connection
|
18
|
+
return connection unless block_given?
|
19
|
+
|
20
|
+
begin
|
21
|
+
yield connection
|
22
|
+
rescue Sequel::DatabaseDisconnectError, *@error_classes => error
|
23
|
+
if disconnect_error?(error)
|
24
|
+
disconnect_connection(connection)
|
25
|
+
connection = nil
|
26
|
+
@size -= 1
|
27
|
+
end
|
28
|
+
raise
|
29
|
+
ensure
|
30
|
+
if connection
|
31
|
+
@available_connections.push(connection)
|
32
|
+
@notification.signal if Async::Task.current?
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def disconnect(*)
|
38
|
+
@available_connections.each(&:close)
|
39
|
+
@available_connections.clear
|
40
|
+
|
41
|
+
@size = 0
|
42
|
+
end
|
43
|
+
|
44
|
+
def size
|
45
|
+
@size
|
46
|
+
end
|
47
|
+
|
48
|
+
private
|
49
|
+
|
50
|
+
def wait_for_connection
|
51
|
+
until (connection = find_or_create_connection)
|
52
|
+
@notification.wait
|
53
|
+
end
|
54
|
+
|
55
|
+
connection
|
56
|
+
end
|
57
|
+
|
58
|
+
def find_or_create_connection
|
59
|
+
if (connection = @available_connections.shift)
|
60
|
+
return connection
|
61
|
+
end
|
62
|
+
|
63
|
+
if @max_connections.nil? || @size < @max_connections
|
64
|
+
connection = make_new(:default)
|
65
|
+
@size += 1
|
66
|
+
|
67
|
+
return connection
|
68
|
+
end
|
69
|
+
|
70
|
+
nil
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
module Sequel::ConnectionPoolPatch
|
75
|
+
def connection_pool_class(*)
|
76
|
+
Sequel.current.is_a?(Fiber) ? Sequel::FiberedConnectionPool : super
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
# NOTE: Ruby 2.7 DOES NOT SUPPORT class methods prepend in this way
|
81
|
+
# https://bugs.ruby-lang.org/issues/17423
|
82
|
+
if RUBY_VERSION > "3"
|
83
|
+
Sequel::ConnectionPool::ClassMethods.prepend(Sequel::ConnectionPoolPatch)
|
84
|
+
else
|
85
|
+
class Sequel::ConnectionPool
|
86
|
+
class << self
|
87
|
+
prepend Sequel::ConnectionPoolPatch
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
data/utils/database.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: umbrellio-sequel-plugins
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.13.0.
|
4
|
+
version: 0.13.0.185
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Team Umbrellio
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-07-
|
11
|
+
date: 2023-07-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: sequel
|
@@ -59,6 +59,7 @@ files:
|
|
59
59
|
- bin/setup
|
60
60
|
- lib/sequel/extensions/currency_rates.rb
|
61
61
|
- lib/sequel/extensions/deferrable_foreign_keys.rb
|
62
|
+
- lib/sequel/extensions/fibered_connection_pool.rb
|
62
63
|
- lib/sequel/extensions/methods_in_migrations.rb
|
63
64
|
- lib/sequel/extensions/migration_transaction_options.rb
|
64
65
|
- lib/sequel/extensions/pg_tools.rb
|