[PATCH] Implement condition variable-based WAL waiting for logical decoding

Started by Arkady Skvorcov4 months ago1 messages
Jump to latest
#1Arkady Skvorcov
arkashaskv@gmail.com

Hello contributors

This patch implements a condition variable-based approach for WAL waiting
in logical decoding, replacing the previous polling mechanism. The new
system provides significant efficiency improvements by eliminating
unnecessary CPU cycles during WAL waiting periods.

Key changes:

1. Implemented LogicalWaitForWal() function to handle both immediate
return (non-waiting) and conditional waiting paths
2. Maintained backward compatibility with existing APIs
3. Added comprehensive regression tests

Performance benefits:
- Eliminates busy-waiting during logical replication slot advancement
- Reduces CPU usage during periods of low WAL activity
- Maintains same latency characteristics for high-activity scenarios

Testing:
- Added two new regression tests (logical_cv_waiting, logical_cv_edge_case)
- Verified both non-waiting (common case) and waiting (edge case) paths
- Tests cover basic functionality, multiple transactions, and slot advancement
- All existing regression tests pass

The implementation follows the existing pattern for condition variables
in PostgreSQL and integrates seamlessly with the current logical decoding
infrastructure.

Looking forward to your feedback.

Regards,
Arkady Skvorcov

Attachments:

condition_variable_wal_waiting.patchtext/x-patch; charset=US-ASCII; name=condition_variable_wal_waiting.patchDownload+298-15