dynflow 0.8.3 → 0.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 +8 -8
- data/doc/pages/source/documentation/index.md +14 -14
- data/dynflow.gemspec +0 -1
- data/examples/future_execution.rb +7 -7
- data/lib/dynflow.rb +3 -3
- data/lib/dynflow/action.rb +7 -9
- data/lib/dynflow/action/with_sub_plans.rb +9 -3
- data/lib/dynflow/config.rb +2 -2
- data/lib/dynflow/coordinator.rb +3 -3
- data/lib/dynflow/delayed_executors.rb +9 -0
- data/lib/dynflow/{schedulers → delayed_executors}/abstract.rb +3 -3
- data/lib/dynflow/{schedulers → delayed_executors}/abstract_core.rb +7 -7
- data/lib/dynflow/{schedulers → delayed_executors}/polling.rb +6 -6
- data/lib/dynflow/{scheduled_plan.rb → delayed_plan.rb} +4 -4
- data/lib/dynflow/execution_plan.rb +10 -10
- data/lib/dynflow/execution_plan/output_reference.rb +2 -2
- data/lib/dynflow/execution_plan/steps/error.rb +1 -1
- data/lib/dynflow/execution_plan/steps/plan_step.rb +2 -2
- data/lib/dynflow/middleware.rb +1 -1
- data/lib/dynflow/middleware/stack.rb +1 -1
- data/lib/dynflow/middleware/world.rb +1 -1
- data/lib/dynflow/persistence.rb +10 -10
- data/lib/dynflow/persistence_adapters/abstract.rb +4 -4
- data/lib/dynflow/persistence_adapters/sequel.rb +17 -17
- data/lib/dynflow/persistence_adapters/sequel_migrations/008_rename_scheduled_plans_to_delayed_plans.rb +5 -0
- data/lib/dynflow/serializable.rb +1 -1
- data/lib/dynflow/serializer.rb +1 -1
- data/lib/dynflow/testing/assertions.rb +1 -1
- data/lib/dynflow/utils.rb +205 -0
- data/lib/dynflow/version.rb +1 -1
- data/lib/dynflow/web/console_helpers.rb +1 -1
- data/lib/dynflow/web/filtering_helpers.rb +3 -3
- data/lib/dynflow/world.rb +16 -16
- data/test/action_test.rb +4 -2
- data/test/future_execution_test.rb +32 -32
- data/test/middleware_test.rb +5 -5
- data/test/persistence_test.rb +3 -3
- data/test/support/dummy_example.rb +2 -2
- data/test/support/middleware_example.rb +5 -5
- data/test/test_helper.rb +1 -1
- data/test/testing_test.rb +1 -1
- data/web/views/show.erb +3 -3
- metadata +9 -21
- data/lib/dynflow/schedulers.rb +0 -9
data/lib/dynflow/version.rb
CHANGED
@@ -133,7 +133,7 @@ module Dynflow
|
|
133
133
|
end
|
134
134
|
|
135
135
|
def updated_url(new_params)
|
136
|
-
url(request.path_info + "?" + Rack::Utils.build_nested_query(params.merge(
|
136
|
+
url(request.path_info + "?" + Rack::Utils.build_nested_query(params.merge(Utils.stringify_keys(new_params))))
|
137
137
|
end
|
138
138
|
|
139
139
|
def paginated_url(delta)
|
@@ -20,16 +20,16 @@ module Dynflow
|
|
20
20
|
filters = params[:filters]
|
21
21
|
elsif supported_filter?('state')
|
22
22
|
excluded_states = show_all ? [] : ['stopped']
|
23
|
-
filters = { 'state' => ExecutionPlan.states.map(&:to_s) - excluded_states }
|
23
|
+
filters = { 'state' => ExecutionPlan.states.map(&:to_s) - excluded_states }
|
24
24
|
else
|
25
25
|
filters = {}
|
26
26
|
end
|
27
|
-
@filtering_options =
|
27
|
+
@filtering_options = Utils.indifferent_hash(filters: filters)
|
28
28
|
return @filtering_options
|
29
29
|
end
|
30
30
|
|
31
31
|
def find_execution_plans_options(show_all = false)
|
32
|
-
options =
|
32
|
+
options = Utils.indifferent_hash({})
|
33
33
|
options.merge!(filtering_options(show_all))
|
34
34
|
options.merge!(pagination_options)
|
35
35
|
options.merge!(ordering_options)
|
data/lib/dynflow/world.rb
CHANGED
@@ -7,7 +7,7 @@ module Dynflow
|
|
7
7
|
attr_reader :id, :client_dispatcher, :executor_dispatcher, :executor, :connector,
|
8
8
|
:transaction_adapter, :logger_adapter, :coordinator,
|
9
9
|
:persistence, :action_classes, :subscription_index,
|
10
|
-
:middleware, :auto_rescue, :clock, :meta, :
|
10
|
+
:middleware, :auto_rescue, :clock, :meta, :delayed_executor, :auto_validity_check, :validity_check_timeout
|
11
11
|
|
12
12
|
def initialize(config)
|
13
13
|
@id = SecureRandom.uuid
|
@@ -35,9 +35,9 @@ module Dynflow
|
|
35
35
|
executor.initialized.wait
|
36
36
|
end
|
37
37
|
self.worlds_validity_check if auto_validity_check
|
38
|
-
@
|
39
|
-
@meta
|
40
|
-
@meta['
|
38
|
+
@delayed_executor = try_spawn_delayed_executor(config_for_world)
|
39
|
+
@meta = config_for_world.meta
|
40
|
+
@meta['delayed_executor'] = true if @delayed_executor
|
41
41
|
coordinator.register_world(registered_world)
|
42
42
|
@termination_barrier = Mutex.new
|
43
43
|
@before_termination_hooks = Queue.new
|
@@ -49,7 +49,7 @@ module Dynflow
|
|
49
49
|
end
|
50
50
|
end
|
51
51
|
self.auto_execute if config_for_world.auto_execute
|
52
|
-
@
|
52
|
+
@delayed_executor.start if @delayed_executor
|
53
53
|
end
|
54
54
|
|
55
55
|
def before_termination(&block)
|
@@ -81,7 +81,7 @@ module Dynflow
|
|
81
81
|
# TODO what happens with newly loaded classes
|
82
82
|
@action_classes = @action_classes.map do |klass|
|
83
83
|
begin
|
84
|
-
klass.to_s
|
84
|
+
Utils.constantize(klass.to_s)
|
85
85
|
rescue NameError
|
86
86
|
nil # ignore missing classes
|
87
87
|
end
|
@@ -146,10 +146,10 @@ module Dynflow
|
|
146
146
|
end
|
147
147
|
end
|
148
148
|
|
149
|
-
def
|
149
|
+
def delay(action_class, delay_options, *args)
|
150
150
|
raise 'No action_class given' if action_class.nil?
|
151
151
|
execution_plan = ExecutionPlan.new self
|
152
|
-
execution_plan.
|
152
|
+
execution_plan.delay(action_class, delay_options, *args)
|
153
153
|
Scheduled[execution_plan.id]
|
154
154
|
end
|
155
155
|
|
@@ -199,9 +199,9 @@ module Dynflow
|
|
199
199
|
begin
|
200
200
|
run_before_termination_hooks
|
201
201
|
|
202
|
-
if
|
203
|
-
logger.info "start terminating
|
204
|
-
|
202
|
+
if delayed_executor
|
203
|
+
logger.info "start terminating delayed_executor..."
|
204
|
+
delayed_executor.terminate.wait
|
205
205
|
end
|
206
206
|
|
207
207
|
if executor
|
@@ -337,10 +337,10 @@ module Dynflow
|
|
337
337
|
end
|
338
338
|
end
|
339
339
|
|
340
|
-
def
|
341
|
-
return nil if !executor || config_for_world.
|
342
|
-
coordinator.acquire(Coordinator::
|
343
|
-
config_for_world.
|
340
|
+
def try_spawn_delayed_executor(config_for_world)
|
341
|
+
return nil if !executor || config_for_world.delayed_executor.nil?
|
342
|
+
coordinator.acquire(Coordinator::DelayedExecutorLock.new(self))
|
343
|
+
config_for_world.delayed_executor
|
344
344
|
rescue Coordinator::LockError => e
|
345
345
|
nil
|
346
346
|
end
|
@@ -352,7 +352,7 @@ module Dynflow
|
|
352
352
|
action_classes.each_with_object(Hash.new { |h, k| h[k] = [] }) do |klass, index|
|
353
353
|
next unless klass.subscribe
|
354
354
|
Array(klass.subscribe).each do |subscribed_class|
|
355
|
-
index[subscribed_class.to_s
|
355
|
+
index[Utils.constantize(subscribed_class.to_s)] << klass
|
356
356
|
end
|
357
357
|
end.tap { |o| o.freeze }
|
358
358
|
end
|
data/test/action_test.rb
CHANGED
@@ -392,14 +392,16 @@ module Dynflow
|
|
392
392
|
specify "it saves the information about number for sub plans in the output" do
|
393
393
|
execution_plan.entry_action.output.must_equal('total_count' => 2,
|
394
394
|
'failed_count' => 0,
|
395
|
-
'success_count' => 2
|
395
|
+
'success_count' => 2,
|
396
|
+
'pending_count' => 0)
|
396
397
|
end
|
397
398
|
|
398
399
|
specify "when a sub plan fails, the caller action fails as well" do
|
399
400
|
FailureSimulator.fail_in_child_run = true
|
400
401
|
execution_plan.entry_action.output.must_equal('total_count' => 2,
|
401
402
|
'failed_count' => 2,
|
402
|
-
'success_count' => 0
|
403
|
+
'success_count' => 0,
|
404
|
+
'pending_count' => 0)
|
403
405
|
execution_plan.state.must_equal :paused
|
404
406
|
execution_plan.result.must_equal :error
|
405
407
|
end
|
@@ -11,19 +11,19 @@ module Dynflow
|
|
11
11
|
|
12
12
|
before do
|
13
13
|
@start_at = Time.now.utc + 180
|
14
|
-
world.persistence.
|
14
|
+
world.persistence.delete_delayed_plans(:execution_plan_uuid => [])
|
15
15
|
end
|
16
16
|
|
17
17
|
let(:world) { WorldFactory.create_world }
|
18
|
-
let(:
|
19
|
-
|
20
|
-
|
21
|
-
world.persistence.
|
18
|
+
let(:delayed_plan) do
|
19
|
+
delayed_plan = world.delay(::Support::DummyExample::Dummy, { :start_at => @start_at })
|
20
|
+
delayed_plan.must_be :scheduled?
|
21
|
+
world.persistence.load_delayed_plan(delayed_plan.execution_plan_id)
|
22
22
|
end
|
23
23
|
let(:history_names) do
|
24
24
|
->(execution_plan) { execution_plan.execution_history.map(&:name) }
|
25
25
|
end
|
26
|
-
let(:execution_plan) {
|
26
|
+
let(:execution_plan) { delayed_plan.execution_plan }
|
27
27
|
|
28
28
|
it 'returns the progress as 0' do
|
29
29
|
execution_plan.progress.must_equal 0
|
@@ -31,45 +31,45 @@ module Dynflow
|
|
31
31
|
|
32
32
|
it 'marks the plan as failed when issues in serialied phase' do
|
33
33
|
world.persistence.delete_execution_plans({})
|
34
|
-
e = proc { world.
|
34
|
+
e = proc { world.delay(::Support::DummyExample::DummyCustomDelaySerializer, { :start_at => @start_at }, :fail) }.must_raise RuntimeError
|
35
35
|
e.message.must_equal 'Enforced serializer failure'
|
36
36
|
plan = world.persistence.find_execution_plans(page: 0, per_page: 1, order_by: :ended_at, desc: true).first
|
37
37
|
plan.state.must_equal :stopped
|
38
38
|
plan.result.must_equal :error
|
39
39
|
end
|
40
40
|
|
41
|
-
it '
|
41
|
+
it 'delays the action' do
|
42
42
|
execution_plan.steps.count.must_equal 1
|
43
|
-
|
44
|
-
history_names.call(execution_plan).must_equal ['
|
43
|
+
delayed_plan.start_at.inspect.must_equal (@start_at).inspect
|
44
|
+
history_names.call(execution_plan).must_equal ['delay']
|
45
45
|
end
|
46
46
|
|
47
|
-
it 'allows cancelling the
|
47
|
+
it 'allows cancelling the delayed plan' do
|
48
48
|
execution_plan.state.must_equal :scheduled
|
49
49
|
execution_plan.cancellable?.must_equal true
|
50
50
|
execution_plan.cancel.each(&:wait)
|
51
51
|
execution_plan = world.persistence.load_execution_plan(self.execution_plan.id)
|
52
52
|
execution_plan.state.must_equal :stopped
|
53
53
|
execution_plan.result.must_equal :error
|
54
|
-
execution_plan.
|
54
|
+
execution_plan.delay_record.must_equal nil
|
55
55
|
end
|
56
56
|
|
57
|
-
it 'finds
|
57
|
+
it 'finds delayed plans' do
|
58
58
|
@start_at = Time.now.utc - 100
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
59
|
+
delayed_plan
|
60
|
+
past_delayed_plans = world.persistence.find_past_delayed_plans(@start_at + 10)
|
61
|
+
past_delayed_plans.length.must_equal 1
|
62
|
+
past_delayed_plans.first.execution_plan_uuid.must_equal execution_plan.id
|
63
63
|
end
|
64
64
|
|
65
|
-
it '
|
65
|
+
it 'delayed plans can be planned and executed' do
|
66
66
|
execution_plan.state.must_equal :scheduled
|
67
|
-
|
67
|
+
delayed_plan.plan
|
68
68
|
execution_plan.state.must_equal :planned
|
69
69
|
execution_plan.result.must_equal :pending
|
70
70
|
assert_planning_success execution_plan
|
71
|
-
history_names.call(execution_plan).must_equal ['
|
72
|
-
executed =
|
71
|
+
history_names.call(execution_plan).must_equal ['delay']
|
72
|
+
executed = delayed_plan.execute
|
73
73
|
executed.wait
|
74
74
|
executed.value.state.must_equal :stopped
|
75
75
|
executed.value.result.must_equal :success
|
@@ -77,36 +77,36 @@ module Dynflow
|
|
77
77
|
end
|
78
78
|
|
79
79
|
it 'expired plans can be failed' do
|
80
|
-
|
80
|
+
delayed_plan.timeout
|
81
81
|
execution_plan.state.must_equal :stopped
|
82
82
|
execution_plan.result.must_equal :error
|
83
83
|
execution_plan.errors.first.message.must_match /could not be started before set time/
|
84
|
-
history_names.call(execution_plan).must_equal %W(
|
84
|
+
history_names.call(execution_plan).must_equal %W(delay timeout)
|
85
85
|
end
|
86
86
|
|
87
87
|
end
|
88
88
|
|
89
|
-
describe 'polling
|
89
|
+
describe 'polling delayed executor' do
|
90
90
|
let(:dummy_world) { Dynflow::Testing::DummyWorld.new }
|
91
91
|
let(:persistence) { MiniTest::Mock.new }
|
92
92
|
let(:options) { { :poll_interval => 15, :time_source => -> { dummy_world.clock.current_time } } }
|
93
|
-
let(:
|
93
|
+
let(:delayed_executor) { DelayedExecutors::Polling.new(dummy_world, options) }
|
94
94
|
let(:klok) { dummy_world.clock }
|
95
95
|
|
96
|
-
it 'checks for
|
96
|
+
it 'checks for delayed plans in regular intervals' do
|
97
97
|
start_time = klok.current_time
|
98
|
-
persistence.expect(:
|
99
|
-
persistence.expect(:
|
98
|
+
persistence.expect(:find_past_delayed_plans, [], [start_time])
|
99
|
+
persistence.expect(:find_past_delayed_plans, [], [start_time + options[:poll_interval]])
|
100
100
|
dummy_world.stub :persistence, persistence do
|
101
101
|
klok.pending_pings.length.must_equal 0
|
102
|
-
|
102
|
+
delayed_executor.start.wait
|
103
103
|
klok.pending_pings.length.must_equal 1
|
104
|
-
klok.pending_pings.first.who.ref.must_be_same_as
|
104
|
+
klok.pending_pings.first.who.ref.must_be_same_as delayed_executor.core
|
105
105
|
klok.pending_pings.first.when.must_equal start_time + options[:poll_interval]
|
106
106
|
klok.progress
|
107
|
-
|
107
|
+
delayed_executor.terminate.wait
|
108
108
|
klok.pending_pings.length.must_equal 1
|
109
|
-
klok.pending_pings.first.who.ref.must_be_same_as
|
109
|
+
klok.pending_pings.first.who.ref.must_be_same_as delayed_executor.core
|
110
110
|
klok.pending_pings.first.when.must_equal start_time + 2 * options[:poll_interval]
|
111
111
|
klok.progress
|
112
112
|
klok.pending_pings.length.must_equal 0
|
data/test/middleware_test.rb
CHANGED
@@ -12,13 +12,13 @@ module Dynflow
|
|
12
12
|
end
|
13
13
|
|
14
14
|
it "wraps the action method calls" do
|
15
|
-
|
16
|
-
plan = world.persistence.
|
15
|
+
delay = world.delay(Support::MiddlewareExample::LoggingAction, { :start_at => Time.now.utc - 60 }, {})
|
16
|
+
plan = world.persistence.load_delayed_plan delay.execution_plan_id
|
17
17
|
plan.plan
|
18
18
|
plan.execute.wait
|
19
|
-
log.must_equal %w[LogMiddleware::
|
20
|
-
|
21
|
-
LogMiddleware::
|
19
|
+
log.must_equal %w[LogMiddleware::before_delay
|
20
|
+
delay
|
21
|
+
LogMiddleware::after_delay
|
22
22
|
LogMiddleware::before_plan_phase
|
23
23
|
LogMiddleware::before_plan
|
24
24
|
plan
|
data/test/persistence_test.rb
CHANGED
@@ -148,7 +148,7 @@ module Dynflow
|
|
148
148
|
prepare_action('plan1')
|
149
149
|
loaded_action = adapter.load_action('plan1', action_id)
|
150
150
|
loaded_action[:id].must_equal action_id
|
151
|
-
loaded_action.must_equal(
|
151
|
+
loaded_action.must_equal(Utils.stringify_keys(action_data))
|
152
152
|
|
153
153
|
adapter.save_action('plan1', action_id, nil)
|
154
154
|
-> { adapter.load_action('plan1', action_id) }.must_raise KeyError
|
@@ -164,7 +164,7 @@ module Dynflow
|
|
164
164
|
prepare_step('plan1')
|
165
165
|
loaded_step = adapter.load_step('plan1', step_id)
|
166
166
|
loaded_step[:id].must_equal step_id
|
167
|
-
loaded_step.must_equal(
|
167
|
+
loaded_step.must_equal(Utils.stringify_keys(step_data))
|
168
168
|
end
|
169
169
|
end
|
170
170
|
end
|
@@ -189,7 +189,7 @@ module Dynflow
|
|
189
189
|
it "supports connector's needs for exchaning envelopes" do
|
190
190
|
client_world_id = '5678'
|
191
191
|
executor_world_id = '1234'
|
192
|
-
envelope_hash = ->(envelope) { Dynflow.serializer.dump(envelope)
|
192
|
+
envelope_hash = ->(envelope) { Dynflow::Utils.indifferent_hash(Dynflow.serializer.dump(envelope)) }
|
193
193
|
executor_envelope = envelope_hash.call(Dispatcher::Envelope[123, client_world_id, executor_world_id, Dispatcher::Execution['111']])
|
194
194
|
client_envelope = envelope_hash.call(Dispatcher::Envelope[123, executor_world_id, client_world_id, Dispatcher::Accepted])
|
195
195
|
envelopes = [client_envelope, executor_envelope]
|
@@ -19,8 +19,8 @@ module Support
|
|
19
19
|
end
|
20
20
|
end
|
21
21
|
|
22
|
-
class
|
23
|
-
def
|
22
|
+
class DummyCustomDelaySerializer < Dynflow::Action
|
23
|
+
def delay(delay_options, *args)
|
24
24
|
MySerializer.new(args)
|
25
25
|
end
|
26
26
|
def run; end
|
@@ -14,10 +14,10 @@ module Support
|
|
14
14
|
LogMiddleware.log << "#{self.class.name[/\w+$/]}::#{message}"
|
15
15
|
end
|
16
16
|
|
17
|
-
def
|
18
|
-
log '
|
17
|
+
def delay(*args)
|
18
|
+
log 'before_delay'
|
19
19
|
pass *args
|
20
|
-
log '
|
20
|
+
log 'after_delay'
|
21
21
|
end
|
22
22
|
|
23
23
|
def plan(args)
|
@@ -78,8 +78,8 @@ module Support
|
|
78
78
|
LogMiddleware.log << message
|
79
79
|
end
|
80
80
|
|
81
|
-
def
|
82
|
-
log '
|
81
|
+
def delay(delay_options, *args)
|
82
|
+
log 'delay'
|
83
83
|
Dynflow::Serializers::Noop.new(args)
|
84
84
|
end
|
85
85
|
|
data/test/test_helper.rb
CHANGED
@@ -88,7 +88,7 @@ module WorldFactory
|
|
88
88
|
config.persistence_adapter = persistence_adapter
|
89
89
|
config.logger_adapter = logger_adapter
|
90
90
|
config.coordinator_adapter = coordinator_adapter
|
91
|
-
config.
|
91
|
+
config.delayed_executor = nil
|
92
92
|
config.auto_rescue = false
|
93
93
|
config.exit_on_terminate = false
|
94
94
|
config.auto_execute = false
|
data/test/testing_test.rb
CHANGED
@@ -118,7 +118,7 @@ module Dynflow
|
|
118
118
|
let(:runned_action) { run_action planned_action }
|
119
119
|
|
120
120
|
it 'plans' do
|
121
|
-
planned_action.input.must_equal
|
121
|
+
planned_action.input.must_equal Utils.stringify_keys(input)
|
122
122
|
assert_run_phase planned_action, { commit: "sha", reviewer: "name", result: true}
|
123
123
|
refute_finalize_phase planned_action
|
124
124
|
|
data/web/views/show.erb
CHANGED
@@ -14,14 +14,14 @@
|
|
14
14
|
<%= h(@plan.result) %>
|
15
15
|
</p>
|
16
16
|
|
17
|
-
<% if @plan.state == :scheduled && @plan.
|
17
|
+
<% if @plan.state == :scheduled && @plan.delay_record %>
|
18
18
|
<p>
|
19
19
|
<b>Start at:</b>
|
20
|
-
<%= h(@plan.
|
20
|
+
<%= h(@plan.delay_record.start_at) %>
|
21
21
|
</p>
|
22
22
|
<p>
|
23
23
|
<b>Start before:</b>
|
24
|
-
<%= h(@plan.
|
24
|
+
<%= h(@plan.delay_record.start_before || "-") %>
|
25
25
|
</p>
|
26
26
|
<% end %>
|
27
27
|
|
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: 0.8.
|
4
|
+
version: 0.8.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ivan Necas
|
@@ -9,22 +9,8 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2015-08-
|
12
|
+
date: 2015-08-14 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
|
-
- !ruby/object:Gem::Dependency
|
15
|
-
name: activesupport
|
16
|
-
requirement: !ruby/object:Gem::Requirement
|
17
|
-
requirements:
|
18
|
-
- - ! '>='
|
19
|
-
- !ruby/object:Gem::Version
|
20
|
-
version: '0'
|
21
|
-
type: :runtime
|
22
|
-
prerelease: false
|
23
|
-
version_requirements: !ruby/object:Gem::Requirement
|
24
|
-
requirements:
|
25
|
-
- - ! '>='
|
26
|
-
- !ruby/object:Gem::Version
|
27
|
-
version: '0'
|
28
14
|
- !ruby/object:Gem::Dependency
|
29
15
|
name: multi_json
|
30
16
|
requirement: !ruby/object:Gem::Requirement
|
@@ -369,6 +355,11 @@ files:
|
|
369
355
|
- lib/dynflow/coordinator_adapters.rb
|
370
356
|
- lib/dynflow/coordinator_adapters/abstract.rb
|
371
357
|
- lib/dynflow/coordinator_adapters/sequel.rb
|
358
|
+
- lib/dynflow/delayed_executors.rb
|
359
|
+
- lib/dynflow/delayed_executors/abstract.rb
|
360
|
+
- lib/dynflow/delayed_executors/abstract_core.rb
|
361
|
+
- lib/dynflow/delayed_executors/polling.rb
|
362
|
+
- lib/dynflow/delayed_plan.rb
|
372
363
|
- lib/dynflow/dispatcher.rb
|
373
364
|
- lib/dynflow/dispatcher/abstract.rb
|
374
365
|
- lib/dynflow/dispatcher/client_dispatcher.rb
|
@@ -426,12 +417,8 @@ files:
|
|
426
417
|
- lib/dynflow/persistence_adapters/sequel_migrations/005_envelopes.rb
|
427
418
|
- lib/dynflow/persistence_adapters/sequel_migrations/006_fix_data_length.rb
|
428
419
|
- lib/dynflow/persistence_adapters/sequel_migrations/007_future_execution.rb
|
420
|
+
- lib/dynflow/persistence_adapters/sequel_migrations/008_rename_scheduled_plans_to_delayed_plans.rb
|
429
421
|
- lib/dynflow/round_robin.rb
|
430
|
-
- lib/dynflow/scheduled_plan.rb
|
431
|
-
- lib/dynflow/schedulers.rb
|
432
|
-
- lib/dynflow/schedulers/abstract.rb
|
433
|
-
- lib/dynflow/schedulers/abstract_core.rb
|
434
|
-
- lib/dynflow/schedulers/polling.rb
|
435
422
|
- lib/dynflow/serializable.rb
|
436
423
|
- lib/dynflow/serializer.rb
|
437
424
|
- lib/dynflow/serializers.rb
|
@@ -452,6 +439,7 @@ files:
|
|
452
439
|
- lib/dynflow/transaction_adapters/abstract.rb
|
453
440
|
- lib/dynflow/transaction_adapters/active_record.rb
|
454
441
|
- lib/dynflow/transaction_adapters/none.rb
|
442
|
+
- lib/dynflow/utils.rb
|
455
443
|
- lib/dynflow/version.rb
|
456
444
|
- lib/dynflow/web.rb
|
457
445
|
- lib/dynflow/web/console.rb
|