[Oban] Handle deprecation warnings from Elixir 1.17
[Notifier] Prevent noisy logging about switching between modes.
There's an apparent race condition in Sonar between pruning stale nodes on :ping and updating the status after a notification. This primarily happens in development for two reasons:
Development laptops are most prone to time warp because of system sleep.
Apps only run a single node in development.
Using monotonic_time/1 instead of system_time/1 guards against clock drift/time warp effects.
[Stager] Prevent notification status timeouts from bubbling into the Stager.
A clogged Ecto pool could cause cascading errors on startup due to a sequence of calls between the Notifier, Sonar, and Stager.
Sonar sends a notification in handle_continue on startup.
The notification is blocked while the Notifier waits for a connection from the Ecto pool.
Stager checks for the connection status on startup, which would eventually time out because the Sonar hadn't finished initializing.
The Stager crashes from the timeout error.
This makes the following changes to prevent this sequence of events:
The Stager no longer gets the sonar status during startup.
The Notifier catches timeout errors from Sonar checks, warns about it, then returns an :unknown status.
[Engine] Defensively check the process dictionary during inline testing.
Not all processes are guaranteed to return a value for the process dictionary. Sometimes a value was missing during inline testing, which would crash the test.
[Basic] Set conflict? flag when encountering a unique advisory lock.
The conflict? flag wasn't set when inserting a unique job was blocked by an advisory lock. Now the flag is set on either a fetched duplicate, or when the advisory lock is set.
[Job] Correct replace_by_state_option type by switching from keyword to tuples.
[Config] Correctly type shutdown_grace_period as an integer rather than a timeout.
[Basic] Return {:ok, job} tuple on unique advisory lock conflict.
The advisory lock clause only returned the job, not a success tuple.
v2.17.11 — 2024-06-25
Bug Fixes
[Oban] Handle deprecation warnings from Elixir 1.17
[Notifier] Prevent noisy logging about switching between modes.
There's an apparent race condition in Sonar between pruning stale nodes on :ping and updating
the status after a notification. This primarily happens in development for two reasons:
Development laptops are most prone to time warp because of system sleep.
Apps only run a single node in development.
Using monotonic_time/1 instead of system_time/1 guards against clock drift/time warp
effects.
[Stager] Prevent notification status timeouts from bubbling into the Stager.
A clogged Ecto pool could cause cascading errors on startup due to a sequence of calls between
the Notifier, Sonar, and Stager.
Sonar sends a notification in handle_continue on startup.
The notification is blocked while the Notifier waits for a connection from the Ecto pool.
Stager checks for the connection status on startup, which would eventually time out because
the Sonar hadn't finished initializing.
The Stager crashes from the timeout error.
This makes the following changes to prevent this sequence of events:
The Stager no longer gets the sonar status during startup.
The Notifier catches timeout errors from Sonar checks, warns about it, then returns an
:unknown status.
[Engine] Defensively check the process dictionary during inline testing.
Not all processes are guaranteed to return a value for the process dictionary. Sometimes a value
was missing during inline testing, which would crash the test.
[Basic] Set conflict? flag when encountering a unique advisory lock.
The conflict? flag wasn't set when inserting a unique job was blocked by an advisory lock. Now
Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
- `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
Bumps oban from 2.17.10 to 2.17.12.
Release notes
Sourced from oban's releases.
Changelog
Sourced from oban's changelog.
... (truncated)
Commits
bd2892d
Release v2.17.121996be9
Return {:ok, job} tuple on adlock conflictfb07db6
Release v2.17.110b2a72d
Bump all outdated deps to latest version1c9e0b8
Add typedocs for Worker.return/0 type (#1108)ad9b7ee
Use monotonic_time for pruning stale Sonar nodesb1d9c24
Make replace_by_state_option tuples instead of a keyword (#1103)140e49e
Defensively check the pdict for inline testing4c0ac00
Prevent sonar timeouts bubbling into the stageref0805f
Handle deprecation warnings from Elixir 1.17-rc.0Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting
@dependabot rebase
.Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show