Thread: Incorrect description of xmax and xip in functions docs

Incorrect description of xmax and xip in functions docs

From
Simon Riggs
Date:
http://developer.postgresql.org/pgdocs/postgres/functions-info.html

xip_list is described as

"Active txids at the time of the snapshot... "


This is incorrect. The xip_list is the list of transactions that are in
progress *and* less than xmax. There may be transactions in progress
with an xid higher than xmax. This will happen frequently in fact. This
is because xmax is defined as the highest/latest completed xid, not the
highest running xid.

Note that there is no way to discover the list of running xids at the
time of the snapshot, from the data we hold about snapshots. Nor can the
snapshot data be used to monitor the number of transactions in progress.

Anyone disagree? If not, I'll patch.

--
 Simon Riggs           www.2ndQuadrant.com
 PostgreSQL Training, Services and Support


Re: Incorrect description of xmax and xip in functions docs

From
Simon Riggs
Date:
On Fri, 2008-09-05 at 16:14 +0100, Simon Riggs wrote:
> http://developer.postgresql.org/pgdocs/postgres/functions-info.html
>
> xip_list is described as
>
> "Active txids at the time of the snapshot... "
>
>
> This is incorrect. The xip_list is the list of transactions that are in
> progress *and* less than xmax. There may be transactions in progress
> with an xid higher than xmax. This will happen frequently in fact. This
> is because xmax is defined as the highest/latest completed xid, not the
> highest running xid.
>
> Note that there is no way to discover the list of running xids at the
> time of the snapshot, from the data we hold about snapshots. Nor can the
> snapshot data be used to monitor the number of transactions in progress.
>
> Anyone disagree? If not, I'll patch.

My rewording would be:
"Active txids at the time of the snapshot. The list includes only those
active txids between xmin and xmax; there may be active txids higher
than xmax. A txid that is xmin <= txid < xmax and not in this list was
already completed at the time of the snapshot, and thus either visible
or dead according to its commit status. The list does not include txids
of subtransactions."

And for txid_visible_in_snapshot() comment added:
"Function should not be used with subtransaction xids. It is possible
that this function will return a true result for a subtransaction xid
that was actually still in progress at the time of the snapshot".

--
 Simon Riggs           www.2ndQuadrant.com
 PostgreSQL Training, Services and Support


Re: Incorrect description of xmax and xip in functions docs

From
Bruce Momjian
Date:
Simon Riggs wrote:
>
> On Fri, 2008-09-05 at 16:14 +0100, Simon Riggs wrote:
> > http://developer.postgresql.org/pgdocs/postgres/functions-info.html
> >
> > xip_list is described as
> >
> > "Active txids at the time of the snapshot... "
> >
> >
> > This is incorrect. The xip_list is the list of transactions that are in
> > progress *and* less than xmax. There may be transactions in progress
> > with an xid higher than xmax. This will happen frequently in fact. This
> > is because xmax is defined as the highest/latest completed xid, not the
> > highest running xid.
> >
> > Note that there is no way to discover the list of running xids at the
> > time of the snapshot, from the data we hold about snapshots. Nor can the
> > snapshot data be used to monitor the number of transactions in progress.
> >
> > Anyone disagree? If not, I'll patch.
>
> My rewording would be:
> "Active txids at the time of the snapshot. The list includes only those
> active txids between xmin and xmax; there may be active txids higher
> than xmax. A txid that is xmin <= txid < xmax and not in this list was
> already completed at the time of the snapshot, and thus either visible
> or dead according to its commit status. The list does not include txids
> of subtransactions."

Applied, and attached.

> And for txid_visible_in_snapshot() comment added:
> "Function should not be used with subtransaction xids. It is possible
> that this function will return a true result for a subtransaction xid
> that was actually still in progress at the time of the snapshot".

I think the cleaner solution is to throw an appropriate error if a
subtransaction xid is used, rather than adding documentation.

--
  Bruce Momjian  <bruce@momjian.us>        http://momjian.us
  EnterpriseDB                             http://enterprisedb.com

  + If your life is a hard drive, Christ can be your backup. +
Index: doc/src/sgml/func.sgml
===================================================================
RCS file: /cvsroot/pgsql/doc/src/sgml/func.sgml,v
retrieving revision 1.444
diff -c -c -r1.444 func.sgml
*** doc/src/sgml/func.sgml    6 Sep 2008 00:01:21 -0000    1.444
--- doc/src/sgml/func.sgml    7 Sep 2008 01:27:44 -0000
***************
*** 12006,12016 ****
        <row>
         <entry><type>xip_list</type></entry>
         <entry>
!         Active txids at the time of the snapshot.  All of them are between
!         <literal>xmin</> and <literal>xmax</>.  A txid that is
!         <literal>xmin <= txid < xmax</literal> and not in this list was
!         already completed at the time of the snapshot, and thus either visible
!         or dead according to its commit status.
         </entry>
        </row>

--- 12006,12019 ----
        <row>
         <entry><type>xip_list</type></entry>
         <entry>
!         Active txids at the time of the snapshot.  The list
!         includes only those active txids between <literal>xmin</>
!         and <literal>xmax</>; there might be active txids higher
!         than xmax.  A txid that is <literal>xmin <= txid <
!         xmax</literal> and not in this list was already completed
!         at the time of the snapshot, and thus either visible or
!         dead according to its commit status.  The list does not
!         include txids of subtransactions.
         </entry>
        </row>


Re: Incorrect description of xmax and xip in functions docs

From
Simon Riggs
Date:
On Sat, 2008-09-06 at 21:31 -0400, Bruce Momjian wrote:
> Applied, and attached.

Thanks.

> > And for txid_visible_in_snapshot() comment added:
> > "Function should not be used with subtransaction xids. It is possible
> > that this function will return a true result for a subtransaction xid
> > that was actually still in progress at the time of the snapshot".
>
> I think the cleaner solution is to throw an appropriate error if a
> subtransaction xid is used, rather than adding documentation.

Or maybe check subtrans for it, as it really should be doing.

--
 Simon Riggs           www.2ndQuadrant.com
 PostgreSQL Training, Services and Support


Re: Incorrect description of xmax and xip in functions docs

From
Bruce Momjian
Date:
Simon Riggs wrote:
>
> On Sat, 2008-09-06 at 21:31 -0400, Bruce Momjian wrote:
> > Applied, and attached.
>
> Thanks.
>
> > > And for txid_visible_in_snapshot() comment added:
> > > "Function should not be used with subtransaction xids. It is possible
> > > that this function will return a true result for a subtransaction xid
> > > that was actually still in progress at the time of the snapshot".
> >
> > I think the cleaner solution is to throw an appropriate error if a
> > subtransaction xid is used, rather than adding documentation.
>
> Or maybe check subtrans for it, as it really should be doing.

Yea, that's what I meant.  You can't be sure everyone is going to read
the documentation but they are sure to see the function results or error
message.

--
  Bruce Momjian  <bruce@momjian.us>        http://momjian.us
  EnterpriseDB                             http://enterprisedb.com

  + If your life is a hard drive, Christ can be your backup. +

Re: Incorrect description of xmax and xip in functions docs

From
Simon Riggs
Date:
On Sun, 2008-09-07 at 08:31 -0400, Bruce Momjian wrote:
> Simon Riggs wrote:
> >
> > On Sat, 2008-09-06 at 21:31 -0400, Bruce Momjian wrote:
> > > Applied, and attached.
> >
> > Thanks.
> >
> > > > And for txid_visible_in_snapshot() comment added:
> > > > "Function should not be used with subtransaction xids. It is possible
> > > > that this function will return a true result for a subtransaction xid
> > > > that was actually still in progress at the time of the snapshot".
> > >
> > > I think the cleaner solution is to throw an appropriate error if a
> > > subtransaction xid is used, rather than adding documentation.
> >
> > Or maybe check subtrans for it, as it really should be doing.
>
> Yea, that's what I meant.  You can't be sure everyone is going to read
> the documentation but they are sure to see the function results or error
> message.

In fact, neither is possible. We cannot assume subtrans is available on
the system on which the check is made, neither can we identify which
xids are subtransactions and which are not.

The only way is to document it.

--
 Simon Riggs           www.2ndQuadrant.com
 PostgreSQL Training, Services and Support


Re: Incorrect description of xmax and xip in functions docs

From
Bruce Momjian
Date:
Simon Riggs wrote:
>
> On Sun, 2008-09-07 at 08:31 -0400, Bruce Momjian wrote:
> > Simon Riggs wrote:
> > >
> > > On Sat, 2008-09-06 at 21:31 -0400, Bruce Momjian wrote:
> > > > Applied, and attached.
> > >
> > > Thanks.
> > >
> > > > > And for txid_visible_in_snapshot() comment added:
> > > > > "Function should not be used with subtransaction xids. It is possible
> > > > > that this function will return a true result for a subtransaction xid
> > > > > that was actually still in progress at the time of the snapshot".
> > > >
> > > > I think the cleaner solution is to throw an appropriate error if a
> > > > subtransaction xid is used, rather than adding documentation.
> > >
> > > Or maybe check subtrans for it, as it really should be doing.
> >
> > Yea, that's what I meant.  You can't be sure everyone is going to read
> > the documentation but they are sure to see the function results or error
> > message.
>
> In fact, neither is possible. We cannot assume subtrans is available on
> the system on which the check is made, neither can we identify which
> xids are subtransactions and which are not.
>
> The only way is to document it.

Sorry, I am just getting back to this.  Why would we not know if
something is a subtransaction or if subtransactions are supported?  Are
you assuming txid_visible_in_snapshot() will be used on different
servers?  What are these txid_* functions for anyway?

--
  Bruce Momjian  <bruce@momjian.us>        http://momjian.us
  EnterpriseDB                             http://enterprisedb.com

  + If your life is a hard drive, Christ can be your backup. +

Re: Incorrect description of xmax and xip in functions docs

From
Simon Riggs
Date:
On Wed, 2009-01-07 at 20:30 -0500, Bruce Momjian wrote:

> > The only way is to document it.
>
> Sorry, I am just getting back to this.  Why would we not know if
> something is a subtransaction or if subtransactions are supported?  Are
> you assuming txid_visible_in_snapshot() will be used on different
> servers?  What are these txid_* functions for anyway?

You can derive a snapshot and export it using txid_current_snapshot().
http://developer.postgresql.org/pgdocs/postgres/functions-info.html

You can then check whether an xid is in that snapshot by running
txid_visible_in_snapshot(). However, the check is done assuming that the
xid you are checking is a top-level xid and the answer you get is either
yes or no.

There is no allowance made that the xid supplied as a parameter value
may have been a subtrans of one of the top-level xids listed. So the
answer *ought* to have been true, whereas the function will always
return false.

We cannot extend txid_visible_in_snapshot() to answer correctly because
that information is not held within the snapshot datatype, nor is it
held in regular snapshots currently. So the only way to handle this is
to document the limited scope of the answer this function provides.

--
 Simon Riggs           www.2ndQuadrant.com
 PostgreSQL Training, Services and Support


Re: Incorrect description of xmax and xip in functions docs

From
Bruce Momjian
Date:
Simon Riggs wrote:
>
> On Wed, 2009-01-07 at 20:30 -0500, Bruce Momjian wrote:
>
> > > The only way is to document it.
> >
> > Sorry, I am just getting back to this.  Why would we not know if
> > something is a subtransaction or if subtransactions are supported?  Are
> > you assuming txid_visible_in_snapshot() will be used on different
> > servers?  What are these txid_* functions for anyway?
>
> You can derive a snapshot and export it using txid_current_snapshot().
> http://developer.postgresql.org/pgdocs/postgres/functions-info.html
>
> You can then check whether an xid is in that snapshot by running
> txid_visible_in_snapshot(). However, the check is done assuming that the
> xid you are checking is a top-level xid and the answer you get is either
> yes or no.
>
> There is no allowance made that the xid supplied as a parameter value
> may have been a subtrans of one of the top-level xids listed. So the
> answer *ought* to have been true, whereas the function will always
> return false.
>
> We cannot extend txid_visible_in_snapshot() to answer correctly because
> that information is not held within the snapshot datatype, nor is it
> held in regular snapshots currently. So the only way to handle this is
> to document the limited scope of the answer this function provides.

Thank you for the clarification;  I know understand.  Patch attached and
applied.

--
  Bruce Momjian  <bruce@momjian.us>        http://momjian.us
  EnterpriseDB                             http://enterprisedb.com

  + If your life is a hard drive, Christ can be your backup. +
Index: doc/src/sgml/func.sgml
===================================================================
RCS file: /cvsroot/pgsql/doc/src/sgml/func.sgml,v
retrieving revision 1.468
diff -c -c -r1.468 func.sgml
*** doc/src/sgml/func.sgml    8 Jan 2009 00:44:18 -0000    1.468
--- doc/src/sgml/func.sgml    8 Jan 2009 14:45:57 -0000
***************
*** 12473,12479 ****
        <row>
         <entry><literal><function>txid_visible_in_snapshot</function>(<parameter>bigint</parameter>,
<parameter>txid_snapshot</parameter>)</literal></entry>
         <entry><type>boolean</type></entry>
!        <entry>is transaction ID visible in snapshot?</entry>
        </row>
       </tbody>
      </tgroup>
--- 12473,12479 ----
        <row>
         <entry><literal><function>txid_visible_in_snapshot</function>(<parameter>bigint</parameter>,
<parameter>txid_snapshot</parameter>)</literal></entry>
         <entry><type>boolean</type></entry>
!        <entry>is transaction ID visible in snapshot? (do not use with subtransaction ids)</entry>
        </row>
       </tbody>
      </tgroup>