You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: docs/adr/0011-wake-up-strategy.md
+11-1Lines changed: 11 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -25,6 +25,14 @@ The interface supports:
25
25
26
26
MySQL uses polling or optional Redis. SQLite uses polling plus the in-process signal; multi-host SQLite is outside its supported operating model.
27
27
28
+
Selection is automatic. `wake_up_adapter` takes a name or an adapter and
29
+
defaults to `:automatic`, which prefers a configured Redis URL, then PostgreSQL
30
+
notifications, then polling. PostgreSQL is chosen only after a probe
31
+
notification arrives, because `LISTEN` does not survive a transaction pooler. A
32
+
requested adapter that the environment cannot provide polls and records why,
33
+
rather than claim a wake-up it cannot deliver. `SolidObjects.wake_up.capability`
34
+
reports the choice, and the doctor reports the same record.
35
+
28
36
The synchronous caller first attempts to claim and execute the actor locally,
29
37
so the normal path has no worker polling leg. When another process owns the
30
38
activation, coordination overhead from completion commit until the caller's
@@ -45,5 +53,7 @@ Timeout does not cancel durable work.
45
53
- Redis loss only increases latency and never loses durable work.
46
54
- Every adapter retains periodic polling to close startup, reconnect, and missed-message races.
47
55
- A process that returns `false` from a timed wait participates in backoff; an older custom adapter that returns `nil` keeps the fast cadence.
48
-
- A multi-process deployment without an adapter trades idle database load for up to the current idle polling interval of notification latency and logs that topology once.
56
+
- A multi-process deployment whose installed adapter cannot cross processes trades idle database load for up to the current idle polling interval of notification latency and logs that topology once.
57
+
- A PostgreSQL deployment that configures nothing now pays one `NOTIFY` per enqueue after the commit and one listening connection per waiting thread, outside the pool.
58
+
- Selection runs once per process, under a lock, because the probe opens connections and waits.
49
59
- Notification payloads never contain actor arguments or results.
0 commit comments