On Thu, Dec 10, 2015 at 9:04 AM, Andres Freund <and...@anarazel.de> wrote:
> On 2015-12-10 08:55:54 -0500, Robert Haas wrote:
>> Maybe.  But I think we could use a little more vigorous discussion of
>> that issue, since Andres doesn't seem to be very convinced by your
>> analysis, and I don't currently understand what you've fixed because I
>> can't, as mentioned several times, follow your patch stack.
>
> The issue at hand is that the following block
>                 oldestOffsetKnown =
>                         find_multixact_start(oldestMultiXactId, 
> &oldestOffset);
>
> ...
>         else if (prevOldestOffsetKnown)
>         {
>                 /*
>                  * If we failed to get the oldest offset this time, but we 
> have a
>                  * value from a previous pass through this function, use the 
> old value
>                  * rather than automatically forcing it.
>                  */
>                 oldestOffset = prevOldestOffset;
>                 oldestOffsetKnown = true;
>         }
> in SetOffsetVacuumLimit() fails to restore offsetStopLimit, which then
> is set in shared memory:
>         /* Install the computed values */
>         LWLockAcquire(MultiXactGenLock, LW_EXCLUSIVE);
>         MultiXactState->oldestOffset = oldestOffset;
>         MultiXactState->oldestOffsetKnown = oldestOffsetKnown;
>         MultiXactState->offsetStopLimit = offsetStopLimit;
>         LWLockRelease(MultiXactGenLock);
>
> so, if find_multixact_start() failed - a "should never happen" occurance
> - we install a wrong stop limit. It does get 'repaired' upon the next
> suceeding find_multixact_start() in SetOffsetVacuumLimit() or a restart
> though.
>
> Adding a 'prevOffsetStopLimit' and using it seems like a ~5 line patch.

So let's do that, then.

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


-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Reply via email to