Re: Minimal logical decoding on standbys
Amit Khandekar <amitdkhan.pg@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 Mon, 4 Mar 2019 at 14:09, Amit Khandekar <amitdkhan.pg@gmail.com> wrote: > > On Fri, 14 Dec 2018 at 06:25, Andres Freund <andres@anarazel.de> wrote: > > I've a prototype attached, but let's discuss the details in a separate > > thread. This also needs to be changed for pluggable storage, as we don't > > know about table access methods in the startup process, so we can't call > > can't determine which AM the heap is from during > > btree_xlog_delete_get_latestRemovedXid() (and sibling routines). > > Attached is a WIP test patch > 0003-WIP-TAP-test-for-logical-decoding-on-standby.patch that has a > modified version of Craig Ringer's test cases Hi Andres, I am trying to come up with new testcases to test the recovery conflict handling. Before that I have some queries : With Craig Ringer's approach, the way to reproduce the recovery conflict was, I believe, easy : Do a checkpoint, which will log the global-catalog-xmin-advance WAL record, due to which the standby - while replaying the message - may find out that it's a recovery conflict. But with your approach, the latestRemovedXid is passed only during specific vacuum-related WAL records, so to reproduce the recovery conflict error, we need to make sure some specific WAL records are logged, such as XLOG_BTREE_DELETE. So we need to create a testcase such that while creating an index tuple, it erases dead tuples from a page, so that it eventually calls _bt_vacuum_one_page()=>_bt_delitems_delete(), thus logging a XLOG_BTREE_DELETE record. I tried to come up with this reproducible testcase without success. This seems difficult. Do you have an easier option ? May be we can use some other WAL records that may have easier more reliable test case for showing up recovery conflict ? Further, with your patch, in ResolveRecoveryConflictWithSlots(), it just throws a WARNING error level; so the wal receiver would not make the backends throw an error; hence the test case won't catch the error. Is that right ? -- Thanks, -Amit Khandekar EnterpriseDB Corporation The Postgres Database Company