Sha256: 478ea0172dc30d444d74803b34761093ebe8611c3d409851ac071d7fe136bc13

Contents?: true

Size: 1021 Bytes

Versions: 21

Compression:

Stored size: 1021 Bytes

Contents

require 'concurrent/synchronization'

module Concurrent

  # A simple utility class that executes a callable and returns and array of three elements:
  # success - indicating if the callable has been executed without errors
  # value - filled by the callable result if it has been executed without errors, nil otherwise
  # reason - the error risen by the callable if it has been executed with errors, nil otherwise
  class SafeTaskExecutor < Synchronization::Object

    def initialize(task, opts = {})
      super()
      @task = task
      @exception_class = opts.fetch(:rescue_exception, false) ? Exception : StandardError
      ensure_ivar_visibility!
    end

    # @return [Array]
    def execute(*args)
      synchronize do
        success = false
        value = reason = nil

        begin
          value = @task.call(*args)
          success = true
        rescue @exception_class => ex
          reason = ex
          success = false
        end

        [success, value, reason]
      end
    end
  end
end

Version data entries

21 entries across 19 versions & 5 rubygems

Version Path
logstash-filter-zabbix-0.1.2 vendor/bundle/jruby/1.9/gems/concurrent-ruby-0.9.2-java/lib/concurrent/executor/safe_task_executor.rb
logstash-filter-zabbix-0.1.1 vendor/bundle/jruby/1.9/gems/concurrent-ruby-0.9.2-java/lib/concurrent/executor/safe_task_executor.rb
ivanvc-logstash-input-s3-3.1.1.4 vendor/local/gems/concurrent-ruby-0.9.2-java/lib/concurrent/executor/safe_task_executor.rb
ivanvc-logstash-input-s3-3.1.1.3 vendor/local/gems/concurrent-ruby-0.9.2-java/lib/concurrent/executor/safe_task_executor.rb
ivanvc-logstash-input-s3-3.1.1.2 vendor/local/gems/concurrent-ruby-0.9.2-java/lib/concurrent/executor/safe_task_executor.rb
logstash-input-beats-2.0.2 vendor/jruby/1.9/gems/concurrent-ruby-0.9.2-java/lib/concurrent/executor/safe_task_executor.rb
logstash-input-beats-2.0.2 vendor/jruby/1.9/gems/logstash-codec-json-2.0.3/vendor/gems/concurrent-ruby-0.9.1-java/lib/concurrent/executor/safe_task_executor.rb
logstash-input-beats-2.0.2 vendor/jruby/1.9/gems/concurrent-ruby-0.9.1-java/lib/concurrent/executor/safe_task_executor.rb
logstash-codec-json-2.0.3 vendor/gems/concurrent-ruby-0.9.1-java/lib/concurrent/executor/safe_task_executor.rb
concurrent-ruby-0.9.2-java lib/concurrent/executor/safe_task_executor.rb
concurrent-ruby-0.9.2 lib/concurrent/executor/safe_task_executor.rb
logstash-input-beats-0.9.2 vendor/jruby/1.9/gems/concurrent-ruby-0.9.1-java/lib/concurrent/executor/safe_task_executor.rb
logstash-input-beats-0.9.1 vendor/jruby/1.9/gems/concurrent-ruby-0.9.1-java/lib/concurrent/executor/safe_task_executor.rb
concurrent-ruby-0.9.1 lib/concurrent/executor/safe_task_executor.rb
concurrent-ruby-0.9.1-java lib/concurrent/executor/safe_task_executor.rb
concurrent-ruby-0.9.0 lib/concurrent/executor/safe_task_executor.rb
concurrent-ruby-0.9.0-java lib/concurrent/executor/safe_task_executor.rb
concurrent-ruby-0.9.0.pre3-java lib/concurrent/executor/safe_task_executor.rb
concurrent-ruby-0.9.0.pre3 lib/concurrent/executor/safe_task_executor.rb
concurrent-ruby-0.9.0.pre2 lib/concurrent/executor/safe_task_executor.rb