...
- Entrypoint for WALRecords to be captured by CDC. Options are:
SegmentedRingByteBuffer
(represents WAL segment) is multi-producer/single-consumer data structure.- + Relying on the consumer workflow we can guarantee order of events.
- + Consumer is a background thread, capturing records doesn't affect performance of transactional threads
- - Can't filter physical records at the entrypoint (might waste the buffer space). Must deserialize and filter them later before actual sending to a CdcConsumer
- - The consumer is triggered by a schedule - every 500ms by default.
- - Logic has some differences depending on the WAL settings (mmap true/false, FULL_SYNC)
- Capturing in
FileWriteAheadLogManager#log(WALRecord).
- + Capture logical records only
- + Common logic for all WAL settings
- - Captures record in buffer in transactional threads - might affect performance
- - CDC process must sort events by WALPointer by self - maintain concurrent ordering data structure, and implementing waiting for closing WAL gaps before sending.
- - Send events before they actually flushed in local Ignite node - lead to inconsistency between main and stand-by clusters.
- Behavior after the CDC buffer is full. Options are:
- Stop online CDC and delegate capturing to the ignite-cdc.sh process (CdcMain, based on WAL archives)
- Temporary switch to the CdcMain, and switch back to online CDC after closing the gap.
- From which point online CDC starts capturing:
- Check local persisted OnlineCdcConsumerState - find last captured WALPointer.
- What if the pointer is less than any pointer recovered during Ignite node startup?
- What if ignite-cdc.sh streamed before node stop?
...
{"serverDuration": 150, "requestCorrelationId": "b8ed7484ea327054"}