Fix the misuse of origin filter across multiple pg_logical_slot_get_changes() calls.
authorAmit Kapila <[email protected]>
Wed, 27 Sep 2023 09:02:51 +0000 (14:32 +0530)
committerAmit Kapila <[email protected]>
Wed, 27 Sep 2023 09:02:51 +0000 (14:32 +0530)
commit54ccfd65868c013a8c6906bc894bc5ea3640740a
treea36b9678a875324f596ff97af123e383d597ddde
parent6fc3a138b1e8049a73e48d4b0f1031a1e6e7b8c6
Fix the misuse of origin filter across multiple pg_logical_slot_get_changes() calls.

The pgoutput module uses a global variable (publish_no_origin) to cache
the action for the origin filter, but we didn't reset the flag when
shutting down the output plugin, so subsequent retries may access the
previous publish_no_origin value.

We fix this by storing the flag in the output plugin's private data.
Additionally, the patch removes the currently unused origin string from the
structure.

For the back branch, to avoid changing the exposed structure, we eliminated the
global variable and instead directly used the origin string for change
filtering.

Author: Hou Zhijie
Reviewed-by: Amit Kapila, Michael Paquier
Backpatch-through: 16
Discussion: http://postgr.es/m/OS0PR01MB571690EF24F51F51EFFCBB0E94FAA@OS0PR01MB5716.jpnprd01.prod.outlook.com
contrib/test_decoding/expected/replorigin.out
contrib/test_decoding/sql/replorigin.sql
src/backend/replication/pgoutput/pgoutput.c
src/include/replication/pgoutput.h