diff --git a/src/backend/access/transam/clog.c b/src/backend/access/transam/clog.c index 4b935492ea59798484bea2f1389d280741ba9140..b72fb5d651ed3e7ff461d4da7de955f5a67a53dd 100644 --- a/src/backend/access/transam/clog.c +++ b/src/backend/access/transam/clog.c @@ -13,7 +13,7 @@ * Portions Copyright (c) 1996-2002, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $Header: /cvsroot/pgsql/src/backend/access/transam/clog.c,v 1.10 2002/09/02 02:47:01 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/access/transam/clog.c,v 1.11 2002/09/26 22:58:33 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -809,8 +809,8 @@ TruncateCLOG(TransactionId oldestXact) if (!ScanCLOGDirectory(cutoffPage, false)) return; /* nothing to remove */ - /* Perform a CHECKPOINT */ - CreateCheckPoint(false); + /* Perform a forced CHECKPOINT */ + CreateCheckPoint(false, true); /* * Scan CLOG shared memory and remove any pages preceding the cutoff diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c index 0ff60292e68324563979d397dfcd6080a312a7d7..1944e557708f5cc31d8cc839187ecc56361e9ca3 100644 --- a/src/backend/access/transam/xlog.c +++ b/src/backend/access/transam/xlog.c @@ -7,7 +7,7 @@ * Portions Copyright (c) 1996-2002, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $Header: /cvsroot/pgsql/src/backend/access/transam/xlog.c,v 1.106 2002/09/04 20:31:13 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/access/transam/xlog.c,v 1.107 2002/09/26 22:58:33 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -2743,7 +2743,7 @@ StartupXLOG(void) * checkpoint to become prevCheckPoint... */ ControlFile->checkPoint = checkPointLoc; - CreateCheckPoint(true); + CreateCheckPoint(true, true); XLogCloseRelationCache(); } @@ -2901,7 +2901,7 @@ ShutdownXLOG(void) CritSectionCount++; CreateDummyCaches(); - CreateCheckPoint(true); + CreateCheckPoint(true, true); ShutdownCLOG(); CritSectionCount--; @@ -2910,9 +2910,12 @@ ShutdownXLOG(void) /* * Perform a checkpoint --- either during shutdown, or on-the-fly + * + * If force is true, we force a checkpoint regardless of whether any XLOG + * activity has occurred since the last one. */ void -CreateCheckPoint(bool shutdown) +CreateCheckPoint(bool shutdown, bool force) { CheckPoint checkPoint; XLogRecPtr recptr; @@ -2955,21 +2958,21 @@ CreateCheckPoint(bool shutdown) LWLockAcquire(WALInsertLock, LW_EXCLUSIVE); /* - * If this isn't a shutdown, and we have not inserted any XLOG records - * since the start of the last checkpoint, skip the checkpoint. The - * idea here is to avoid inserting duplicate checkpoints when the - * system is idle. That wastes log space, and more importantly it + * If this isn't a shutdown or forced checkpoint, and we have not inserted + * any XLOG records since the start of the last checkpoint, skip the + * checkpoint. The idea here is to avoid inserting duplicate checkpoints + * when the system is idle. That wastes log space, and more importantly it * exposes us to possible loss of both current and previous checkpoint * records if the machine crashes just as we're writing the update. - * (Perhaps it'd make even more sense to checkpoint only when the - * previous checkpoint record is in a different xlog page?) + * (Perhaps it'd make even more sense to checkpoint only when the previous + * checkpoint record is in a different xlog page?) * * We have to make two tests to determine that nothing has happened since * the start of the last checkpoint: current insertion point must * match the end of the last checkpoint record, and its redo pointer * must point to itself. */ - if (!shutdown) + if (!shutdown && !force) { XLogRecPtr curInsert; diff --git a/src/backend/bootstrap/bootstrap.c b/src/backend/bootstrap/bootstrap.c index 4df563b4285a51f2d7f1e71196504c97b756c8d5..a2b26bcdb00d506de0fd0057a405db3d2b4cf410 100644 --- a/src/backend/bootstrap/bootstrap.c +++ b/src/backend/bootstrap/bootstrap.c @@ -8,7 +8,7 @@ * Portions Copyright (c) 1994, Regents of the University of California * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/bootstrap/bootstrap.c,v 1.143 2002/09/25 20:31:40 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/bootstrap/bootstrap.c,v 1.144 2002/09/26 22:58:33 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -390,7 +390,7 @@ BootstrapMain(int argc, char *argv[]) case BS_XLOG_CHECKPOINT: CreateDummyCaches(); - CreateCheckPoint(false); + CreateCheckPoint(false, false); SetSavedRedoRecPtr(); /* pass redo ptr back to * postmaster */ proc_exit(0); /* done */ @@ -445,7 +445,7 @@ BootstrapMain(int argc, char *argv[]) Int_yyparse(); SetProcessingMode(NormalProcessing); - CreateCheckPoint(true); + CreateCheckPoint(true, true); SetProcessingMode(BootstrapProcessing); /* clean up processing */ diff --git a/src/backend/tcop/utility.c b/src/backend/tcop/utility.c index 92d876b265bab8b8b768c1b64bbee37612c713c7..c6bd3050825bb5fa6c14e82698aee84d33f6f91e 100644 --- a/src/backend/tcop/utility.c +++ b/src/backend/tcop/utility.c @@ -10,7 +10,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/tcop/utility.c,v 1.177 2002/09/04 20:31:26 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/tcop/utility.c,v 1.178 2002/09/26 22:58:33 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -831,11 +831,9 @@ ProcessUtility(Node *parsetree, break; case T_CheckPointStmt: - { - if (!superuser()) - elog(ERROR, "permission denied"); - CreateCheckPoint(false); - } + if (!superuser()) + elog(ERROR, "permission denied"); + CreateCheckPoint(false, false); break; case T_ReindexStmt: diff --git a/src/include/access/xlog.h b/src/include/access/xlog.h index c8c49936803e1fc1318fc1991a587703d333ed22..f5c3e59cbcef9ab7211d8d9af29b68ed1ccd7f19 100644 --- a/src/include/access/xlog.h +++ b/src/include/access/xlog.h @@ -6,7 +6,7 @@ * Portions Copyright (c) 1996-2002, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $Id: xlog.h,v 1.38 2002/09/26 22:46:29 tgl Exp $ + * $Id: xlog.h,v 1.39 2002/09/26 22:58:34 tgl Exp $ */ #ifndef XLOG_H #define XLOG_H @@ -204,7 +204,7 @@ extern void XLOGPathInit(void); extern void BootStrapXLOG(void); extern void StartupXLOG(void); extern void ShutdownXLOG(void); -extern void CreateCheckPoint(bool shutdown); +extern void CreateCheckPoint(bool shutdown, bool force); extern void SetThisStartUpID(void); extern void XLogPutNextOid(Oid nextOid); extern void SetSavedRedoRecPtr(void);