aboutsummaryrefslogtreecommitdiff
path: root/src/backend/access/transam/xlogutils.c
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2004-02-11 22:55:26 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2004-02-11 22:55:26 +0000
commitc3c09be34b6b0d7892f1087a23fc6eb93f3c4f04 (patch)
tree53331a1f14775c903a6b520f3344b533f9f275ab /src/backend/access/transam/xlogutils.c
parent0cb117eb33558bc779df833480958a97227dcbc2 (diff)
downloadpostgresql-c3c09be34b6b0d7892f1087a23fc6eb93f3c4f04.tar.gz
postgresql-c3c09be34b6b0d7892f1087a23fc6eb93f3c4f04.zip
Commit the reasonably uncontroversial parts of J.R. Nield's PITR patch, to
wit: Add a header record to each WAL segment file so that it can be reliably identified. Avoid splitting WAL records across segment files (this is not strictly necessary, but makes it simpler to incorporate the header records). Make WAL entries for file creation, deletion, and truncation (as foreseen but never implemented by Vadim). Also, add support for making XLOG_SEG_SIZE configurable at compile time, similarly to BLCKSZ. Fix a couple bugs I introduced in WAL replay during recent smgr API changes. initdb is forced due to changes in pg_control contents.
Diffstat (limited to 'src/backend/access/transam/xlogutils.c')
-rw-r--r--src/backend/access/transam/xlogutils.c33
1 files changed, 32 insertions, 1 deletions
diff --git a/src/backend/access/transam/xlogutils.c b/src/backend/access/transam/xlogutils.c
index 0271742ce0a..a7c8d3bf52b 100644
--- a/src/backend/access/transam/xlogutils.c
+++ b/src/backend/access/transam/xlogutils.c
@@ -6,7 +6,7 @@
* Portions Copyright (c) 1996-2003, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California
*
- * $PostgreSQL: pgsql/src/backend/access/transam/xlogutils.c,v 1.29 2004/02/10 01:55:24 tgl Exp $
+ * $PostgreSQL: pgsql/src/backend/access/transam/xlogutils.c,v 1.30 2004/02/11 22:55:24 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -319,6 +319,9 @@ XLogCloseRelationCache(void)
_xlrelarr = NULL;
}
+/*
+ * Open a relation during XLOG replay
+ */
Relation
XLogOpenRelation(bool redo, RmgrId rmid, RelFileNode rnode)
{
@@ -386,3 +389,31 @@ XLogOpenRelation(bool redo, RmgrId rmid, RelFileNode rnode)
return (&(res->reldata));
}
+
+/*
+ * Close a relation during XLOG replay
+ *
+ * This is called when the relation is about to be deleted; we need to ensure
+ * that there is no dangling smgr reference in the xlog relation cache.
+ *
+ * Currently, we don't bother to physically remove the relation from the
+ * cache, we just let it age out normally.
+ */
+void
+XLogCloseRelation(RelFileNode rnode)
+{
+ XLogRelDesc *rdesc;
+ XLogRelCacheEntry *hentry;
+
+ hentry = (XLogRelCacheEntry *)
+ hash_search(_xlrelcache, (void *) &rnode, HASH_FIND, NULL);
+
+ if (!hentry)
+ return; /* not in cache so no work */
+
+ rdesc = hentry->rdesc;
+
+ if (rdesc->reldata.rd_smgr != NULL)
+ smgrclose(rdesc->reldata.rd_smgr);
+ rdesc->reldata.rd_smgr = NULL;
+}