Class: Timber::LogDevices::HTTP::DroppingSizedQueue

Inherits:
SizedQueue
  • Object
show all
Defined in:
lib/timber/log_devices/http/dropping_sized_queue.rb

Overview

Works like SizedQueue, but drops message instead of blocking. Pass one of these in to HTTP#intiialize via the :request_queue option if you’d prefer to drop messages in the event of a buffer overflow instead of applying back pressure.

Instance Method Summary collapse

Instance Method Details

#push(obj) ⇒ Object

Returns true/false depending on whether the queue is full or not



9
10
11
12
13
14
15
16
17
18
19
20
21
22
# File 'lib/timber/log_devices/http/dropping_sized_queue.rb', line 9

def push(obj)
  @mutex.synchronize do
    return false unless @que.length < @max

    @que.push obj
    begin
      t = @waiting.shift
      t.wakeup if t
    rescue ThreadError
      retry
    end
    return true
  end
end