Re: InvalidXLogRecPtr in docs

Поиск
Список
Период
Сортировка
От Fujii Masao
Тема Re: InvalidXLogRecPtr in docs
Дата
Msg-id AANLkTilK3uosUkFu3GM-tKWF5EVuojgU1B4iujTdQhl3@mail.gmail.com
обсуждение исходный текст
Ответ на Re: InvalidXLogRecPtr in docs  (Heikki Linnakangas <heikki.linnakangas@enterprisedb.com>)
Ответы Re: InvalidXLogRecPtr in docs  (Heikki Linnakangas <heikki.linnakangas@enterprisedb.com>)
Список pgsql-hackers
On Thu, Jun 10, 2010 at 4:07 PM, Heikki Linnakangas
<heikki.linnakangas@enterprisedb.com> wrote:
> Ah, I just committed a patch to do the same, before seeing your email.
> Thanks anyway.

Yeah, thanks a lot!

> BTW, the docs claim about pg_last_xlog_location() that "While streaming
> replication is in progress this will increase monotonically." That's a bit
> misleading: when the replication connection is broken for some reason and we
> restart it, we begin streaming from the beginning of the last WAL segment.
> So at that moment, pg_last_xlog_location() moves backwards to the beginning
> of the WAL segment.
>
> Should we:
> 1. Just document that,
> 2. Change pg_last_xlog_location() to not move backwards in that case, or
> 3. Change the behavior so that we start streaming at the exact byte location
> where we left off?

I'm for 2 as follows.

diff --git a/src/backend/replication/walreceiver.c
b/src/backend/replication/walreceiver.c
index 26aeca6..f0fd813 100644
--- a/src/backend/replication/walreceiver.c
+++ b/src/backend/replication/walreceiver.c
@@ -524,7 +524,8 @@ XLogWalRcvFlush(void)
               /* Update shared-memory status */               SpinLockAcquire(&walrcv->mutex);
-               walrcv->receivedUpto = LogstreamResult.Flush;
+               if (XLByteLT(walrcv->receivedUpto, LogstreamResult.Flush))
+                       walrcv->receivedUpto = LogstreamResult.Flush;               SpinLockRelease(&walrcv->mutex);


> I believe that starting from the beginning of the WAL segment is just
> paranoia, to avoid creating a WAL file that's missing some data from the
> beginning. Right?

Only when the recovery starting record (i.e., the record at the checkpoint
redo location) is not found, we need to start replication from the beginning
of the segment, I think. That is, fetching_ckpt = true case in the following
code.

> if (PrimaryConnInfo)
> {
>    RequestXLogStreaming(
>        fetching_ckpt ? RedoStartLSN : *RecPtr,
>        PrimaryConnInfo);
>    continue;
> }

Regards,

-- 
Fujii Masao
NIPPON TELEGRAPH AND TELEPHONE CORPORATION
NTT Open Source Software Center


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

Предыдущее
От: Simon Riggs
Дата:
Сообщение: Re: Command to prune archive at restartpoints
Следующее
От: Heikki Linnakangas
Дата:
Сообщение: Re: variable TriggerFile can be declared as static