Class: SolidQueue::Pool

Inherits:
Object
  • Object
show all
Includes:
AppExecutor
Defined in:
lib/solid_queue/pool.rb

Direct Known Subclasses

FiberPool, ThreadPool

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods included from AppExecutor

#create_thread, #handle_thread_error, #wrap_in_app_executor

Constructor Details

#initialize(size, on_idle: nil) ⇒ Pool

Returns a new instance of Pool.



13
14
15
16
17
18
# File 'lib/solid_queue/pool.rb', line 13

def initialize(size, on_idle: nil)
  @size = size
  @on_idle = on_idle
  @available_capacity = size
  @mutex = Mutex.new
end

Instance Attribute Details

#sizeObject (readonly)

Returns the value of attribute size.



11
12
13
# File 'lib/solid_queue/pool.rb', line 11

def size
  @size
end

Class Method Details

.build(type:, size:, on_idle: nil) ⇒ Object



7
8
9
# File 'lib/solid_queue/pool.rb', line 7

def self.build(type:, size:, on_idle: nil)
  SolidQueue.const_get("#{type.to_s.camelize}Pool").new(size, on_idle: on_idle)
end

Instance Method Details

#available_capacityObject



35
36
37
# File 'lib/solid_queue/pool.rb', line 35

def available_capacity
  mutex.synchronize { @available_capacity }
end

#idle?Boolean

Returns:

  • (Boolean)


39
40
41
# File 'lib/solid_queue/pool.rb', line 39

def idle?
  available_capacity.positive?
end

#post(execution) ⇒ Object



24
25
26
27
28
29
30
31
32
33
# File 'lib/solid_queue/pool.rb', line 24

def post(execution)
  reserve_capacity!

  begin
    schedule(execution)
  rescue Exception
    restore_capacity
    raise
  end
end

#typeObject



20
21
22
# File 'lib/solid_queue/pool.rb', line 20

def type
  self.class.name.demodulize.delete_suffix("Pool").underscore.to_sym
end