Thread: HOT + MVCC-safe cluster conflict fix

HOT + MVCC-safe cluster conflict fix

From
Heikki Linnakangas
Date:
Hi Pavan,

Here's a little patch against CVS HEAD + NewHOT-v7.0.patch to fix the
conflict between MVCC-safe cluster and HOT.

index_getnext is modified to return all tuples in a HOT chain when
called with SnapshotAny. Cluster will insert them all as normal cold
updates.

--
   Heikki Linnakangas
   EnterpriseDB   http://www.enterprisedb.com
Index: src/backend/access/index/indexam.c
===================================================================
RCS file: /home/hlinnaka/pgcvsrepository2/pgsql/src/backend/access/index/indexam.c,v
retrieving revision 1.97
diff -c -r1.97 indexam.c
*** src/backend/access/index/indexam.c    5 Jan 2007 22:19:23 -0000    1.97
--- src/backend/access/index/indexam.c    19 Apr 2007 12:07:35 -0000
***************
*** 404,409 ****
--- 404,428 ----

      SCAN_CHECKS;
      GET_SCAN_PROCEDURE(amgettuple);
+
+     /*
+      * With SnapshotAny, there can be multiple visible tuples in a HOT chain,
+      * all represented by a single index entry. We need to return all of them
+      * to the caller. The first one is returned in the loop below as usual,
+      * but before we move to the next index tuple, return any remaining tuples
+      * from the previous chain.
+      */
+     if (BufferIsValid(scan->xs_cbuf) && scan->xs_snapshot == SnapshotAny)
+     {
+         bool found;
+
+         LockBuffer(scan->xs_cbuf, BUFFER_LOCK_SHARE);
+         found = heap_hot_fetch(scan->heapRelation, scan->xs_snapshot,
+                                heapTuple, scan->xs_cbuf);
+         LockBuffer(scan->xs_cbuf, BUFFER_LOCK_UNLOCK);
+         if (found)
+             return heapTuple;
+     }

      /* just make sure this is false... */
      scan->kill_prior_tuple = false;
Index: src/backend/commands/cluster.c
===================================================================
RCS file: /home/hlinnaka/pgcvsrepository2/pgsql/src/backend/commands/cluster.c,v
retrieving revision 1.159
diff -c -r1.159 cluster.c
*** src/backend/commands/cluster.c    8 Apr 2007 01:26:28 -0000    1.159
--- src/backend/commands/cluster.c    19 Apr 2007 12:02:00 -0000
***************
*** 717,722 ****
--- 717,723 ----
                                           scan->xs_cbuf))
          {
              case HEAPTUPLE_DEAD:
+             case HEAPTUPLE_DEAD_CHAIN:
                  /* Definitely dead */
                  isdead = true;
                  break;

Re: HOT + MVCC-safe cluster conflict fix

From
"Pavan Deolasee"
Date:

On 4/19/07, Heikki Linnakangas <heikki@enterprisedb.com> wrote:
Hi Pavan,

Here's a little patch against CVS HEAD + NewHOT-v7.0.patch to fix the
conflict between MVCC-safe cluster and HOT.

index_getnext is modified to return all tuples in a HOT chain when
called with SnapshotAny. Cluster will insert them all as normal cold
updates.


Thanks Heikki. We might need to tweak it a bit because I think I had
made an assumption that heap_hot_fetch() should be called only on
the root tuple. Anyways, would look at it.

Thanks

--
Pavan Deolasee
EnterpriseDB     http://www.enterprisedb.com

Re: HOT + MVCC-safe cluster conflict fix

From
Bruce Momjian
Date:
Your patch has been added to the PostgreSQL unapplied patches list at:

    http://momjian.postgresql.org/cgi-bin/pgpatches

It will be applied as soon as one of the PostgreSQL committers reviews
and approves it.

---------------------------------------------------------------------------


Heikki Linnakangas wrote:
> Hi Pavan,
>
> Here's a little patch against CVS HEAD + NewHOT-v7.0.patch to fix the
> conflict between MVCC-safe cluster and HOT.
>
> index_getnext is modified to return all tuples in a HOT chain when
> called with SnapshotAny. Cluster will insert them all as normal cold
> updates.
>
> --
>    Heikki Linnakangas
>    EnterpriseDB   http://www.enterprisedb.com


>
> ---------------------------(end of broadcast)---------------------------
> TIP 1: if posting/reading through Usenet, please send an appropriate
>        subscribe-nomail command to majordomo@postgresql.org so that your
>        message can get through to the mailing list cleanly

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

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