dynflow 1.6.7 → 1.6.10

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: 2d535120af429db7ce30df6651ffc033d20e481f9c23652b96298cd53e5de2d7
4
- data.tar.gz: 0d5c5f4f983bde9ce13afebb26c311673513c8a560fbde22b3472e67f468d770
3
+ metadata.gz: 79387ebdc9ad0bbae88897885da885483c4d57e08af9be69f6f2369be67bbe5b
4
+ data.tar.gz: aa5413ff3913decab84dc70e86f94f4293acfcc16340e7ad6216abf9943335b1
5
5
  SHA512:
6
- metadata.gz: 81de21466f1ec2a76ec3396b06256dc873cdfdea62d6d39035e284a5f2e8ea5ed81783202163e86a0dcd38f841333c08de92c52989bc768e9763c9eedcab8e59
7
- data.tar.gz: cf8c24e19b30475a5325c2e219657dbb625d7d42704250e1f8c001846f1d98c9a74ccb80c83c806c89c0a2f7944577ba8741d0ad963d8c0fb16cd7561af41940
6
+ metadata.gz: 99132ff502c108b47595d211caba78c3034adb05390937269814d09a8da67c546b9bc2e7a2c776bcba0596d76ee50b7229c7497aad77e2d2483c43351d4a65a5
7
+ data.tar.gz: 52e2bb51d1fdc668c8837646635c37c58c65761d5ef3812294838dfacc54dfc48ae26550bd132a077dfc8579ee4fa86787fe17d27f45389a6a536328276de897
@@ -3,6 +3,12 @@ module Dynflow
3
3
  module Action::WithSubPlans
4
4
  include Dynflow::Action::Cancellable
5
5
 
6
+ class SubtaskFailedException < RuntimeError
7
+ def backtrace
8
+ []
9
+ end
10
+ end
11
+
6
12
  SubPlanFinished = Algebrick.type do
7
13
  fields! :execution_plan_id => String,
8
14
  :success => type { variants TrueClass, FalseClass }
@@ -228,7 +234,7 @@ module Dynflow
228
234
  end
229
235
 
230
236
  def check_for_errors!
231
- fail "A sub task failed" if output[:failed_count] > 0
237
+ raise SubtaskFailedException.new("A sub task failed") if output[:failed_count] > 0
232
238
  end
233
239
 
234
240
  def uses_concurrency_control
@@ -167,7 +167,7 @@ module Dynflow
167
167
  @logger = world.logger
168
168
  @execution_plan_managers = {}
169
169
  @rescued_steps = {}
170
- @planning_plans = []
170
+ @planning_plans = Set.new
171
171
  end
172
172
 
173
173
  def current_execution_plan_ids
@@ -175,6 +175,8 @@ module Dynflow
175
175
  end
176
176
 
177
177
  def handle_planning(execution_plan_uuid)
178
+ return [] if @planning_plans.include? execution_plan_uuid
179
+
178
180
  @planning_plans << execution_plan_uuid
179
181
  [PlanningWorkItem.new(execution_plan_uuid, :default, @world.id)]
180
182
  end
@@ -85,6 +85,9 @@ module Dynflow
85
85
  logger.info('Performing validity checks')
86
86
  @world.perform_validity_checks
87
87
  logger.info('Finished performing validity checks')
88
+ if @world.delayed_executor && !@world.delayed_executor.started?
89
+ @world.delayed_executor.start
90
+ end
88
91
  @recovery = false
89
92
  end
90
93
 
@@ -335,6 +335,8 @@ module Dynflow
335
335
  if value
336
336
  record = prepare_record(what, value, (existing_record || condition), with_data)
337
337
  if existing_record
338
+ record = prune_unchanged(what, existing_record, record)
339
+ return value if record.empty?
338
340
  condition = update_conditions.merge(condition)
339
341
  return with_retry { table.where(condition).update(record) }
340
342
  else
@@ -356,6 +358,14 @@ module Dynflow
356
358
  end
357
359
  end
358
360
 
361
+ def prune_unchanged(what, object, record)
362
+ record = record.dup
363
+ table(what).columns.each do |column|
364
+ record.delete(column) if object[column] == record[column]
365
+ end
366
+ record
367
+ end
368
+
359
369
  alias_method :load, :load_record
360
370
 
361
371
  def load_records(what, condition, keys = nil)
@@ -152,6 +152,9 @@ module Dynflow
152
152
  # we can't do any operation until the Rails.application.dynflow.world is set
153
153
  config.auto_execute = false
154
154
  config.auto_validity_check = false
155
+ if sidekiq_worker? && !Sidekiq.options[:queues].include?("dynflow_orchestrator")
156
+ config.delayed_executor = nil
157
+ end
155
158
  end
156
159
  end
157
160
 
data/lib/dynflow/rails.rb CHANGED
@@ -46,6 +46,9 @@ module Dynflow
46
46
  invalidated_worlds = world.perform_validity_checks
47
47
  world.auto_execute
48
48
  world.post_initialization if invalidated_worlds > 0
49
+ if @world.delayed_executor && !@world.delayed_executor.started?
50
+ @world.delayed_executor.start
51
+ end
49
52
  config.run_post_executor_init_hooks(world)
50
53
  end
51
54
  end
@@ -5,7 +5,7 @@ module Dynflow
5
5
  extend Mimic
6
6
  mimic! World
7
7
 
8
- attr_reader :clock, :executor, :middleware, :coordinator
8
+ attr_reader :clock, :executor, :middleware, :coordinator, :delayed_executor
9
9
  attr_accessor :action
10
10
 
11
11
  def initialize(_config = nil)
@@ -1,4 +1,4 @@
1
1
  # frozen_string_literal: true
2
2
  module Dynflow
3
- VERSION = '1.6.7'
3
+ VERSION = '1.6.10'
4
4
  end
data/lib/dynflow/world.rb CHANGED
@@ -77,7 +77,7 @@ module Dynflow
77
77
  @delayed_executor ||= try_spawn(:delayed_executor, Coordinator::DelayedExecutorLock)
78
78
  @execution_plan_cleaner ||= try_spawn(:execution_plan_cleaner, Coordinator::ExecutionPlanCleanerLock)
79
79
  update_register
80
- @delayed_executor.start if @delayed_executor && !@delayed_executor.started?
80
+ @delayed_executor.start if auto_validity_check && @delayed_executor && !@delayed_executor.started?
81
81
  self.auto_execute if @config.auto_execute
82
82
  end
83
83
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dynflow
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.6.7
4
+ version: 1.6.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ivan Necas
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2022-05-25 00:00:00.000000000 Z
12
+ date: 2023-03-01 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: multi_json
@@ -678,7 +678,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
678
678
  - !ruby/object:Gem::Version
679
679
  version: '0'
680
680
  requirements: []
681
- rubygems_version: 3.1.4
681
+ rubygems_version: 3.3.20
682
682
  signing_key:
683
683
  specification_version: 4
684
684
  summary: DYNamic workFLOW engine