coil 1.5.3 → 1.5.5
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 +8 -0
- data/lib/coil/queue_locking.rb +7 -7
- data/lib/coil/version.rb +1 -1
- data/lib/coil.rb +1 -0
- data/rbi/coil.rbi +10 -12
- metadata +13 -13
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4e06deca7bbca4aaeb692c3b438da2fd668f709d1f7e4a2abbb0caae7edc2aba
|
4
|
+
data.tar.gz: 5a629055bfc265a3162b25744dfe78efb5910f1f609c13c912f897e862c00fc8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: da9af31450e4132693a7d9a514892fedaa6f66df725cc23c9b667038d3dfc15688524ce530d10cf4cdaf9d5ce1fa8e5fdbd6e003fa0ff0a894d16df673d13139
|
7
|
+
data.tar.gz: ec35ff6c3ecc9a18739e15adf93822ad103043cc8bdfb213f2c7c0e767b1364cef180fe572586e79414d4eec481680ea70b014ad6e403ff343ff686ec4c1255c
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,13 @@
|
|
1
1
|
## main
|
2
2
|
|
3
|
+
## [1.5.5](https://github.com/OdekoTeam/coil/compare/1.5.4...1.5.5) (2025-03-24)
|
4
|
+
#### Added
|
5
|
+
- Rails 8 support ([bcc6885](https://github.com/OdekoTeam/coil/commit/bcc6885bdbe3a7dedbc505edee0482d215fe9d91))
|
6
|
+
|
7
|
+
## [1.5.4](https://github.com/OdekoTeam/coil/compare/1.5.3...1.5.4) (2025-03-24)
|
8
|
+
#### Added
|
9
|
+
- Rails 7.2 support ([be1cdc4](https://github.com/OdekoTeam/coil/commit/be1cdc4bde1fb73d1ac24f3b786a1d58a748d87f))
|
10
|
+
|
3
11
|
## [1.5.3](https://github.com/OdekoTeam/coil/compare/1.5.2...1.5.3) (2025-03-24)
|
4
12
|
#### Added
|
5
13
|
- Ruby 3.2 and 3.3 support ([a4ceb7c](https://github.com/OdekoTeam/coil/commit/a4ceb7cf2cefc47ae3c14a876a0782aaec0e5c43))
|
data/lib/coil/queue_locking.rb
CHANGED
@@ -60,8 +60,9 @@ module Coil
|
|
60
60
|
ks = keys.uniq(&:int64).sort_by(&:int64).reverse
|
61
61
|
|
62
62
|
fn = ks.reduce(blk) do |f, key|
|
63
|
-
-> do
|
64
|
-
|
63
|
+
->(*args) do
|
64
|
+
lock(key:, wait:)
|
65
|
+
f.call(*args)
|
65
66
|
end
|
66
67
|
end
|
67
68
|
|
@@ -70,22 +71,21 @@ module Coil
|
|
70
71
|
|
71
72
|
private
|
72
73
|
|
73
|
-
def
|
74
|
-
wait ?
|
75
|
-
blk.call
|
74
|
+
def lock(key:, wait:)
|
75
|
+
wait ? acquire_lock(key:) : try_acquire_lock(key:)
|
76
76
|
end
|
77
77
|
|
78
78
|
ACQUIRE_LOCK = "pg_advisory_xact_lock"
|
79
79
|
TRY_ACQUIRE_LOCK = "pg_try_advisory_xact_lock"
|
80
80
|
|
81
|
-
def
|
81
|
+
def acquire_lock(key:)
|
82
82
|
command = sql(fn: ACQUIRE_LOCK, key:)
|
83
83
|
connection.execute(command)
|
84
84
|
rescue ActiveRecord::LockWaitTimeout
|
85
85
|
raise LockWaitTimeout
|
86
86
|
end
|
87
87
|
|
88
|
-
def
|
88
|
+
def try_acquire_lock(key:)
|
89
89
|
query = sql(fn: TRY_ACQUIRE_LOCK, key:)
|
90
90
|
return if connection.select_value(query)
|
91
91
|
raise LockWaitTimeout
|
data/lib/coil/version.rb
CHANGED
data/lib/coil.rb
CHANGED
data/rbi/coil.rbi
CHANGED
@@ -187,7 +187,12 @@ module Coil::QueueLocking
|
|
187
187
|
message_type: String,
|
188
188
|
message_keys: T::Array[T.untyped],
|
189
189
|
wait: T::Boolean,
|
190
|
-
blk: T.
|
190
|
+
blk: T.any(
|
191
|
+
# ActiveRecord versions 7.2 and newer yield a transaction as the block arg.
|
192
|
+
T.proc.params(arg0: ActiveRecord::Transaction).returns(T.type_parameter(:P)),
|
193
|
+
# Earlier versions yield to the block with no args.
|
194
|
+
T.proc.returns(T.type_parameter(:P))
|
195
|
+
)
|
191
196
|
).returns(T.type_parameter(:P))
|
192
197
|
end
|
193
198
|
def locking(queue_type:, message_type:, message_keys:, wait: T.unsafe(nil), &blk); end
|
@@ -198,23 +203,16 @@ module Coil::QueueLocking
|
|
198
203
|
def connection; end
|
199
204
|
|
200
205
|
sig { params(key: Key).void }
|
201
|
-
def
|
206
|
+
def acquire_lock(key:); end
|
202
207
|
|
203
208
|
sig { params(fn: String, key: Key).returns(String) }
|
204
209
|
def sql(fn:, key:); end
|
205
210
|
|
206
211
|
sig { params(key: Key).void }
|
207
|
-
def
|
212
|
+
def try_acquire_lock(key:); end
|
208
213
|
|
209
|
-
sig
|
210
|
-
|
211
|
-
.params(
|
212
|
-
key: Key,
|
213
|
-
wait: T::Boolean,
|
214
|
-
blk: T.proc.returns(T.type_parameter(:P))
|
215
|
-
).returns(T.type_parameter(:P))
|
216
|
-
end
|
217
|
-
def with_lock(key:, wait:, &blk); end
|
214
|
+
sig { params(key: Key, wait: T::Boolean).void }
|
215
|
+
def lock(key:, wait:); end
|
218
216
|
end
|
219
217
|
|
220
218
|
Coil::QueueLocking::ACQUIRE_LOCK = T.let(T.unsafe(nil), String)
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: coil
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.5.
|
4
|
+
version: 1.5.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ivan Brennan
|
@@ -20,7 +20,7 @@ dependencies:
|
|
20
20
|
version: 6.0.6
|
21
21
|
- - "<"
|
22
22
|
- !ruby/object:Gem::Version
|
23
|
-
version: '
|
23
|
+
version: '9.0'
|
24
24
|
type: :runtime
|
25
25
|
prerelease: false
|
26
26
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -30,7 +30,7 @@ dependencies:
|
|
30
30
|
version: 6.0.6
|
31
31
|
- - "<"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
33
|
+
version: '9.0'
|
34
34
|
- !ruby/object:Gem::Dependency
|
35
35
|
name: sidekiq
|
36
36
|
requirement: !ruby/object:Gem::Requirement
|
@@ -75,22 +75,22 @@ dependencies:
|
|
75
75
|
name: rails
|
76
76
|
requirement: !ruby/object:Gem::Requirement
|
77
77
|
requirements:
|
78
|
-
- - "
|
78
|
+
- - "~>"
|
79
79
|
- !ruby/object:Gem::Version
|
80
|
-
version:
|
80
|
+
version: '8.0'
|
81
81
|
- - "<"
|
82
82
|
- !ruby/object:Gem::Version
|
83
|
-
version: '
|
83
|
+
version: '9.0'
|
84
84
|
type: :development
|
85
85
|
prerelease: false
|
86
86
|
version_requirements: !ruby/object:Gem::Requirement
|
87
87
|
requirements:
|
88
|
-
- - "
|
88
|
+
- - "~>"
|
89
89
|
- !ruby/object:Gem::Version
|
90
|
-
version:
|
90
|
+
version: '8.0'
|
91
91
|
- - "<"
|
92
92
|
- !ruby/object:Gem::Version
|
93
|
-
version: '
|
93
|
+
version: '9.0'
|
94
94
|
- !ruby/object:Gem::Dependency
|
95
95
|
name: sidekiq
|
96
96
|
requirement: !ruby/object:Gem::Requirement
|
@@ -179,14 +179,14 @@ dependencies:
|
|
179
179
|
requirements:
|
180
180
|
- - "~>"
|
181
181
|
- !ruby/object:Gem::Version
|
182
|
-
version: '0.
|
182
|
+
version: '0.9'
|
183
183
|
type: :development
|
184
184
|
prerelease: false
|
185
185
|
version_requirements: !ruby/object:Gem::Requirement
|
186
186
|
requirements:
|
187
187
|
- - "~>"
|
188
188
|
- !ruby/object:Gem::Version
|
189
|
-
version: '0.
|
189
|
+
version: '0.9'
|
190
190
|
- !ruby/object:Gem::Dependency
|
191
191
|
name: debug
|
192
192
|
requirement: !ruby/object:Gem::Requirement
|
@@ -221,14 +221,14 @@ dependencies:
|
|
221
221
|
requirements:
|
222
222
|
- - "~>"
|
223
223
|
- !ruby/object:Gem::Version
|
224
|
-
version: '0.
|
224
|
+
version: '0.16'
|
225
225
|
type: :development
|
226
226
|
prerelease: false
|
227
227
|
version_requirements: !ruby/object:Gem::Requirement
|
228
228
|
requirements:
|
229
229
|
- - "~>"
|
230
230
|
- !ruby/object:Gem::Version
|
231
|
-
version: '0.
|
231
|
+
version: '0.16'
|
232
232
|
- !ruby/object:Gem::Dependency
|
233
233
|
name: parlour
|
234
234
|
requirement: !ruby/object:Gem::Requirement
|