Re: Hot standby, recovery infra

From: Fujii Masao <masao(dot)fujii(at)gmail(dot)com>
To: Heikki Linnakangas <heikki(dot)linnakangas(at)enterprisedb(dot)com>
Cc: Simon Riggs <simon(at)2ndquadrant(dot)com>, PostgreSQL-development <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: Hot standby, recovery infra
Date: 2009-01-28 14:19:50
Message-ID: 3f0b79eb0901280619y6ced2f48s7da3ab8969adaedb@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

Hi,

On Wed, Jan 28, 2009 at 7:04 PM, Heikki Linnakangas
<heikki(dot)linnakangas(at)enterprisedb(dot)com> wrote:
> I've been reviewing and massaging the so called recovery infra patch.

Great!

> I feel quite good about this patch now. Given the amount of code churn, it
> requires testing, and I'll read it through one more time after sleeping over
> it. Simon, do you see anything wrong with this?

I also read this patch and found something odd. I apologize if I misread it..

> @@ -507,7 +550,7 @@ CheckArchiveTimeout(void)
> pg_time_t now;
> pg_time_t last_time;
>
> - if (XLogArchiveTimeout <= 0)
> + if (XLogArchiveTimeout <= 0 || !IsRecoveryProcessingMode())

The above change destroys archive_timeout because checking the timeout
is always skipped after recovery is done.

> @@ -355,6 +359,27 @@ BackgroundWriterMain(void)
> */
> PG_SETMASK(&UnBlockSig);
>
> + BgWriterRecoveryMode = IsRecoveryProcessingMode();
> +
> + if (BgWriterRecoveryMode)
> + elog(DEBUG1, "bgwriter starting during recovery");
> + else
> + InitXLOGAccess();

Why is InitXLOGAccess() called also here when bgwriter is started after
recovery? That is already called by AuxiliaryProcessMain().

> @@ -1302,7 +1314,7 @@ ServerLoop(void)
> * state that prevents it, start one. It doesn't matter if this
> * fails, we'll just try again later.
> */
> - if (BgWriterPID == 0 && pmState == PM_RUN)
> + if (BgWriterPID == 0 && (pmState == PM_RUN || pmState == PM_RECOVERY))
> BgWriterPID = StartBackgroundWriter();

Likewise, we should try to start also the stats collector during recovery?

> @@ -2103,7 +2148,8 @@ XLogFileInit(uint32 log, uint32 seg,
> unlink(tmppath);
> }
>
> - elog(DEBUG2, "done creating and filling new WAL file");
> + XLogFileName(tmppath, ThisTimeLineID, log, seg);
> + elog(DEBUG2, "done creating and filling new WAL file %s", tmppath);

This debug message is somewhat confusing, because the WAL file
represented as "tmppath" might have been already created by
previous XLogFileInit() via InstallXLogFileSegment().

regards,

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

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Andrew Sullivan 2009-01-28 14:27:29 Re: 8.4 release planning
Previous Message Gregory Stark 2009-01-28 14:10:52 Re: 8.4 release planning