Class: ActiveJob::Temporal::ReloadSignalQueue

Inherits:
Object
  • Object
show all
Defined in:
lib/activejob/temporal/reload_signal_queue.rb

Overview

Single-slot signal handoff between a trap handler and the reload thread.

Backed by Thread::Queue because trap context forbids taking a Mutex.

Instance Method Summary collapse

Constructor Details

#initializeReloadSignalQueue

Returns a new instance of ReloadSignalQueue.



9
10
11
# File 'lib/activejob/temporal/reload_signal_queue.rb', line 9

def initialize
  @queue = Thread::Queue.new
end

Instance Method Details

#closevoid

This method returns an undefined value.



34
35
36
37
# File 'lib/activejob/temporal/reload_signal_queue.rb', line 34

def close
  @queue.clear
  @queue.close
end

#popString?

Blocks until a signal is pending or the queue is closed.

Returns:

  • (String, nil)

    The pending signal, or nil once closed



29
30
31
# File 'lib/activejob/temporal/reload_signal_queue.rb', line 29

def pop
  @queue.pop
end

#push(signal) ⇒ String?

Enqueues a reload signal unless one is already pending or the queue is closed.

Parameters:

  • signal (String)

    Signal name

Returns:

  • (String, nil)

    The signal when enqueued, nil when coalesced or closed



17
18
19
20
21
22
23
24
# File 'lib/activejob/temporal/reload_signal_queue.rb', line 17

def push(signal)
  return nil if @queue.closed? || !@queue.empty?

  @queue << signal
  signal
rescue ClosedQueueError
  nil
end