Handle change of slot name in logical replication apply

Since change of slot name is a supported operation, handle it more
gracefully, instead of in the this-should-not-happen way.

Author: Petr Jelinek <petr.jelinek@2ndquadrant.com>
This commit is contained in:
Peter Eisentraut 2017-04-03 11:10:28 -04:00
parent 70da87d334
commit 1116108c92
1 changed files with 16 additions and 2 deletions

View File

@ -1350,6 +1350,21 @@ reread_subscription(void)
proc_exit(0);
}
/*
* We need to make new connection to new slot if slot name has changed
* so exit here as well if that's the case.
*/
if (strcmp(newsub->slotname, MySubscription->slotname) != 0)
{
ereport(LOG,
(errmsg("logical replication worker for subscription \"%s\" will "
"restart because the replication slot name was changed",
MySubscription->name)));
walrcv_disconnect(wrconn);
proc_exit(0);
}
/*
* Exit if publication list was changed. The launcher will start
* new worker.
@ -1382,8 +1397,7 @@ reread_subscription(void)
}
/* Check for other changes that should never happen too. */
if (newsub->dbid != MySubscription->dbid ||
strcmp(newsub->slotname, MySubscription->slotname) != 0)
if (newsub->dbid != MySubscription->dbid)
{
elog(ERROR, "subscription %u changed unexpectedly",
MyLogicalRepWorker->subid);