7
7
* Portions Copyright (c) 1994, Regents of the University of California
8
8
*
9
9
* IDENTIFICATION
10
- * $PostgreSQL: pgsql/src/backend/access/transam/twophase.c,v 1.44 2008/08/01 13:16:08 alvherre Exp $
10
+ * $PostgreSQL: pgsql/src/backend/access/transam/twophase.c,v 1.45 2008/08/11 11:05:10 heikki Exp $
11
11
*
12
12
* NOTES
13
13
* Each global transaction is associated with a global transaction
@@ -141,12 +141,12 @@ static void RecordTransactionCommitPrepared(TransactionId xid,
141
141
int nchildren ,
142
142
TransactionId * children ,
143
143
int nrels ,
144
- RelFileNode * rels );
144
+ RelFileFork * rels );
145
145
static void RecordTransactionAbortPrepared (TransactionId xid ,
146
146
int nchildren ,
147
147
TransactionId * children ,
148
148
int nrels ,
149
- RelFileNode * rels );
149
+ RelFileFork * rels );
150
150
static void ProcessRecords (char * bufptr , TransactionId xid ,
151
151
const TwoPhaseCallback callbacks []);
152
152
@@ -694,8 +694,8 @@ TwoPhaseGetDummyProc(TransactionId xid)
694
694
*
695
695
* 1. TwoPhaseFileHeader
696
696
* 2. TransactionId[] (subtransactions)
697
- * 3. RelFileNode [] (files to be deleted at commit)
698
- * 4. RelFileNode [] (files to be deleted at abort)
697
+ * 3. RelFileFork [] (files to be deleted at commit)
698
+ * 4. RelFileFork [] (files to be deleted at abort)
699
699
* 5. TwoPhaseRecordOnDisk
700
700
* 6. ...
701
701
* 7. TwoPhaseRecordOnDisk (end sentinel, rmid == TWOPHASE_RM_END_ID)
@@ -793,8 +793,8 @@ StartPrepare(GlobalTransaction gxact)
793
793
TransactionId xid = gxact -> proc .xid ;
794
794
TwoPhaseFileHeader hdr ;
795
795
TransactionId * children ;
796
- RelFileNode * commitrels ;
797
- RelFileNode * abortrels ;
796
+ RelFileFork * commitrels ;
797
+ RelFileFork * abortrels ;
798
798
799
799
/* Initialize linked list */
800
800
records .head = palloc0 (sizeof (XLogRecData ));
@@ -832,12 +832,12 @@ StartPrepare(GlobalTransaction gxact)
832
832
}
833
833
if (hdr .ncommitrels > 0 )
834
834
{
835
- save_state_data (commitrels , hdr .ncommitrels * sizeof (RelFileNode ));
835
+ save_state_data (commitrels , hdr .ncommitrels * sizeof (RelFileFork ));
836
836
pfree (commitrels );
837
837
}
838
838
if (hdr .nabortrels > 0 )
839
839
{
840
- save_state_data (abortrels , hdr .nabortrels * sizeof (RelFileNode ));
840
+ save_state_data (abortrels , hdr .nabortrels * sizeof (RelFileFork ));
841
841
pfree (abortrels );
842
842
}
843
843
}
@@ -1140,8 +1140,8 @@ FinishPreparedTransaction(const char *gid, bool isCommit)
1140
1140
TwoPhaseFileHeader * hdr ;
1141
1141
TransactionId latestXid ;
1142
1142
TransactionId * children ;
1143
- RelFileNode * commitrels ;
1144
- RelFileNode * abortrels ;
1143
+ RelFileFork * commitrels ;
1144
+ RelFileFork * abortrels ;
1145
1145
int i ;
1146
1146
1147
1147
/*
@@ -1169,10 +1169,10 @@ FinishPreparedTransaction(const char *gid, bool isCommit)
1169
1169
bufptr = buf + MAXALIGN (sizeof (TwoPhaseFileHeader ));
1170
1170
children = (TransactionId * ) bufptr ;
1171
1171
bufptr += MAXALIGN (hdr -> nsubxacts * sizeof (TransactionId ));
1172
- commitrels = (RelFileNode * ) bufptr ;
1173
- bufptr += MAXALIGN (hdr -> ncommitrels * sizeof (RelFileNode ));
1174
- abortrels = (RelFileNode * ) bufptr ;
1175
- bufptr += MAXALIGN (hdr -> nabortrels * sizeof (RelFileNode ));
1172
+ commitrels = (RelFileFork * ) bufptr ;
1173
+ bufptr += MAXALIGN (hdr -> ncommitrels * sizeof (RelFileFork ));
1174
+ abortrels = (RelFileFork * ) bufptr ;
1175
+ bufptr += MAXALIGN (hdr -> nabortrels * sizeof (RelFileFork ));
1176
1176
1177
1177
/* compute latestXid among all children */
1178
1178
latestXid = TransactionIdLatest (xid , hdr -> nsubxacts , children );
@@ -1215,12 +1215,20 @@ FinishPreparedTransaction(const char *gid, bool isCommit)
1215
1215
if (isCommit )
1216
1216
{
1217
1217
for (i = 0 ; i < hdr -> ncommitrels ; i ++ )
1218
- smgrdounlink (smgropen (commitrels [i ]), false, false);
1218
+ {
1219
+ SMgrRelation srel = smgropen (commitrels [i ].rnode );
1220
+ smgrdounlink (srel , commitrels [i ].forknum , false, false);
1221
+ smgrclose (srel );
1222
+ }
1219
1223
}
1220
1224
else
1221
1225
{
1222
1226
for (i = 0 ; i < hdr -> nabortrels ; i ++ )
1223
- smgrdounlink (smgropen (abortrels [i ]), false, false);
1227
+ {
1228
+ SMgrRelation srel = smgropen (abortrels [i ].rnode );
1229
+ smgrdounlink (srel , abortrels [i ].forknum , false, false);
1230
+ smgrclose (srel );
1231
+ }
1224
1232
}
1225
1233
1226
1234
/* And now do the callbacks */
@@ -1631,8 +1639,8 @@ RecoverPreparedTransactions(void)
1631
1639
bufptr = buf + MAXALIGN (sizeof (TwoPhaseFileHeader ));
1632
1640
subxids = (TransactionId * ) bufptr ;
1633
1641
bufptr += MAXALIGN (hdr -> nsubxacts * sizeof (TransactionId ));
1634
- bufptr += MAXALIGN (hdr -> ncommitrels * sizeof (RelFileNode ));
1635
- bufptr += MAXALIGN (hdr -> nabortrels * sizeof (RelFileNode ));
1642
+ bufptr += MAXALIGN (hdr -> ncommitrels * sizeof (RelFileFork ));
1643
+ bufptr += MAXALIGN (hdr -> nabortrels * sizeof (RelFileFork ));
1636
1644
1637
1645
/*
1638
1646
* Reconstruct subtrans state for the transaction --- needed
@@ -1685,7 +1693,7 @@ RecordTransactionCommitPrepared(TransactionId xid,
1685
1693
int nchildren ,
1686
1694
TransactionId * children ,
1687
1695
int nrels ,
1688
- RelFileNode * rels )
1696
+ RelFileFork * rels )
1689
1697
{
1690
1698
XLogRecData rdata [3 ];
1691
1699
int lastrdata = 0 ;
@@ -1710,7 +1718,7 @@ RecordTransactionCommitPrepared(TransactionId xid,
1710
1718
{
1711
1719
rdata [0 ].next = & (rdata [1 ]);
1712
1720
rdata [1 ].data = (char * ) rels ;
1713
- rdata [1 ].len = nrels * sizeof (RelFileNode );
1721
+ rdata [1 ].len = nrels * sizeof (RelFileFork );
1714
1722
rdata [1 ].buffer = InvalidBuffer ;
1715
1723
lastrdata = 1 ;
1716
1724
}
@@ -1760,7 +1768,7 @@ RecordTransactionAbortPrepared(TransactionId xid,
1760
1768
int nchildren ,
1761
1769
TransactionId * children ,
1762
1770
int nrels ,
1763
- RelFileNode * rels )
1771
+ RelFileFork * rels )
1764
1772
{
1765
1773
XLogRecData rdata [3 ];
1766
1774
int lastrdata = 0 ;
@@ -1790,7 +1798,7 @@ RecordTransactionAbortPrepared(TransactionId xid,
1790
1798
{
1791
1799
rdata [0 ].next = & (rdata [1 ]);
1792
1800
rdata [1 ].data = (char * ) rels ;
1793
- rdata [1 ].len = nrels * sizeof (RelFileNode );
1801
+ rdata [1 ].len = nrels * sizeof (RelFileFork );
1794
1802
rdata [1 ].buffer = InvalidBuffer ;
1795
1803
lastrdata = 1 ;
1796
1804
}
0 commit comments