Re: [sqlsmith] Failed assertion in _hash_kill_items/MarkBufferDirtyHint - Mailing list pgsql-hackers

From Robert Haas
Subject Re: [sqlsmith] Failed assertion in _hash_kill_items/MarkBufferDirtyHint
Date
Msg-id CA+TgmoaS4kx70H6n2WGWM=FdzUZU8rpD0e8_hfNnft7qTSHQ_A@mail.gmail.com
Whole thread Raw
In response to [sqlsmith] Failed assertion in _hash_kill_items/MarkBufferDirtyHint  (Andreas Seltenreich <seltenreich@gmx.de>)
List pgsql-hackers
On Mon, Mar 27, 2017 at 5:39 AM, Ashutosh Sharma <ashu.coek88@gmail.com> wrote:
> Thanks for reporting this problem. Could you please let me know on for
> how long did you run sqlsmith to get this crash. However, I have found
> the reason for this crash. This is basically happening when trying to
> retrieve the tuples using cursor. Basically the current hash index
> scan work tuple-at-a-time which means once it finds tuple on page, it
> releases lock from the page but keeps pin on it and finally returns
> the tuple. When the requested number of tuples are processed there is
> no lock on the page that was being scanned but yes there is a pin on
> it. Finally, when trying to close a cursor at the end of scan, if any
> killed tuples has been identified we try to first mark these items as
> dead with the help of _hash_kill_items(). But, since we only have pin
> on this page, the assert check 'LWLockHeldByMe()' fails.

Instead of adding bool haveLock to _hash_kill_items, how about just
having the caller acquire the lock before calling the function and
release it afterwards?  Since the acquire is at the beginning of the
function and the release at the end, there seems to be no point in
putting the acquire/release inside the function rather than in the
caller.

-- 
Robert Haas
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company



pgsql-hackers by date:

Previous
From: Tom Lane
Date:
Subject: Re: Allow to specify #columns in heap/index_form_tuple
Next
From: Peter Geoghegan
Date:
Subject: Re: Allow to specify #columns in heap/index_form_tuple