Re: Minimal logical decoding on standbys
Robert Haas <robertmhaas@gmail.com>
Commits
GET /api/v1/messages/:b64id/commits
the thread's linked commits as JSON, with link sources.
API reference →
-
Reduce the log level in 035_standby_logical_decoding.pl.
- 3034dc56ef4b 16.0 landed
-
035_standby_logical_decoding: Add missing waits for replication
- 57411c82ce86 16.0 landed
-
For cascading replication, wake physical and logical walsenders separately
- e101dfac3a53 16.0 landed
-
Handle logical slot conflicts on standby
- 26669757b6a7 16.0 landed
-
Support invalidating replication slots due to horizon and wal_level
- be87200efd93 16.0 landed
-
Prevent use of invalidated logical slot in CreateDecodingContext()
- 4397abd0a2af 16.0 landed
-
Replace replication slot's invalidated_at LSN with an enum
- 15f8203a5975 16.0 landed
-
Pass down table relation into more index relation functions
- 61b313e47eb9 16.0 landed
-
Assert only valid flag bits are passed to visibilitymap_set()
- a88a18b1250b 16.0 landed
-
Remove unused _bt_delitems_delete() argument.
- dc43492e46c7 14.0 cited
-
Add xl_btree_delete optimization.
- d2e5e20e5711 13.0 cited
On Tue, Apr 4, 2023 at 8:33 PM Jeff Davis <pgsql@j-davis.com> wrote: > Perhaps a commit message like: > > "For cascading replication, wake up physical walsenders separately from > logical walsenders. > > Physical walsenders can't send data until it's been flushed; logical > walsenders can't decode and send data until it's been applied. On the > standby, the WAL is flushed first, which will only wake up physical > walsenders; and then applied, which will only wake up logical > walsenders. > > Previously, all walsenders were awakened when the WAL was flushed. That > was fine for logical walsenders on the primary; but on the standby the > flushed WAL would not have been applied yet, so logical walsenders were > awakened too early." This sounds great. I think it's very clear about what is being changed and why. I see that Bertrand already pulled this language into v60. > For comments, I agree that WalSndWakeup() clearly needs a comment > update. The call site in ApplyWalRecord() could also use a comment. You > could add a comment at every call site, but I don't think that's > necessary if there's a good comment over WalSndWakeup(). Right, we don't want to go overboard, but I think putting some of the text you wrote above for the commit message, or something with a similar theme, in the comment for WalSndWakeup() would be quite helpful. We want people to understand why the physical and logical cases are different. I agree with you that ApplyWalRecord() is the other place where we need a good comment. I think the one in v60 needs more word-smithing. It should probably be a bit more detailed and clear about not only what we're doing but why we're doing it. The comment in InitWalSenderSlot() seems like it might be slightly overdone, but I don't have a big problem with it so if we leave it as-is that's fine. Now that I understand what's going on here a bit better, I'm inclined to think that this patch is basically fine. At least, I don't see any obvious problem with it. -- Robert Haas EDB: http://www.enterprisedb.com