mirror of
https://github.com/postgres/postgres.git
synced 2025-05-09 18:21:05 +03:00
Reset hot standby xmin after restart
Hot_standby_feedback could be reset by reload and worked correctly, but if the server was restarted rather than reloaded the xmin was not reset. Force reset always if hot_standby_feedback is enabled at startup. Ants Aasma, Craig Ringer Reported-by: Ants Aasma
This commit is contained in:
parent
2dfc126471
commit
95d1b41450
@ -1154,7 +1154,10 @@ XLogWalRcvSendReply(bool force, bool requestReply)
|
||||
* in case they don't have a watch.
|
||||
*
|
||||
* If the user disables feedback, send one final message to tell sender
|
||||
* to forget about the xmin on this standby.
|
||||
* to forget about the xmin on this standby. We also send this message
|
||||
* on first connect because a previous connection might have set xmin
|
||||
* on a replication slot. (If we're not using a slot it's harmless to
|
||||
* send a feedback message explicitly setting InvalidTransactionId).
|
||||
*/
|
||||
static void
|
||||
XLogWalRcvSendHSFeedback(bool immed)
|
||||
@ -1164,7 +1167,8 @@ XLogWalRcvSendHSFeedback(bool immed)
|
||||
uint32 nextEpoch;
|
||||
TransactionId xmin;
|
||||
static TimestampTz sendTime = 0;
|
||||
static bool master_has_standby_xmin = false;
|
||||
/* initially true so we always send at least one feedback message */
|
||||
static bool master_has_standby_xmin = true;
|
||||
|
||||
/*
|
||||
* If the user doesn't want status to be reported to the master, be sure
|
||||
@ -1189,14 +1193,17 @@ XLogWalRcvSendHSFeedback(bool immed)
|
||||
}
|
||||
|
||||
/*
|
||||
* If Hot Standby is not yet active there is nothing to send. Check this
|
||||
* after the interval has expired to reduce number of calls.
|
||||
* If Hot Standby is not yet accepting connections there is nothing to
|
||||
* send. Check this after the interval has expired to reduce number of
|
||||
* calls.
|
||||
*
|
||||
* Bailing out here also ensures that we don't send feedback until we've
|
||||
* read our own replication slot state, so we don't tell the master to
|
||||
* discard needed xmin or catalog_xmin from any slots that may exist
|
||||
* on this replica.
|
||||
*/
|
||||
if (!HotStandbyActive())
|
||||
{
|
||||
Assert(!master_has_standby_xmin);
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
* Make the expensive call to get the oldest xmin once we are certain
|
||||
|
Loading…
x
Reference in New Issue
Block a user