diff options
Diffstat (limited to 'src/include')
| -rw-r--r-- | src/include/access/xact.h | 17 | ||||
| -rw-r--r-- | src/include/access/xlog.h | 30 | ||||
| -rw-r--r-- | src/include/access/xlogutils.h | 4 | ||||
| -rw-r--r-- | src/include/catalog/pg_control.h | 14 | ||||
| -rw-r--r-- | src/include/pg_config_manual.h | 10 | ||||
| -rw-r--r-- | src/include/storage/smgr.h | 3 |
6 files changed, 61 insertions, 17 deletions
diff --git a/src/include/access/xact.h b/src/include/access/xact.h index 54ae24e53f..95de83dc46 100644 --- a/src/include/access/xact.h +++ b/src/include/access/xact.h @@ -7,7 +7,7 @@ * Portions Copyright (c) 1996-2003, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $PostgreSQL: pgsql/src/include/access/xact.h,v 1.60 2004/01/26 22:51:56 momjian Exp $ + * $PostgreSQL: pgsql/src/include/access/xact.h,v 1.61 2004/02/11 22:55:25 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -101,20 +101,23 @@ typedef TransactionStateData *TransactionState; typedef struct xl_xact_commit { time_t xtime; - - /* - * Array of RelFileNode-s to drop may follow at the end of struct - */ + /* Array of RelFileNode(s) to drop at commit */ + /* The XLOG record length determines how many there are */ + RelFileNode xnodes[1]; /* VARIABLE LENGTH ARRAY */ } xl_xact_commit; -#define SizeOfXactCommit ((offsetof(xl_xact_commit, xtime) + sizeof(time_t))) +#define MinSizeOfXactCommit offsetof(xl_xact_commit, xnodes) typedef struct xl_xact_abort { time_t xtime; + /* Array of RelFileNode(s) to drop at abort */ + /* The XLOG record length determines how many there are */ + RelFileNode xnodes[1]; /* VARIABLE LENGTH ARRAY */ } xl_xact_abort; -#define SizeOfXactAbort ((offsetof(xl_xact_abort, xtime) + sizeof(time_t))) +#define MinSizeOfXactAbort offsetof(xl_xact_abort, xnodes) + /* ---------------- * extern definitions diff --git a/src/include/access/xlog.h b/src/include/access/xlog.h index d0ff1d99f5..8f9d97adad 100644 --- a/src/include/access/xlog.h +++ b/src/include/access/xlog.h @@ -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/include/access/xlog.h,v 1.48 2004/01/19 19:04:40 tgl Exp $ + * $PostgreSQL: pgsql/src/include/access/xlog.h,v 1.49 2004/02/11 22:55:25 tgl Exp $ */ #ifndef XLOG_H #define XLOG_H @@ -131,15 +131,35 @@ typedef XLogPageHeaderData *XLogPageHeader; #define XLP_ALL_FLAGS 0x0001 /* - * We break each logical log file (xlogid value) into 16Mb segments. - * One possible segment at the end of each log file is wasted, to ensure - * that we don't have problems representing last-byte-position-plus-1. + * We break each logical log file (xlogid value) into segment files of the + * size indicated by XLOG_SEG_SIZE. One possible segment at the end of each + * log file is wasted, to ensure that we don't have problems representing + * last-byte-position-plus-1. */ -#define XLogSegSize ((uint32) (16*1024*1024)) +#define XLogSegSize ((uint32) XLOG_SEG_SIZE) #define XLogSegsPerFile (((uint32) 0xffffffff) / XLogSegSize) #define XLogFileSize (XLogSegsPerFile * XLogSegSize) /* + * The first XLOG record in each segment file is always an XLOG_FILE_HEADER + * record. This record does nothing as far as XLOG replay is concerned, + * but it is useful for verifying that we haven't mixed up XLOG segment files. + * The body of an XLOG_FILE_HEADER record is a struct XLogFileHeaderData. + * Note: the xlogid/segno fields are really redundant with xlp_pageaddr in + * the page header, but we store them anyway as an extra check. + */ +typedef struct XLogFileHeaderData +{ + uint64 xlfhd_sysid; /* system identifier from pg_control */ + uint32 xlfhd_xlogid; /* logical log file # */ + uint32 xlfhd_segno; /* segment number within logical log file */ + uint32 xlfhd_seg_size; /* just as a cross-check */ +} XLogFileHeaderData; + +#define SizeOfXLogFHD MAXALIGN(sizeof(XLogFileHeaderData)) + + +/* * Method table for resource managers. * * RmgrTable[] is indexed by RmgrId values (see rmgr.h). diff --git a/src/include/access/xlogutils.h b/src/include/access/xlogutils.h index 3dd2a71482..8b1dc671fa 100644 --- a/src/include/access/xlogutils.h +++ b/src/include/access/xlogutils.h @@ -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/include/access/xlogutils.h,v 1.13 2003/11/29 22:40:55 pgsql Exp $ + * $PostgreSQL: pgsql/src/include/access/xlogutils.h,v 1.14 2004/02/11 22:55:25 tgl Exp $ */ #ifndef XLOG_UTILS_H #define XLOG_UTILS_H @@ -24,6 +24,8 @@ extern void XLogInitRelationCache(void); extern void XLogCloseRelationCache(void); extern Relation XLogOpenRelation(bool redo, RmgrId rmid, RelFileNode rnode); +extern void XLogCloseRelation(RelFileNode rnode); + extern Buffer XLogReadBuffer(bool extend, Relation reln, BlockNumber blkno); #endif diff --git a/src/include/catalog/pg_control.h b/src/include/catalog/pg_control.h index fa8e7f219d..8bc6e94d4d 100644 --- a/src/include/catalog/pg_control.h +++ b/src/include/catalog/pg_control.h @@ -8,7 +8,7 @@ * Portions Copyright (c) 1996-2003, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $PostgreSQL: pgsql/src/include/catalog/pg_control.h,v 1.12 2003/11/29 22:40:58 pgsql Exp $ + * $PostgreSQL: pgsql/src/include/catalog/pg_control.h,v 1.13 2004/02/11 22:55:26 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -22,7 +22,7 @@ /* Version identifier for this pg_control format */ -#define PG_CONTROL_VERSION 72 +#define PG_CONTROL_VERSION 73 /* * Body of CheckPoint XLOG records. This is declared here because we keep @@ -46,6 +46,8 @@ typedef struct CheckPoint #define XLOG_CHECKPOINT_SHUTDOWN 0x00 #define XLOG_CHECKPOINT_ONLINE 0x10 #define XLOG_NEXTOID 0x30 +#define XLOG_FILE_HEADER 0x40 +#define XLOG_WASTED_SPACE 0x50 /* System status indicator */ @@ -89,6 +91,12 @@ typedef struct ControlFileData uint32 catalog_version_no; /* see catversion.h */ /* + * Unique system identifier --- to ensure we match up xlog files with + * the installation that produced them. + */ + uint64 system_identifier; + + /* * System status data */ DBState state; /* see enum above */ @@ -107,6 +115,8 @@ typedef struct ControlFileData uint32 blcksz; /* block size for this DB */ uint32 relseg_size; /* blocks per segment of large relation */ + uint32 xlog_seg_size; /* size of each WAL segment */ + uint32 nameDataLen; /* catalog name field width */ uint32 funcMaxArgs; /* maximum number of function arguments */ diff --git a/src/include/pg_config_manual.h b/src/include/pg_config_manual.h index 3722798cce..8226c6d5cf 100644 --- a/src/include/pg_config_manual.h +++ b/src/include/pg_config_manual.h @@ -6,7 +6,7 @@ * for developers. If you edit any of these, be sure to do a *full* * rebuild (and an initdb if noted). * - * $PostgreSQL: pgsql/src/include/pg_config_manual.h,v 1.9 2004/01/06 17:26:23 neilc Exp $ + * $PostgreSQL: pgsql/src/include/pg_config_manual.h,v 1.10 2004/02/11 22:55:26 tgl Exp $ *------------------------------------------------------------------------ */ @@ -44,6 +44,14 @@ #define RELSEG_SIZE (0x40000000 / BLCKSZ) /* + * XLOG_SEG_SIZE is the size of a single WAL file. This must be a power of 2 + * and larger than BLCKSZ (preferably, a great deal larger than BLCKSZ). + * + * Changing XLOG_SEG_SIZE requires an initdb. + */ +#define XLOG_SEG_SIZE (16*1024*1024) + +/* * Maximum number of columns in an index and maximum number of * arguments to a function. They must be the same value. * diff --git a/src/include/storage/smgr.h b/src/include/storage/smgr.h index 738e436fb7..41367d35e8 100644 --- a/src/include/storage/smgr.h +++ b/src/include/storage/smgr.h @@ -7,7 +7,7 @@ * Portions Copyright (c) 1996-2003, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $PostgreSQL: pgsql/src/include/storage/smgr.h,v 1.40 2004/02/10 01:55:26 tgl Exp $ + * $PostgreSQL: pgsql/src/include/storage/smgr.h,v 1.41 2004/02/11 22:55:26 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -61,6 +61,7 @@ extern void smgrwrite(SMgrRelation reln, BlockNumber blocknum, char *buffer); extern BlockNumber smgrnblocks(SMgrRelation reln); extern BlockNumber smgrtruncate(SMgrRelation reln, BlockNumber nblocks); extern void smgrDoPendingDeletes(bool isCommit); +extern int smgrGetPendingDeletes(bool forCommit, RelFileNode **ptr); extern void smgrcommit(void); extern void smgrabort(void); extern void smgrsync(void); |
