dynflow 0.8.3 → 0.8.4
Sign up to get free protection for your applications and to get access to all the features.
- 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
|