Summary
Refactor buffering strategy implementations to use the existing ring_buffer template instead of duplicating ring buffer logic.
Parent Issue
Part of #309 (Consolidate buffering layer - C++20 Module preparation)
Current State
buffering_strategy.h imports ring_buffer.h but doesn't use it
- Each strategy class (
fixed_size_strategy, time_based_strategy, etc.) implements its own vector-based buffer
- Ring buffer logic (overflow handling, circular writes) is duplicated
Problem
ring_buffer.h provides optimized, lock-free implementation but is underutilized
- Strategy classes duplicate buffer management code
- Inconsistent buffer behavior across strategies
Proposed Solution
- Modify strategy classes to use
ring_buffer<buffered_metric> internally
- Keep strategy-specific logic (flush triggers, priority handling) in strategy classes
- Delegate core buffer operations to
ring_buffer
Acceptance Criteria
Files Affected
src/utils/buffering_strategy.h
src/utils/ring_buffer.h
tests/test_buffering_strategies.cpp
Summary
Refactor buffering strategy implementations to use the existing
ring_buffertemplate instead of duplicating ring buffer logic.Parent Issue
Part of #309 (Consolidate buffering layer - C++20 Module preparation)
Current State
buffering_strategy.himportsring_buffer.hbut doesn't use itfixed_size_strategy,time_based_strategy, etc.) implements its own vector-based bufferProblem
ring_buffer.hprovides optimized, lock-free implementation but is underutilizedProposed Solution
ring_buffer<buffered_metric>internallyring_bufferAcceptance Criteria
ring_bufferfor storageFiles Affected
src/utils/buffering_strategy.hsrc/utils/ring_buffer.htests/test_buffering_strategies.cpp