sync_machine 1.3.0 → 1.4.0

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: 582b683ceda765fc486ebbe449206c61ad2aceded9e1f0cdc68a023510f4ebbb
4
- data.tar.gz: 4145f8fca67cca0a36dbde2b7302333d0f3da6c8aa56ef0bf00106b49f45f5b6
3
+ metadata.gz: 53bfe80eb63e66b2764f6ccdd57c7d95d9b2b67df13fdcf3d992c9556e5f64c9
4
+ data.tar.gz: ccd13ca9080c464e9d599caa28949cbadb59924b6e94928941d16ea25aee6cd3
5
5
  SHA512:
6
- metadata.gz: 06cbe6d8e456c10ae14466501f7995be45f58b43dcf3b4b51c7cb1f0cbca1888d9eff76d12790ac17867ce551431734348cfdd6c728f44f1316d70482ded446a
7
- data.tar.gz: c188d5bc1baa7c74dd9a4dc947ca8df7cdd41e823ac4577dd46265dc3607d2d79200b8f79985d44c1d9e1e0bf0eb565a507445f98ee99b52ac85eeadc121b064
6
+ metadata.gz: d029ef1220e5a3e5cbe546538b6e79f7dd49e75963adea2b81baf49124e2f3caa4f82338df9184afdba23944afb045953f5cb5c282faad049acc76ec9c993acc
7
+ data.tar.gz: 67d93ffb472622004342343b36c300a80f8a1a28c894fcf8eb9d0c03fd1401c8845b6eda28d9d572f5cbb5ecca76955736ed3a2e559d2c14d37a97a0d71a7e4e
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- sync_machine (1.2.0)
4
+ sync_machine (1.3.0)
5
5
  activesupport
6
6
  sidekiq
7
7
  wisper
@@ -58,11 +58,11 @@ GEM
58
58
  diff-lcs (>= 1.2.0, < 2.0)
59
59
  rspec-support (~> 3.9.0)
60
60
  rspec-support (3.9.0)
61
- sidekiq (5.2.7)
62
- connection_pool (~> 2.2, >= 2.2.2)
63
- rack (>= 1.5.0)
64
- rack-protection (>= 1.5.0)
65
- redis (>= 3.3.5, < 5)
61
+ sidekiq (6.0.3)
62
+ connection_pool (>= 2.2.2)
63
+ rack (>= 2.0.0)
64
+ rack-protection (>= 2.0.0)
65
+ redis (>= 4.1.0)
66
66
  sqlite3 (1.4.1)
67
67
  thread_safe (0.3.6)
68
68
  tzinfo (1.2.5)
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- sync_machine (1.2.0)
4
+ sync_machine (1.3.0)
5
5
  activesupport
6
6
  sidekiq
7
7
  wisper
@@ -6,6 +6,7 @@ require "sync_machine/ensure_publication"
6
6
  require "sync_machine/ensure_publication_worker"
7
7
  require "sync_machine/find_subjects_worker"
8
8
  require "sync_machine/tracer_adapters"
9
+ require "sync_machine/redis_lock"
9
10
  require "sync_machine/orm_adapters"
10
11
  require "sync_machine/version"
11
12
  require "sync_machine/railtie" if defined?(Rails::Railtie)
@@ -13,23 +13,15 @@ module SyncMachine
13
13
  end
14
14
 
15
15
  def dedupe
16
- if acquire_lock
17
- begin
18
- yield unless performed_since_enqueue_time?
19
- ensure
20
- Redis.current.del(redis_lock)
21
- end
22
- else
23
- @job_class.perform_in(1 + rand(10), @subject_id, @enqueue_time_str)
16
+ lock = RedisLock.new("#{@job_class.name}:#{@subject_id}")
17
+ lock.acquire do
18
+ yield unless performed_since_enqueue_time?
24
19
  end
20
+ lock.acquired? || reschedule_job
25
21
  end
26
22
 
27
23
  private
28
24
 
29
- def acquire_lock
30
- Redis.current.set(redis_lock, "true", nx: true, ex: 10.minutes)
31
- end
32
-
33
25
  def enqueue_time
34
26
  @enqueue_time ||= Time.parse(@enqueue_time_str)
35
27
  end
@@ -38,8 +30,8 @@ module SyncMachine
38
30
  @last_job_finished_at && @last_job_finished_at > enqueue_time
39
31
  end
40
32
 
41
- def redis_lock
42
- "#{@job_class.name}:#{@subject_id}"
33
+ def reschedule_job
34
+ @job_class.perform_in(1 + rand(10), @subject_id, @enqueue_time_str)
43
35
  end
44
36
  end
45
37
  end
@@ -0,0 +1,31 @@
1
+ module SyncMachine
2
+ # General-purpose class for locking via Redis.
3
+ class RedisLock
4
+ def initialize(redis_key)
5
+ @redis_key = redis_key
6
+ @acquired = false
7
+ end
8
+
9
+ def acquire(&block)
10
+ yield_and_release(block) if set_redis_key
11
+ end
12
+
13
+ def acquired?
14
+ @acquired
15
+ end
16
+
17
+ private
18
+
19
+ def set_redis_key
20
+ @acquired = Redis.current.set(
21
+ @redis_key, "true", nx: true, ex: 10.minutes
22
+ )
23
+ end
24
+
25
+ def yield_and_release(block)
26
+ block.call
27
+ ensure
28
+ Redis.current.del(@redis_key)
29
+ end
30
+ end
31
+ end
@@ -1,3 +1,3 @@
1
1
  module SyncMachine
2
- VERSION = "1.3.0".freeze
2
+ VERSION = "1.4.0".freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sync_machine
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.0
4
+ version: 1.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Francis Hwang
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-12-05 00:00:00.000000000 Z
11
+ date: 2019-12-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -268,6 +268,7 @@ files:
268
268
  - lib/sync_machine/orm_adapters/active_record_adapter.rb
269
269
  - lib/sync_machine/orm_adapters/mongoid_adapter.rb
270
270
  - lib/sync_machine/railtie.rb
271
+ - lib/sync_machine/redis_lock.rb
271
272
  - lib/sync_machine/tracer_adapters.rb
272
273
  - lib/sync_machine/tracer_adapters/open_tracing_adapter.rb
273
274
  - lib/sync_machine/version.rb