module Dynflow::Action::WithBulkSubPlans
Constants
- DEFAULT_BATCH_SIZE
- PlanNextBatch
Public Instance Methods
batch(from, size)
click to toggle source
Should return a slice of size items starting from item with index from
# File lib/dynflow/action/with_bulk_sub_plans.rb, line 9 def batch(from, size) raise NotImplementedError end
batch_size()
click to toggle source
# File lib/dynflow/action/with_bulk_sub_plans.rb, line 56 def batch_size DEFAULT_BATCH_SIZE end
cancel!(force = false)
click to toggle source
# File lib/dynflow/action/with_bulk_sub_plans.rb, line 76 def cancel!(force = false) # Count the not-yet-planned tasks as cancelled output[:cancelled_count] = total_count - output[:planned_count] if uses_concurrency_control # Tell the throttle limiter to cancel the tasks its managing world.throttle_limiter.cancel!(execution_plan_id) else # Just stop the tasks which were not started yet sub_plans(:state => 'planned').each { |sub_plan| sub_plan.update_state(:stopped) } end # Pass the cancel event to running sub plans if they can be cancelled sub_plans(:state => 'running').each { |sub_plan| sub_plan.cancel(force) if sub_plan.cancellable? } suspend end
current_batch()
click to toggle source
Returns the items in the current batch
# File lib/dynflow/action/with_bulk_sub_plans.rb, line 50 def current_batch start_position = output[:planned_count] size = start_position + batch_size > total_count ? total_count - start_position : batch_size batch(start_position, size) end
increase_counts(planned, failed)
click to toggle source
Calls superclass method
# File lib/dynflow/action/with_bulk_sub_plans.rb, line 39 def increase_counts(planned, failed) super(planned, failed, false) output[:planned_count] += planned + failed end
initiate()
click to toggle source
Calls superclass method
# File lib/dynflow/action/with_bulk_sub_plans.rb, line 32 def initiate output[:planned_count] = 0 output[:cancelled_count] = 0 output[:total_count] = total_count super end
on_planning_finished()
click to toggle source
# File lib/dynflow/action/with_bulk_sub_plans.rb, line 28 def on_planning_finished suspend end
run(event = nil)
click to toggle source
Calls superclass method
Dynflow::Action::Cancellable#run
# File lib/dynflow/action/with_bulk_sub_plans.rb, line 15 def run(event = nil) if event === PlanNextBatch if can_spawn_next_batch? spawn_plans suspend else on_planning_finished end else super end end
run_progress()
click to toggle source
The same logic as in Action::WithSubPlans
, but calculated using the expected total count
# File lib/dynflow/action/with_bulk_sub_plans.rb, line 61 def run_progress if counts_set? && total_count > 0 sum = output.values_at(:success_count, :cancelled_count, :failed_count).reduce(:+) sum.to_f / total_count else 0.1 end end
spawn_plans()
click to toggle source
Calls superclass method
# File lib/dynflow/action/with_bulk_sub_plans.rb, line 70 def spawn_plans super ensure plan_event(PlanNextBatch) end
total_count()
click to toggle source
Should return the expected total count of tasks
# File lib/dynflow/action/with_bulk_sub_plans.rb, line 45 def total_count raise NotImplementedError end
Private Instance Methods
can_spawn_next_batch?()
click to toggle source
# File lib/dynflow/action/with_bulk_sub_plans.rb, line 97 def can_spawn_next_batch? remaining_count > 0 end
done?()
click to toggle source
Calls superclass method
# File lib/dynflow/action/with_bulk_sub_plans.rb, line 93 def done? !can_spawn_next_batch? && super end
remaining_count()
click to toggle source
# File lib/dynflow/action/with_bulk_sub_plans.rb, line 101 def remaining_count total_count - output[:cancelled_count] - output[:planned_count] end