specwrk-store-redis_adapter 0.0.3 → 0.0.4

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5b53937122c80fdbbb0dc3fc53316b7626e712b582082b50eac68d4bdf75d37f
4
- data.tar.gz: 3d1ea9b242ad223c8e9f4186ef1b88bad5ee50d97bab382de4712ffdc36d355f
3
+ metadata.gz: 1d04547dbffe8b9129a823f463c65ecf55a5e546d98df580f0b31cfa00be6e49
4
+ data.tar.gz: acdd63b88bd20fbd00630c672b8636576df932bb8a5e21556638628b4f4e7e6f
5
5
  SHA512:
6
- metadata.gz: 370012160a8f0a0de2b52c820fb6eb02dd51afaad589980dd297396d348aa16c035cf728ebfa5cd0aa8071401ce254ccd05e0bce1de5ea85d098ee42469b01b9
7
- data.tar.gz: 36cff8ca197aab39a0a74e00f9d136497fd210f2a098ef0d885c29b21fdd5bb3d857adc6586ffdce9726c2eec8a792ad757bd9a6afa2508a63b2f534d5e15438
6
+ metadata.gz: 1a3a323c1d16651cbf4880e35deeae665db6df0aaf88d454a16417a6ea8f076dde4ee3a593a3fc4567e42421343ec313537dd4cc66baf35b6677a81642af8924
7
+ data.tar.gz: 7bc076bd89ae1993d58155efbec15b17130e2c689102d10e2b0ce670d61e752f46086b150aa2b6883bc019d1c886e2ac0b12edb5a210d8ecd26f39209bd94a7d
data/docker-compose.yml CHANGED
@@ -1,6 +1,6 @@
1
1
  version: '3'
2
2
  services:
3
3
  redis:
4
- image: redis:4.0
4
+ image: redis:6.0
5
5
  ports:
6
6
  - "0.0.0.0:6379:6379"
@@ -1,16 +1,14 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require "json"
4
+ require "securerandom"
4
5
 
5
6
  require "specwrk/store/base_adapter"
6
7
  require "redis-client"
7
- require "redlock"
8
8
 
9
9
  module Specwrk
10
10
  class Store
11
11
  class RedisAdapter < Specwrk::Store::BaseAdapter
12
- VERSION = "0.1.0"
13
-
14
12
  REDIS_KEY_DELIMITER = "||||"
15
13
 
16
14
  @connection_pools = {}
@@ -19,18 +17,22 @@ module Specwrk
19
17
  class << self
20
18
  def with_lock(uri, key)
21
19
  connection_pool_for(uri).with do |connection|
22
- client = Redlock::Client.new(
23
- [connection],
24
- retry_count: lock_retry_count,
25
- retry_delay: lock_retry_delay,
26
- retry_jitter: lock_retry_jitter
27
- )
28
-
29
- until (lock = client.lock("specwrk-lock-#{key}", lock_ttl))
30
- sleep(rand(0.001..0.09))
20
+ id = SecureRandom.uuid
21
+ queue = "specwrk-lock-#{key}"
22
+ connection.pipelined do |pipeline|
23
+ pipeline.call("RPUSH", queue, id)
24
+ pipeline.call("EXPIRE", queue, 10) # only set if no expireat already
31
25
  end
32
26
 
33
- yield.tap { client.unlock(lock) }
27
+ # wait for our id to be first in line or the queue to expire
28
+ sleep(rand(0.001..0.012)) until [id, nil].include? connection.call("LINDEX", queue, 0)
29
+
30
+ yield
31
+ ensure
32
+ connection.pipelined do |pipeline|
33
+ pipeline.call("LPOP", queue)
34
+ pipeline.call("EXPIRE", queue, 10) # keeps the queue fresh when things are moving
35
+ end
34
36
  end
35
37
  end
36
38
 
@@ -47,26 +49,6 @@ module Specwrk
47
49
  def reset_connections!
48
50
  @connection_pools.clear
49
51
  end
50
-
51
- private
52
-
53
- # In ms
54
- def lock_ttl
55
- ENV.fetch("SPECWRK_REDIS_ADAPTER_LOCK_TTL", "5000").to_i
56
- end
57
-
58
- # See https://www.rubydoc.info/gems/redlock/Redlock/Client#initialize-instance_method
59
- def lock_retry_count
60
- ENV.fetch("SPECWRK_REDIS_ADAPTER_LOCK_RETRY_COUNT", "3").to_i
61
- end
62
-
63
- def lock_retry_delay
64
- ENV.fetch("SPECWRK_REDIS_ADAPTER_LOCK_RETRY_DELAY", "100").to_i
65
- end
66
-
67
- def lock_retry_jitter
68
- ENV.fetch("SPECWRK_REDIS_ADAPTER_LOCK_RETRY_JITTER", "10").to_i
69
- end
70
52
  end
71
53
 
72
54
  def [](key)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: specwrk-store-redis_adapter
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daniel Westendorf
@@ -37,20 +37,6 @@ dependencies:
37
37
  - - ">="
38
38
  - !ruby/object:Gem::Version
39
39
  version: '0'
40
- - !ruby/object:Gem::Dependency
41
- name: redlock
42
- requirement: !ruby/object:Gem::Requirement
43
- requirements:
44
- - - ">="
45
- - !ruby/object:Gem::Version
46
- version: '0'
47
- type: :runtime
48
- prerelease: false
49
- version_requirements: !ruby/object:Gem::Requirement
50
- requirements:
51
- - - ">="
52
- - !ruby/object:Gem::Version
53
- version: '0'
54
40
  - !ruby/object:Gem::Dependency
55
41
  name: standard
56
42
  requirement: !ruby/object:Gem::Requirement