On 2020/03/10 6:56, Andres Freund wrote:
Hi,
On 2020-03-06 16:33:18 -0300, Alvaro Herrera wrote:
On 2020-Mar-06, Michael Paquier wrote:
On Thu, Mar 05, 2020 at 09:40:54AM -0500, Robert Haas wrote:
Seems reasonable, but it would be better if people proposed these
kinds of changes closer to the beginning of the release cycle rather
than in the crush at the end.
+1, to both points.
Why? Are you saying that there's some actual risk of breaking
something? We're not even near beta or feature freeze yet.
I'm not seeing the reason for the "please propose this sooner in the
cycle" argument. It has already been proposed sooner -- seven years
sooner. We're not waiting for users to complain anymore; clearly nobody
cared.
Yea. There are changes that are so invasive that it's useful to go very
early, but in this case I'm not seeing it?
+1 for removing non-fast promotions.
Patch attached. I will add this into the first CF for v14.
FWIW, I find "fallback promotion" a confusing description.
Yeah, so I changed the subject.
Regards,
--
Fujii Masao
Advanced Computing Technology Center
Research and Development Headquarters
NTT DATA CORPORATION
diff --git a/src/backend/access/transam/xlog.c
b/src/backend/access/transam/xlog.c
index 11e32733c4..35fc700b7b 100644
--- a/src/backend/access/transam/xlog.c
+++ b/src/backend/access/transam/xlog.c
@@ -298,9 +298,6 @@ bool wal_receiver_create_temp_slot = false;
/* are we currently in standby mode? */
bool StandbyMode = false;
-/* whether request for fast promotion has been made yet */
-static bool fast_promote = false;
-
/*
* if recoveryStopsBefore/After returns true, it saves information of the stop
* point here
@@ -6311,7 +6308,7 @@ StartupXLOG(void)
DBState dbstate_at_startup;
XLogReaderState *xlogreader;
XLogPageReadPrivate private;
- bool fast_promoted = false;
+ bool promoted = false;
struct stat st;
/*
@@ -7698,14 +7695,14 @@ StartupXLOG(void)
* the rule that TLI only changes in shutdown checkpoints, which
* allows some extra error checking in xlog_redo.
*
- * In fast promotion, only create a lightweight end-of-recovery
record
+ * In promotion, only create a lightweight end-of-recovery
record
* instead of a full checkpoint. A checkpoint is requested
later,
* after we're fully out of recovery mode and already accepting
* queries.
*/
if (bgwriterLaunched)
{
- if (fast_promote)
+ if (LocalPromoteIsTriggered)
{
checkPointLoc = ControlFile->checkPoint;
@@ -7716,7 +7713,7 @@ StartupXLOG(void)
record = ReadCheckpointRecord(xlogreader,
checkPointLoc, 1, false);
if (record != NULL)
{
- fast_promoted = true;
+ promoted = true;
/*
* Insert a special WAL record to mark
the end of
@@ -7733,7 +7730,7 @@ StartupXLOG(void)
}
}
- if (!fast_promoted)
+ if (!promoted)
RequestCheckpoint(CHECKPOINT_END_OF_RECOVERY |
CHECKPOINT_IMMEDIATE |
CHECKPOINT_WAIT);
@@ -7924,12 +7921,12 @@ StartupXLOG(void)
WalSndWakeup();
/*
- * If this was a fast promotion, request an (online) checkpoint now.
This
+ * If this was a promotion, request an (online) checkpoint now. This
* isn't required for consistency, but the last restartpoint might be
far
* back, and in case of a crash, recovering from it might take a longer
* than is appropriate now that we're not in standby mode anymore.
*/
- if (fast_promoted)
+ if (promoted)
RequestCheckpoint(CHECKPOINT_FORCE);
}
@@ -12532,29 +12529,15 @@ CheckForStandbyTrigger(void)
if (LocalPromoteIsTriggered)
return true;
- if (IsPromoteSignaled())
+ /*
+ * In 9.1 and 9.2 the postmaster unlinked the promote file inside the
+ * signal handler. It now leaves the file in place and lets the
+ * Startup process do the unlink.
+ */
+ if (IsPromoteSignaled() && stat(PROMOTE_SIGNAL_FILE, &stat_buf) == 0)
{
- /*
- * In 9.1 and 9.2 the postmaster unlinked the promote file
inside the
- * signal handler. It now leaves the file in place and lets the
- * Startup process do the unlink. This allows Startup to know
whether
- * it should create a full checkpoint before starting up
(fallback
- * mode). Fast promotion takes precedence.
- */
- if (stat(PROMOTE_SIGNAL_FILE, &stat_buf) == 0)
- {
- unlink(PROMOTE_SIGNAL_FILE);
- unlink(FALLBACK_PROMOTE_SIGNAL_FILE);
- fast_promote = true;
- }
- else if (stat(FALLBACK_PROMOTE_SIGNAL_FILE, &stat_buf) == 0)
- {
- unlink(FALLBACK_PROMOTE_SIGNAL_FILE);
- fast_promote = false;
- }
-
ereport(LOG, (errmsg("received promote request")));
-
+ unlink(PROMOTE_SIGNAL_FILE);
ResetPromoteSignaled();
SetPromoteIsTriggered();
return true;
@@ -12569,7 +12552,6 @@ CheckForStandbyTrigger(void)
(errmsg("promote trigger file found: %s",
PromoteTriggerFile)));
unlink(PromoteTriggerFile);
SetPromoteIsTriggered();
- fast_promote = true;
return true;
}
else if (errno != ENOENT)
@@ -12588,7 +12570,6 @@ void
RemovePromoteSignalFiles(void)
{
unlink(PROMOTE_SIGNAL_FILE);
- unlink(FALLBACK_PROMOTE_SIGNAL_FILE);
}
/*
@@ -12600,8 +12581,7 @@ CheckPromoteSignal(void)
{
struct stat stat_buf;
- if (stat(PROMOTE_SIGNAL_FILE, &stat_buf) == 0 ||
- stat(FALLBACK_PROMOTE_SIGNAL_FILE, &stat_buf) == 0)
+ if (stat(PROMOTE_SIGNAL_FILE, &stat_buf) == 0)
return true;
return false;
diff --git a/src/bin/pg_ctl/pg_ctl.c b/src/bin/pg_ctl/pg_ctl.c
index f41084d2db..b0f771baa7 100644
--- a/src/bin/pg_ctl/pg_ctl.c
+++ b/src/bin/pg_ctl/pg_ctl.c
@@ -1196,11 +1196,6 @@ do_promote(void)
exit(1);
}
- /*
- * For 9.3 onwards, "fast" promotion is performed. Promotion with a full
- * checkpoint is still possible by writing a file called
- * "fallback_promote" instead of "promote"
- */
snprintf(promote_file, MAXPGPATH, "%s/promote", pg_data);
if ((prmfile = fopen(promote_file, "w")) == NULL)
diff --git a/src/include/access/xlog.h b/src/include/access/xlog.h
index f60ed2d36c..3914049438 100644
--- a/src/include/access/xlog.h
+++ b/src/include/access/xlog.h
@@ -382,6 +382,5 @@ extern SessionBackupState get_backup_status(void);
/* files to signal promotion to primary */
#define PROMOTE_SIGNAL_FILE "promote"
-#define FALLBACK_PROMOTE_SIGNAL_FILE "fallback_promote"
#endif /* XLOG_H */