Re: [UNVERIFIED SENDER] Re: Minimal logical decoding on standbys
bdrouvotAWS <bdrouvot@amazon.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
Attachments
- v8-0001-Allow-logical-decoding-on-standby.patch (text/plain) patch v8-0001
- v8-0002-Add-info-in-WAL-records-in-preparation-for-logica.patch (text/plain) patch v8-0002
- v8-0003-Handle-logical-slot-conflicts-on-standby.patch (text/plain) patch v8-0003
- v8-0004-New-TAP-test-for-logical-decoding-on-standby.patch (text/plain) patch v8-0004
- v8-0005-Doc-changes-describing-details-about-logical-deco.patch (text/plain) patch v8-0005
Hi,
On 12/15/20 7:24 PM, Fabrízio de Royes Mello wrote:
>
> On Wed, Mar 18, 2020 at 4:50 PM Alvaro Herrera
> <alvherre@2ndquadrant.com <mailto:alvherre@2ndquadrant.com>> wrote:
> >
> >
> > well, not "forever", but:
> >
> > $ make check PROVE_TESTS=t/019_standby_logical_decoding_conflicts.pl
> <http://019_standby_logical_decoding_conflicts.pl> PROVE_FLAGS=-v
> > ...
> > cd /pgsql/source/master/src/test/recovery &&
> TESTDIR='/home/alvherre/mnt/crypt/alvherre/Code/pgsql/build/master/src/test/recovery'
> PATH="/pgsql/build/master/tmp_install/pgsql/install/master/bin:$PATH"
> LD_LIBRARY_PATH="/pgsql/build/master/tmp_install/pgsql/install/master/lib"
> PGPORT='655432'
> PG_REGRESS='/home/alvherre/mnt/crypt/alvherre/Code/pgsql/build/master/src/test/recovery/../../../src/test/regress/pg_regress'
> REGRESS_SHLIB='/pgsql/build/master/src/test/regress/regress.so'
> /usr/bin/prove -I /pgsql/source/master/src/test/perl/ -I
> /pgsql/source/master/src/test/recovery -v
> t/019_standby_logical_decoding_conflicts.pl
> <http://019_standby_logical_decoding_conflicts.pl>
> > t/019_standby_logical_decoding_conflicts.pl
> <http://019_standby_logical_decoding_conflicts.pl> ..
> > 1..24
> > ok 1 - dropslot on standby created
> > ok 2 - activeslot on standby created
> > # poll_query_until timed out executing this query:
> > # SELECT '0/35C9190' <= replay_lsn AND state = 'streaming' FROM
> pg_catalog.pg_stat_replication WHERE application_name = 'standby';
> > # expecting this output:
> > # t
> > # last actual query output:
> > #
> > # with stderr:
> > Bailout called. Further testing stopped: system pg_ctl failed
> > Bail out! system pg_ctl failed
> > FAILED--Further testing stopped: system pg_ctl failed
> > make: *** [Makefile:19: check] Error 255
> >
>
> After rebase and did minimal tweaks (duplicated oid, TAP tests
> numbering) I'm facing similar problem but in other place:
>
>
> make -C src/test/recovery check
> PROVE_TESTS=t/023_standby_logical_decoding_conflicts.pl
> <http://023_standby_logical_decoding_conflicts.pl> PROVE_FLAGS=-v
> ...
> /usr/bin/mkdir -p '/data/src/pg/main/src/test/recovery'/tmp_check
> cd . && TESTDIR='/data/src/pg/main/src/test/recovery'
> PATH="/d/src/pg/main/tmp_install/home/fabrizio/pgsql/logical-decoding-standby/bin:$PATH"
> LD_LIBRARY_PATH="/d/src/pg/main/tmp_install/home/fabrizio/pgsql/logical-decoding-standby/lib"
> PGPORT='65432'
> PG_REGRESS='/data/src/pg/main/src/test/recovery/../../../src/test/regress/pg_regress'
> REGRESS_SHLIB='/d/src/pg/main/src/test/regress/regress.so'
> /usr/bin/prove -I ../../../src/test/perl/ -I . -v
> t/023_standby_logical_decoding_conflicts.pl
> <http://023_standby_logical_decoding_conflicts.pl>
> t/023_standby_logical_decoding_conflicts.pl
> <http://023_standby_logical_decoding_conflicts.pl> ..
> 1..24
> ok 1 - dropslot on standby created
> ok 2 - activeslot on standby created
> not ok 3 - dropslot on standby dropped
>
> # Failed test 'dropslot on standby dropped'
> # at t/023_standby_logical_decoding_conflicts.pl
> <http://023_standby_logical_decoding_conflicts.pl> line 67.
> # got: 'logical'
> # expected: ''
> not ok 4 - activeslot on standby dropped
>
> # Failed test 'activeslot on standby dropped'
> # at t/023_standby_logical_decoding_conflicts.pl
> <http://023_standby_logical_decoding_conflicts.pl> line 68.
> # got: 'logical'
> # expected: ''
>
>
> TAP tests hang forever in `check_slots_dropped` exactly here:
>
> # our client should've terminated in response to the walsender error
> eval {
> $slot_user_handle->finish;
> };
3 and 4 were failing because the
ResolveRecoveryConflictWithLogicalSlots() call was missing in
ResolveRecoveryConflictWithSnapshot(): the new version attached adds it.
The new version attached also provides a few changes to make it
compiling on the current master (it was not the case anymore).
I also had to change 023_standby_logical_decoding_conflicts.pl (had to
call $node_standby->create_logical_slot_on_standby($node_master,
'otherslot', 'postgres'); at the very beginning of the "DROP DATABASE
should drops it's slots, including active slots" section)
So that now the tests are passing:
t/023_standby_logical_decoding_conflicts.pl ..
1..24
ok 1 - dropslot on standby created
ok 2 - activeslot on standby created
ok 3 - dropslot on standby dropped
ok 4 - activeslot on standby dropped
ok 5 - pg_recvlogical exited non-zero
#
ok 6 - recvlogical recovery conflict
ok 7 - recvlogical error detail
ok 8 - dropslot on standby created
ok 9 - activeslot on standby created
ok 10 - dropslot on standby dropped
ok 11 - activeslot on standby dropped
ok 12 - pg_recvlogical exited non-zero
#
ok 13 - recvlogical recovery conflict
ok 14 - recvlogical error detail
ok 15 - otherslot on standby created
ok 16 - dropslot on standby created
ok 17 - activeslot on standby created
ok 18 - database dropped on standby
ok 19 - dropslot on standby dropped
ok 20 - activeslot on standby dropped
ok 21 - pg_recvlogical exited non-zero
#
ok 22 - recvlogical recovery conflict
ok 23 - recvlogical error detail
ok 24 - otherslot on standby not dropped
ok
All tests successful.
Files=1, Tests=24, 4 wallclock secs ( 0.02 usr 0.00 sys + 1.27 cusr
0.37 csys = 1.66 CPU)
Result: PASS
Attached is the new version.
Bertrand