v14-0002-Replace-lstat-with-get_dirent_type-in-xlog.c.patch
application/octet-stream
Filename: v14-0002-Replace-lstat-with-get_dirent_type-in-xlog.c.patch
Type: application/octet-stream
Part: 1
Patch
Format: format-patch
Series: patch v14-0002
Subject: Replace lstat() with get_dirent_type() in xlog.c
| File | + | − |
|---|---|---|
| src/backend/access/transam/xlog.c | 9 | 8 |
From a09666d6ca3d3071b16832033b3deec6a04fd75c Mon Sep 17 00:00:00 2001
From: Bharath Rupireddy <bharath.rupireddyforpostgres@gmail.com>
Date: Wed, 10 Aug 2022 07:12:15 +0000
Subject: [PATCH v14] Replace lstat() with get_dirent_type() in xlog.c
---
src/backend/access/transam/xlog.c | 17 +++++++++--------
1 file changed, 9 insertions(+), 8 deletions(-)
diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c
index 34f0150d1e..2b39b6f3a9 100644
--- a/src/backend/access/transam/xlog.c
+++ b/src/backend/access/transam/xlog.c
@@ -657,8 +657,9 @@ static void PreallocXlogFiles(XLogRecPtr endptr, TimeLineID tli);
static void RemoveTempXlogFiles(void);
static void RemoveOldXlogFiles(XLogSegNo segno, XLogRecPtr lastredoptr,
XLogRecPtr endptr, TimeLineID insertTLI);
-static void RemoveXlogFile(const char *segname, XLogSegNo recycleSegNo,
- XLogSegNo *endlogSegNo, TimeLineID insertTLI);
+static void RemoveXlogFile(const char *segname, const struct dirent *xlde,
+ XLogSegNo recycleSegNo, XLogSegNo *endlogSegNo,
+ TimeLineID insertTLI);
static void UpdateLastRemovedPtr(char *filename);
static void ValidateXLOGDirectoryStructure(void);
static void CleanupBackupHistory(void);
@@ -3597,7 +3598,7 @@ RemoveOldXlogFiles(XLogSegNo segno, XLogRecPtr lastredoptr, XLogRecPtr endptr,
/* Update the last removed location in shared memory first */
UpdateLastRemovedPtr(xlde->d_name);
- RemoveXlogFile(xlde->d_name, recycleSegNo, &endlogSegNo,
+ RemoveXlogFile(xlde->d_name, xlde, recycleSegNo, &endlogSegNo,
insertTLI);
}
}
@@ -3670,7 +3671,7 @@ RemoveNonParentXlogFiles(XLogRecPtr switchpoint, TimeLineID newTLI)
* - but seems safer to let them be archived and removed later.
*/
if (!XLogArchiveIsReady(xlde->d_name))
- RemoveXlogFile(xlde->d_name, recycleSegNo, &endLogSegNo,
+ RemoveXlogFile(xlde->d_name, xlde, recycleSegNo, &endLogSegNo,
newTLI);
}
}
@@ -3692,14 +3693,14 @@ RemoveNonParentXlogFiles(XLogRecPtr switchpoint, TimeLineID newTLI)
* should be used for this timeline.
*/
static void
-RemoveXlogFile(const char *segname, XLogSegNo recycleSegNo,
- XLogSegNo *endlogSegNo, TimeLineID insertTLI)
+RemoveXlogFile(const char *segname, const struct dirent *xlde,
+ XLogSegNo recycleSegNo, XLogSegNo *endlogSegNo,
+ TimeLineID insertTLI)
{
char path[MAXPGPATH];
#ifdef WIN32
char newpath[MAXPGPATH];
#endif
- struct stat statbuf;
snprintf(path, MAXPGPATH, XLOGDIR "/%s", segname);
@@ -3711,7 +3712,7 @@ RemoveXlogFile(const char *segname, XLogSegNo recycleSegNo,
if (wal_recycle &&
*endlogSegNo <= recycleSegNo &&
XLogCtl->InstallXLogFileSegmentActive && /* callee rechecks this */
- lstat(path, &statbuf) == 0 && S_ISREG(statbuf.st_mode) &&
+ get_dirent_type(path, xlde, false, LOG) != PGFILETYPE_REG &&
InstallXLogFileSegment(endlogSegNo, path,
true, recycleSegNo, insertTLI))
{
--
2.34.1