Skip to content

v2.7.0.rc1

Pre-release
Pre-release
Compare
Choose a tag to compare
@mensfeld mensfeld released this 10 Apr 10:48
· 56 commits to master since this release
ef1e582

This release contains BREAKING changes. Make sure to read and apply upgrade notes.

  • [Feature] Support custom OAuth providers.
  • [Breaking] Drop Ruby 2.7 support.
  • [Breaking] Change default timeouts so final delivery message.timeout.ms is less that max_wait_time so we do not end up with not final verdict.
  • [Breaking] Update all the time related configuration settings to be in ms and not mixed.
  • [Breaking] Remove no longer needed wait_timeout configuration option.
  • [Enhancement] Provide WaterDrop::Producer#transaction? that returns only when producer has an active transaction running.
  • [Enhancement] Introduce instrument_on_wait_queue_full flag (defaults to true) to be able to configure whether non critical (retryable) queue full errors should be instrumented in the error pipeline. Useful when building high-performance pipes with WaterDrop queue retry backoff as a throttler.

Upgrade Notes

PLEASE MAKE SURE TO READ AND APPLY THEM!

Time Settings Format Alignment

All time-related values are now configured in milliseconds instead of some being in seconds and some in milliseconds.

The values that were changed from seconds to milliseconds are:

  • max_wait_timeout
  • wait_timeout
  • wait_backoff_on_queue_full
  • wait_timeout_on_queue_full
  • wait_backoff_on_transaction_command, default

If you have configured any of those yourself, please replace the seconds representation with milliseconds:

producer = WaterDrop::Producer.new

producer.setup do |config|
  config.deliver = true

  # Replace this:
  config.wait_timeout = 30

  # With
  config.wait_timeout = 30_000
  # ...
end

Defaults Alignment

In this release, we've updated our default settings to address a crucial issue: previous defaults could lead to inconclusive outcomes in synchronous operations due to wait timeout errors. Users often mistakenly believed that a message dispatch was halted because of these errors when, in fact, the timeout was related to awaiting the final dispatch verdict, not the dispatch action itself.

The new defaults in WaterDrop 2.7.0 eliminate this confusion by ensuring synchronous operation results are always transparent and conclusive. This change aims to provide a straightforward understanding of wait timeout errors, reinforcing that they reflect the wait state, not the dispatch success.

Below, you can find a table with what has changed, the new defaults, and the current ones in case you want to retain the previous behavior:

Config Previous Default New Default
root max_wait_timeout 5000 ms (5 seconds) 60000 ms (60 seconds)
kafka message.timeout.ms 300000 ms (5 minutes) 50000 ms (50 seconds)
kafka transaction.timeout.ms 60000 ms (1 minute) 55000 ms (55 seconds)

This alignment ensures that when using sync operations or invoking #wait, any exception you get should give you a conclusive and final delivery verdict.