Class: Logtail::LogDevices::HTTP::FlushableDroppingSizedQueue

Inherits:
Object
  • Object
show all
Defined in:
lib/logtail/log_devices/http/flushable_dropping_sized_queue.rb

Overview

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.

Instance Method Summary collapse

Constructor Details

#initialize(max_size) ⇒ FlushableDroppingSizedQueue



11
12
13
14
15
# 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

Instance Method Details

#deqObject

Removes a single item from the queue



27
28
29
30
31
# File 'lib/logtail/log_devices/http/flushable_dropping_sized_queue.rb', line 27

def deq
  @lock.synchronize do
    @array.pop
  end
end

#enq(msg) ⇒ Object

Adds a message to the queue



18
19
20
21
22
23
24
# 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

#flushObject

Flushes all message from the queue and returns them.



34
35
36
37
38
39
40
# 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?Boolean



42
43
44
# File 'lib/logtail/log_devices/http/flushable_dropping_sized_queue.rb', line 42

def full?
  size >= @max_size
end

#sizeObject



46
47
48
# File 'lib/logtail/log_devices/http/flushable_dropping_sized_queue.rb', line 46

def size
  @array.size
end