class Logtail::LogDevices::HTTP::FlushableDroppingSizedQueue
A simple thread-safe queue implementation that provides a flush
method. The built-in ruby `Queue` class does not provide a flush
method that allows the caller to retrieve all items on the queue in one call. The Ruby `SizedQueue` also implements thread waiting, which is something we want to avoid. To keep things simple and straight-forward, we designed this queue class. @private
Public Class Methods
new(max_size)
click to toggle source
# File lib/logtail/log_devices/http/flushable_dropping_sized_queue.rb, line 11 def initialize(max_size) @lock = Mutex.new @max_size = max_size @array = [] end
Public Instance Methods
deq()
click to toggle source
Removes a single item from the queue
# File lib/logtail/log_devices/http/flushable_dropping_sized_queue.rb, line 27 def deq @lock.synchronize do @array.pop end end
enq(msg)
click to toggle source
Adds a message to the queue
# File lib/logtail/log_devices/http/flushable_dropping_sized_queue.rb, line 18 def enq(msg) @lock.synchronize do if !full? @array << msg end end end
flush()
click to toggle source
Flushes all message from the queue and returns them.
# File lib/logtail/log_devices/http/flushable_dropping_sized_queue.rb, line 34 def flush @lock.synchronize do old = @array @array = [] return old end end
full?()
click to toggle source
# File lib/logtail/log_devices/http/flushable_dropping_sized_queue.rb, line 42 def full? size >= @max_size end
size()
click to toggle source
# File lib/logtail/log_devices/http/flushable_dropping_sized_queue.rb, line 46 def size @array.size end