gouda 0.1.0 → 0.1.1
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 +4 -4
- data/.github/workflows/ci.yml +18 -9
- data/.gitignore +2 -1
- data/.ruby-version +1 -1
- data/CHANGELOG.md +4 -1
- data/gouda.gemspec +2 -2
- data/lib/gouda/active_job_extensions/concurrency.rb +1 -1
- data/lib/gouda/scheduler.rb +1 -1
- data/lib/gouda/version.rb +1 -1
- data/lib/gouda/worker.rb +1 -1
- data/lib/gouda/workload.rb +3 -3
- data/lib/gouda.rb +1 -1
- data/tmp/.keep +0 -0
- metadata +5 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 69ee0eda4e10e8777d9cb1df596472103558ace52ba2fd018de2fcbc28a59ead
|
4
|
+
data.tar.gz: 7d2eb26cafd53af69e52f8a5de8adf8d08678d7618dbccc6d50c500e49780c92
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7bb748afdacae3fe76ee49a4b82e45c282d3feeee6fb69cb390b57e9b05db9108d692521454121724fbec81970c297117befd900dde9a687bfc51d8b08a4cd8e
|
7
|
+
data.tar.gz: f14f7bad25ba4d0b2c22ec0dad98747ef1a1e79fa3a5978b987f13fbe340220eddfe6958fa1751083402c7f65a6e3f4129fdbb53bfa0d6e87ecc45692b7d4548
|
data/.github/workflows/ci.yml
CHANGED
@@ -9,28 +9,37 @@ env:
|
|
9
9
|
jobs:
|
10
10
|
test:
|
11
11
|
name: Tests
|
12
|
-
runs-on: ubuntu-
|
12
|
+
runs-on: ubuntu-22.04
|
13
|
+
if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name != github.repository
|
14
|
+
strategy:
|
15
|
+
matrix:
|
16
|
+
ruby:
|
17
|
+
- '2.7'
|
18
|
+
- '3.0'
|
19
|
+
- '3.1'
|
20
|
+
- '3.2'
|
21
|
+
- '3.3'
|
13
22
|
services:
|
14
23
|
postgres:
|
15
|
-
image: postgres
|
24
|
+
image: postgres
|
16
25
|
env:
|
17
26
|
POSTGRES_PASSWORD: postgres
|
27
|
+
options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5
|
18
28
|
ports:
|
19
29
|
- 5432:5432
|
20
|
-
options: >-
|
21
|
-
--health-cmd pg_isready
|
22
|
-
--health-interval 100ms
|
23
|
-
--health-timeout 1s
|
24
|
-
--health-retries 100
|
25
30
|
|
26
|
-
if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name != github.repository
|
27
31
|
steps:
|
28
32
|
- name: Checkout
|
29
33
|
uses: actions/checkout@v4
|
30
34
|
- name: Setup Ruby
|
31
35
|
uses: ruby/setup-ruby@v1
|
32
36
|
with:
|
33
|
-
ruby-version:
|
37
|
+
ruby-version: ${{ matrix.ruby }}
|
34
38
|
bundler-cache: true
|
35
39
|
- name: "Tests and Lint"
|
36
40
|
run: bundle exec rake
|
41
|
+
env:
|
42
|
+
PGHOST: localhost
|
43
|
+
PGUSER: postgres
|
44
|
+
PGPASSWORD: postgres
|
45
|
+
TESTOPTS: "--fail-fast"
|
data/.gitignore
CHANGED
data/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
3.
|
1
|
+
3.3.1
|
data/CHANGELOG.md
CHANGED
data/gouda.gemspec
CHANGED
@@ -4,12 +4,12 @@ Gem::Specification.new do |spec|
|
|
4
4
|
spec.name = "gouda"
|
5
5
|
spec.version = Gouda::VERSION
|
6
6
|
spec.summary = "Job Scheduler"
|
7
|
-
spec.description = "Job Scheduler for Rails"
|
7
|
+
spec.description = "Job Scheduler for Rails and PostgreSQL"
|
8
8
|
spec.authors = ["Sebastian van Hesteren", "Julik Tarkhanov"]
|
9
9
|
spec.email = ["sebastian@cheddar.me", "me@julik.nl"]
|
10
10
|
spec.homepage = "https://rubygems.org/gems/gouda"
|
11
11
|
spec.license = "MIT"
|
12
|
-
spec.required_ruby_version = Gem::Requirement.new(">= 2.
|
12
|
+
spec.required_ruby_version = Gem::Requirement.new(">= 2.7.0")
|
13
13
|
spec.require_paths = ["lib"]
|
14
14
|
|
15
15
|
spec.metadata["homepage_uri"] = spec.homepage
|
data/lib/gouda/scheduler.rb
CHANGED
@@ -72,7 +72,7 @@ module Gouda::Scheduler
|
|
72
72
|
# `class` is a reserved keyword and a method that exists on every Ruby object so...
|
73
73
|
cron_entry_params[:job_class] ||= cron_entry_params.delete(:class)
|
74
74
|
params_with_defaults = defaults.merge(cron_entry_params)
|
75
|
-
Entry.new(name
|
75
|
+
Entry.new(name: name, **params_with_defaults)
|
76
76
|
end
|
77
77
|
end
|
78
78
|
|
data/lib/gouda/version.rb
CHANGED
data/lib/gouda/worker.rb
CHANGED
@@ -135,7 +135,7 @@ module Gouda
|
|
135
135
|
break if check_shutdown.call
|
136
136
|
|
137
137
|
did_process = Gouda.config.app_executor.wrap do
|
138
|
-
Gouda::Workload.checkout_and_perform_one(executing_on: worker_id_and_thread_id, queue_constraint
|
138
|
+
Gouda::Workload.checkout_and_perform_one(executing_on: worker_id_and_thread_id, queue_constraint: queue_constraint, in_progress: executing_workload_ids)
|
139
139
|
end
|
140
140
|
|
141
141
|
# If no job was retrieved the queue is likely empty. Relax the polling then and ease off.
|
data/lib/gouda/workload.rb
CHANGED
@@ -66,7 +66,7 @@ class Gouda::Workload < ActiveRecord::Base
|
|
66
66
|
# Appsignal.increment_counter("gouda_workloads_revived", 1, job_class: workload.active_job_class_name)
|
67
67
|
|
68
68
|
interrupted_at = workload.last_execution_heartbeat_at
|
69
|
-
workload.update!(state: "finished", interrupted_at
|
69
|
+
workload.update!(state: "finished", interrupted_at: interrupted_at, last_execution_heartbeat_at: Time.now.utc, execution_finished_at: Time.now.utc)
|
70
70
|
revived_job = ActiveJob::Base.deserialize(workload.active_job_data)
|
71
71
|
# Save the interrupted_at timestamp so that upon execution the new job will raise a Gouda::Interrpupted exception.
|
72
72
|
# The exception can then be handled like any other ActiveJob exception (using rescue_from or similar).
|
@@ -116,7 +116,7 @@ class Gouda::Workload < ActiveRecord::Base
|
|
116
116
|
uncached do # Necessary because we SELECT with a clock_timestamp() which otherwise gets cached by ActiveRecord query cache
|
117
117
|
transaction do
|
118
118
|
jobs.first.tap do |job|
|
119
|
-
job&.update!(state: "executing", executing_on
|
119
|
+
job&.update!(state: "executing", executing_on: executing_on, last_execution_heartbeat_at: Time.now.utc, execution_started_at: Time.now.utc)
|
120
120
|
end
|
121
121
|
rescue ActiveRecord::RecordNotUnique
|
122
122
|
# It can happen that due to a race the `execution_concurrency_key NOT IN` does not capture
|
@@ -133,7 +133,7 @@ class Gouda::Workload < ActiveRecord::Base
|
|
133
133
|
# @param in_progress[#add,#delete] Used for tracking work in progress for heartbeats
|
134
134
|
def self.checkout_and_perform_one(executing_on:, queue_constraint: Gouda::AnyQueue, in_progress: Set.new)
|
135
135
|
# Select a job and mark it as "executing" which will make it unavailable to any other
|
136
|
-
workload = checkout_and_lock_one(executing_on
|
136
|
+
workload = checkout_and_lock_one(executing_on: executing_on, queue_constraint: queue_constraint)
|
137
137
|
if workload
|
138
138
|
in_progress.add(workload.id)
|
139
139
|
workload.perform_and_update_state!
|
data/lib/gouda.rb
CHANGED
@@ -57,7 +57,7 @@ module Gouda
|
|
57
57
|
Gouda.logger.info("Gouda version: #{Gouda::VERSION}")
|
58
58
|
Gouda.logger.info("Worker threads: #{Gouda.config.worker_thread_count}")
|
59
59
|
|
60
|
-
Gouda.worker_loop(n_threads: Gouda.config.worker_thread_count, queue_constraint:)
|
60
|
+
Gouda.worker_loop(n_threads: Gouda.config.worker_thread_count, queue_constraint: queue_constraint)
|
61
61
|
end
|
62
62
|
|
63
63
|
def self.config
|
data/tmp/.keep
ADDED
File without changes
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gouda
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sebastian van Hesteren
|
@@ -123,7 +123,7 @@ dependencies:
|
|
123
123
|
- - ">="
|
124
124
|
- !ruby/object:Gem::Version
|
125
125
|
version: '0'
|
126
|
-
description: Job Scheduler for Rails
|
126
|
+
description: Job Scheduler for Rails and PostgreSQL
|
127
127
|
email:
|
128
128
|
- sebastian@cheddar.me
|
129
129
|
- me@julik.nl
|
@@ -157,6 +157,7 @@ files:
|
|
157
157
|
- lib/gouda/version.rb
|
158
158
|
- lib/gouda/worker.rb
|
159
159
|
- lib/gouda/workload.rb
|
160
|
+
- tmp/.keep
|
160
161
|
homepage: https://rubygems.org/gems/gouda
|
161
162
|
licenses:
|
162
163
|
- MIT
|
@@ -172,14 +173,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
172
173
|
requirements:
|
173
174
|
- - ">="
|
174
175
|
- !ruby/object:Gem::Version
|
175
|
-
version: 2.
|
176
|
+
version: 2.7.0
|
176
177
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
177
178
|
requirements:
|
178
179
|
- - ">="
|
179
180
|
- !ruby/object:Gem::Version
|
180
181
|
version: '0'
|
181
182
|
requirements: []
|
182
|
-
rubygems_version: 3.
|
183
|
+
rubygems_version: 3.5.9
|
183
184
|
signing_key:
|
184
185
|
specification_version: 4
|
185
186
|
summary: Job Scheduler
|