Simplify xlogreader.c with XLogRec* macros

Started by 邱宇航about 2 years ago5 messages
#1邱宇航
iamqyh@gmail.com
1 attachment(s)

Hello hackers,

Commit 3f1ce97 refactored XLog record access macros, but missed in a few places. I fixed this, and patch is attached.

--
Yuhang Qiu

Attachments:

0001-Simplify-xlogreader.c-with-XLogRec-macros.patchapplication/octet-stream; name=0001-Simplify-xlogreader.c-with-XLogRec-macros.patch; x-unix-mode=0644Download
From 83467420e5953d946f5d92786c077df428d9ceb5 Mon Sep 17 00:00:00 2001
From: Yuhang Qiu <iamqyh@gmail.com>
Date: Tue, 31 Oct 2023 16:57:32 +0800
Subject: [PATCH] Simplify xlogreader.c with XLogRec* macros.

These were missed in commit 3f1ce97.
---
 src/backend/access/transam/xlogreader.c | 15 +++++++--------
 1 file changed, 7 insertions(+), 8 deletions(-)

diff --git a/src/backend/access/transam/xlogreader.c b/src/backend/access/transam/xlogreader.c
index e0baa86bd3..568b0b043c 100644
--- a/src/backend/access/transam/xlogreader.c
+++ b/src/backend/access/transam/xlogreader.c
@@ -1981,7 +1981,7 @@ XLogRecGetBlockTagExtended(XLogReaderState *record, uint8 block_id,
 	if (!XLogRecHasBlockRef(record, block_id))
 		return false;
 
-	bkpb = &record->record->blocks[block_id];
+	bkpb = XLogRecGetBlock(record, block_id);
 	if (rlocator)
 		*rlocator = bkpb->rlocator;
 	if (forknum)
@@ -2003,11 +2003,10 @@ XLogRecGetBlockData(XLogReaderState *record, uint8 block_id, Size *len)
 {
 	DecodedBkpBlock *bkpb;
 
-	if (block_id > record->record->max_block_id ||
-		!record->record->blocks[block_id].in_use)
+	if (!XLogRecHasBlockRef(record, block_id))
 		return NULL;
 
-	bkpb = &record->record->blocks[block_id];
+	bkpb = XLogRecGetBlock(record, block_id);
 
 	if (!bkpb->has_data)
 	{
@@ -2036,8 +2035,8 @@ RestoreBlockImage(XLogReaderState *record, uint8 block_id, char *page)
 	char	   *ptr;
 	PGAlignedBlock tmp;
 
-	if (block_id > record->record->max_block_id ||
-		!record->record->blocks[block_id].in_use)
+	if (block_id > XLogRecMaxBlockId(record) ||
+		!XLogRecGetBlock(record, block_id)->in_use)
 	{
 		report_invalid_record(record,
 							  "could not restore image at %X/%X with invalid block %d specified",
@@ -2045,7 +2044,7 @@ RestoreBlockImage(XLogReaderState *record, uint8 block_id, char *page)
 							  block_id);
 		return false;
 	}
-	if (!record->record->blocks[block_id].has_image)
+	if (!XLogRecHasBlockImage(record, block_id))
 	{
 		report_invalid_record(record, "could not restore image at %X/%X with invalid state, block %d",
 							  LSN_FORMAT_ARGS(record->ReadRecPtr),
@@ -2053,7 +2052,7 @@ RestoreBlockImage(XLogReaderState *record, uint8 block_id, char *page)
 		return false;
 	}
 
-	bkpb = &record->record->blocks[block_id];
+	bkpb = XLogRecGetBlock(record, block_id);
 	ptr = bkpb->bkp_image;
 
 	if (BKPIMAGE_COMPRESSED(bkpb->bimg_info))
-- 
2.39.3

#2Junwang Zhao
zhjwpku@gmail.com
In reply to: 邱宇航 (#1)
Re: Simplify xlogreader.c with XLogRec* macros

On Tue, Oct 31, 2023 at 5:23 PM 邱宇航 <iamqyh@gmail.com> wrote:

Hello hackers,

Commit 3f1ce97 refactored XLog record access macros, but missed in a few places. I fixed this, and patch is attached.

--
Yuhang Qiu

@@ -2036,8 +2035,8 @@ RestoreBlockImage(XLogReaderState *record, uint8
block_id, char *page)
char *ptr;
PGAlignedBlock tmp;

- if (block_id > record->record->max_block_id ||
- !record->record->blocks[block_id].in_use)
+ if (block_id > XLogRecMaxBlockId(record) ||
+ !XLogRecGetBlock(record, block_id)->in_use)

I thought these can also be rewrite to:

if (!XLogRecHasBlockRef(record, block_id))

--
Regards
Junwang Zhao

#3邱宇航
iamqyh@gmail.com
In reply to: Junwang Zhao (#2)
1 attachment(s)
Re: Simplify xlogreader.c with XLogRec* macros

@@ -2036,8 +2035,8 @@ RestoreBlockImage(XLogReaderState *record, uint8
block_id, char *page)
char *ptr;
PGAlignedBlock tmp;

- if (block_id > record->record->max_block_id ||
- !record->record->blocks[block_id].in_use)
+ if (block_id > XLogRecMaxBlockId(record) ||
+ !XLogRecGetBlock(record, block_id)->in_use)

I thought these can also be rewrite to:

if (!XLogRecHasBlockRef(record, block_id))

Oops, I missed that. New version is attached.

--
Yuhang Qiu

Attachments:

v2-0001-Simplify-xlogreader.c-with-XLogRec-macros.patchapplication/octet-stream; name=v2-0001-Simplify-xlogreader.c-with-XLogRec-macros.patch; x-unix-mode=0644Download
From 35bf5eaccc8d58b593af674f4d16e1dde6560c8e Mon Sep 17 00:00:00 2001
From: Yuhang Qiu <iamqyh@gmail.com>
Date: Tue, 31 Oct 2023 16:57:32 +0800
Subject: [PATCH] Simplify xlogreader.c with XLogRec* macros.

These were missed in commit 3f1ce97.
---
 src/backend/access/transam/xlogreader.c | 14 ++++++--------
 1 file changed, 6 insertions(+), 8 deletions(-)

diff --git a/src/backend/access/transam/xlogreader.c b/src/backend/access/transam/xlogreader.c
index e0baa86bd3..ae3d766eda 100644
--- a/src/backend/access/transam/xlogreader.c
+++ b/src/backend/access/transam/xlogreader.c
@@ -1981,7 +1981,7 @@ XLogRecGetBlockTagExtended(XLogReaderState *record, uint8 block_id,
 	if (!XLogRecHasBlockRef(record, block_id))
 		return false;
 
-	bkpb = &record->record->blocks[block_id];
+	bkpb = XLogRecGetBlock(record, block_id);
 	if (rlocator)
 		*rlocator = bkpb->rlocator;
 	if (forknum)
@@ -2003,11 +2003,10 @@ XLogRecGetBlockData(XLogReaderState *record, uint8 block_id, Size *len)
 {
 	DecodedBkpBlock *bkpb;
 
-	if (block_id > record->record->max_block_id ||
-		!record->record->blocks[block_id].in_use)
+	if (!XLogRecHasBlockRef(record, block_id))
 		return NULL;
 
-	bkpb = &record->record->blocks[block_id];
+	bkpb = XLogRecGetBlock(record, block_id);
 
 	if (!bkpb->has_data)
 	{
@@ -2036,8 +2035,7 @@ RestoreBlockImage(XLogReaderState *record, uint8 block_id, char *page)
 	char	   *ptr;
 	PGAlignedBlock tmp;
 
-	if (block_id > record->record->max_block_id ||
-		!record->record->blocks[block_id].in_use)
+	if (!XLogRecHasBlockRef(record, block_id))
 	{
 		report_invalid_record(record,
 							  "could not restore image at %X/%X with invalid block %d specified",
@@ -2045,7 +2043,7 @@ RestoreBlockImage(XLogReaderState *record, uint8 block_id, char *page)
 							  block_id);
 		return false;
 	}
-	if (!record->record->blocks[block_id].has_image)
+	if (!XLogRecHasBlockImage(record, block_id))
 	{
 		report_invalid_record(record, "could not restore image at %X/%X with invalid state, block %d",
 							  LSN_FORMAT_ARGS(record->ReadRecPtr),
@@ -2053,7 +2051,7 @@ RestoreBlockImage(XLogReaderState *record, uint8 block_id, char *page)
 		return false;
 	}
 
-	bkpb = &record->record->blocks[block_id];
+	bkpb = XLogRecGetBlock(record, block_id);
 	ptr = bkpb->bkp_image;
 
 	if (BKPIMAGE_COMPRESSED(bkpb->bimg_info))
-- 
2.39.3

#4Bharath Rupireddy
bharath.rupireddyforpostgres@gmail.com
In reply to: 邱宇航 (#3)
Re: Simplify xlogreader.c with XLogRec* macros

On Tue, Oct 31, 2023 at 4:12 PM 邱宇航 <iamqyh@gmail.com> wrote:

I thought these can also be rewrite to:

if (!XLogRecHasBlockRef(record, block_id))

Oops, I missed that. New version is attached.

+1. Indeed a reasonable change. The attached v2 patch LGTM.

--
Bharath Rupireddy
PostgreSQL Contributors Team
RDS Open Source Databases
Amazon Web Services: https://aws.amazon.com

#5Bharath Rupireddy
bharath.rupireddyforpostgres@gmail.com
In reply to: Bharath Rupireddy (#4)
Re: Simplify xlogreader.c with XLogRec* macros

On Fri, Nov 3, 2023 at 12:01 AM Bharath Rupireddy
<bharath.rupireddyforpostgres@gmail.com> wrote:

On Tue, Oct 31, 2023 at 4:12 PM 邱宇航 <iamqyh@gmail.com> wrote:

I thought these can also be rewrite to:

if (!XLogRecHasBlockRef(record, block_id))

Oops, I missed that. New version is attached.

+1. Indeed a reasonable change. The attached v2 patch LGTM.

This patch basically uses the macros introduced by commit 3f1ce97 [1]commit 3f1ce973467a0d285961bf2f99b11d06e264e2c1 Author: Thomas Munro <tmunro@postgresql.org> Date: Fri Mar 18 17:45:04 2022 +1300
more extensively. I don't see a CF entry added for this patch. Please
add one if not added.

[1]: commit 3f1ce973467a0d285961bf2f99b11d06e264e2c1 Author: Thomas Munro <tmunro@postgresql.org> Date: Fri Mar 18 17:45:04 2022 +1300
commit 3f1ce973467a0d285961bf2f99b11d06e264e2c1
Author: Thomas Munro <tmunro@postgresql.org>
Date: Fri Mar 18 17:45:04 2022 +1300

Add circular WAL decoding buffer, take II.

--
Bharath Rupireddy
PostgreSQL Contributors Team
RDS Open Source Databases
Amazon Web Services: https://aws.amazon.com