Re: GiST insert algorithm rewrite

Heikki Linnakangas <heikki.linnakangas@enterprisedb.com>

From: Heikki Linnakangas <heikki.linnakangas@enterprisedb.com>
To: PostgreSQL-development <pgsql-hackers@postgresql.org>
Cc: Tom Lane <tgl@sss.pgh.pa.us>, Greg Stark <gsstark@mit.edu>, Robert Haas <robertmhaas@gmail.com>, Bruce Momjian <bruce@momjian.us>, Teodor Sigaev <teodor@sigaev.ru>, Oleg Bartunov <oleg@sai.msu.su>
Date: 2010-12-21T18:00:26Z
Lists: pgsql-hackers

Commits

Same data as JSON: GET /api/v1/messages/:b64id/commits the thread's linked commits as JSON, with link sources. API reference →
  1. New feature:

Attachments

On 16.12.2010 15:52, Heikki Linnakangas wrote:
> On 13.12.2010 20:30, Tom Lane wrote:
>> Can we fix it so that each child page is updated, and its downlink
>> inserted, as a separate atomic action? That'd require each intermediate
>> state to be consistent and crash-safe, but I think you really need the
>> intermediate states to be consistent anyway because of concurrent scans.
>
> Here's an updated patch, using that idea.If a page split into more than
> two pages, the downlinks for the pages are inserted to the parent
> one-by-one, right-to-left, until there's only two remaining. Finally the
> downlink for the last remaining right page is inserted and the downlink
> for the original page is updated as one atomic operation.
>
> It was a pretty big rewrite again, but seems to work now. I tested
> splits that span more than two pages by rigging the btree_gist picksplit
> function to choose very bad split points, and the fix-split logic by
> adding elog(ERROR) in strategic places to sometimes leave splits
> incomplete.

One final version, with a bug fix wrt. root page split and some cleanup. 
I'm planning to commit this before Christmas. It's a big patch, so 
review would be much appreciated.

-- 
   Heikki Linnakangas
   EnterpriseDB   http://www.enterprisedb.com