Thread: Question about WAL and XID

Question about WAL and XID

From
Boszormenyi Zoltan
Date:
Hi,

am I right that an XID is global across the whole DB cluster
under the same $PGDATA? I am asking because in the WAL
record, the first thing sent is an XLogRecord which contains
   TransactionId xl_xid;

and as the comment in access/xlog.h says:

/** The overall layout of an XLOG record is:*              Fixed-size header (XLogRecord struct)*
rmgr-specificdata*              BkpBlock*              backup block data*              BkpBlock*              backup
blockdata*              ...
 

And the BkpBlock structure contains the RelFileNode info,
the triplet for tablespace/database/relation.

Or is it completely backwards?

I am asking this because I need to check   TransactionIdDidCommit(XLogRecord->xl_xid)
from the walreciver. Can I expect it to work on any
xl_xid that walreceiver encounters?

Best regards,
Zoltán Böszörményi

-- 
Bible has answers for everything. Proof:
"But let your communication be, Yea, yea; Nay, nay: for whatsoever is more
than these cometh of evil." (Matthew 5:37) - basics of digital technology.
"May your kingdom come" - superficial description of plate tectonics

----------------------------------
Zoltán Böszörményi
Cybertec Schönig & Schönig GmbH
http://www.postgresql.at/



Re: Question about WAL and XID

From
Heikki Linnakangas
Date:
Boszormenyi Zoltan wrote:
> am I right that an XID is global across the whole DB cluster
> under the same $PGDATA?

Yes.

> I am asking this because I need to check
>     TransactionIdDidCommit(XLogRecord->xl_xid)
> from the walreciver. Can I expect it to work on any
> xl_xid that walreceiver encounters?

Walreceiver is only responsible for receiving the WAL from the master
server, and write to disk. It doesn't apply the log, it doesn't look
into the contents at all. So TransactionIdDidCommit(XLogRecord->xl_xid)
always returns false on WAL it has received, because it hasn't been
applied yet.

What are you trying to do?

--  Heikki Linnakangas EnterpriseDB   http://www.enterprisedb.com


Re: Question about WAL and XID

From
Boszormenyi Zoltan
Date:
Hi,

Heikki Linnakangas írta:
> Boszormenyi Zoltan wrote:
>   
>> am I right that an XID is global across the whole DB cluster
>> under the same $PGDATA?
>>     
>
> Yes.
>
>   
>> I am asking this because I need to check
>>     TransactionIdDidCommit(XLogRecord->xl_xid)
>> from the walreciver. Can I expect it to work on any
>> xl_xid that walreceiver encounters?
>>     
>
> Walreceiver is only responsible for receiving the WAL from the master
> server, and write to disk. It doesn't apply the log, it doesn't look
> into the contents at all. So TransactionIdDidCommit(XLogRecord->xl_xid)
> always returns false on WAL it has received, because it hasn't been
> applied yet.
>   

I guessed so, I intended to collect the xl_xid values in a cache array
and check periodically.

> What are you trying to do?
>   

Synchronous replication. :-)

Best regards,
Zoltán Böszörményi

-- 
Bible has answers for everything. Proof:
"But let your communication be, Yea, yea; Nay, nay: for whatsoever is more
than these cometh of evil." (Matthew 5:37) - basics of digital technology.
"May your kingdom come" - superficial description of plate tectonics

----------------------------------
Zoltán Böszörményi
Cybertec Schönig & Schönig GmbH
http://www.postgresql.at/