Skip to content

Fix/buffer flush timing issue 142#143

Merged
xe-nvdk merged 2 commits intomainfrom
fix/buffer-flush-timing-issue-142
Jan 19, 2026
Merged

Fix/buffer flush timing issue 142#143
xe-nvdk merged 2 commits intomainfrom
fix/buffer-flush-timing-issue-142

Conversation

@xe-nvdk
Copy link
Copy Markdown
Member

@xe-nvdk xe-nvdk commented Jan 19, 2026

No description provided.

Buffers configured with max_buffer_age_ms were flushing at up to 1.4x
the configured time under high throughput scenarios.

Root cause: Under heavy load, the periodic flush goroutine could be
starved or delayed by intensive I/O operations and lock contention.
With the ticker firing every max_buffer_age_ms (e.g., 5000ms), buffers
created between ticker fires had to wait for the next check cycle.

Fix: Fire the ticker every max_buffer_age_ms/2 (e.g., 2500ms) while
keeping the age threshold at max_buffer_age_ms. This gives the periodic
flush goroutine more opportunities to run even under heavy load, without
flushing buffers prematurely.

Impact:
- Before: age=6700-7000ms (max_buffer_age_ms=5000)
- After:  age=5100-5700ms (max_buffer_age_ms=5000)
- Improvement: ~1.5 seconds faster (25% improvement)
- Throughput: Minimal impact (~1% overhead)

Added comprehensive timing tests to verify behavior and prevent
regressions.

Relates to #142
@xe-nvdk xe-nvdk merged commit f9e2659 into main Jan 19, 2026
4 checks passed
@xe-nvdk xe-nvdk linked an issue Jan 19, 2026 that may be closed by this pull request
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Buffer age-based flush takes up to 2x configured max_buffer_age_ms

1 participant