summaryrefslogtreecommitdiff
path: root/vendor/go.opentelemetry.io/otel/sdk/log/batch.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/go.opentelemetry.io/otel/sdk/log/batch.go')
-rw-r--r--vendor/go.opentelemetry.io/otel/sdk/log/batch.go28
1 files changed, 21 insertions, 7 deletions
diff --git a/vendor/go.opentelemetry.io/otel/sdk/log/batch.go b/vendor/go.opentelemetry.io/otel/sdk/log/batch.go
index 28c969262..b91741d58 100644
--- a/vendor/go.opentelemetry.io/otel/sdk/log/batch.go
+++ b/vendor/go.opentelemetry.io/otel/sdk/log/batch.go
@@ -156,13 +156,20 @@ func (b *BatchProcessor) poll(interval time.Duration) (done chan struct{}) {
global.Warn("dropped log records", "dropped", d)
}
- qLen := b.q.TryDequeue(buf, func(r []Record) bool {
- ok := b.exporter.EnqueueExport(r)
- if ok {
- buf = slices.Clone(buf)
- }
- return ok
- })
+ var qLen int
+ // Don't copy data from queue unless exporter can accept more, it is very expensive.
+ if b.exporter.Ready() {
+ qLen = b.q.TryDequeue(buf, func(r []Record) bool {
+ ok := b.exporter.EnqueueExport(r)
+ if ok {
+ buf = slices.Clone(buf)
+ }
+ return ok
+ })
+ } else {
+ qLen = b.q.Len()
+ }
+
if qLen >= b.batchSize {
// There is another full batch ready. Immediately trigger
// another export attempt.
@@ -272,6 +279,13 @@ func newQueue(size int) *queue {
}
}
+func (q *queue) Len() int {
+ q.Lock()
+ defer q.Unlock()
+
+ return q.len
+}
+
// Dropped returns the number of Records dropped during enqueueing since the
// last time Dropped was called.
func (q *queue) Dropped() uint64 {