1
0
mirror of https://github.com/open-telemetry/opentelemetry-go.git synced 2026-06-03 18:35:08 +02:00
Files
opentelemetry-go/sdk/trace/evictedqueue.go
T

34 lines
956 B
Go
Raw Normal View History

// Copyright The OpenTelemetry Authors
2024-02-29 07:05:28 +01:00
// SPDX-License-Identifier: Apache-2.0
2019-08-02 13:52:55 -07:00
package trace // import "go.opentelemetry.io/otel/sdk/trace"
2019-08-02 13:52:55 -07:00
// evictedQueue is a FIFO queue with a configurable capacity.
2019-08-02 13:52:55 -07:00
type evictedQueue struct {
queue []interface{}
capacity int
droppedCount int
}
func newEvictedQueue(capacity int) evictedQueue {
// Do not pre-allocate queue, do this lazily.
return evictedQueue{capacity: capacity}
2019-08-02 13:52:55 -07:00
}
// add adds value to the evictedQueue eq. If eq is at capacity, the oldest
// queued value will be discarded and the drop count incremented.
2019-08-02 13:52:55 -07:00
func (eq *evictedQueue) add(value interface{}) {
if eq.capacity == 0 {
eq.droppedCount++
return
}
if eq.capacity > 0 && len(eq.queue) == eq.capacity {
// Drop first-in while avoiding allocating more capacity to eq.queue.
copy(eq.queue[:eq.capacity-1], eq.queue[1:])
eq.queue = eq.queue[:eq.capacity-1]
2019-08-02 13:52:55 -07:00
eq.droppedCount++
}
eq.queue = append(eq.queue, value)
}