Releases: karafka/waterdrop
Releases · karafka/waterdrop
v2.8.15
v2.8.14
- [Fix] Fatal error replacement not working without exact error unwind from the fatal envelope
- [Testing] Add
WaterDrop::Producer::Testingmodule for injecting and querying librdkafka fatal errors in tests. - [Testing] Add
#trigger_test_fatal_error(error_code, reason)method to simulate fatal errors without requiring actual broker-side conditions. - [Testing] Add
#fatal_errormethod to query current fatal error state for validation in tests. - [Testing] Add comprehensive test coverage for fatal error injection, reload behavior, and event instrumentation with real librdkafka errors.
- [Change] Require
karafka-rdkafka>=0.23.1due to error handling fixes.
v2.8.13
- [Enhancement] Make
fencederror skip-reload behavior configurable via newnon_reloadable_errorssetting (defaults to[:fenced]for backward compatibility). - [Enhancement] Add
producer.reloadevent allowing config modification before reload to escape fencing loops (#706). - [Enhancement] Do not early initialize the new instance on reload.
v2.8.12
- [Enhancement] Introduce
reload_on_idempotent_fatal_errorto automatically reload librdkafka producer after fatal errors on idempotent (non-transactional) producers. - [Enhancement] Add configurable backoff and retry limits for fatal error recovery to prevent infinite reload loops:
wait_backoff_on_idempotent_fatal_error(default: 5000ms) - backoff before retrying after idempotent fatal error reloadmax_attempts_on_idempotent_fatal_error(default: 5) - max reload attempts for idempotent fatal errorswait_backoff_on_transaction_fatal_error(default: 1000ms) - backoff after transactional fatal error reloadmax_attempts_on_transaction_fatal_error(default: 10) - max reload attempts for transactional fatal errors
- [Enhancement] Ensure
error.occurredis instrumented before idempotent fatal error reload for visibility. - [Enhancement] Automatically reset fatal error reload attempts counter on successful produce/transaction to allow recovery.
- [Refactor] Extract idempotence-related logic into separate
WaterDrop::Producer::Idempotencemodule. - [Refactor] Initialize
@idempotentand@transactionalinstance variables in Producer#initialize for consistent Ruby object shapes optimization. - [Refactor] Add
idempotent_reloadable?andidempotent_retryable?methods to encapsulate idempotent fatal error reload checks. - [Refactor] Add
transactional_retryable?method to encapsulate transactional fatal error reload retry checks. - [Fix] Waterdrop
config.kafkaerrors on frozen hash. - [Fix]
Producer#transactional?method now correctly computes transactional status when@transactionalis initialized to nil.
v2.8.11
- [Enhancement] Provide fast-track for middleware-less flows (20% faster) for single message, 5000x faster for batches.
- [Enhancement] Optimize middlewares application by around 20%.
- [Change] Remove Ruby
3.1according to the EOL schedule. - [Fix] Connection pool timeout parameter now accepts milliseconds instead of seconds for consistency with other WaterDrop timeouts. The default timeout has been changed from
5seconds to5000milliseconds (equivalent value).
v2.8.10
- [Enhancement] Add
#closealias forWaterDrop::ConnectionPool#shutdownto align with producer API for consistent interface across both individual producers and connection pools. - [Enhancement] Add
WaterDrop.monitormethod as the preferred alias forWaterDrop.instrumentationto align with per-producer API naming convention. Theinstrumentationmethod remains available as a deprecated alias for backward compatibility.
v2.8.9
- [Enhancement] Add connection pool lifecycle events to global instrumentation for improved observability. Events include
connection_pool.created,connection_pool.setup,connection_pool.shutdown,connection_pool.reload, andconnection_pool.reloaded. - [Enhancement] Add default connection pool transactional direct API.
v2.8.8
- [Feature] Add
WaterDrop::ConnectionPoolfor efficient connection pooling using the provenconnection_poolgem. - [Feature] Add
WaterDrop.instrumentationclass-level instrumentation for producer lifecycle events. This allows external libraries to subscribe toproducer.createdandproducer.configuredevents without needing producer instance references, enabling middleware injection and configuration by libraries like Datadog tracing. - [Change] Remove Ruby
3.1specs according to the EOL schedule.
v2.8.8.rc1
- [Feature] Add
WaterDrop::ConnectionPoolfor efficient connection pooling using the provenconnection_poolgem. - [Feature] Add
WaterDrop.instrumentationclass-level instrumentation for producer lifecycle events. This allows external libraries to subscribe toproducer.createdandproducer.configuredevents without needing producer instance references, enabling middleware injection and configuration by libraries like Datadog tracing. - [Change] Remove Ruby
3.1specs according to the EOL schedule.