Re: Problem with txid_snapshot_in/out() functionality
От | Jan Wieck |
---|---|
Тема | Re: Problem with txid_snapshot_in/out() functionality |
Дата | |
Msg-id | 534AD5CF.5040702@wi3ck.info обсуждение исходный текст |
Ответ на | Re: Problem with txid_snapshot_in/out() functionality (Marko Kreen <markokr@gmail.com>) |
Ответы |
Re: Problem with txid_snapshot_in/out() functionality
|
Список | pgsql-hackers |
On 04/13/14 08:27, Marko Kreen wrote: > 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(). > Thanks, yes on both issues. Will create another patch. Jan -- Jan Wieck Senior Software Engineer http://slony.info
В списке pgsql-hackers по дате отправления: