Re: Bugs in CREATE/DROP INDEX CONCURRENTLY

From: Simon Riggs <simon(at)2ndQuadrant(dot)com>
To: Andres Freund <andres(at)2ndquadrant(dot)com>
Cc: pgsql-hackers(at)postgresql(dot)org, Kevin Grittner <kgrittn(at)mail(dot)com>, Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
Subject: Re: Bugs in CREATE/DROP INDEX CONCURRENTLY
Date: 2012-10-19 09:10:23
Message-ID: CA+U5nMJAKOgNrmWtReP0jA+zSwyCG2JT8530poZn-Y36C3VGiQ@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

On 18 October 2012 19:48, Simon Riggs <simon(at)2ndquadrant(dot)com> wrote:
> On 18 October 2012 10:20, Andres Freund <andres(at)2ndquadrant(dot)com> wrote:
>> On Thursday, October 18, 2012 06:12:02 AM Kevin Grittner wrote:
>>> Kevin Grittner wrote:
>>> > Hmm. The comment is probably better now, but I've been re-checking
>>> > the code, and I think my actual code change is completely wrong.
>>> > Give me a bit to sort this out.
>>>
>>> I'm having trouble seeing a way to make this work without rearranging
>>> the code for concurrent drop to get to a state where it has set
>>> indisvalid = false, made that visible to all processes, and ensured
>>> that all scans of the index are complete -- while indisready is still
>>> true. That is the point where TransferPredicateLocksToHeapRelation()
>>> could be safely called. Then we would need to set indisready = false,
>>> make that visible to all processes, and ensure that all access to the
>>> index is complete. I can't see where it works to set both flags at
>>> the same time. I want to sleep on it to see if I can come up with any
>>> other way, but right now that's the only way I'm seeing to make DROP
>>> INDEX CONCURRENTLY compatible with SERIALIZABLE transactions. :-(
>>
>> In a nearby bug I had to restructure the code that in a way thats similar to
>> this anyway, so that seems fine. Maybe you can fix the bug ontop of the two
>> attached patches?
>
> First patch and first test committed.
>
> Working on second patch/test.

I've applied the second patch as-is.

The second test shows it passes, but the nature of the bug is fairly
obscure, so having a specific test for dropping an already dropped
object is a little strange and so I've not applied that.

Thanks for fixes and tests.

Kevin, you're good to go on the SSI patch, or I'll apply next week if
you don't. Thanks for that.

--
Simon Riggs http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Training & Services

In response to

Browse pgsql-hackers by date

  From Date Subject
Next Message Simon Riggs 2012-10-19 09:16:53 Re: Deprecating Hash Indexes
Previous Message Kohei KaiGai 2012-10-19 09:00:00 Re: [v9.3] Row-Level Security