Checking MINIMUM_VERSION_FOR_WAL_SUMMARIES

Started by Artur Zakirovabout 2 years ago6 messageshackers
Jump to latest
#1Artur Zakirov
zaartur@gmail.com

Hi hackers,

during reading the source code of new incremental backup functionality
I noticed that the following condition can by unintentional:

/*
* For newer server versions, likewise create pg_wal/summaries
*/
if (PQserverVersion(conn) < MINIMUM_VERSION_FOR_WAL_SUMMARIES)
{
...

if (pg_mkdir_p(summarydir, pg_dir_create_mode) != 0 &&
errno != EEXIST)
pg_fatal("could not create directory \"%s\": %m", summarydir);
}

This is from src/bin/pg_basebackup/pg_basebackup.c.

Is the condition correct? Shouldn't it be ">=". Otherwise the function
will create "/summaries" only for older PostgreSQL versions.

I've attached a patch to fix it in case this is a typo.

--
Artur

Attachments:

v1-0001-Fix-checking-MINIMUM_VERSION_FOR_WAL_SUMMARIES.patchtext/x-patch; charset=US-ASCII; name=v1-0001-Fix-checking-MINIMUM_VERSION_FOR_WAL_SUMMARIES.patchDownload+1-2
#2Nazir Bilal Yavuz
byavuz81@gmail.com
In reply to: Artur Zakirov (#1)
Re: Checking MINIMUM_VERSION_FOR_WAL_SUMMARIES

Hi,

On Fri, 2 Feb 2024 at 03:11, Artur Zakirov <zaartur@gmail.com> wrote:

Hi hackers,

during reading the source code of new incremental backup functionality
I noticed that the following condition can by unintentional:

/*
* For newer server versions, likewise create pg_wal/summaries
*/
if (PQserverVersion(conn) < MINIMUM_VERSION_FOR_WAL_SUMMARIES)
{
...

if (pg_mkdir_p(summarydir, pg_dir_create_mode) != 0 &&
errno != EEXIST)
pg_fatal("could not create directory \"%s\": %m", summarydir);
}

This is from src/bin/pg_basebackup/pg_basebackup.c.

Is the condition correct? Shouldn't it be ">=". Otherwise the function
will create "/summaries" only for older PostgreSQL versions.

You seem right, nice catch. Also, this change makes the check in

snprintf(summarydir, sizeof(summarydir), "%s/%s/summaries",
basedir,
PQserverVersion(conn) < MINIMUM_VERSION_FOR_PG_WAL ?
"pg_xlog" : "pg_wal");

redundant. PQserverVersion(conn) will always be higher than
MINIMUM_VERSION_FOR_PG_WAL.

--
Regards,
Nazir Bilal Yavuz
Microsoft

#3Yugo Nagata
nagata@sraoss.co.jp
In reply to: Artur Zakirov (#1)
Re: Checking MINIMUM_VERSION_FOR_WAL_SUMMARIES

On Fri, 2 Feb 2024 01:11:27 +0100
Artur Zakirov <zaartur@gmail.com> wrote:

Hi hackers,

during reading the source code of new incremental backup functionality
I noticed that the following condition can by unintentional:

/*
* For newer server versions, likewise create pg_wal/summaries
*/
if (PQserverVersion(conn) < MINIMUM_VERSION_FOR_WAL_SUMMARIES)
{
...

if (pg_mkdir_p(summarydir, pg_dir_create_mode) != 0 &&
errno != EEXIST)
pg_fatal("could not create directory \"%s\": %m", summarydir);
}

This is from src/bin/pg_basebackup/pg_basebackup.c.

Is the condition correct? Shouldn't it be ">=". Otherwise the function
will create "/summaries" only for older PostgreSQL versions.

I've attached a patch to fix it in case this is a typo.

I also think it should be ">="
Also, if so, I don't think the check of MINIMUM_VERSION_FOR_PG_WAL
in the block is required, because the directory name is always pg_wal
in the new versions.

Regards,
Yugo Nagata

--
Artur

--
Yugo NAGATA <nagata@sraoss.co.jp>

#4Artur Zakirov
zaartur@gmail.com
In reply to: Nazir Bilal Yavuz (#2)
Re: Checking MINIMUM_VERSION_FOR_WAL_SUMMARIES

On Fri, 2 Feb 2024 at 09:41, Nazir Bilal Yavuz <byavuz81@gmail.com> wrote:

You seem right, nice catch. Also, this change makes the check in

snprintf(summarydir, sizeof(summarydir), "%s/%s/summaries",
basedir,
PQserverVersion(conn) < MINIMUM_VERSION_FOR_PG_WAL ?
"pg_xlog" : "pg_wal");

redundant. PQserverVersion(conn) will always be higher than
MINIMUM_VERSION_FOR_PG_WAL.

Thank you both for the comments. Indeed, that part now looks redundant.
I've attached a patch to remove checking MINIMUM_VERSION_FOR_PG_WAL.

--
Artur

Attachments:

v2-0001-Fix-checking-MINIMUM_VERSION_FOR_WAL_SUMMARIES-fo.patchtext/x-patch; charset=US-ASCII; name=v2-0001-Fix-checking-MINIMUM_VERSION_FOR_WAL_SUMMARIES-fo.patchDownload+2-5
#5Nazir Bilal Yavuz
byavuz81@gmail.com
In reply to: Artur Zakirov (#4)
Re: Checking MINIMUM_VERSION_FOR_WAL_SUMMARIES

Hi,

On Fri, 2 Feb 2024 at 12:11, Artur Zakirov <zaartur@gmail.com> wrote:

On Fri, 2 Feb 2024 at 09:41, Nazir Bilal Yavuz <byavuz81@gmail.com> wrote:

You seem right, nice catch. Also, this change makes the check in

snprintf(summarydir, sizeof(summarydir), "%s/%s/summaries",
basedir,
PQserverVersion(conn) < MINIMUM_VERSION_FOR_PG_WAL ?
"pg_xlog" : "pg_wal");

redundant. PQserverVersion(conn) will always be higher than
MINIMUM_VERSION_FOR_PG_WAL.

Thank you both for the comments. Indeed, that part now looks redundant.
I've attached a patch to remove checking MINIMUM_VERSION_FOR_PG_WAL.

Thanks for the update. The patch looks good to me.

--
Regards,
Nazir Bilal Yavuz
Microsoft

#6Michael Paquier
michael@paquier.xyz
In reply to: Nazir Bilal Yavuz (#5)
Re: Checking MINIMUM_VERSION_FOR_WAL_SUMMARIES

On Fri, Feb 02, 2024 at 03:11:40PM +0300, Nazir Bilal Yavuz wrote:

Thanks for the update. The patch looks good to me.

Yes, you're right. We want the opposite to happen here. I've applied
the patch on HEAD.
--
Michael