drop_non_fast_promotion_v3.patch
text/plain
Filename: drop_non_fast_promotion_v3.patch
Type: text/plain
Part: 0
Patch
Format: unified
Series: patch v3
| File | + | − |
|---|---|---|
| src/backend/access/transam/xlog.c | 11 | 37 |
| src/backend/postmaster/postmaster.c | 6 | 1 |
| src/bin/pg_ctl/pg_ctl.c | 0 | 5 |
| src/include/access/xlog.h | 0 | 1 |
diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c
index ca09d81b08..1df1aa9b30 100644
--- a/src/backend/access/transam/xlog.c
+++ b/src/backend/access/transam/xlog.c
@@ -299,9 +299,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
@@ -6319,7 +6316,7 @@ StartupXLOG(void)
DBState dbstate_at_startup;
XLogReaderState *xlogreader;
XLogPageReadPrivate private;
- bool fast_promoted = false;
+ bool promoted = false;
struct stat st;
/*
@@ -7724,14 +7721,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;
@@ -7742,7 +7739,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
@@ -7759,7 +7756,7 @@ StartupXLOG(void)
}
}
- if (!fast_promoted)
+ if (!promoted)
RequestCheckpoint(CHECKPOINT_END_OF_RECOVERY |
CHECKPOINT_IMMEDIATE |
CHECKPOINT_WAIT);
@@ -7950,12 +7947,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);
}
@@ -12577,29 +12574,10 @@ CheckForStandbyTrigger(void)
if (LocalPromoteIsTriggered)
return true;
- if (IsPromoteSignaled())
+ if (IsPromoteSignaled() && CheckPromoteSignal())
{
- /*
- * 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")));
-
+ RemovePromoteSignalFiles();
ResetPromoteSignaled();
SetPromoteIsTriggered();
return true;
@@ -12614,7 +12592,6 @@ CheckForStandbyTrigger(void)
(errmsg("promote trigger file found: %s", PromoteTriggerFile)));
unlink(PromoteTriggerFile);
SetPromoteIsTriggered();
- fast_promote = true;
return true;
}
else if (errno != ENOENT)
@@ -12633,20 +12610,17 @@ void
RemovePromoteSignalFiles(void)
{
unlink(PROMOTE_SIGNAL_FILE);
- unlink(FALLBACK_PROMOTE_SIGNAL_FILE);
}
/*
- * Check to see if a promote request has arrived. Should be
- * called by postmaster after receiving SIGUSR1.
+ * Check to see if a promote request has arrived.
*/
bool
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/backend/postmaster/postmaster.c b/src/backend/postmaster/postmaster.c
index 160afe9f39..de0dbd7f08 100644
--- a/src/backend/postmaster/postmaster.c
+++ b/src/backend/postmaster/postmaster.c
@@ -5333,7 +5333,12 @@ sigusr1_handler(SIGNAL_ARGS)
pmState == PM_HOT_STANDBY || pmState == PM_WAIT_READONLY) &&
CheckPromoteSignal())
{
- /* Tell startup process to finish recovery */
+ /*
+ * Tell startup process to finish recovery.
+ *
+ * Leave the promote signal file in place and let the Startup
+ * process do the unlink.
+ */
signal_child(StartupPID, SIGUSR2);
}
diff --git a/src/bin/pg_ctl/pg_ctl.c b/src/bin/pg_ctl/pg_ctl.c
index 3c03ace7ed..1cdc3ebaa3 100644
--- a/src/bin/pg_ctl/pg_ctl.c
+++ b/src/bin/pg_ctl/pg_ctl.c
@@ -1195,11 +1195,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 e917dfe92d..657bc6b6e6 100644
--- a/src/include/access/xlog.h
+++ b/src/include/access/xlog.h
@@ -391,6 +391,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 */