good_pipeline 0.3.0 → 0.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.
@@ -5,7 +5,16 @@ module GoodPipeline
5
5
 
6
6
  class Pipeline # rubocop:disable Metrics/ClassLength
7
7
  VALID_FAILURE_STRATEGIES = %i[halt continue ignore].freeze
8
- DSL_ATTRIBUTES = %i[display_name description failure_strategy on_complete on_success on_failure].freeze
8
+ DSL_ATTRIBUTES = %i[
9
+ display_name
10
+ description
11
+ failure_strategy
12
+ on_complete
13
+ on_success
14
+ on_failure
15
+ coordination_queue_name
16
+ callback_queue_name
17
+ ].freeze
9
18
 
10
19
  # --- Class-level DSL ---
11
20
 
@@ -58,6 +67,18 @@ module GoodPipeline
58
67
  @on_failure = method_name
59
68
  end
60
69
 
70
+ def coordination_queue_name(name = :__unset__)
71
+ return @coordination_queue_name || GoodPipeline.coordination_queue_name if name == :__unset__
72
+
73
+ @coordination_queue_name = name
74
+ end
75
+
76
+ def callback_queue_name(name = :__unset__)
77
+ return @callback_queue_name || GoodPipeline.callback_queue_name if name == :__unset__
78
+
79
+ @callback_queue_name = name
80
+ end
81
+
61
82
  alias build new
62
83
 
63
84
  def run(**)
@@ -95,6 +116,8 @@ module GoodPipeline
95
116
  def on_complete_callback = self.class.on_complete
96
117
  def on_success_callback = self.class.on_success
97
118
  def on_failure_callback = self.class.on_failure
119
+ def coordination_queue_name = self.class.coordination_queue_name
120
+ def callback_queue_name = self.class.callback_queue_name
98
121
 
99
122
  def initialize(**kwargs) # rubocop:disable Metrics/MethodLength
100
123
  @params = kwargs.freeze
@@ -32,6 +32,7 @@ module GoodPipeline
32
32
  def create_pipeline_batch(pipeline_id)
33
33
  batch = GoodJob::Batch.new
34
34
  batch.on_finish = "GoodPipeline::PipelineReconciliationJob"
35
+ batch.callback_queue_name = @pipeline.coordination_queue_name
35
36
  batch.properties = { pipeline_id: pipeline_id }
36
37
  batch.save
37
38
  batch
@@ -81,9 +82,8 @@ module GoodPipeline
81
82
  end
82
83
 
83
84
  def enqueue_root_steps(step_id_by_key)
84
- @pipeline.root_steps.each do |step_definition|
85
- Coordinator.try_enqueue_step(step_id_by_key[step_definition.key])
86
- end
85
+ root_step_ids = @pipeline.root_steps.map { |step_definition| step_id_by_key[step_definition.key] }
86
+ Coordinator.bulk_enqueue_steps(root_step_ids)
87
87
  end
88
88
 
89
89
  def resolve_job_class(step_definition)
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module GoodPipeline
4
- VERSION = "0.3.0"
4
+ VERSION = "0.4.0"
5
5
  end
data/lib/good_pipeline.rb CHANGED
@@ -13,10 +13,26 @@ require_relative "good_pipeline/branch_resolver"
13
13
  require_relative "good_pipeline/coordinator"
14
14
  require_relative "good_pipeline/chain_coordinator"
15
15
  require_relative "good_pipeline/runner"
16
+ require_relative "good_pipeline/haltable"
16
17
  require_relative "good_pipeline/chain"
17
18
  require_relative "good_pipeline/engine" if defined?(Rails::Engine)
18
19
 
19
20
  module GoodPipeline
21
+ DEFAULT_COORDINATION_QUEUE_NAME = "good_pipeline_coordination"
22
+ DEFAULT_CALLBACK_QUEUE_NAME = "good_pipeline_callbacks"
23
+
24
+ class << self
25
+ attr_writer :coordination_queue_name, :callback_queue_name
26
+
27
+ def coordination_queue_name
28
+ @coordination_queue_name || DEFAULT_COORDINATION_QUEUE_NAME
29
+ end
30
+
31
+ def callback_queue_name
32
+ @callback_queue_name || DEFAULT_CALLBACK_QUEUE_NAME
33
+ end
34
+ end
35
+
20
36
  def self.run(*pipeline_configs)
21
37
  pipeline_records = pipeline_configs.map do |config|
22
38
  pipeline_class, pipeline_params = extract_pipeline_config(config)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: good_pipeline
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ali Hamdi Ali Fadel
@@ -29,14 +29,14 @@ dependencies:
29
29
  requirements:
30
30
  - - ">="
31
31
  - !ruby/object:Gem::Version
32
- version: '3.10'
32
+ version: '4.14'
33
33
  type: :runtime
34
34
  prerelease: false
35
35
  version_requirements: !ruby/object:Gem::Requirement
36
36
  requirements:
37
37
  - - ">="
38
38
  - !ruby/object:Gem::Version
39
- version: '3.10'
39
+ version: '4.14'
40
40
  - !ruby/object:Gem::Dependency
41
41
  name: railties
42
42
  requirement: !ruby/object:Gem::Requirement
@@ -93,6 +93,7 @@ files:
93
93
  - demo/app/jobs/cleanup_job.rb
94
94
  - demo/app/jobs/download_job.rb
95
95
  - demo/app/jobs/failing_job.rb
96
+ - demo/app/jobs/halt_execution_job.rb
96
97
  - demo/app/jobs/publish_job.rb
97
98
  - demo/app/jobs/retryable_job.rb
98
99
  - demo/app/jobs/thumbnail_job.rb
@@ -119,6 +120,7 @@ files:
119
120
  - demo/db/seeds.rb
120
121
  - demo/docs/screenshots/definitions.png
121
122
  - demo/docs/screenshots/show.png
123
+ - demo/test/good_pipeline/test_bulk_enqueue.rb
122
124
  - demo/test/good_pipeline/test_chain_record.rb
123
125
  - demo/test/good_pipeline/test_cleanup.rb
124
126
  - demo/test/good_pipeline/test_coordinator.rb
@@ -128,18 +130,22 @@ files:
128
130
  - demo/test/good_pipeline/test_pipeline_callback_job.rb
129
131
  - demo/test/good_pipeline/test_pipeline_reconciliation_job.rb
130
132
  - demo/test/good_pipeline/test_pipeline_record.rb
133
+ - demo/test/good_pipeline/test_queue_configuration.rb
131
134
  - demo/test/good_pipeline/test_runner.rb
132
135
  - demo/test/good_pipeline/test_step_finished_job.rb
133
136
  - demo/test/good_pipeline/test_step_record.rb
134
137
  - demo/test/integration/test_branch_execution.rb
138
+ - demo/test/integration/test_bulk_enqueue_end_to_end.rb
135
139
  - demo/test/integration/test_concurrent_fan_in.rb
136
140
  - demo/test/integration/test_end_to_end.rb
137
141
  - demo/test/integration/test_enqueue_atomicity.rb
142
+ - demo/test/integration/test_halt_execution.rb
138
143
  - demo/test/integration/test_halt_ignore_chain.rb
139
144
  - demo/test/integration/test_ignore_transitive_exemption.rb
140
145
  - demo/test/integration/test_late_chain_registration.rb
141
146
  - demo/test/integration/test_missing_decision_method.rb
142
147
  - demo/test/integration/test_pipeline_chaining.rb
148
+ - demo/test/integration/test_queue_configuration.rb
143
149
  - demo/test/integration/test_retry_scenarios.rb
144
150
  - demo/test/integration/test_sequential_branches.rb
145
151
  - demo/test/integration/test_step_finished_idempotency.rb
@@ -184,6 +190,7 @@ files:
184
190
  - lib/good_pipeline/errors.rb
185
191
  - lib/good_pipeline/failure_metadata.rb
186
192
  - lib/good_pipeline/graph_validator.rb
193
+ - lib/good_pipeline/haltable.rb
187
194
  - lib/good_pipeline/pipeline.rb
188
195
  - lib/good_pipeline/runner.rb
189
196
  - lib/good_pipeline/step_definition.rb