cloudtasker 0.4.0 → 0.5.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: ee3cee90fe26e9033c26c27587088d54e7f85b36ef140aba67dc8101a62d4e84
4
- data.tar.gz: b45465ca894e1d08066be61e27d88ab416ddd97fa43e5f66e54f13c46c552fca
3
+ metadata.gz: 2fa7ae9744ddccc745bae1202b99e3891f9ba1035fe26eec3663cfa705ae22e1
4
+ data.tar.gz: 92d090b796b74c09803ccb4e7cf9468f230b9aeb5df51eb8c630b677988a49b4
5
5
  SHA512:
6
- metadata.gz: 9fa0e12e261db01f22bc3f7402b54d25e077b2297e74ccf838cdb0e856bb1ab318c1496651435d6354ce5cd0475af667f0a5a05f0265c0bd35a3101d3d9b21c5
7
- data.tar.gz: 8313cb19a743b8d6dd651e5d1e6ef7f733ac453537e01623371360d0003a3f86536f6053a249e1b832e055596b34b8b8423d505770d289305c3b4c57971b0c6e
6
+ metadata.gz: 7284aa0d993977e53c40d9ecdcc05cca8a0448a32f1189a5f50e38afc538581eac491c47443f0b9c39c0bd0288ce5d6693da0ae07efb8eee93a447276da6e656
7
+ data.tar.gz: 256a041b899f4a4b1e52f8d5ded83fc4bc370fd7ead98873658f60e107d60cf45c7817d019f13565d4cbd8bb2a0b58ce0a78db2aaaf7de023a37c299103c6a0b
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- cloudtasker (0.4.0)
4
+ cloudtasker (0.5.0)
5
5
  activesupport
6
6
  fugit
7
7
  google-cloud-tasks
@@ -7,7 +7,8 @@ module Cloudtasker
7
7
  attr_reader :worker
8
8
 
9
9
  # Key Namespace used for object saved under this class
10
- SUB_NAMESPACE = 'job'
10
+ JOBS_NAMESPACE = 'jobs'
11
+ STATES_NAMESPACE = 'states'
11
12
 
12
13
  # List of statuses triggering a completion callback
13
14
  COMPLETION_STATUSES = %w[completed dead].freeze
@@ -32,7 +33,7 @@ module Cloudtasker
32
33
  return nil unless worker_id
33
34
 
34
35
  # Retrieve related worker
35
- payload = redis.fetch(key(worker_id))
36
+ payload = redis.fetch(key("#{JOBS_NAMESPACE}/#{worker_id}"))
36
37
  worker = Cloudtasker::Worker.from_hash(payload)
37
38
  return nil unless worker
38
39
 
@@ -140,7 +141,7 @@ module Cloudtasker
140
141
  # @return [String] The worker namespaced id.
141
142
  #
142
143
  def batch_gid
143
- key(batch_id)
144
+ key("#{JOBS_NAMESPACE}/#{batch_id}")
144
145
  end
145
146
 
146
147
  #
@@ -149,7 +150,7 @@ module Cloudtasker
149
150
  # @return [String] The batch state namespaced id.
150
151
  #
151
152
  def batch_state_gid
152
- [batch_gid, 'state'].join('/')
153
+ key("#{STATES_NAMESPACE}/#{batch_id}")
153
154
  end
154
155
 
155
156
  #
@@ -371,7 +372,7 @@ module Cloudtasker
371
372
  setup
372
373
 
373
374
  # Complete batch
374
- complete(:success)
375
+ complete(:completed)
375
376
  rescue DeadWorkerError => e
376
377
  complete(:dead)
377
378
  raise(e)
@@ -72,8 +72,10 @@ module Cloudtasker
72
72
  # @return [Cloudtasker::Cron::Schedule] The schedule instance.
73
73
  #
74
74
  def self.create(**opts)
75
- config = find(opts[:id]).to_h.merge(opts)
76
- new(config).tap(&:save)
75
+ redis.with_lock(key(opts[:id])) do
76
+ config = find(opts[:id]).to_h.merge(opts)
77
+ new(config).tap(&:save)
78
+ end
77
79
  end
78
80
 
79
81
  #
@@ -95,12 +97,14 @@ module Cloudtasker
95
97
  # @param [String] id The schedule id.
96
98
  #
97
99
  def self.delete(id)
98
- schedule = find(id)
99
- return false unless schedule
100
+ redis.with_lock(key(id)) do
101
+ schedule = find(id)
102
+ return false unless schedule
100
103
 
101
- # Delete task and stored schedule
102
- CloudTask.delete(schedule.task_id) if schedule.task_id
103
- redis.del(schedule.gid)
104
+ # Delete task and stored schedule
105
+ CloudTask.delete(schedule.task_id) if schedule.task_id
106
+ redis.del(schedule.gid)
107
+ end
104
108
  end
105
109
 
106
110
  #
@@ -8,7 +8,7 @@ module Cloudtasker
8
8
  module_function
9
9
 
10
10
  # Suffix added to cache keys when locking them
11
- LOCK_KEY_SUFFIX = 'lock'
11
+ LOCK_KEY_PREFIX = 'cloudtasker/lock'
12
12
 
13
13
  #
14
14
  # Return the underlying redis client.
@@ -61,7 +61,7 @@ module Cloudtasker
61
61
  return nil unless cache_key
62
62
 
63
63
  # Wait to acquire lock
64
- lock_key = [cache_key, LOCK_KEY_SUFFIX].join('/')
64
+ lock_key = [LOCK_KEY_PREFIX, cache_key].join('/')
65
65
  true until client.setnx(lock_key, true)
66
66
 
67
67
  # yield content
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Cloudtasker
4
- VERSION = '0.4.0'
4
+ VERSION = '0.5.0'
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cloudtasker
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Arnaud Lachaume