Thread

  1. Re: Bugs in CREATE/DROP INDEX CONCURRENTLY

    Kevin Grittner <kgrittn@mail.com> — 2012-10-17T22:51:06Z

    Kevin Grittner wrote:
    > Simon Riggs wrote:
    >> On 6 October 2012 00:56, Tom Lane <tgl@sss.pgh.pa.us> wrote:
    >  
    >>> 2. DROP INDEX CONCURRENTLY doesn't bother to do
    >>> TransferPredicateLocksToHeapRelation until long after it's
    >>> invalidated the index. Surely that's no good? Is it even possible
    >>> to do that correctly, when we don't have a lock that will prevent
    >>> new predicate locks from being taken out meanwhile?
    >> 
    >> No idea there. Input appreciated.
     
    > If the creation of a new tuple by insert or update would not
    > perform the related index tuple insertion, and the lock has not yet
    > been transfered to the heap relation, yes we have a problem.  Will
    > take a look at the code.
    > 
    > Creation of new predicate locks while in this state has no bearing
    > on the issue as long as locks are transferred to the heap relation
    > after the last scan using the index has completed.
     
    To put that another way, it should be done at a time when it is sure
    that no query sees indisvalid = true and no query has yet seen
    indisready = false.  Patch attached.  Will apply if nobody sees a
    problem with it.
    
    -Kevin
    
  2. Re: Bugs in CREATE/DROP INDEX CONCURRENTLY

    Tom Lane <tgl@sss.pgh.pa.us> — 2012-10-17T23:31:31Z

    "Kevin Grittner" <kgrittn@mail.com> writes:
    > To put that another way, it should be done at a time when it is sure
    > that no query sees indisvalid = true and no query has yet seen
    > indisready = false. Patch attached. Will apply if nobody sees a
    > problem with it.
    
    The above statement of the requirement doesn't seem to match what you
    put in the comment:
    
    > + 	 * All predicate locks on the index are about to be made invalid. Promote
    > + 	 * them to relation locks on the heap. For correctness this must be done
    > + 	 * after the index was last seen with indisready = true and before it is
    > + 	 * seen with indisvalid = false.
    
    and the comment is rather vaguely worded too (last seen by what?).
    Please wordsmith that a bit more.
    
    			regards, tom lane