• Robert Haas's avatar
    Remove _hash_wrtbuf() in favor of calling MarkBufferDirty(). · 25216c98
    Robert Haas authored
    The whole concept of _hash_wrtbuf() is that we need to know at the
    time we're releasing the buffer lock (and pin) whether we dirtied the
    buffer, but this is easy to get wrong.  This patch actually fixes one
    non-obvious bug of that form: hashbucketcleanup forgot to signal
    _hash_squeezebucket, which gets the primary bucket page already
    locked, as to whether it had already dirtied the page.  Calling
    MarkBufferDirty() at the places where we dirty the buffer is more
    intuitive and lets us simplify the code in various places as well.
    
    On top of all that, the ultimate goal here is to make hash indexes
    WAL-logged, and as the comments to _hash_wrtbuf() note, it should
    go away when that happens.  Making it go away a little earlier than
    that seems like a good preparatory step.
    
    Report by Jeff Janes.  Diagnosis by Amit Kapila, Kuntal Ghosh,
    and Dilip Kumar.  Patch by me, after studying an alternative patch
    submitted by Amit Kapila.
    
    Discussion: http://postgr.es/m/CAA4eK1Kf6tOY0oVz_SEdngiNFkeXrA3xUSDPPORQvsWVPdKqnA@mail.gmail.com
    25216c98
hashinsert.c 8.14 KB