Simplify xlogreader.c with XLogRec* macros
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
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
@@ -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
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
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