Commit cbe81ef
committed
fix(replication): key logical replication leader lock on slot name
The LogicalReplicationClient leader lock (Redlock) was keyed on the client
name, but a Postgres logical replication slot allows exactly one consumer, so
the lock must serialize consumers of a given slot. When two clients target the
same slot with different names (e.g. across a rolling deploy where the name
changed but the slot did not), each acquired a distinct lock, both became
leader, and the second to run START_REPLICATION failed with 'replication slot
is active'. Since START_REPLICATION is fire-and-forget and only logged on error,
that consumer stopped and replication stalled until restarted.
Key the lock on slotName instead. Adds a regression test (two clients, same
slot, different name) verified to fail before and pass after.1 parent 70bca82 commit cbe81ef
3 files changed
Lines changed: 66 additions & 2 deletions
File tree
- .server-changes
- internal-packages/replication/src
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
181 | 181 | | |
182 | 182 | | |
183 | 183 | | |
| 184 | + | |
| 185 | + | |
| 186 | + | |
| 187 | + | |
| 188 | + | |
| 189 | + | |
| 190 | + | |
| 191 | + | |
| 192 | + | |
| 193 | + | |
| 194 | + | |
| 195 | + | |
| 196 | + | |
| 197 | + | |
| 198 | + | |
| 199 | + | |
| 200 | + | |
| 201 | + | |
| 202 | + | |
| 203 | + | |
| 204 | + | |
| 205 | + | |
| 206 | + | |
| 207 | + | |
| 208 | + | |
| 209 | + | |
| 210 | + | |
| 211 | + | |
| 212 | + | |
| 213 | + | |
| 214 | + | |
| 215 | + | |
| 216 | + | |
| 217 | + | |
| 218 | + | |
| 219 | + | |
| 220 | + | |
| 221 | + | |
| 222 | + | |
| 223 | + | |
| 224 | + | |
| 225 | + | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + | |
| 230 | + | |
| 231 | + | |
| 232 | + | |
| 233 | + | |
| 234 | + | |
| 235 | + | |
| 236 | + | |
| 237 | + | |
184 | 238 | | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
19 | 19 | | |
20 | 20 | | |
21 | 21 | | |
22 | | - | |
| 22 | + | |
| 23 | + | |
23 | 24 | | |
24 | 25 | | |
25 | 26 | | |
| |||
703 | 704 | | |
704 | 705 | | |
705 | 706 | | |
| 707 | + | |
| 708 | + | |
| 709 | + | |
706 | 710 | | |
707 | | - | |
| 711 | + | |
708 | 712 | | |
709 | 713 | | |
710 | 714 | | |
| |||
0 commit comments