dynflow 1.3.0 → 1.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (225) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +1 -1
  3. data/.travis.yml +3 -4
  4. data/Dockerfile +9 -0
  5. data/Gemfile +6 -0
  6. data/Rakefile +1 -0
  7. data/doc/pages/Gemfile +1 -0
  8. data/doc/pages/Rakefile +1 -0
  9. data/doc/pages/plugins/alert_block.rb +1 -0
  10. data/doc/pages/plugins/div_tag.rb +1 -0
  11. data/doc/pages/plugins/graphviz.rb +1 -0
  12. data/doc/pages/plugins/plantuml.rb +1 -0
  13. data/doc/pages/plugins/play.rb +1 -0
  14. data/doc/pages/plugins/tags.rb +1 -0
  15. data/doc/pages/plugins/toc.rb +1 -0
  16. data/docker-compose.yml +41 -0
  17. data/dynflow.gemspec +1 -0
  18. data/examples/clock_benchmark.rb +1 -0
  19. data/examples/example_helper.rb +19 -2
  20. data/examples/future_execution.rb +2 -1
  21. data/examples/memory_limit_watcher.rb +1 -0
  22. data/examples/orchestrate.rb +4 -5
  23. data/examples/orchestrate_evented.rb +3 -2
  24. data/examples/remote_executor.rb +68 -0
  25. data/examples/singletons.rb +4 -3
  26. data/examples/sub_plan_concurrency_control.rb +2 -1
  27. data/examples/sub_plans.rb +3 -2
  28. data/examples/termination.rb +1 -0
  29. data/lib/dynflow.rb +20 -0
  30. data/lib/dynflow/action.rb +28 -3
  31. data/lib/dynflow/action/cancellable.rb +1 -0
  32. data/lib/dynflow/action/format.rb +1 -0
  33. data/lib/dynflow/action/missing.rb +1 -0
  34. data/lib/dynflow/action/polling.rb +3 -1
  35. data/lib/dynflow/action/progress.rb +1 -0
  36. data/lib/dynflow/action/rescue.rb +1 -0
  37. data/lib/dynflow/action/singleton.rb +1 -0
  38. data/lib/dynflow/action/suspended.rb +9 -2
  39. data/lib/dynflow/action/timeouts.rb +2 -1
  40. data/lib/dynflow/action/with_bulk_sub_plans.rb +2 -1
  41. data/lib/dynflow/action/with_polling_sub_plans.rb +7 -5
  42. data/lib/dynflow/action/with_sub_plans.rb +1 -0
  43. data/lib/dynflow/active_job/queue_adapter.rb +1 -0
  44. data/lib/dynflow/actor.rb +13 -5
  45. data/lib/dynflow/actors.rb +1 -0
  46. data/lib/dynflow/actors/execution_plan_cleaner.rb +1 -0
  47. data/lib/dynflow/clock.rb +27 -47
  48. data/lib/dynflow/config.rb +11 -2
  49. data/lib/dynflow/connectors.rb +1 -0
  50. data/lib/dynflow/connectors/abstract.rb +1 -0
  51. data/lib/dynflow/connectors/database.rb +1 -0
  52. data/lib/dynflow/connectors/direct.rb +1 -0
  53. data/lib/dynflow/coordinator.rb +1 -0
  54. data/lib/dynflow/coordinator_adapters.rb +1 -0
  55. data/lib/dynflow/coordinator_adapters/abstract.rb +1 -0
  56. data/lib/dynflow/coordinator_adapters/sequel.rb +1 -0
  57. data/lib/dynflow/dead_letter_silencer.rb +2 -0
  58. data/lib/dynflow/debug/telemetry/persistence.rb +1 -0
  59. data/lib/dynflow/delayed_executors.rb +1 -0
  60. data/lib/dynflow/delayed_executors/abstract.rb +1 -0
  61. data/lib/dynflow/delayed_executors/abstract_core.rb +1 -0
  62. data/lib/dynflow/delayed_executors/polling.rb +1 -0
  63. data/lib/dynflow/delayed_plan.rb +1 -0
  64. data/lib/dynflow/director.rb +80 -15
  65. data/lib/dynflow/director/execution_plan_manager.rb +17 -3
  66. data/lib/dynflow/director/flow_manager.rb +1 -0
  67. data/lib/dynflow/director/{work_queue.rb → queue_hash.rb} +9 -8
  68. data/lib/dynflow/director/running_steps_manager.rb +55 -18
  69. data/lib/dynflow/director/sequence_cursor.rb +1 -0
  70. data/lib/dynflow/director/sequential_manager.rb +12 -2
  71. data/lib/dynflow/dispatcher.rb +4 -2
  72. data/lib/dynflow/dispatcher/abstract.rb +1 -0
  73. data/lib/dynflow/dispatcher/client_dispatcher.rb +6 -4
  74. data/lib/dynflow/dispatcher/executor_dispatcher.rb +13 -1
  75. data/lib/dynflow/errors.rb +1 -0
  76. data/lib/dynflow/execution_history.rb +1 -0
  77. data/lib/dynflow/execution_plan.rb +3 -2
  78. data/lib/dynflow/execution_plan/dependency_graph.rb +1 -0
  79. data/lib/dynflow/execution_plan/hooks.rb +1 -0
  80. data/lib/dynflow/execution_plan/output_reference.rb +2 -1
  81. data/lib/dynflow/execution_plan/steps.rb +1 -0
  82. data/lib/dynflow/execution_plan/steps/abstract.rb +10 -5
  83. data/lib/dynflow/execution_plan/steps/abstract_flow_step.rb +2 -0
  84. data/lib/dynflow/execution_plan/steps/error.rb +1 -0
  85. data/lib/dynflow/execution_plan/steps/finalize_step.rb +1 -0
  86. data/lib/dynflow/execution_plan/steps/plan_step.rb +1 -0
  87. data/lib/dynflow/execution_plan/steps/run_step.rb +1 -0
  88. data/lib/dynflow/executors.rb +1 -1
  89. data/lib/dynflow/executors/abstract/core.rb +132 -0
  90. data/lib/dynflow/executors/parallel.rb +24 -11
  91. data/lib/dynflow/executors/parallel/core.rb +10 -91
  92. data/lib/dynflow/executors/parallel/pool.rb +4 -2
  93. data/lib/dynflow/executors/parallel/worker.rb +2 -1
  94. data/lib/dynflow/executors/sidekiq/core.rb +121 -0
  95. data/lib/dynflow/executors/sidekiq/internal_job_base.rb +24 -0
  96. data/lib/dynflow/executors/sidekiq/orchestrator_jobs.rb +60 -0
  97. data/lib/dynflow/executors/sidekiq/redis_locking.rb +69 -0
  98. data/lib/dynflow/executors/sidekiq/serialization.rb +33 -0
  99. data/lib/dynflow/executors/sidekiq/worker_jobs.rb +42 -0
  100. data/lib/dynflow/flows.rb +1 -0
  101. data/lib/dynflow/flows/abstract.rb +1 -0
  102. data/lib/dynflow/flows/abstract_composed.rb +1 -0
  103. data/lib/dynflow/flows/atom.rb +1 -0
  104. data/lib/dynflow/flows/concurrence.rb +1 -0
  105. data/lib/dynflow/flows/sequence.rb +1 -0
  106. data/lib/dynflow/logger_adapters.rb +1 -0
  107. data/lib/dynflow/logger_adapters/abstract.rb +1 -0
  108. data/lib/dynflow/logger_adapters/delegator.rb +1 -0
  109. data/lib/dynflow/logger_adapters/formatters.rb +1 -0
  110. data/lib/dynflow/logger_adapters/formatters/abstract.rb +1 -0
  111. data/lib/dynflow/logger_adapters/formatters/exception.rb +1 -0
  112. data/lib/dynflow/logger_adapters/simple.rb +1 -0
  113. data/lib/dynflow/middleware.rb +1 -0
  114. data/lib/dynflow/middleware/common/singleton.rb +1 -0
  115. data/lib/dynflow/middleware/common/transaction.rb +1 -0
  116. data/lib/dynflow/middleware/register.rb +1 -0
  117. data/lib/dynflow/middleware/resolver.rb +1 -0
  118. data/lib/dynflow/middleware/stack.rb +1 -0
  119. data/lib/dynflow/middleware/world.rb +1 -0
  120. data/lib/dynflow/persistence.rb +3 -2
  121. data/lib/dynflow/persistence_adapters.rb +1 -0
  122. data/lib/dynflow/persistence_adapters/abstract.rb +1 -0
  123. data/lib/dynflow/persistence_adapters/sequel.rb +10 -7
  124. data/lib/dynflow/persistence_adapters/sequel_migrations/001_initial.rb +1 -0
  125. data/lib/dynflow/persistence_adapters/sequel_migrations/002_incremental_progress.rb +1 -0
  126. data/lib/dynflow/persistence_adapters/sequel_migrations/003_parent_action.rb +1 -0
  127. data/lib/dynflow/persistence_adapters/sequel_migrations/004_coordinator_records.rb +1 -0
  128. data/lib/dynflow/persistence_adapters/sequel_migrations/005_envelopes.rb +1 -0
  129. data/lib/dynflow/persistence_adapters/sequel_migrations/006_fix_data_length.rb +1 -0
  130. data/lib/dynflow/persistence_adapters/sequel_migrations/007_future_execution.rb +1 -0
  131. data/lib/dynflow/persistence_adapters/sequel_migrations/008_rename_scheduled_plans_to_delayed_plans.rb +1 -0
  132. data/lib/dynflow/persistence_adapters/sequel_migrations/009_fix_mysql_data_length.rb +1 -0
  133. data/lib/dynflow/persistence_adapters/sequel_migrations/010_add_execution_plans_label.rb +1 -0
  134. data/lib/dynflow/persistence_adapters/sequel_migrations/011_placeholder.rb +1 -0
  135. data/lib/dynflow/persistence_adapters/sequel_migrations/012_add_delayed_plans_serialized_args.rb +1 -0
  136. data/lib/dynflow/persistence_adapters/sequel_migrations/013_add_action_columns.rb +1 -0
  137. data/lib/dynflow/persistence_adapters/sequel_migrations/014_add_step_columns.rb +1 -0
  138. data/lib/dynflow/persistence_adapters/sequel_migrations/015_add_execution_plan_columns.rb +1 -0
  139. data/lib/dynflow/persistence_adapters/sequel_migrations/016_add_step_queue.rb +1 -0
  140. data/lib/dynflow/persistence_adapters/sequel_migrations/017_add_delayed_plan_frozen.rb +1 -0
  141. data/lib/dynflow/persistence_adapters/sequel_migrations/018_add_uuid_column.rb +1 -0
  142. data/lib/dynflow/persistence_adapters/sequel_migrations/019_update_mysql_time_precision.rb +48 -0
  143. data/lib/dynflow/rails.rb +1 -0
  144. data/lib/dynflow/rails/configuration.rb +6 -3
  145. data/lib/dynflow/rails/daemon.rb +1 -0
  146. data/lib/dynflow/round_robin.rb +1 -0
  147. data/lib/dynflow/semaphores.rb +1 -0
  148. data/lib/dynflow/semaphores/abstract.rb +1 -0
  149. data/lib/dynflow/semaphores/aggregating.rb +1 -0
  150. data/lib/dynflow/semaphores/dummy.rb +1 -0
  151. data/lib/dynflow/semaphores/stateful.rb +1 -0
  152. data/lib/dynflow/serializable.rb +13 -4
  153. data/lib/dynflow/serializer.rb +24 -0
  154. data/lib/dynflow/serializers.rb +1 -0
  155. data/lib/dynflow/serializers/abstract.rb +1 -0
  156. data/lib/dynflow/serializers/noop.rb +1 -0
  157. data/lib/dynflow/stateful.rb +1 -0
  158. data/lib/dynflow/telemetry.rb +1 -0
  159. data/lib/dynflow/telemetry_adapters/abstract.rb +1 -0
  160. data/lib/dynflow/telemetry_adapters/dummy.rb +1 -0
  161. data/lib/dynflow/telemetry_adapters/statsd.rb +1 -0
  162. data/lib/dynflow/testing.rb +1 -0
  163. data/lib/dynflow/testing/assertions.rb +6 -5
  164. data/lib/dynflow/testing/dummy_execution_plan.rb +1 -0
  165. data/lib/dynflow/testing/dummy_executor.rb +19 -2
  166. data/lib/dynflow/testing/dummy_planned_action.rb +1 -0
  167. data/lib/dynflow/testing/dummy_step.rb +3 -1
  168. data/lib/dynflow/testing/dummy_world.rb +9 -0
  169. data/lib/dynflow/testing/factories.rb +6 -1
  170. data/lib/dynflow/testing/in_thread_executor.rb +22 -3
  171. data/lib/dynflow/testing/in_thread_world.rb +9 -0
  172. data/lib/dynflow/testing/managed_clock.rb +1 -0
  173. data/lib/dynflow/testing/mimic.rb +1 -0
  174. data/lib/dynflow/throttle_limiter.rb +1 -0
  175. data/lib/dynflow/transaction_adapters.rb +1 -0
  176. data/lib/dynflow/transaction_adapters/abstract.rb +1 -0
  177. data/lib/dynflow/transaction_adapters/active_record.rb +1 -0
  178. data/lib/dynflow/transaction_adapters/none.rb +1 -0
  179. data/lib/dynflow/utils.rb +1 -0
  180. data/lib/dynflow/utils/indifferent_hash.rb +1 -0
  181. data/lib/dynflow/utils/priority_queue.rb +1 -0
  182. data/lib/dynflow/version.rb +2 -1
  183. data/lib/dynflow/watchers/memory_consumption_watcher.rb +1 -0
  184. data/lib/dynflow/web.rb +1 -0
  185. data/lib/dynflow/web/console.rb +1 -0
  186. data/lib/dynflow/web/console_helpers.rb +1 -0
  187. data/lib/dynflow/web/filtering_helpers.rb +1 -0
  188. data/lib/dynflow/web/world_helpers.rb +1 -0
  189. data/lib/dynflow/web_console.rb +1 -0
  190. data/lib/dynflow/world.rb +11 -1
  191. data/lib/dynflow/world/invalidation.rb +7 -1
  192. data/test/abnormal_states_recovery_test.rb +41 -40
  193. data/test/action_test.rb +160 -110
  194. data/test/activejob_adapter_test.rb +1 -0
  195. data/test/batch_sub_tasks_test.rb +12 -11
  196. data/test/clock_test.rb +2 -1
  197. data/test/concurrency_control_test.rb +20 -19
  198. data/test/coordinator_test.rb +20 -21
  199. data/test/daemon_test.rb +2 -1
  200. data/test/dead_letter_silencer_test.rb +9 -7
  201. data/test/dispatcher_test.rb +2 -1
  202. data/test/execution_plan_cleaner_test.rb +13 -12
  203. data/test/execution_plan_hooks_test.rb +3 -2
  204. data/test/execution_plan_test.rb +33 -32
  205. data/test/executor_test.rb +533 -489
  206. data/test/future_execution_test.rb +45 -44
  207. data/test/memory_cosumption_watcher_test.rb +5 -4
  208. data/test/middleware_test.rb +55 -54
  209. data/test/persistence_test.rb +56 -53
  210. data/test/rescue_test.rb +36 -35
  211. data/test/round_robin_test.rb +13 -12
  212. data/test/semaphores_test.rb +31 -30
  213. data/test/support/code_workflow_example.rb +1 -0
  214. data/test/support/dummy_example.rb +14 -1
  215. data/test/support/middleware_example.rb +2 -1
  216. data/test/support/rails/config/environment.rb +1 -0
  217. data/test/support/rescue_example.rb +1 -0
  218. data/test/support/test_execution_log.rb +1 -0
  219. data/test/test_helper.rb +18 -17
  220. data/test/testing_test.rb +45 -44
  221. data/test/utils_test.rb +18 -17
  222. data/test/web_console_test.rb +1 -0
  223. data/test/world_test.rb +7 -6
  224. metadata +13 -4
  225. data/lib/dynflow/executors/abstract.rb +0 -40
@@ -0,0 +1,42 @@
1
+ # frozen_string_literal: true
2
+ module Dynflow
3
+ module Executors
4
+ module Sidekiq
5
+ module WorkerJobs
6
+ class PerformWork < InternalJobBase
7
+ def perform(work_item)
8
+ with_telemetry(work_item) do
9
+ Executors.run_user_code do
10
+ work_item.world = Dynflow.process_world
11
+ work_item.execute
12
+ end
13
+ end
14
+ rescue Errors::PersistenceError => e
15
+ OrchestratorJobs::HandlePersistenceError.perform_async(e, work_item)
16
+ ensure
17
+ step = work_item.step if work_item.is_a?(Director::StepWorkItem)
18
+ OrchestratorJobs::WorkerDone.perform_async(work_item, step && step.delayed_events)
19
+ end
20
+
21
+ private
22
+
23
+ def with_telemetry(work_item)
24
+ Dynflow::Telemetry.with_instance { |t| t.set_gauge(:dynflow_active_workers, +1, telemetry_options(work_item)) }
25
+ yield
26
+ ensure
27
+ Dynflow::Telemetry.with_instance do |t|
28
+ t.increment_counter(:dynflow_worker_events, 1, telemetry_options(work_item))
29
+ t.set_gauge(:dynflow_active_workers, -1, telemetry_options(work_item))
30
+ end
31
+ end
32
+ end
33
+
34
+ class DrainMarker < InternalJobBase
35
+ def perform(world_id)
36
+ OrchestratorJobs::StartupComplete.perform_async(world_id)
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'forwardable'
2
3
 
3
4
  module Dynflow
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Dynflow
2
3
  module Flows
3
4
 
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Dynflow
2
3
  module Flows
3
4
  class AbstractComposed < Abstract
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Dynflow
2
3
  module Flows
3
4
  class Atom < Abstract
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Dynflow
2
3
  module Flows
3
4
  class Concurrence < AbstractComposed
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Dynflow
2
3
  module Flows
3
4
  class Sequence < AbstractComposed
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Dynflow
2
3
  module LoggerAdapters
3
4
  require 'dynflow/logger_adapters/formatters'
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Dynflow
2
3
  module LoggerAdapters
3
4
  class Abstract
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Dynflow
2
3
  module LoggerAdapters
3
4
  class Delegator < Abstract
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Dynflow
2
3
  module LoggerAdapters
3
4
  module Formatters
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Dynflow
2
3
  module LoggerAdapters
3
4
  module Formatters
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Dynflow
2
3
  module LoggerAdapters
3
4
  module Formatters
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'English'
2
3
 
3
4
  module Dynflow
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Dynflow
2
3
  class Middleware
3
4
  require 'dynflow/middleware/register'
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Dynflow
2
3
  module Middleware::Common
3
4
  class Singleton < Middleware
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Dynflow
2
3
  module Middleware::Common
3
4
  class Transaction < Middleware
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Dynflow
2
3
  class Middleware::Register
3
4
  include Algebrick::TypeCheck
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'tsort'
2
3
 
3
4
  module Dynflow
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Dynflow
2
3
  class Middleware::Stack
3
4
  include Algebrick::TypeCheck
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Dynflow
2
3
  class Middleware::World
3
4
 
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'dynflow/persistence_adapters'
2
3
 
3
4
  module Dynflow
@@ -117,8 +118,8 @@ module Dynflow
117
118
  end
118
119
  end
119
120
 
120
- def save_step(step)
121
- adapter.save_step(step.execution_plan_id, step.id, step.to_hash)
121
+ def save_step(step, conditions = {})
122
+ adapter.save_step(step.execution_plan_id, step.id, step.to_hash, conditions)
122
123
  end
123
124
 
124
125
  def push_envelope(envelope)
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Dynflow
2
3
  module PersistenceAdapters
3
4
  require 'dynflow/persistence_adapters/abstract'
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Dynflow
2
3
  module PersistenceAdapters
3
4
  class Abstract
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'sequel'
2
3
  require 'multi_json'
3
4
  require 'fileutils'
@@ -100,7 +101,7 @@ module Dynflow
100
101
  end
101
102
 
102
103
  def save_execution_plan(execution_plan_id, value)
103
- save :execution_plan, { uuid: execution_plan_id }, value, false
104
+ save :execution_plan, { uuid: execution_plan_id }, value, with_data: false
104
105
  end
105
106
 
106
107
  def delete_delayed_plans(filters, batch_size = 1000)
@@ -138,7 +139,7 @@ module Dynflow
138
139
  end
139
140
 
140
141
  def save_delayed_plan(execution_plan_id, value)
141
- save :delayed, { execution_plan_uuid: execution_plan_id }, value, false
142
+ save :delayed, { execution_plan_uuid: execution_plan_id }, value, with_data: false
142
143
  end
143
144
 
144
145
  def load_step(execution_plan_id, step_id)
@@ -149,8 +150,9 @@ module Dynflow
149
150
  load_records :step, execution_plan_uuid: execution_plan_id
150
151
  end
151
152
 
152
- def save_step(execution_plan_id, step_id, value)
153
- save :step, { execution_plan_uuid: execution_plan_id, id: step_id }, value, false
153
+ def save_step(execution_plan_id, step_id, value, update_conditions = {})
154
+ save :step, { execution_plan_uuid: execution_plan_id, id: step_id }, value,
155
+ with_data: false, update_conditions: update_conditions
154
156
  end
155
157
 
156
158
  def load_action(execution_plan_id, action_id)
@@ -166,7 +168,7 @@ module Dynflow
166
168
  end
167
169
 
168
170
  def save_action(execution_plan_id, action_id, value)
169
- save :action, { execution_plan_uuid: execution_plan_id, id: action_id }, value, false
171
+ save :action, { execution_plan_uuid: execution_plan_id, id: action_id }, value, with_data: false
170
172
  end
171
173
 
172
174
  def connector_feature!
@@ -286,14 +288,15 @@ module Dynflow
286
288
  end
287
289
  end
288
290
 
289
- def save(what, condition, value, with_data = true)
291
+ def save(what, condition, value, with_data: true, update_conditions: {})
290
292
  table = table(what)
291
293
  existing_record = with_retry { table.first condition } unless condition.empty?
292
294
 
293
295
  if value
294
296
  record = prepare_record(what, value, (existing_record || condition), with_data)
295
297
  if existing_record
296
- with_retry { table.where(condition).update(record) }
298
+ condition = update_conditions.merge(condition)
299
+ return with_retry { table.where(condition).update(record) }
297
300
  else
298
301
  with_retry { table.insert record }
299
302
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  Sequel.migration do
2
3
  up do
3
4
  create_table(:dynflow_execution_plans) do
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  Sequel.migration do
2
3
  change do
3
4
  alter_table(:dynflow_steps) do
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  Sequel.migration do
2
3
  change do
3
4
  alter_table(:dynflow_actions) do
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  Sequel.migration do
2
3
  change do
3
4
  create_table(:dynflow_coordinator_records) do
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  Sequel.migration do
2
3
  change do
3
4
  create_table(:dynflow_envelopes) do
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  Sequel.migration do
2
3
  up do
3
4
  alter_table(:dynflow_steps) do
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  Sequel.migration do
2
3
  change do
3
4
  create_table(:dynflow_scheduled_plans) do
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  Sequel.migration do
2
3
  change do
3
4
  rename_table(:dynflow_scheduled_plans, :dynflow_delayed_plans)
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  Sequel.migration do
2
3
  affected_tables = [:dynflow_actions, :dynflow_coordinator_records, :dynflow_delayed_plans,
3
4
  :dynflow_envelopes, :dynflow_execution_plans]
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  Sequel.migration do
2
3
  change do
3
4
  alter_table(:dynflow_execution_plans) do
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  Sequel.migration do
2
3
  # Placeholder for 011_add_uuid_column.rb - it was readded in
3
4
  # 018_add_uuid_column.rb with fixed check for postgresql
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  Sequel.migration do
2
3
  change do
3
4
  alter_table(:dynflow_delayed_plans) do
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  Sequel.migration do
2
3
  change do
3
4
  alter_table(:dynflow_actions) do
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  Sequel.migration do
2
3
  change do
3
4
  alter_table(:dynflow_steps) do
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  Sequel.migration do
2
3
  change do
3
4
  alter_table(:dynflow_execution_plans) do
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  Sequel.migration do
2
3
  change do
3
4
  alter_table(:dynflow_steps) do
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  Sequel.migration do
2
3
  change do
3
4
  alter_table(:dynflow_delayed_plans) do
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  def to_uuid(table_name, column_name)
2
3
  set_column_type(table_name, column_name, :uuid, :using => "#{column_name}::uuid")
3
4
  end
@@ -0,0 +1,48 @@
1
+ # frozen_string_literal: true
2
+ Sequel.migration do
3
+ up do
4
+ alter_table(:dynflow_execution_plans) do
5
+ if @db.database_type == :mysql
6
+ set_column_type :started_at, 'datetime(3)'
7
+ set_column_type :ended_at, 'datetime(3)'
8
+ end
9
+ end
10
+
11
+ alter_table(:dynflow_steps) do
12
+ if @db.database_type == :mysql
13
+ set_column_type :started_at, 'datetime(3)'
14
+ set_column_type :ended_at, 'datetime(3)'
15
+ end
16
+ end
17
+
18
+ alter_table(:dynflow_delayed_plans) do
19
+ if @db.database_type == :mysql
20
+ set_column_type :start_at, 'datetime(3)'
21
+ set_column_type :start_before, 'datetime(3)'
22
+ end
23
+ end
24
+ end
25
+
26
+ down do
27
+ alter_table(:dynflow_steps) do
28
+ if @db.database_type == :mysql
29
+ set_column_type :started_at, Time
30
+ set_column_type :ended_at, Time
31
+ end
32
+ end
33
+
34
+ alter_table(:dynflow_steps) do
35
+ if @db.database_type == :mysql
36
+ set_column_type :started_at, Time
37
+ set_column_type :ended_at, Time
38
+ end
39
+ end
40
+
41
+ alter_table(:dynflow_delayed_plans) do
42
+ if @db.database_type == :mysql
43
+ set_column_type :start_at, Time
44
+ set_column_type :start_before, Time
45
+ end
46
+ end
47
+ end
48
+ end
@@ -1,4 +1,5 @@
1
1
  # -*- coding: utf-8 -*-
2
+ # frozen_string_literal: true
2
3
  module Dynflow
3
4
  # Class for configuring and preparing the Dynflow runtime environment.
4
5
  class Rails
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'rails'
2
3
  require 'active_record'
3
4
 
@@ -167,9 +168,11 @@ module Dynflow
167
168
  if remote?
168
169
  false
169
170
  else
170
- ::Dynflow::Executors::Parallel.new(world,
171
- world.config.executor_heartbeat_interval,
172
- world.config.queues)
171
+ if defined?(::Sidekiq) && !Sidekiq.options[:dynflow_world].nil?
172
+ ::Dynflow::Executors::Sidekiq::Core
173
+ else
174
+ ::Dynflow::Executors::Parallel::Core
175
+ end
173
176
  end
174
177
  end
175
178
 
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'fileutils'
2
3
  require 'get_process_mem'
3
4
  require 'dynflow/watchers/memory_consumption_watcher'
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Dynflow
2
3
  # A simple round-robin scheduling implementation used at various
3
4
  # places in Dynflow