aboutsummaryrefslogtreecommitdiff
path: root/src/backend/postmaster/checkpointer.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/postmaster/checkpointer.c')
-rw-r--r--src/backend/postmaster/checkpointer.c39
1 files changed, 25 insertions, 14 deletions
diff --git a/src/backend/postmaster/checkpointer.c b/src/backend/postmaster/checkpointer.c
index eeb73c85726..9087e3f8db1 100644
--- a/src/backend/postmaster/checkpointer.c
+++ b/src/backend/postmaster/checkpointer.c
@@ -460,10 +460,7 @@ CheckpointerMain(char *startup_data, size_t startup_data_len)
* Do the checkpoint.
*/
if (!do_restartpoint)
- {
- CreateCheckPoint(flags);
- ckpt_performed = true;
- }
+ ckpt_performed = CreateCheckPoint(flags);
else
ckpt_performed = CreateRestartPoint(flags);
@@ -484,7 +481,7 @@ CheckpointerMain(char *startup_data, size_t startup_data_len)
ConditionVariableBroadcast(&CheckpointerShmem->done_cv);
- if (ckpt_performed)
+ if (!do_restartpoint)
{
/*
* Note we record the checkpoint start time not end time as
@@ -493,18 +490,32 @@ CheckpointerMain(char *startup_data, size_t startup_data_len)
*/
last_checkpoint_time = now;
- if (do_restartpoint)
- PendingCheckpointerStats.restartpoints_performed++;
+ if (ckpt_performed)
+ PendingCheckpointerStats.num_performed++;
}
else
{
- /*
- * We were not able to perform the restartpoint (checkpoints
- * throw an ERROR in case of error). Most likely because we
- * have not received any new checkpoint WAL records since the
- * last restartpoint. Try again in 15 s.
- */
- last_checkpoint_time = now - CheckPointTimeout + 15;
+ if (ckpt_performed)
+ {
+ /*
+ * The same as for checkpoint. Please see the
+ * corresponding comment.
+ */
+ last_checkpoint_time = now;
+
+ PendingCheckpointerStats.restartpoints_performed++;
+ }
+ else
+ {
+ /*
+ * We were not able to perform the restartpoint
+ * (checkpoints throw an ERROR in case of error). Most
+ * likely because we have not received any new checkpoint
+ * WAL records since the last restartpoint. Try again in
+ * 15 s.
+ */
+ last_checkpoint_time = now - CheckPointTimeout + 15;
+ }
}
ckpt_active = false;