Re: tracking commit timestamps - Mailing list pgsql-hackers
| From | Petr Jelinek |
|---|---|
| Subject | Re: tracking commit timestamps |
| Date | |
| Msg-id | 54594207.8030506@2ndquadrant.com Whole thread Raw |
| In response to | Re: tracking commit timestamps (Michael Paquier <michael.paquier@gmail.com>) |
| List | pgsql-hackers |
On 04/11/14 09:19, Michael Paquier wrote:
> On Sat, Nov 1, 2014 at 10:00 PM, Michael Paquier
> <michael.paquier@gmail.com <mailto:michael.paquier@gmail.com>> wrote:
>
> More comments:
>
> Here are also more comments about the code that I found while focusing
> on committs.c:
> 1) When the GUC is not enabled, and when the transaction ID provided is
> not in a correct range, a dummy value based on InvalidTransactionId (?!)
> is returned, like that:
> + /* Return empty if module not enabled */
> + if (!commit_ts_enabled)
> + {
> + if (ts)
> + *ts = InvalidTransactionId;
> + if (data)
> + *data = (CommitExtraData) 0;
> + return;
> + }
> This leads to some incorrect results:
> =# select pg_get_transaction_committime('1');
> pg_get_transaction_committime
> -------------------------------
> 2000-01-01 09:00:00+09
> (1 row)
Oh, I had this on my TODO and somehow forgot about it, I am leaning
towards throwing an error when calling any committs "get" function while
the tracking is disabled.
> Or for example:
> =# SELECT txid_current();
> txid_current
> --------------
> 1006
> (1 row)
> =# select pg_get_transaction_committime('1006');
> pg_get_transaction_committime
> -------------------------------
> 2014-11-04 14:54:37.589381+09
> (1 row)
> =# select pg_get_transaction_committime('1007');
> pg_get_transaction_committime
> -------------------------------
> 2000-01-01 09:00:00+09
> (1 row)
> =# SELECT txid_current();
> txid_current
> --------------
> 1007
> (1 row)
> And at other times error is not that helpful for user:
> =# select pg_get_transaction_committime('10000');
> ERROR: XX000: could not access status of transaction 10000
> DETAIL: Could not read from file "pg_committs/0000" at offset 114688:
> Undefined error: 0.
> LOCATION: SlruReportIOError, slru.c:896
> I think that you should simply return an error in
> TransactionIdGetCommitTsData when xid is not in the range supported.
> That will be more transparent for the user.
Agreed.
> 5) Reading the code, TransactionTreeSetCommitTimestamp is always called
> with do_xlog = false, making that actually no timestamps are WAL'd...
> Hence WriteSetTimestampXlogRec is just dead code with the latest version
> of the patch. IMO, this should be always WAL-logged when
> track_commit_timestamp is on.
As Andres explained this is always WAL-logged when called by current
caller so we don't want it to be double logged, so that's why do_xlog =
false, but when extension will need call it, it will most likely need
do_xlog = true.
> 8) The redo and xlog routines of committs should be out in a dedicated
> file, like committsxlog.c or similar. The other rmgr do so, so let's be
> consistent.
>
Most actually don't AFAICS.
-- Petr Jelinek http://www.2ndQuadrant.com/ PostgreSQL Development, 24x7 Support, Training &
Services
pgsql-hackers by date: