Re: 001_rep_changes.pl fails due to publisher stuck on shutdown

Поиск
Список
Период
Сортировка
От Kyotaro Horiguchi
Тема Re: 001_rep_changes.pl fails due to publisher stuck on shutdown
Дата
Msg-id 20240625.100339.1071702840459338337.horikyota.ntt@gmail.com
обсуждение исходный текст
Ответ на Re: 001_rep_changes.pl fails due to publisher stuck on shutdown  (Amit Kapila <amit.kapila16@gmail.com>)
Список pgsql-hackers
At Fri, 21 Jun 2024 11:48:22 +0530, Amit Kapila <amit.kapila16@gmail.com> wrote in 
> On Wed, Jun 19, 2024 at 10:44 AM Hayato Kuroda (Fujitsu)
> <kuroda.hayato@fujitsu.com> wrote:
> >
> > Dear Horiguchi-san,
> >
> > Thanks for sharing the patch! I agree this approach (ensure WAL records are flushed)
> > Is more proper than others.
> >
> > I have an unclear point. According to the comment atop GetInsertRecPtr(), it just
> > returns the approximated value - the position of the last full WAL page [1].
> > If there is a continuation WAL record which across a page, will it return the
> > halfway point of the WAL record (end of the first WAL page)? If so, the proposed
> > fix seems not sufficient. We have to point out the exact the end of the record.
> >
> 
> You have a point but if this theory is correct why we are not able to
> reproduce the issue after this patch? Also, how to get the WAL
> location up to which we need to flush? Is XLogCtlData->logInsertResult
> the one we are looking for?

It is not exposed, but of course logInsertResult is more
straightforward source for the LSN.

The reason why the patch is working well is due to the following bit
of the code.

xlog.c:958, in XLInsertRecord()
>    /*
>     * Update shared LogwrtRqst.Write, if we crossed page boundary.
>     */
>    if (StartPos / XLOG_BLCKSZ != EndPos / XLOG_BLCKSZ)
>    {
>        SpinLockAcquire(&XLogCtl->info_lck);
>        /* advance global request to include new block(s) */
>        if (XLogCtl->LogwrtRqst.Write < EndPos)
>            XLogCtl->LogwrtRqst.Write = EndPos;
>        SpinLockRelease(&XLogCtl->info_lck);
>        RefreshXLogWriteResult(LogwrtResult);
>    }

The code, which exists has existed for a long time, ensures that
GetInsertRecPtr() returns the accurate end of a record when it spanns
over page boundaries. This would need to be written in the new comment
if we use GetInsertRecPtr().

regards.

-- 
Kyotaro Horiguchi
NTT Open Source Software Center

В списке pgsql-hackers по дате отправления:

Предыдущее
От: Japin Li
Дата:
Сообщение: Re: Support "Right Semi Join" plan shapes
Следующее
От: "Imseih (AWS), Sami"
Дата:
Сообщение: Re: Track the amount of time waiting due to cost_delay