On 11 August 2015 at 11:39, Amit Kapila <amit.kapil...@gmail.com> wrote:

> On Tue, Aug 11, 2015 at 3:44 PM, Simon Riggs <si...@2ndquadrant.com>
> wrote:
>
>> On 11 August 2015 at 10:55, Amit Kapila <amit.kapil...@gmail.com> wrote:
>>
>>> > What "tricks" are being used??
>>> >
>>> > Please explain why taking 2 locks is bad here, yet works fine
>>> elsewhere.
>>> >
>>>
>>> One thing that could be risky in this new scheme of locking
>>> is that now in functions TransactionIdSetPageStatus and
>>> TransactionIdSetStatusBit, we modify slru's shared state with Control
>>> Lock
>>> in Shared mode whereas I think it is mandated in the code that those
>>> should be modified with ControlLock in Exlusive mode.  This could have
>>> some repercussions.
>>>
>>
>> Do you know of any? This is a technical forum, so if we see a problem we
>> say what it is, and if we don't, that's usually classed as a positive point
>> in a code review.
>>
>
> One of the main reason of saying this is that it is written in File
> level comments in slru.c that for accessing (examine or modify)
> the shared state, Control lock *must* be held in Exclusive mode
> except in function SimpleLruReadPage_ReadOnly().  So, whereas
> I agree that I should think more about if there is any breakage due
> to patch, but I don't find any explanation either in your e-mail or in
> patch why it is safe to modify the state after patch when it was not
> before.  If you think it is safe, then atleast modify comments in
> slru.c.
>

"except"...

I explained that a reader will never be reading data that is concurrently
changed by a writer, so it was safe to break the general rule for this
specific case only.

Yes, I will modify comments in the patch.


> Another thing is that in this flow, with patch there will be three locks
>>> (we take per-buffer locks before doing I/O) that will get
>>> involved rather than
>>> two, so one effect of this patch will be that currently while doing I/O,
>>> concurrent committers will be allowed to proceed as we
>>> release ControlLock
>>> before doing the same whereas with Patch, they will not be allowed as
>>> they
>>> are blocked by CommitLock.  Now may be this scenario is less common and
>>> doesn't matter much if the patch improves the more common scenario,
>>> however this is an indication of what Andres tries to highlight that
>>> having more
>>> locks for this might make patch more complicated.
>>>
>>
>> It's easy to stripe the CommitLock in that case, if it is a problem.
>>
>
> Sure, I think other places in code that take both the other locks also
> needs to be checked for updation.
>

 Not sure what that means, but there are no other places calling CommitLock

-- 
Simon Riggs                http://www.2ndQuadrant.com/
<http://www.2ndquadrant.com/>
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

Reply via email to