Class: Datadog::ThreadSafeBuffer

Inherits:
Buffer
  • Object
show all
Defined in:
lib/ddtrace/buffer.rb

Overview

Buffer that stores objects, has a maximum size, and can be safely used concurrently on any environment.

This implementation uses a Mutex around public methods, incurring overhead in order to ensure thread-safety.

This is implementation is recommended for non-CRuby environments. If using CRuby, CRubyBuffer is a faster implementation with minimal compromise.

Direct Known Subclasses

Profiling::Buffer, ThreadSafeTraceBuffer

Instance Method Summary collapse

Methods inherited from Buffer

#closed?

Constructor Details

#initialize(max_size) ⇒ ThreadSafeBuffer

Returns a new instance of ThreadSafeBuffer.



140
141
142
143
144
# File 'lib/ddtrace/buffer.rb', line 140

def initialize(max_size)
  super

  @mutex = Mutex.new
end

Instance Method Details

#closeObject



171
172
173
# File 'lib/ddtrace/buffer.rb', line 171

def close
  synchronize { super }
end

#concat(items) ⇒ Object



152
153
154
# File 'lib/ddtrace/buffer.rb', line 152

def concat(items)
  synchronize { super }
end

#empty?Boolean

Return if the buffer is empty.

Returns:

  • (Boolean)


162
163
164
# File 'lib/ddtrace/buffer.rb', line 162

def empty?
  synchronize { super }
end

#lengthObject

Return the current number of stored traces.



157
158
159
# File 'lib/ddtrace/buffer.rb', line 157

def length
  synchronize { super }
end

#popObject

Stored traces are returned and the local buffer is reset.



167
168
169
# File 'lib/ddtrace/buffer.rb', line 167

def pop
  synchronize { super }
end

#push(item) ⇒ Object

Add a new item in the local queue. This method doesn't block the execution even if the buffer is full. In that case, a random item is discarded.



148
149
150
# File 'lib/ddtrace/buffer.rb', line 148

def push(item)
  synchronize { super }
end

#synchronize(&block) ⇒ Object



175
176
177
# File 'lib/ddtrace/buffer.rb', line 175

def synchronize(&block)
  @mutex.synchronize(&block)
end