Commit 4b6c198a authored by Tom Lane's avatar Tom Lane

Add code to dump contents of free space map into $PGDATA/global/pg_fsm.cache

at database shutdown, and then load it again at database startup.  This
preserves our hard-won knowledge of free space across restarts (given
an orderly shutdown, that is).
parent 21591967
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
* Portions Copyright (c) 1994, Regents of the University of California * Portions Copyright (c) 1994, Regents of the University of California
* *
* IDENTIFICATION * IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/bootstrap/bootstrap.c,v 1.147 2002/12/15 16:17:38 tgl Exp $ * $Header: /cvsroot/pgsql/src/backend/bootstrap/bootstrap.c,v 1.148 2003/03/06 00:04:27 tgl Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -34,6 +34,7 @@ ...@@ -34,6 +34,7 @@
#include "executor/executor.h" #include "executor/executor.h"
#include "libpq/pqsignal.h" #include "libpq/pqsignal.h"
#include "miscadmin.h" #include "miscadmin.h"
#include "storage/freespace.h"
#include "storage/ipc.h" #include "storage/ipc.h"
#include "storage/proc.h" #include "storage/proc.h"
#include "tcop/tcopprot.h" #include "tcop/tcopprot.h"
...@@ -398,10 +399,12 @@ BootstrapMain(int argc, char *argv[]) ...@@ -398,10 +399,12 @@ BootstrapMain(int argc, char *argv[])
case BS_XLOG_STARTUP: case BS_XLOG_STARTUP:
StartupXLOG(); StartupXLOG();
LoadFreeSpaceMap();
proc_exit(0); /* done */ proc_exit(0); /* done */
case BS_XLOG_SHUTDOWN: case BS_XLOG_SHUTDOWN:
ShutdownXLOG(); ShutdownXLOG();
DumpFreeSpaceMap();
proc_exit(0); /* done */ proc_exit(0); /* done */
default: default:
......
This diff is collapsed.
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/tcop/postgres.c,v 1.315 2003/02/10 04:44:46 tgl Exp $ * $Header: /cvsroot/pgsql/src/backend/tcop/postgres.c,v 1.316 2003/03/06 00:04:27 tgl Exp $
* *
* NOTES * NOTES
* this is the "main" module of the postgres backend and * this is the "main" module of the postgres backend and
...@@ -46,6 +46,7 @@ ...@@ -46,6 +46,7 @@
#include "parser/analyze.h" #include "parser/analyze.h"
#include "parser/parser.h" #include "parser/parser.h"
#include "rewrite/rewriteHandler.h" #include "rewrite/rewriteHandler.h"
#include "storage/freespace.h"
#include "storage/ipc.h" #include "storage/ipc.h"
#include "storage/proc.h" #include "storage/proc.h"
#include "tcop/fastpath.h" #include "tcop/fastpath.h"
...@@ -1740,6 +1741,13 @@ PostgresMain(int argc, char *argv[], const char *username) ...@@ -1740,6 +1741,13 @@ PostgresMain(int argc, char *argv[], const char *username)
*/ */
StartupXLOG(); StartupXLOG();
on_shmem_exit(ShutdownXLOG, 0); on_shmem_exit(ShutdownXLOG, 0);
/*
* Read any existing FSM cache file, and register to write one out
* at exit.
*/
LoadFreeSpaceMap();
on_shmem_exit(DumpFreeSpaceMap, 0);
} }
/* /*
...@@ -1781,7 +1789,7 @@ PostgresMain(int argc, char *argv[], const char *username) ...@@ -1781,7 +1789,7 @@ PostgresMain(int argc, char *argv[], const char *username)
if (!IsUnderPostmaster) if (!IsUnderPostmaster)
{ {
puts("\nPOSTGRES backend interactive interface "); puts("\nPOSTGRES backend interactive interface ");
puts("$Revision: 1.315 $ $Date: 2003/02/10 04:44:46 $\n"); puts("$Revision: 1.316 $ $Date: 2003/03/06 00:04:27 $\n");
} }
/* /*
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
* Portions Copyright (c) 1996-2002, PostgreSQL Global Development Group * Portions Copyright (c) 1996-2002, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California * Portions Copyright (c) 1994, Regents of the University of California
* *
* $Id: freespace.h,v 1.9 2003/03/04 21:51:22 tgl Exp $ * $Id: freespace.h,v 1.10 2003/03/06 00:04:27 tgl Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -60,6 +60,9 @@ extern void FreeSpaceMapForgetDatabase(Oid dbid); ...@@ -60,6 +60,9 @@ extern void FreeSpaceMapForgetDatabase(Oid dbid);
extern void PrintFreeSpaceMapStatistics(int elevel); extern void PrintFreeSpaceMapStatistics(int elevel);
extern void DumpFreeSpaceMap(void);
extern void LoadFreeSpaceMap(void);
#ifdef FREESPACE_DEBUG #ifdef FREESPACE_DEBUG
extern void DumpFreeSpace(void); extern void DumpFreeSpace(void);
#endif #endif
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment