Class: Aws::S3::DefaultExecutor Private

Inherits:
Object
  • Object
show all
Defined in:
lib/aws-sdk-s3/default_executor.rb

This class is part of a private API. You should avoid using this class if possible, as it may be removed or be changed in the future.

Constant Summary collapse

DEFAULT_MAX_THREADS =

This constant is part of a private API. You should avoid using this constant if possible, as it may be removed or be changed in the future.

10
RUNNING =

This constant is part of a private API. You should avoid using this constant if possible, as it may be removed or be changed in the future.

:running
SHUTTING_DOWN =

This constant is part of a private API. You should avoid using this constant if possible, as it may be removed or be changed in the future.

:shutting_down
SHUTDOWN =

This constant is part of a private API. You should avoid using this constant if possible, as it may be removed or be changed in the future.

:shutdown

Instance Method Summary collapse

Constructor Details

#initialize(options = {}) ⇒ DefaultExecutor

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns a new instance of DefaultExecutor.



12
13
14
15
16
17
18
# File 'lib/aws-sdk-s3/default_executor.rb', line 12

def initialize(options = {})
  @max_threads = options[:max_threads] || DEFAULT_MAX_THREADS
  @state = RUNNING
  @queue = Queue.new
  @pool = []
  @mutex = Mutex.new
end

Instance Method Details

#killBoolean

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Immediately terminates all worker threads and clears pending tasks. This is a forceful shutdown that doesn’t wait for running tasks to complete.

Returns:

  • (Boolean)

    true when termination is complete



38
39
40
41
42
43
44
45
46
# File 'lib/aws-sdk-s3/default_executor.rb', line 38

def kill
  @mutex.synchronize do
    @state = SHUTDOWN
    @pool.each(&:kill)
    @pool.clear
    @queue.clear
  end
  true
end

#post(*args, &block) ⇒ Boolean

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Submits a task for execution.

Parameters:

  • args (Object)

    Variable number of arguments to pass to the block

  • block (Proc)

    The block to be executed

Returns:

  • (Boolean)

    Returns true if the task was submitted successfully



24
25
26
27
28
29
30
31
32
# File 'lib/aws-sdk-s3/default_executor.rb', line 24

def post(*args, &block)
  @mutex.synchronize do
    raise 'Executor has been shutdown and is no longer accepting tasks' unless @state == RUNNING

    @queue << [args, block]
    ensure_worker_available
  end
  true
end

#shutdown(timeout = nil) ⇒ Boolean

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Gracefully shuts down the executor, optionally with a timeout. Stops accepting new tasks and waits for running tasks to complete.

Parameters:

  • timeout (Numeric, nil) (defaults to: nil)

    Maximum time in seconds to wait for shutdown. If nil, waits indefinitely. If timeout expires, remaining threads are killed.

Returns:

  • (Boolean)

    true when shutdown is complete



54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
# File 'lib/aws-sdk-s3/default_executor.rb', line 54

def shutdown(timeout = nil)
  @mutex.synchronize do
    return true if @state == SHUTDOWN

    @state = SHUTTING_DOWN
    @pool.size.times { @queue << :shutdown }
  end

  if timeout
    deadline = Time.now + timeout
    @pool.each do |thread|
      remaining = deadline - Time.now
      break if remaining <= 0

      thread.join([remaining, 0].max)
    end
    @pool.select(&:alive?).each(&:kill)
  else
    @pool.each(&:join)
  end

  @mutex.synchronize do
    @pool.clear
    @state = SHUTDOWN
  end
  true
end