Sha256: 624e201c07cb20cf0ec8ccc133bc81aaaccf0c9494d7b6aadc3f24b4b0316032

Contents?: true

Size: 1.57 KB

Versions: 1

Compression:

Stored size: 1.57 KB

Contents

module CM
module Batch
class Celluloid < Nucleon.plugin_class(:CM, :batch)

  #-----------------------------------------------------------------------------
  # Plugin interface

  def normalize(reload)
    super
    yield if block_given?
  end

  #-----------------------------------------------------------------------------
  # Checks

  #-----------------------------------------------------------------------------
  # Property accessors / modifiers

  #-----------------------------------------------------------------------------
  # Operations

  #-----------------------------------------------------------------------------
  # Utilities

  def execute_parallel(operation)
    values = []
    timeouts = []

    resources.each do |resource|
      values << ::Celluloid::Future.new(resource) do
        success = true
        begin
          timeouts << ( resource.respond_to?(:timeout) ? resource.timeout : nil )

          resource.execute(operation)
          success = resource.status == code.success

        rescue => error
          logger.error("Resource #{resource.id} #{operation} experienced an error:")
          logger.error(error.inspect)
          logger.error(error.message)
          logger.error(Nucleon::Util::Data.to_yaml(error.backtrace))

          error('resource_execution', { :id => resource.id, :operation => operation, :message => error.message })
          success = false
        end
        success
      end
    end
    values = values.each_with_index.map do |future, index|
      future.value(timeouts[index])
    end
    !values.include?(false)
  end
end
end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
cm-0.1.8 lib/CM/batch/celluloid.rb