dynflow 1.3.0 → 1.4.0

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.
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