@ -263,7 +263,10 @@ static bool currentCommandIdUsed;
/*
* xactStartTimestamp is the value of transaction_timestamp ( ) .
* stmtStartTimestamp is the value of statement_timestamp ( ) .
* xactStopTimestamp is the time at which we log a commit or abort WAL record .
* xactStopTimestamp is the time at which we log a commit / abort WAL record ,
* or if that was skipped , the time of the first subsequent
* GetCurrentTransactionStopTimestamp ( ) call .
*
* These do not change as we enter and exit subtransactions , so we don ' t
* keep them inside the TransactionState stack .
*/
@ -865,15 +868,24 @@ GetCurrentStatementStartTimestamp(void)
/*
* GetCurrentTransactionStopTimestamp
*
* We return current time i f the transaction stop time hasn ' t been set
* ( which can happen if we decide we don ' t need to log an XLOG record ) .
* I f the transaction stop time hasn ' t already been set , which can happen if
* we decided we don ' t need to log an XLOG record , set xactStopTimestamp .
*/
TimestampTz
GetCurrentTransactionStopTimestamp ( void )
{
if ( xactStopTimestamp ! = 0 )
return xactStopTimestamp ;
return GetCurrentTimestamp ( ) ;
TransactionState s PG_USED_FOR_ASSERTS_ONLY = CurrentTransactionState ;
/* should only be called after commit / abort processing */
Assert ( s - > state = = TRANS_DEFAULT | |
s - > state = = TRANS_COMMIT | |
s - > state = = TRANS_ABORT | |
s - > state = = TRANS_PREPARE ) ;
if ( xactStopTimestamp = = 0 )
xactStopTimestamp = GetCurrentTimestamp ( ) ;
return xactStopTimestamp ;
}
/*
@ -891,15 +903,6 @@ SetCurrentStatementStartTimestamp(void)
Assert ( stmtStartTimestamp ! = 0 ) ;
}
/*
* SetCurrentTransactionStopTimestamp
*/
static inline void
SetCurrentTransactionStopTimestamp ( void )
{
xactStopTimestamp = GetCurrentTimestamp ( ) ;
}
/*
* GetCurrentTransactionNestLevel
*
@ -1396,9 +1399,7 @@ RecordTransactionCommit(void)
START_CRIT_SECTION ( ) ;
MyProc - > delayChkptFlags | = DELAY_CHKPT_START ;
SetCurrentTransactionStopTimestamp ( ) ;
XactLogCommitRecord ( xactStopTimestamp ,
XactLogCommitRecord ( GetCurrentTransactionStopTimestamp ( ) ,
nchildren , children , nrels , rels ,
ndroppedstats , droppedstats ,
nmsgs , invalMessages ,
@ -1422,7 +1423,7 @@ RecordTransactionCommit(void)
*/
if ( ! replorigin | | replorigin_session_origin_timestamp = = 0 )
replorigin_session_origin_timestamp = xactStopTimestamp ;
replorigin_session_origin_timestamp = GetCurrentTransactionStopTimestamp ( ) ;
TransactionTreeSetCommitTsData ( xid , nchildren , children ,
replorigin_session_origin_timestamp ,
@ -1754,8 +1755,7 @@ RecordTransactionAbort(bool isSubXact)
xact_time = GetCurrentTimestamp ( ) ;
else
{
SetCurrentTransactionStopTimestamp ( ) ;
xact_time = xactStopTimestamp ;
xact_time = GetCurrentTransactionStopTimestamp ( ) ;
}
XactLogAbortRecord ( xact_time ,