dynflow 1.8.3 → 1.8.4
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/lib/dynflow/coordinator.rb +21 -5
- data/lib/dynflow/version.rb +1 -1
- data/lib/dynflow/world/invalidation.rb +8 -1
- data/lib/dynflow/world.rb +1 -1
- data/lib/dynflow.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2bf4beeafa28798576c07fd3fcabd039c026bee7457270426152c6a80be5b86a
|
4
|
+
data.tar.gz: 2ff9ad272fa222d27f4103188b98809edbe150e92ce18a573442215d8cc06b57
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cb049c6b32cf7a84bce0e616c64648ab13fecbb131233f7ae9a64b5308f3961cee00786b2ca0794bb764a2d42b488a4014b52da5d8de632887834230638e8145
|
7
|
+
data.tar.gz: 4dd52c5e4c1e8644be534a0e48209c17a12ee03c358d81fdefd52b884b8d3b96c2f89417e46790544f68fe80a3004d209a12f2d0954393bb6dd65a4e82b6579e
|
data/lib/dynflow/coordinator.rb
CHANGED
@@ -145,6 +145,10 @@ module Dynflow
|
|
145
145
|
raise "Can't acquire the lock after deserialization" if @from_hash
|
146
146
|
Type! owner_id, String
|
147
147
|
end
|
148
|
+
|
149
|
+
def unlock_on_shutdown?
|
150
|
+
true
|
151
|
+
end
|
148
152
|
end
|
149
153
|
|
150
154
|
class LockByWorld < Lock
|
@@ -289,6 +293,10 @@ module Dynflow
|
|
289
293
|
def request_id
|
290
294
|
@data[:request_id]
|
291
295
|
end
|
296
|
+
|
297
|
+
def unlock_on_shutdown?
|
298
|
+
false
|
299
|
+
end
|
292
300
|
end
|
293
301
|
|
294
302
|
class PlanningLock < LockByWorld
|
@@ -305,6 +313,10 @@ module Dynflow
|
|
305
313
|
def execution_plan_id
|
306
314
|
@data[:execution_plan_id]
|
307
315
|
end
|
316
|
+
|
317
|
+
def unlock_on_shutdown?
|
318
|
+
false
|
319
|
+
end
|
308
320
|
end
|
309
321
|
|
310
322
|
attr_reader :adapter
|
@@ -320,8 +332,12 @@ module Dynflow
|
|
320
332
|
if block
|
321
333
|
begin
|
322
334
|
block.call
|
335
|
+
# We are looking for ::Sidekiq::Shutdown, but that may not be defined. We rely on it being a subclass of Interrupt
|
336
|
+
# We don't really want to rescue it, but we need to bind it somehow so that we can check it in ensure
|
337
|
+
rescue Interrupt => e
|
338
|
+
raise e
|
323
339
|
ensure
|
324
|
-
release(lock)
|
340
|
+
release(lock) if !(defined?(::Sidekiq) && e.is_a?(::Sidekiq::Shutdown)) || lock.unlock_on_shutdown?
|
325
341
|
end
|
326
342
|
end
|
327
343
|
rescue DuplicateRecordError => e
|
@@ -333,8 +349,8 @@ module Dynflow
|
|
333
349
|
adapter.delete_record(lock)
|
334
350
|
end
|
335
351
|
|
336
|
-
def release_by_owner(owner_id)
|
337
|
-
find_locks(owner_id: owner_id).map { |lock| release(lock) }
|
352
|
+
def release_by_owner(owner_id, on_termination = false)
|
353
|
+
find_locks(owner_id: owner_id).map { |lock| release(lock) if !on_termination || lock.unlock_on_shutdown? }
|
338
354
|
end
|
339
355
|
|
340
356
|
def find_locks(filter_options)
|
@@ -379,9 +395,9 @@ module Dynflow
|
|
379
395
|
create_record(world)
|
380
396
|
end
|
381
397
|
|
382
|
-
def delete_world(world)
|
398
|
+
def delete_world(world, on_termination = false)
|
383
399
|
Type! world, Coordinator::ClientWorld, Coordinator::ExecutorWorld
|
384
|
-
release_by_owner("world:#{world.id}")
|
400
|
+
release_by_owner("world:#{world.id}", on_termination)
|
385
401
|
delete_record(world)
|
386
402
|
end
|
387
403
|
|
data/lib/dynflow/version.rb
CHANGED
@@ -117,7 +117,14 @@ module Dynflow
|
|
117
117
|
# @return [Integer] number of invalidated worlds
|
118
118
|
def perform_validity_checks
|
119
119
|
world_invalidation_result = worlds_validity_check
|
120
|
-
locks_validity_check
|
120
|
+
locks_validity_check.each do |lock|
|
121
|
+
case lock
|
122
|
+
when ::Dynflow::Coordinator::PlanningLock
|
123
|
+
invalidate_planning_lock(lock)
|
124
|
+
when ::Dynflow::Coordinator::ExecutionLock
|
125
|
+
invalidate_execution_lock(lock)
|
126
|
+
end
|
127
|
+
end
|
121
128
|
pruned = connector.prune_undeliverable_envelopes(self)
|
122
129
|
logger.error("Pruned #{pruned} undeliverable envelopes") unless pruned.zero?
|
123
130
|
world_invalidation_result.values.select { |result| result == :invalidated }.size
|
data/lib/dynflow/world.rb
CHANGED
data/lib/dynflow.rb
CHANGED
@@ -25,7 +25,7 @@ module Dynflow
|
|
25
25
|
# @return [Dynflow::World, nil]
|
26
26
|
def process_world
|
27
27
|
return @process_world if defined? @process_world
|
28
|
-
@process_world = Sidekiq.configure_server { |c| c
|
28
|
+
@process_world = Sidekiq.configure_server { |c| c[:dynflow_world] }
|
29
29
|
raise "process world is not set" unless @process_world
|
30
30
|
@process_world
|
31
31
|
end
|
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.8.
|
4
|
+
version: 1.8.4
|
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: 2024-
|
12
|
+
date: 2024-05-16 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: algebrick
|
@@ -682,7 +682,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
682
682
|
- !ruby/object:Gem::Version
|
683
683
|
version: '0'
|
684
684
|
requirements: []
|
685
|
-
rubygems_version: 3.
|
685
|
+
rubygems_version: 3.3.26
|
686
686
|
signing_key:
|
687
687
|
specification_version: 4
|
688
688
|
summary: DYNamic workFLOW engine
|