The following patch improves XLOG_NO_TRAN related comments per discussion.
Regards,
Qingqing
---
Index: backend/access/transam/clog.c
===================================================================
RCS file: /projects/cvsroot/pgsql/src/backend/access/transam/clog.c,v
retrieving revision 1.36
diff -c -r1.36 clog.c
*** backend/access/transam/clog.c 6 Dec 2005 23:08:32 -0000 1.36
--- backend/access/transam/clog.c 24 Dec 2005 21:51:12 -0000
***************
*** 370,378 ****
/*
* Write a ZEROPAGE xlog record
*
! * Note: xlog record is marked as outside transaction control, since we
! * want it to be redone whether the invoking transaction commits or not.
! * (Besides which, this is normally done just before entering a transaction.)
*/
static void
WriteZeroPageXlogRec(int pageno)
--- 370,376 ----
/*
* Write a ZEROPAGE xlog record
*
! * Note: This is normally done just before entering a transaction.
*/
static void
WriteZeroPageXlogRec(int pageno)
Index: backend/access/transam/multixact.c
===================================================================
RCS file: /projects/cvsroot/pgsql/src/backend/access/transam/multixact.c,v
retrieving revision 1.15
diff -c -r1.15 multixact.c
*** backend/access/transam/multixact.c 6 Dec 2005 23:08:32 -0000 1.15
--- backend/access/transam/multixact.c 24 Dec 2005 21:51:12 -0000
***************
*** 1797,1805 ****
/*
* Write an xlog record reflecting the zeroing of either a MEMBERs or
* OFFSETs page (info shows which)
- *
- * Note: xlog record is marked as outside transaction control, since we
- * want it to be redone whether the invoking transaction commits or not.
*/
static void
WriteMZeroPageXlogRec(int pageno, uint8 info)
--- 1797,1802 ----
Index: backend/access/transam/xact.c
===================================================================
RCS file: /projects/cvsroot/pgsql/src/backend/access/transam/xact.c,v
retrieving revision 1.216
diff -c -r1.216 xact.c
*** backend/access/transam/xact.c 22 Nov 2005 18:17:07 -0000 1.216
--- backend/access/transam/xact.c 24 Dec 2005 21:51:12 -0000
***************
*** 690,697 ****
* 2004-08-10.
*
* (If it made no transaction-controlled XLOG entries, its XID appears
! * nowhere in permanent storage, so no one else will ever care if it
! * committed; so it doesn't matter if we lose the commit flag.)
*
* Note we only need a shared lock.
*/
--- 690,697 ----
* 2004-08-10.
*
* (If it made no transaction-controlled XLOG entries, its XID appears
! * nowhere in permanent data storage, so no one else will ever care if
! * it committed; so it doesn't matter if we lose the commit flag.)
*
* Note we only need a shared lock.
*/
Index: backend/storage/smgr/smgr.c
===================================================================
RCS file: /projects/cvsroot/pgsql/src/backend/storage/smgr/smgr.c,v
retrieving revision 1.94
diff -c -r1.94 smgr.c
*** backend/storage/smgr/smgr.c 22 Nov 2005 18:17:21 -0000 1.94
--- backend/storage/smgr/smgr.c 24 Dec 2005 21:51:12 -0000
***************
*** 364,374 ****
if (isRedo)
return;
! /*
! * Make a non-transactional XLOG entry showing the file creation. It's
! * non-transactional because we should replay it whether the transaction
! * commits or not; if not, the file will be dropped at abort time.
! */
xlrec.rnode = reln->smgr_rnode;
rdata.data = (char *) &xlrec;
--- 364,370 ----
if (isRedo)
return;
! /* Make a non-transactional XLOG entry showing the file creation */
xlrec.rnode = reln->smgr_rnode;
rdata.data = (char *) &xlrec;
***************
*** 622,633 ****
if (!isTemp)
{
! /*
! * Make a non-transactional XLOG entry showing the file truncation.
! * It's non-transactional because we should replay it whether the
! * transaction commits or not; the underlying file change is certainly
! * not reversible.
! */
XLogRecPtr lsn;
XLogRecData rdata;
xl_smgr_truncate xlrec;
--- 618,624 ----
if (!isTemp)
{
! /* Make a non-transactional XLOG entry showing the file truncation */
XLogRecPtr lsn;
XLogRecData rdata;
xl_smgr_truncate xlrec;
Index: include/access/xlog.h
===================================================================
RCS file: /projects/cvsroot/pgsql/src/include/access/xlog.h,v
retrieving revision 1.69
diff -c -r1.69 xlog.h
*** include/access/xlog.h 15 Oct 2005 02:49:42 -0000 1.69
--- include/access/xlog.h 24 Dec 2005 21:51:13 -0000
***************
*** 78,84 ****
/*
* Sometimes we log records which are out of transaction control.
! * Rmgr may "or" XLOG_NO_TRAN into info passed to XLogInsert to indicate this.
*/
#define XLOG_NO_TRAN XLR_INFO_MASK
--- 78,90 ----
/*
* Sometimes we log records which are out of transaction control.
! *
! * Note: The non-transaction-controlled distinction is really not very
! * useful. Vadim put it in originally because he may want to go to a
! * REDO/UNDO approach, in which it would've been important to tell the
! * difference (i.e., REDO always), but we never did that and probably
! * never will. We've preserved the distinction because it seemed worthwhile
! * from the standpoint of documentation and logical clarity.
*/
#define XLOG_NO_TRAN XLR_INFO_MASK