Re: Refactor StartupXLOG?

From: Heikki Linnakangas <hlinnaka(at)iki(dot)fi>
To: Thomas Munro <thomas(dot)munro(at)enterprisedb(dot)com>, Pg Hackers <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: Refactor StartupXLOG?
Date: 2016-09-24 08:24:22
Message-ID: b96bf148-a2c4-f27f-af53-5292ff6961d2@iki.fi
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

On 09/24/2016 05:01 AM, Thomas Munro wrote:
> What would the appetite be for that kind of refactoring work,
> considering the increased burden on committers who have to backpatch
> bug fixes? Is it a project goal to reduce the size of large
> complicated functions like StartupXLOG and heap_update? It seems like
> a good way for new players to learn how they work.

+1. Yes, it does increase the burden of backpatching, but I think it'd
still be very much worth it.

A couple of little details that caught my eye at a quick read:

> /* Try to find a backup label. */
> if (read_backup_label(&checkPointLoc, &backupEndRequired,
> &backupFromStandby))
> {
> wasShutdown = ProcessBackupLabel(xlogreader, &checkPoint, checkPointLoc,
> &haveTblspcMap);
>
> /* set flag to delete it later */
> haveBackupLabel = true;
> }
> else
> {
> /* Clean up any orphaned tablespace map files with no backup label. */
> CleanUpTablespaceMap();
> ...

This is a bit asymmetric: In the true-branch, ProcessBackupLabel() reads
the tablespace map, and sets InArchiveRecovery and StandbyMode, but in
the false-branch, StartupXLog() calls CleanupTablespaceMap() and sets
those variables directly.

For functions like BeginRedo, BeginHotStandby, ReplayRedo, etc., I think
it'd be better to have the "if (InRecovery)" checks in the caller,
rather than in the functions.

- Heikki

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Masahiko Sawada 2016-09-24 08:37:58 Re: Quorum commit for multiple synchronous replication.
Previous Message Craig Ringer 2016-09-24 07:58:28 Re: 9.6 TAP tests and extensions