Re: Logical Replication - behavior of ALTER PUBLICATION .. DROP TABLE and ALTER SUBSCRIPTION .. REFRESH PUBLICATION - Mailing list pgsql-hackers
From | Amit Kapila |
---|---|
Subject | Re: Logical Replication - behavior of ALTER PUBLICATION .. DROP TABLE and ALTER SUBSCRIPTION .. REFRESH PUBLICATION |
Date | |
Msg-id | CAA4eK1+8K7DrMD_qyKYoQ4+5tfvPxuGvPXEMgdtxNRSKr+qmRA@mail.gmail.com Whole thread Raw |
In response to | Re: Logical Replication - behavior of ALTER PUBLICATION .. DROP TABLE and ALTER SUBSCRIPTION .. REFRESH PUBLICATION (Bharath Rupireddy <bharath.rupireddyforpostgres@gmail.com>) |
Responses |
Re: Logical Replication - behavior of ALTER PUBLICATION .. DROP TABLE and ALTER SUBSCRIPTION .. REFRESH PUBLICATION
Re: Logical Replication - behavior of ALTER PUBLICATION .. DROP TABLE and ALTER SUBSCRIPTION .. REFRESH PUBLICATION |
List | pgsql-hackers |
On Tue, Jan 12, 2021 at 11:39 AM Bharath Rupireddy <bharath.rupireddyforpostgres@gmail.com> wrote: > > On Tue, Jan 12, 2021 at 9:05 AM Amit Kapila <amit.kapila16@gmail.com> wrote: > > > > On Mon, Jan 11, 2021 at 6:51 PM Bharath Rupireddy > > <bharath.rupireddyforpostgres@gmail.com> wrote: > > > > > > Hi, > > > > > > While providing thoughts on the design in [1], I found a strange > > > behaviour with the $subject. The use case is shown below as a sequence > > > of steps that need to be run on publisher and subscriber to arrive at > > > the strange behaviour. In step 5, the table is dropped from the > > > publication and in step 6, the refresh publication is run on the > > > subscriber, from here onwards, the expectation is that no further > > > inserts into the publisher table have to be replicated on to the > > > subscriber, but the opposite happens i.e. the inserts are still > > > replicated to the subscriber. ISTM as a bug. Let me know if I'm > > > missing anything. > > > > > > > Did you try to investigate what's going on? Can you please check what > > is the behavior if, after step-5, you restart the subscriber and > > separately try creating a new subscription (maybe on a different > > server) for that publication after step-5 and see if that allows the > > relation to be replicated? AFAIU, in AlterSubscription_refresh, we > > remove such dropped rels and stop their corresponding apply workers > > which should stop the further replication of such relations but that > > doesn't seem to be happening in your case. > > Here's my analysis: > 1) in the publisher, alter publication drop table successfully > removes(PublicationDropTables) the table from the catalogue > pg_publication_rel > 2) in the subscriber, alter subscription refresh publication > successfully removes the table from the catalogue pg_subscription_rel > (AlterSubscription_refresh->RemoveSubscriptionRel) > so far so good > Here, it should register the worker to stop on commit, and then on commit it should call AtEOXact_ApplyLauncher to stop the apply worker. Once the apply worker is stopped, the corresponding WALSender will also be stopped. Something here is not happening as per expected behavior. > 3) after the insertion into the table in the publisher(remember that > it's dropped from the publication in (1)), the walsender process is > unable detect that the table has been dropped from the publication > i.e. it doesn't look at the pg_publication_rel catalogue or some > other, but it only does is_publishable_relation() check which returns > true in pgoutput_change(). Maybe the walsender should look at the > catalogue pg_publication_rel in is_publishable_relation()? > We must be somewhere checking pg_publication_rel before sending the decoded change because otherwise, we would have sent the changes for the table which are not even part of this publication. I think you can try to create a separate table that is not part of the publication under test and see how the changes for that are filtered. -- With Regards, Amit Kapila.
pgsql-hackers by date: