async-job 0.4.1 → 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: 13125e0c65021d568d1ed83871e95a29cbe344e1f10d1f5029545beb1e8c6552
4
- data.tar.gz: 3797aa279800f12263a9fa9d9eb120b5e30efbe601a62ea4193ecd1f1c87eb80
3
+ metadata.gz: f0c2495e88bb7e1dd1636fd03290813e4d9ca0837157d9e6b145cb098e68a616
4
+ data.tar.gz: 0e050ec503af7ac00c620bf822358a794dfa12c71d829850df2d668d09d9830e
5
5
  SHA512:
6
- metadata.gz: aab8b5f3f3e7d0c02c270793ad841640e528a4a578ac4701ceedccd72f0af5a3d5434f7d7d8b451c0148c66da77e484e297f6d5ecdef52fb9daeb71d1c2fc474
7
- data.tar.gz: 192c52029bee55da95bf971ac2c7f6ef4a8447bef57f6601486b524a850b7d91d5713afb86bd5c88d6bd7ff18463724b33d4c3ecb021c0b95da91ff8e97f93c8
6
+ metadata.gz: 863fe9d09f5afacaf38e912d31cbaab011b019b7b3737f0fa21f196a4fb0b76f4b3da2169178ce1c20576b26cae8e98469707e2c3fbf01826670aa2638794524
7
+ data.tar.gz: cfffcc7dc08d90a95109247341a0728e920305a2ebc55b3fe568970a674fe654c7aa7033ff12a6d4c0461ac0baf5057dfc0ee9bfc0816ae9f2e43397cb722195
checksums.yaml.gz.sig CHANGED
Binary file
@@ -5,24 +5,29 @@
5
5
 
6
6
  require_relative '../../coder'
7
7
 
8
+ require 'async/idler'
9
+
8
10
  module Async
9
11
  module Job
10
12
  module Backend
11
13
  module Inline
12
14
  class Server
13
- def initialize(delegate)
15
+ def initialize(delegate, parent: nil)
14
16
  @delegate = delegate
17
+ @parent = parent || Async::Idler.new
15
18
  end
16
19
 
17
20
  def call(job)
18
21
  scheduled_at = Coder::Time(job["scheduled_at"])
19
22
 
20
- Async do
23
+ @parent.async do
21
24
  if scheduled_at
22
25
  sleep(scheduled_at - Time.now)
23
26
  end
24
27
 
25
28
  @delegate.call(job)
29
+ rescue => error
30
+ Console.error(self, error)
26
31
  end
27
32
  end
28
33
  end
@@ -73,7 +73,7 @@ module Async
73
73
  end
74
74
 
75
75
  def complete(id)
76
- Console.info(self, "Completing job: #{id}")
76
+ # Console.debug(self, "Completing job: #{id}")
77
77
  @client.evalsha(@complete, 2, @pending_key, @job_store.key, id)
78
78
  end
79
79
 
@@ -7,16 +7,17 @@ require_relative 'delayed_queue'
7
7
  require_relative 'job_store'
8
8
  require_relative 'processing_queue'
9
9
  require_relative 'ready_queue'
10
+ require_relative '../../coder'
10
11
 
11
12
  require 'securerandom'
12
- require_relative '../../coder'
13
+ require 'async/idler'
13
14
 
14
15
  module Async
15
16
  module Job
16
17
  module Backend
17
18
  module Redis
18
19
  class Server
19
- def initialize(delegate, client, prefix: 'async-job', coder: Coder::DEFAULT, resolution: 10)
20
+ def initialize(delegate, client, prefix: 'async-job', coder: Coder::DEFAULT, resolution: 10, parent: nil)
20
21
  @delegate = delegate
21
22
 
22
23
  @id = SecureRandom.uuid
@@ -31,6 +32,8 @@ module Async
31
32
  @ready_queue = ReadyQueue.new(@client, "#{@prefix}:ready")
32
33
 
33
34
  @processing_queue = ProcessingQueue.new(@client, "#{@prefix}:processing", @id, @ready_queue, @job_store)
35
+
36
+ @parent = parent || Async::Idler.new
34
37
  end
35
38
 
36
39
  def start
@@ -42,7 +45,7 @@ module Async
42
45
  @processing_queue.start
43
46
 
44
47
  while true
45
- self.dequeue
48
+ self.dequeue(@parent)
46
49
  end
47
50
  end
48
51
 
@@ -58,16 +61,21 @@ module Async
58
61
 
59
62
  protected
60
63
 
61
- def dequeue
62
- id = @processing_queue.fetch
63
- begin
64
+ def dequeue(parent)
65
+ _id = @processing_queue.fetch
66
+
67
+ parent.async do
68
+ id = _id; _id = nil
69
+
64
70
  job = @coder.load(@job_store.get(id))
65
71
  @delegate.call(job)
66
72
  @processing_queue.complete(id)
67
73
  rescue => error
68
74
  @processing_queue.retry(id)
69
- raise
75
+ Console.error(self, error)
70
76
  end
77
+ ensure
78
+ @processing_queue.retry(_id) if _id
71
79
  end
72
80
  end
73
81
  end
@@ -3,12 +3,12 @@
3
3
  # Released under the MIT License.
4
4
  # Copyright, 2024, by Samuel Williams.
5
5
 
6
- require_relative 'coder/json'
6
+ require 'json'
7
7
 
8
8
  module Async
9
9
  module Job
10
10
  module Coder
11
- DEFAULT = JSON::DEFAULT
11
+ DEFAULT = JSON
12
12
 
13
13
  # Type-cast for time values. See <https://bugs.ruby-lang.org/issues/20298> for background.
14
14
  # @parameter value [Time || Integer || String || nil]
@@ -5,6 +5,6 @@
5
5
 
6
6
  module Async
7
7
  module Job
8
- VERSION = "0.4.1"
8
+ VERSION = "0.5.0"
9
9
  end
10
10
  end
data/readme.md CHANGED
@@ -29,3 +29,7 @@ This project uses the [Developer Certificate of Origin](https://developercertifi
29
29
  ### Contributor Covenant
30
30
 
31
31
  This project is governed by the [Contributor Covenant](https://www.contributor-covenant.org/). All contributors and participants agree to abide by its terms.
32
+
33
+ ## See Also
34
+
35
+ - [async-job-adapter-active_job](https://github.com/socketry/async-job-adapter-active_job) - ActiveJob adapter for `async-job`.
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: async-job
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.1
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Samuel Williams
@@ -37,22 +37,22 @@ cert_chain:
37
37
  Q2K9NVun/S785AP05vKkXZEFYxqG6EW012U4oLcFl5MySFajYXRYbuUpH6AY+HP8
38
38
  voD0MPg1DssDLKwXyt1eKD/+Fq0bFWhwVM/1XiAXL7lyYUyOq24KHgQ2Csg=
39
39
  -----END CERTIFICATE-----
40
- date: 2024-02-26 00:00:00.000000000 Z
40
+ date: 2024-03-06 00:00:00.000000000 Z
41
41
  dependencies:
42
42
  - !ruby/object:Gem::Dependency
43
43
  name: async
44
44
  requirement: !ruby/object:Gem::Requirement
45
45
  requirements:
46
- - - ">="
46
+ - - "~>"
47
47
  - !ruby/object:Gem::Version
48
- version: '1.0'
48
+ version: '2.9'
49
49
  type: :runtime
50
50
  prerelease: false
51
51
  version_requirements: !ruby/object:Gem::Requirement
52
52
  requirements:
53
- - - ">="
53
+ - - "~>"
54
54
  - !ruby/object:Gem::Version
55
- version: '1.0'
55
+ version: '2.9'
56
56
  - !ruby/object:Gem::Dependency
57
57
  name: async-redis
58
58
  requirement: !ruby/object:Gem::Requirement
@@ -86,7 +86,6 @@ files:
86
86
  - lib/async/job/buffer.rb
87
87
  - lib/async/job/builder.rb
88
88
  - lib/async/job/coder.rb
89
- - lib/async/job/coder/json.rb
90
89
  - lib/async/job/coder/marshal.rb
91
90
  - lib/async/job/coder/message_pack.rb
92
91
  - lib/async/job/generic.rb
@@ -106,7 +105,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
106
105
  requirements:
107
106
  - - ">="
108
107
  - !ruby/object:Gem::Version
109
- version: '3.0'
108
+ version: '3.1'
110
109
  required_rubygems_version: !ruby/object:Gem::Requirement
111
110
  requirements:
112
111
  - - ">="
metadata.gz.sig CHANGED
Binary file
@@ -1,27 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # Released under the MIT License.
4
- # Copyright, 2024, by Samuel Williams.
5
-
6
- require 'json'
7
-
8
- module Async
9
- module Job
10
- module Coder
11
- class JSON
12
- def initialize
13
- end
14
-
15
- def dump(job)
16
- ::JSON.dump(job)
17
- end
18
-
19
- def load(data)
20
- ::JSON.parse(data, symbolize_names: true)
21
- end
22
-
23
- DEFAULT = self.new
24
- end
25
- end
26
- end
27
- end