Owned stream readers do not resume if a Redis key is deleted and recreated with IDs below the saved cursor. The exact cursor is correctly preserved across ordinary reads, but there is no stream-reset detection, so the new stream is filtered indefinitely until its IDs exceed the old stream's maximum.
Affected revision: 904e0ef (redis-adapter #109 on #108); the reader logic is also present in 0bb9c35. This affects the IOC release path tracked in fermi-ad/redis-pvxs-ioc#4, #24 and #99, but does not establish the root cause of the historical cache/allocator report.
Reproduction with a private standalone Redis:
- Write
{test}:value with ID 1000-0.
- Use
subscribeStream("value", callback, "0-0") and wait for 1000-0.
- Delete the stream and recreate it with ID
1-0.
- No callback arrives for
1-0 during the four-second regression deadline. The test fails with “recreated stream must resume below the previous cursor”. Writing further IDs below 1000-0 remains stalled.
Expected: observe stream deletion/reset, fence queued data from the old stream, resume the recreated stream, and expose the discontinuity. A mere connection outage must preserve the exact cursor and must not replay old samples. Trim/deletion and connection recovery should be observable without changing the legacy source timestamp encoding.
A focused upstream fix and recovery_test.cpp regression are in progress on dev/stream-recovery-status; the fix PR and passing regression/CI evidence will be linked here. Keep this issue open until the fix merges and validates.
Owned stream readers do not resume if a Redis key is deleted and recreated with IDs below the saved cursor. The exact cursor is correctly preserved across ordinary reads, but there is no stream-reset detection, so the new stream is filtered indefinitely until its IDs exceed the old stream's maximum.
Affected revision:
904e0ef(redis-adapter #109 on #108); the reader logic is also present in0bb9c35. This affects the IOC release path tracked in fermi-ad/redis-pvxs-ioc#4, #24 and #99, but does not establish the root cause of the historical cache/allocator report.Reproduction with a private standalone Redis:
{test}:valuewith ID1000-0.subscribeStream("value", callback, "0-0")and wait for1000-0.1-0.1-0during the four-second regression deadline. The test fails with “recreated stream must resume below the previous cursor”. Writing further IDs below1000-0remains stalled.Expected: observe stream deletion/reset, fence queued data from the old stream, resume the recreated stream, and expose the discontinuity. A mere connection outage must preserve the exact cursor and must not replay old samples. Trim/deletion and connection recovery should be observable without changing the legacy source timestamp encoding.
A focused upstream fix and
recovery_test.cppregression are in progress ondev/stream-recovery-status; the fix PR and passing regression/CI evidence will be linked here. Keep this issue open until the fix merges and validates.