Tom Lane wrote:
> Bruce Momjian <pgman@candle.pha.pa.us> writes:
> > Patch applied.  Thanks.
> >              * block is not currently in memory.
> >              */
> >             bufHdr = BufferAlloc(reln, blockNum, &found);
> > +           /* we are guaranted that nobody else has touched this 
> > will-be-new block */
> > +           Assert(!(found && isExtend));
> >             if (found)
> >                     BufferHitCount++;
> >     }
> 
> This patch is utterly wrong.  Please revert it.
> 
> The case it is Asserting can't happen is explained in the comment a
> couple dozen lines further down:
> 
> * try to extend a relation
> * read smgrnblocks to find the current relation length
> * allocate an empty buffer for the N+1'st page of the rel
> * call smgrextend
> * smgrextend fails for some reason (eg, no space left on disk)
> * buffer remains present, but is not BM_VALID
> * awhile later, try to extend relation again
> * read smgrnblocks to find the current relation length
> * allocate a buffer for the N+1'st page of the rel
> 
> This is entirely likely to find the same non-BM_VALID buffer that was
> assigned in the first iteration.

Reverted.

-- 
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 359-1001
  +  If your life is a hard drive,     |  13 Roberts Road
  +  Christ can be your backup.        |  Newtown Square, Pennsylvania 19073

---------------------------(end of broadcast)---------------------------
TIP 9: In versions below 8.0, the planner will ignore your desire to
       choose an index scan if your joining column's datatypes do not
       match

Reply via email to