cloudtasker 0.4.0 → 0.5.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: 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