sync_machine 1.3.0 → 1.4.0

Sign up to get free protection for your applications and to get access to all the features.
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