Skip to content

Unreleased Changes in The Mainline

Breaking Changes

Other Changes and Enhancements

  • Log records now include an optional session_id field to correlate messages received or sent (depending on the type of the record) on the same connection/session. #316

  • Updated embedded libunbound to 1.22

  • Use more compact representation of ResolvedAddress in logs. Instead of showing something like ResolvedAddress { name: "some.host.", addr: 10.0.0.1 } we now display it as some.host./10.0.0.1 which is a bit easier to understand and occupies less space in the logs.

  • We will now trigger the requeue_message event in the case of an error resolving the ready queue, such as DNS related errors. This gives an opportunity to rebind or reject messages which are experiencing persistent DNS resolution issues. #319

  • New dns_mx_resolve_in_progress, dns_mx_resolve_status_ok, dns_mx_resolve_status_fail, dns_mx_resolve_cache_hit, dns_mx_resolve_cache_miss metrics that reflect the status of MX resolution. These are available via the metrics endpoints.

  • maildir can now specify file and directory modes. #109

  • maildir now supports template expansion in the maildir_path. #109

  • TSA now supports "Bounce", "BounceTenant" and "BounceCampaign" actions which create bounces for scheduled queues which match the domain/tenant/campaign of the triggering event. #272

  • Ready Queues now use intrusive lists through the internal Message structure, which keeps memory usage for the ready queues bounded to O(number-of-messages) rather than the previous O(number-of-ready-queues * max_ready).

Fixes

  • When enable_tls is set to Required or RequiredInsecure, ignore the effect of remember_broken_tls. This makes it easier to set a default value of remember_broken_tls without having to remember to special case it for sites where TLS is required, or sites that use MTA-STS or DANE to advertise that it should be required.

  • When configuring the unbound resolver, the port number was not passed through for the upstream DNS server, so non-standard ports would not be respected. #314

  • Expiration was checked only when incrementing the number of attempts, or when spooling in. There are some situations where a message can be delayed and re-queued without incrementing the number of attempts, which meant that some messages could linger in the queues until they are actually attempted again.

  • Running validate-shaping without passing any files to validate would report OK instead of telling you that you should have passed one or more file names.

  • Some messages could sometimes get delayed slightly longer than intended when using TimerWheels (the default) when moving from the scheduled queue to the ready queue.

  • The get_listener_domain event handler results were incorrectly cached globally which allowed a given source IP which successfully authenticated in one session to appear authenticated for other separate connections made by that same IP to/from the same domain, within the same 60 second period. #320

  • TSA daemon would not report the list of scheduled queue suspensions in the initial websocket request made by a (re)connecting client.