dynflow 1.9.0 → 1.9.2
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/ruby.yml +8 -0
- data/dynflow.gemspec +5 -0
- data/lib/dynflow/action/v2/with_sub_plans.rb +23 -8
- data/lib/dynflow/persistence.rb +4 -0
- data/lib/dynflow/persistence_adapters/abstract.rb +4 -0
- data/lib/dynflow/persistence_adapters/sequel.rb +4 -0
- data/lib/dynflow/version.rb +1 -1
- data/test/test_helper.rb +1 -1
- metadata +73 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7fdd259a8ad2f40e3edb40e284606c9e9d8193e24ecc7841dde568f966e52da0
|
4
|
+
data.tar.gz: 1c5d8ef5922bdf6a9a4bae86ee1b9f6c72bc99ed34f016b201a6550d8960925f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5871133e3cf66929ccbe6bf2e7b585f411b3465b7dca8c283e9d588d8ea8c95d716f659882b4a9607720cb8cae45735251bae5cb2ee2ce6c03f3572851cd286c
|
7
|
+
data.tar.gz: ec3d09a5de46cf12152b1ce203cebad813d1f0601313315c748f9b6c473cc7df33ee25ff543c0155da0fb9bbd267a78b0a472f055868f18da325ebc2df2e977b
|
data/.github/workflows/ruby.yml
CHANGED
@@ -38,6 +38,7 @@ jobs:
|
|
38
38
|
- 2.7.0
|
39
39
|
- 3.0.0
|
40
40
|
- 3.2.0
|
41
|
+
- 3.4
|
41
42
|
concurrent_ruby_ext:
|
42
43
|
- 'true'
|
43
44
|
- 'false'
|
@@ -57,12 +58,16 @@ jobs:
|
|
57
58
|
ruby_version: 3.0.0
|
58
59
|
- db: mysql
|
59
60
|
ruby_version: 3.2.0
|
61
|
+
- db: mysql
|
62
|
+
ruby_version: 3.4
|
60
63
|
- db: mysql
|
61
64
|
concurrent_ruby_ext: 'true'
|
62
65
|
- db: sqlite3
|
63
66
|
ruby_version: 3.0.0
|
64
67
|
- db: sqlite3
|
65
68
|
ruby_version: 3.2.0
|
69
|
+
- db: sqlite3
|
70
|
+
ruby_version: 3.4
|
66
71
|
- db: sqlite3
|
67
72
|
concurrent_ruby_ext: 'true'
|
68
73
|
- db: postgresql
|
@@ -71,6 +76,9 @@ jobs:
|
|
71
76
|
- db: postgresql
|
72
77
|
ruby_version: 3.2.0
|
73
78
|
concurrent_ruby_ext: 'true'
|
79
|
+
- db: postgresql
|
80
|
+
ruby_version: 3.4
|
81
|
+
concurrent_ruby_ext: 'true'
|
74
82
|
|
75
83
|
services:
|
76
84
|
postgres:
|
data/dynflow.gemspec
CHANGED
@@ -24,18 +24,23 @@ Gem::Specification.new do |s|
|
|
24
24
|
s.add_dependency "apipie-params"
|
25
25
|
s.add_dependency "concurrent-ruby", '~> 1.1.3'
|
26
26
|
s.add_dependency "concurrent-ruby-edge", '~> 0.6.0'
|
27
|
+
s.add_dependency "csv", "~> 3.1"
|
27
28
|
s.add_dependency "msgpack", '~> 1.3', '>= 1.3.3'
|
28
29
|
s.add_dependency "multi_json"
|
29
30
|
s.add_dependency "sequel", '>= 4.0.0'
|
30
31
|
|
31
32
|
s.add_development_dependency 'activejob'
|
32
33
|
s.add_development_dependency "activerecord"
|
34
|
+
s.add_development_dependency 'drb' # ActiveSupport requires this, but doesn't explicitly depend on it
|
33
35
|
s.add_development_dependency "minitest", "< 5.19"
|
34
36
|
s.add_development_dependency "minitest-reporters"
|
35
37
|
s.add_development_dependency "minitest-stub-const"
|
36
38
|
s.add_development_dependency 'mocha'
|
39
|
+
s.add_development_dependency 'mutex_m' # Rails require this, but don't explicitly depend on it
|
40
|
+
s.add_development_dependency 'ostruct'
|
37
41
|
s.add_development_dependency "rack-test"
|
38
42
|
s.add_development_dependency "rake"
|
39
43
|
s.add_development_dependency "sinatra"
|
40
44
|
s.add_development_dependency "sqlite3"
|
45
|
+
s.add_development_dependency 'syslog' # logging requires this, but doesn't explicitly depend on it
|
41
46
|
end
|
@@ -102,7 +102,7 @@ module Dynflow::Action::V2
|
|
102
102
|
|
103
103
|
def increase_counts(planned, failed)
|
104
104
|
output[:planned_count] += planned + failed
|
105
|
-
output[:failed_count]
|
105
|
+
output[:failed_count] = output.fetch(:failed_count, 0) + failed
|
106
106
|
output[:pending_count] = output.fetch(:pending_count, 0) + planned
|
107
107
|
output[:success_count] ||= 0
|
108
108
|
end
|
@@ -129,12 +129,20 @@ module Dynflow::Action::V2
|
|
129
129
|
end
|
130
130
|
|
131
131
|
def recalculate_counts
|
132
|
-
total
|
133
|
-
|
132
|
+
total = total_count
|
133
|
+
if output[:cancelled_timestamp]
|
134
|
+
cancelled_scheduled_plans = sub_plans_count_after(output[:cancelled_timestamp], { 'state' => %w(paused stopped), 'result' => %w(error warning) })
|
135
|
+
cancelled_unscheduled_plans = total_count - output[:planned_count]
|
136
|
+
cancelled = cancelled_unscheduled_plans + cancelled_scheduled_plans
|
137
|
+
else
|
138
|
+
cancelled = cancelled_scheduled_plans = 0
|
139
|
+
end
|
140
|
+
failed = sub_plans_count('state' => %w(paused stopped), 'result' => %w(error warning)) - cancelled_scheduled_plans
|
134
141
|
success = sub_plans_count('state' => 'stopped', 'result' => 'success')
|
135
|
-
output.update(:pending_count => total - failed - success,
|
136
|
-
|
137
|
-
|
142
|
+
output.update(:pending_count => total - failed - success - cancelled_scheduled_plans,
|
143
|
+
:failed_count => failed - output.fetch(:resumed_count, 0),
|
144
|
+
:success_count => success,
|
145
|
+
:cancelled_count => cancelled)
|
138
146
|
end
|
139
147
|
|
140
148
|
def counts_set?
|
@@ -142,7 +150,7 @@ module Dynflow::Action::V2
|
|
142
150
|
end
|
143
151
|
|
144
152
|
def check_for_errors!
|
145
|
-
raise SubtaskFailedException.new("A sub task failed") if output[:failed_count] > 0
|
153
|
+
raise SubtaskFailedException.new("A sub task failed") if output[:failed_count] + output[:cancelled_count] > 0
|
146
154
|
end
|
147
155
|
|
148
156
|
# Helper for creating sub plans
|
@@ -173,6 +181,7 @@ module Dynflow::Action::V2
|
|
173
181
|
def cancel!(force = false)
|
174
182
|
# Count the not-yet-planned tasks as cancelled
|
175
183
|
output[:cancelled_count] = total_count - output[:planned_count]
|
184
|
+
output[:cancelled_timestamp] ||= Time.now.utc.iso8601 # time in UTC for comparison with UTC times in the database
|
176
185
|
on_planning_finished if output[:cancelled_count].positive?
|
177
186
|
# Pass the cancel event to running sub plans if they can be cancelled
|
178
187
|
sub_plans(:state => 'running').each { |sub_plan| sub_plan.cancel(force) if sub_plan.cancellable? }
|
@@ -198,7 +207,9 @@ module Dynflow::Action::V2
|
|
198
207
|
end
|
199
208
|
|
200
209
|
def remaining_count
|
201
|
-
|
210
|
+
return 0 if output[:cancelled_timestamp]
|
211
|
+
|
212
|
+
total_count - output[:planned_count]
|
202
213
|
end
|
203
214
|
|
204
215
|
private
|
@@ -216,5 +227,9 @@ module Dynflow::Action::V2
|
|
216
227
|
def sub_plans_count(filter = {})
|
217
228
|
world.persistence.find_execution_plan_counts(filters: sub_plan_filter.merge(filter))
|
218
229
|
end
|
230
|
+
|
231
|
+
def sub_plans_count_after(timestamp, filter = {})
|
232
|
+
world.persistence.find_execution_plan_counts_after(timestamp, { filters: sub_plan_filter.merge(filter) })
|
233
|
+
end
|
219
234
|
end
|
220
235
|
end
|
data/lib/dynflow/persistence.rb
CHANGED
@@ -73,6 +73,10 @@ module Dynflow
|
|
73
73
|
adapter.find_execution_plan_counts(options)
|
74
74
|
end
|
75
75
|
|
76
|
+
def find_execution_plan_counts_after(timestamp, options)
|
77
|
+
adapter.find_execution_plan_counts_after(timestamp, options)
|
78
|
+
end
|
79
|
+
|
76
80
|
def delete_execution_plans(filters, batch_size = 1000, enforce_backup_dir = nil)
|
77
81
|
backup_dir = enforce_backup_dir || current_backup_dir
|
78
82
|
adapter.delete_execution_plans(filters, batch_size, backup_dir)
|
@@ -46,6 +46,10 @@ module Dynflow
|
|
46
46
|
filter(:execution_plan, options[:filters]).count
|
47
47
|
end
|
48
48
|
|
49
|
+
def find_execution_plan_counts_after(timestamp, options = {})
|
50
|
+
raise NotImplementedError
|
51
|
+
end
|
52
|
+
|
49
53
|
def find_execution_plan_statuses(options)
|
50
54
|
raise NotImplementedError
|
51
55
|
end
|
@@ -78,6 +78,10 @@ module Dynflow
|
|
78
78
|
filter(:execution_plan, table(:execution_plan), options[:filters]).count
|
79
79
|
end
|
80
80
|
|
81
|
+
def find_execution_plan_counts_after(timestamp, options = {})
|
82
|
+
filter(:execution_plan, table(:execution_plan), options[:filters]).filter(::Sequel.lit('ended_at >= ?', timestamp)).count
|
83
|
+
end
|
84
|
+
|
81
85
|
def find_execution_plan_statuses(options)
|
82
86
|
plans = filter(:execution_plan, table(:execution_plan), options[:filters])
|
83
87
|
.select(:uuid, :state, :result)
|
data/lib/dynflow/version.rb
CHANGED
data/test/test_helper.rb
CHANGED
metadata
CHANGED
@@ -1,15 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dynflow
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.9.
|
4
|
+
version: 1.9.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ivan Necas
|
8
8
|
- Petr Chalupa
|
9
|
-
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2025-06-03 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: algebrick
|
@@ -67,6 +66,20 @@ dependencies:
|
|
67
66
|
- - "~>"
|
68
67
|
- !ruby/object:Gem::Version
|
69
68
|
version: 0.6.0
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: csv
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '3.1'
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '3.1'
|
70
83
|
- !ruby/object:Gem::Dependency
|
71
84
|
name: msgpack
|
72
85
|
requirement: !ruby/object:Gem::Requirement
|
@@ -143,6 +156,20 @@ dependencies:
|
|
143
156
|
- - ">="
|
144
157
|
- !ruby/object:Gem::Version
|
145
158
|
version: '0'
|
159
|
+
- !ruby/object:Gem::Dependency
|
160
|
+
name: drb
|
161
|
+
requirement: !ruby/object:Gem::Requirement
|
162
|
+
requirements:
|
163
|
+
- - ">="
|
164
|
+
- !ruby/object:Gem::Version
|
165
|
+
version: '0'
|
166
|
+
type: :development
|
167
|
+
prerelease: false
|
168
|
+
version_requirements: !ruby/object:Gem::Requirement
|
169
|
+
requirements:
|
170
|
+
- - ">="
|
171
|
+
- !ruby/object:Gem::Version
|
172
|
+
version: '0'
|
146
173
|
- !ruby/object:Gem::Dependency
|
147
174
|
name: minitest
|
148
175
|
requirement: !ruby/object:Gem::Requirement
|
@@ -199,6 +226,34 @@ dependencies:
|
|
199
226
|
- - ">="
|
200
227
|
- !ruby/object:Gem::Version
|
201
228
|
version: '0'
|
229
|
+
- !ruby/object:Gem::Dependency
|
230
|
+
name: mutex_m
|
231
|
+
requirement: !ruby/object:Gem::Requirement
|
232
|
+
requirements:
|
233
|
+
- - ">="
|
234
|
+
- !ruby/object:Gem::Version
|
235
|
+
version: '0'
|
236
|
+
type: :development
|
237
|
+
prerelease: false
|
238
|
+
version_requirements: !ruby/object:Gem::Requirement
|
239
|
+
requirements:
|
240
|
+
- - ">="
|
241
|
+
- !ruby/object:Gem::Version
|
242
|
+
version: '0'
|
243
|
+
- !ruby/object:Gem::Dependency
|
244
|
+
name: ostruct
|
245
|
+
requirement: !ruby/object:Gem::Requirement
|
246
|
+
requirements:
|
247
|
+
- - ">="
|
248
|
+
- !ruby/object:Gem::Version
|
249
|
+
version: '0'
|
250
|
+
type: :development
|
251
|
+
prerelease: false
|
252
|
+
version_requirements: !ruby/object:Gem::Requirement
|
253
|
+
requirements:
|
254
|
+
- - ">="
|
255
|
+
- !ruby/object:Gem::Version
|
256
|
+
version: '0'
|
202
257
|
- !ruby/object:Gem::Dependency
|
203
258
|
name: rack-test
|
204
259
|
requirement: !ruby/object:Gem::Requirement
|
@@ -255,6 +310,20 @@ dependencies:
|
|
255
310
|
- - ">="
|
256
311
|
- !ruby/object:Gem::Version
|
257
312
|
version: '0'
|
313
|
+
- !ruby/object:Gem::Dependency
|
314
|
+
name: syslog
|
315
|
+
requirement: !ruby/object:Gem::Requirement
|
316
|
+
requirements:
|
317
|
+
- - ">="
|
318
|
+
- !ruby/object:Gem::Version
|
319
|
+
version: '0'
|
320
|
+
type: :development
|
321
|
+
prerelease: false
|
322
|
+
version_requirements: !ruby/object:Gem::Requirement
|
323
|
+
requirements:
|
324
|
+
- - ">="
|
325
|
+
- !ruby/object:Gem::Version
|
326
|
+
version: '0'
|
258
327
|
description: Ruby workflow/orchestration engine
|
259
328
|
email:
|
260
329
|
- inecas@redhat.com
|
@@ -668,7 +737,6 @@ homepage: https://github.com/Dynflow/dynflow
|
|
668
737
|
licenses:
|
669
738
|
- MIT
|
670
739
|
metadata: {}
|
671
|
-
post_install_message:
|
672
740
|
rdoc_options: []
|
673
741
|
require_paths:
|
674
742
|
- lib
|
@@ -683,8 +751,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
683
751
|
- !ruby/object:Gem::Version
|
684
752
|
version: '0'
|
685
753
|
requirements: []
|
686
|
-
rubygems_version: 3.
|
687
|
-
signing_key:
|
754
|
+
rubygems_version: 3.6.2
|
688
755
|
specification_version: 4
|
689
756
|
summary: DYNamic workFLOW engine
|
690
757
|
test_files:
|