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:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 53bfe80eb63e66b2764f6ccdd57c7d95d9b2b67df13fdcf3d992c9556e5f64c9
|
4
|
+
data.tar.gz: ccd13ca9080c464e9d599caa28949cbadb59924b6e94928941d16ea25aee6cd3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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.
|
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 (
|
62
|
-
connection_pool (
|
63
|
-
rack (>=
|
64
|
-
rack-protection (>=
|
65
|
-
redis (>=
|
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)
|
data/Gemfile.mongoid7.lock
CHANGED
data/lib/sync_machine.rb
CHANGED
@@ -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
|
-
|
17
|
-
|
18
|
-
|
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
|
42
|
-
|
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
|
data/lib/sync_machine/version.rb
CHANGED
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.
|
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-
|
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
|