Re: getting rid of SnapshotNow

Bruce Momjian <bruce@momjian.us>

From: Bruce Momjian <bruce@momjian.us>
To: Robert Haas <robertmhaas@gmail.com>
Cc: Tom Lane <tgl@sss.pgh.pa.us>, pgsql-hackers@postgresql.org
Date: 2013-08-05T15:17:08Z
Lists: pgsql-hackers
On Thu, Jul 25, 2013 at 07:24:53PM -0400, Robert Haas wrote:
> -		/* Used by pre-9.0 binary upgrades */
> -		if (tuple->t_infomask & HEAP_MOVED_OFF)
> -		{
> -			TransactionId xvac = HeapTupleHeaderGetXvac(tuple);
> -
> -			if (TransactionIdIsCurrentTransactionId(xvac))
> -				return false;
> -			if (!TransactionIdIsInProgress(xvac))
> -			{
> -				if (TransactionIdDidCommit(xvac))
> -				{
> -					SetHintBits(tuple, buffer, HEAP_XMIN_INVALID,
> -								InvalidTransactionId);
> -					return false;
> -				}
> -				SetHintBits(tuple, buffer, HEAP_XMIN_COMMITTED,
> -							InvalidTransactionId);
> -			}
> -		}
> -		/* Used by pre-9.0 binary upgrades */
> -		else if (tuple->t_infomask & HEAP_MOVED_IN)
> -		{
> -			TransactionId xvac = HeapTupleHeaderGetXvac(tuple);
> -
> -			if (!TransactionIdIsCurrentTransactionId(xvac))
> -			{
> -				if (TransactionIdIsInProgress(xvac))
> -					return false;
> -				if (TransactionIdDidCommit(xvac))
> -					SetHintBits(tuple, buffer, HEAP_XMIN_COMMITTED,
> -								InvalidTransactionId);
> -				else
> -				{
> -					SetHintBits(tuple, buffer, HEAP_XMIN_INVALID,
> -								InvalidTransactionId);
> -					return false;
> -				}
> -			}
> -		}

One interesting aspect of this patch is that the backend code is no
longer even checking HEAP_MOVED_OFF and HEAP_MOVED_IN.  However, we
can't reuse those bits because they could be set from pre-9.0 rows.

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

  + It's impossible for everything to be true. +