Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 11 additions & 7 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,16 +7,20 @@ versions are independent of the RedisAdapter wire-protocol version.

### Added

- Independent connection-establishment timeout and an isolated Redis test helper.

### Changed

- Blocking stream reads use a separate pool sized to the configured reader count.
- Physical XREAD cycles are bounded with socket-deadline slack.
- Owned subscription handles, exact stream snapshots and shared safe wire decoders.
- Configurable per-stream XREAD entry count and behavior-focused lifecycle tests.
- Independent connect timeout, dedicated blocking-reader pool, private Redis
fixtures and automatic CI for stacked PRs.

### Fixed

- Failed connection replacement preserves existing clients.
- Callback capture cleanup outside worker and reader locks, including exceptions
and canceled jobs; peer registrations survive handle removal.
- Tail resolution retries, rejection-aware snapshots and future-only failure cursors.
- Exact-width legacy decoding: malformed single items return `RA_INVALID_PAYLOAD`,
malformed typed callback entries are skipped, and empty arrays remain valid data.
- Finite shutdown cycles, startup/shutdown fencing and complete-batch sharing.
- Failed connection replacements preserve working clients and command availability.

## [0.1.0] - 2026-07-15

Expand Down
14 changes: 12 additions & 2 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake)

# Create lists of headers and sources with complete path based on our files
file(GLOB REDIS_ADAPTER_SOURCES RedisAdapter.cpp)
file(GLOB REDIS_ADAPTER_HEADERS RedisConnection.hpp RedisAdapter.hpp RedisAdapterTempl.hpp RedisCache.hpp ThreadPool.hpp)
file(GLOB REDIS_ADAPTER_HEADERS RedisConnection.hpp RedisTime.hpp RedisStreamData.hpp RedisAdapter.hpp RedisAdapterTempl.hpp RedisCache.hpp ThreadPool.hpp)

# Create a list of the directories our headers are in
include(GetDirectoriesOfFiles)
Expand Down Expand Up @@ -83,12 +83,22 @@ if(REDIS_ADAPTER_TEST)
enable_testing()
add_subdirectory(googletest)
include(GoogleTest)
find_package(Threads REQUIRED)
add_executable(redis-connection-policy-test connection_policy_test.cpp)
target_link_libraries(redis-connection-policy-test ${REDIS_ADAPTER_LIBRARIES} GTest::gtest_main)
gtest_discover_tests(redis-connection-policy-test PROPERTIES TIMEOUT 10)
gtest_discover_tests(redis-connection-policy-test PROPERTIES TIMEOUT 10 RUN_SERIAL TRUE)
add_executable(redis-adapter-mock-stream-test mock_stream_test.cpp)
target_link_libraries(redis-adapter-mock-stream-test GTest::gtest_main)
gtest_discover_tests(redis-adapter-mock-stream-test PROPERTIES TIMEOUT 5)
add_executable(redis-adapter-threadpool-test thread_pool_test.cpp)
target_link_libraries(redis-adapter-threadpool-test GTest::gtest_main Threads::Threads)
gtest_discover_tests(redis-adapter-threadpool-test PROPERTIES TIMEOUT 5)
add_executable(redis-adapter-test ${REDIS_ADAPTER_SOURCES} test.cpp)
target_link_libraries(redis-adapter-test ${REDIS_ADAPTER_LIBRARIES} GTest::gtest_main)
gtest_discover_tests(redis-adapter-test)
add_executable(redis-adapter-lifecycle-test ${REDIS_ADAPTER_SOURCES} lifecycle_test.cpp)
target_link_libraries(redis-adapter-lifecycle-test ${REDIS_ADAPTER_LIBRARIES} GTest::gtest_main)
gtest_discover_tests(redis-adapter-lifecycle-test PROPERTIES TIMEOUT 15 RUN_SERIAL TRUE)
endif()

# Build redis-adapter-benchmark and googlebenchmark if REDIS_ADAPTER_BENCHMARK is true
Expand Down
Loading
Loading