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



-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Reply via email to