On Tue, Dec 22, 2020 at 8:18 AM tsunakawa.takay@fujitsu.com
<tsunakawa.takay@fujitsu.com> wrote:
>
> From: Amit Kapila <amit.kapila16@gmail.com>
> > Why would all client backends wait for AccessExclusive lock on this
> > relation? Say, a client needs a buffer for some other relation and
> > that might evict this buffer after we release the lock on the
> > partition. In StrategyGetBuffer, it is important to either have a pin
> > on the buffer or the buffer header itself must be locked to avoid
> > getting picked as victim buffer. Am I missing something?
>
> Ouch, right. (The year-end business must be making me crazy...)
>
> So, there are two choices here:
>
> 1) The current patch.
> 2) Acquire the buffer header spinlock before releasing the buffer mapping lwlock, and eliminate the buffer tag
comparisonas follows:
>
> BufTableLookup();
> LockBufHdr();
> LWLockRelease();
> InvalidateBuffer();
>
> I think both are okay. If I must choose either, I kind of prefer 1), because LWLockRelease() could take longer time
towake up other processes waiting on the lwlock, which is not very good to do while holding a spinlock.
>
>
I also prefer (1). I will add some comments about the locking protocol
in the next version of the patch.
--
With Regards,
Amit Kapila.