Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

[SDK] BatchLogRecordProcessor still drains the queue in a tight loop, inconsistent with BatchSpanProcessor fix

Aperta
#4,498 2 commenti 0 reazioni 0 assegnatari Vedi su GitHub

I maintainer di solito rispondono entro 1 giorno

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
3/5
Tempo stimato
1-2 giorni
Idoneità per principianti
78/100
Tipo di issue
Bug
Chiarezza
Specificata chiaramente
Stato di attività
Attiva
Stack tecnologico
cpp
Ambito
observability

Direzione di ricerca

Inizia da sdk/src/logs/batch_log_record_processor.cc e confronta il suo comportamento con le modifiche a BatchSpanProcessor di #4466. Riproduci le misurazioni delle chiamate di esportazione e delle dimensioni dei batch descritte nell’issue, quindi verifica che i normali risvegli esportino un batch, mentre ForceFlush() e Shutdown() svuotino il buffer.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

bug triage/accepted

Describe your environment

  • Platform: macOS
  • opentelemetry-cpp version: main branch
  • Component: sdk/src/logs/batch_log_record_processor.cc
  • BatchLogRecordProcessor configuration:
    • max_queue_size = 8192
    • max_export_batch_size = 2048
    • schedule_delay_millis = 5000

Steps to reproduce

  1. Configure BatchLogRecordProcessor with a LogRecordExporter that counts export calls and records per call.
  2. Produce log records at a constant rate (e.g. 5,000 logs/s) for 10 seconds.
  3. Observe the number of export requests and the average number of logs per request.
  4. Produce 50,000 log records without calling ForceFlush().

What is the expected behavior?

With max_export_batch_size = 2048, exports should be close to 2048 records each. After #4466, BatchSpanProcessor behaves this way: on a normal wakeup it exports at most one batch, and only ForceFlush() / Shutdown() drain the entire buffer.

BatchLogRecordProcessor should follow the same semantics.


What is the actual behavior?

BatchLogRecordProcessor::Export() still drains the whole buffer in a tight loop:

void BatchLogRecordProcessor::Export()
{
  do {
    bool notify_force_flush =
        synchronization_data_->is_force_flush_pending.exchange(false, std::memory_order_acq_rel);
    if (notify_force_flush) {
      num_records_to_export = buffer_.size();
    } else {
      num_records_to_export =
          buffer_.size() >= max_export_batch_size_ ? max_export_batch_size_ : buffer_.size();
    }
    // ... consume & export ...
  } while (true);
}

And the worker wakes up as soon as the buffer is non-empty:

synchronization_data_->cv.wait_for(lk, timeout, [this] {
  ...
  return !buffer_.empty();
});
Measured result
Metric Value
Logs produced 50,000
Export calls 2,332
Average batch size 21.4
Full batches (>=2048) 1
Tiny batches (<100) 2,331

The first export is 2048 records; every subsequent export in the same wakeup is ~20–25 records because the worker keeps draining the buffer instead of waiting for the next full batch.


Additional context

  • #4449 reported the same problem for BatchSpanProcessor.
  • #4466 fixed the trace path by changing the worker wait predicate and making Export() drain the buffer only for ForceFlush() / Shutdown().
  • The logs path (sdk/src/logs/batch_log_record_processor.cc) still uses the old implementation and should be aligned with the trace path.
Lingua principale
C++
Stelle
1.4k
Fork
640
Merge medio
1g 10h
PR unite (30g)
74

Preparare l'ambiente

Apri in Codespaces

Avvia il container di sviluppo del progetto nel browser, con il tuo account GitHub.

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di open-telemetry/opentelemetry-cpp

Tutte le issue di open-telemetry/opentelemetry-cpp

Issue simili

Altre issue su C++

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.