|
74 | 74 | |> Oban.insert()
|
75 | 75 | ```
|
76 | 76 |
|
| 77 | +## v2.17.11 — 2024-06-25 |
| 78 | + |
| 79 | +### Bug Fixes |
| 80 | + |
| 81 | +- [Oban] Handle deprecation warnings from Elixir 1.17 |
| 82 | + |
| 83 | +- [Notifier] Prevent noisy logging about switching between modes. |
| 84 | + |
| 85 | + There's an apparent race condition in Sonar between pruning stale nodes on `:ping` and updating |
| 86 | + the status after a notification. This primarily happens in development for two reasons: |
| 87 | + |
| 88 | + 1. Development laptops are most prone to time warp because of system sleep. |
| 89 | + 2. Apps only run a single node in development. |
| 90 | + |
| 91 | + Using `monotonic_time/1` instead of `system_time/1` guards against clock drift/time warp |
| 92 | + effects. |
| 93 | + |
| 94 | +- [Stager] Prevent notification status timeouts from bubbling into the Stager. |
| 95 | + |
| 96 | + A clogged Ecto pool could cause cascading errors on startup due to a sequence of calls between |
| 97 | + the `Notifier`, `Sonar`, and `Stager`. |
| 98 | + |
| 99 | + 1. `Sonar` sends a notification in `handle_continue` on startup. |
| 100 | + 2. The notification is blocked while the `Notifier` waits for a connection from the Ecto pool. |
| 101 | + 3. `Stager` checks for the connection status on startup, which would eventually time out because |
| 102 | + the `Sonar` hadn't finished initializing. |
| 103 | + 4. The `Stager` crashes from the timeout error. |
| 104 | + |
| 105 | + This makes the following changes to prevent this sequence of events: |
| 106 | + |
| 107 | + 1. The `Stager` no longer gets the sonar status during startup. |
| 108 | + 2. The `Notifier` catches timeout errors from `Sonar` checks, warns about it, then returns an |
| 109 | + `:unknown` status. |
| 110 | + |
| 111 | +- [Engine] Defensively check the process dictionary during inline testing. |
| 112 | + |
| 113 | + Not all processes are guaranteed to return a value for the process dictionary. Sometimes a value |
| 114 | + was missing during inline testing, which would crash the test. |
| 115 | + |
| 116 | +- [Basic] Set `conflict?` flag when encountering a unique advisory lock. |
| 117 | + |
| 118 | + The `conflict?` flag wasn't set when inserting a unique job was blocked by an advisory lock. Now |
| 119 | + the flag is set on either a fetched duplicate, or when the advisory lock is set. |
| 120 | + |
| 121 | +- [Job] Correct `replace_by_state_option` type by switching from keyword to tuples. |
| 122 | + |
| 123 | +- [Config] Correctly type `shutdown_grace_period` as an `integer` rather than a `timeout`. |
| 124 | + |
77 | 125 | ## v2.17.10 — 2024-04-26
|
78 | 126 |
|
79 | 127 | ### Enhancements
|
|
0 commit comments