Re: Problem with txid_snapshot_in/out() functionality
От | Marko Kreen |
---|---|
Тема | Re: Problem with txid_snapshot_in/out() functionality |
Дата | |
Msg-id | 20140413122724.GA12792@gmail.com обсуждение исходный текст |
Ответ на | Re: Problem with txid_snapshot_in/out() functionality (Jan Wieck <jan@wi3ck.info>) |
Ответы |
Re: Problem with txid_snapshot_in/out() functionality
|
Список | 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 по дате отправления: