Re: Problem with txid_snapshot_in/out() functionality - Mailing list pgsql-hackers

From Marko Kreen
Subject Re: Problem with txid_snapshot_in/out() functionality
Date
Msg-id 20140413122724.GA12792@gmail.com
Whole thread Raw
In response to Re: Problem with txid_snapshot_in/out() functionality  (Jan Wieck <jan@wi3ck.info>)
Responses Re: Problem with txid_snapshot_in/out() functionality
List pgsql-hackers
On Sat, Apr 12, 2014 at 02:10:13PM -0400, Jan Wieck wrote:
> Since it doesn't seem to produce any side effects, I'd think that
> making the snapshot unique within txid_current_snapshot() and
> filtering duplicates on input should be sufficient and eligible for
> backpatching.

Agreed.

> The attached patch adds a unique loop to the internal
> sort_snapshot() function and skips duplicates on input. The git
> commit is here:
> 
> https://github.com/wieck/postgres/commit/a88a2b2c25b856478d7e2b012fc718106338fe00

>   static void
>   sort_snapshot(TxidSnapshot *snap)
>   {
> +     txid    last = 0;
> +     int        nxip, idx1, idx2;
> + 
>       if (snap->nxip > 1)
> +     {
>           qsort(snap->xip, snap->nxip, sizeof(txid), cmp_txid);
> +         nxip = snap->nxip;
> +         idx1 = idx2 = 0;
> +         while (idx1 < nxip)
> +         {
> +             if (snap->xip[idx1] != last)
> +                 last = snap->xip[idx2++] = snap->xip[idx1];
> +             else
> +                 snap->nxip--;
> +             idx1++;
> +         }
> +     }
>   }

I think you need to do SET_VARSIZE also here.  Alternative is to
move SET_VARSIZE after sort_snapshot().

And it seems the drop-double-txid logic should be added also to
txid_snapshot_recv().  It seems weird to have it behave differently
from txid_snapshot_in().

-- 
marko




pgsql-hackers by date:

Previous
From: Simon Riggs
Date:
Subject: Re: integrate pg_upgrade analyze_new_cluster.sh into vacuumdb
Next
From: Christian Ullrich
Date:
Subject: Re: PostgreSQL in Windows console and Ctrl-C