v18-0002-Address-comments-from-Chao-Amit-and-Kuroda.patch
application/octet-stream
Filename: v18-0002-Address-comments-from-Chao-Amit-and-Kuroda.patch
Type: application/octet-stream
Part: 1
Patch
Same data as JSON:
GET /api/v1/attachments/:id/patch
the parsed metadata as JSON — format, series position, per-file stats; never the diff bytes.
API reference →
Format: format-patch
Series: patch v18-0002
Subject: Address comments from Chao, Amit and Kuroda
| File | + | − |
|---|---|---|
| src/bin/pg_basebackup/pg_createsubscriber.c | 42 | 30 |
From 2a662b72c6acd469174250aaca6a7d60da856037 Mon Sep 17 00:00:00 2001
From: Hayato Kuroda <kuroda.hayato@fujitsu.com>
Date: Tue, 24 Mar 2026 15:43:41 +0900
Subject: [PATCH v18 2/2] Address comments from Chao, Amit and Kuroda
---
src/bin/pg_basebackup/pg_createsubscriber.c | 72 ++++++++++++---------
1 file changed, 42 insertions(+), 30 deletions(-)
diff --git a/src/bin/pg_basebackup/pg_createsubscriber.c b/src/bin/pg_basebackup/pg_createsubscriber.c
index 63ffd337613..1f6247a8cd8 100644
--- a/src/bin/pg_basebackup/pg_createsubscriber.c
+++ b/src/bin/pg_basebackup/pg_createsubscriber.c
@@ -160,8 +160,9 @@ static void report_createsub_log_v(enum pg_log_level level, enum pg_log_part par
pg_noreturn static void report_createsub_fatal(const char *pg_restrict fmt,...)
pg_attribute_printf(1, 2);
static void internal_log_file_write(enum pg_log_level level,
+ enum pg_log_part part,
const char *pg_restrict fmt, va_list args)
- pg_attribute_printf(2, 0);
+ pg_attribute_printf(3, 0);
#define WAIT_INTERVAL 1 /* 1 second */
@@ -209,7 +210,7 @@ report_createsub_log_v(enum pg_log_level level, enum pg_log_part part,
va_list arg_cpy;
va_copy(arg_cpy, args);
- internal_log_file_write(level, fmt, arg_cpy);
+ internal_log_file_write(level, part, fmt, arg_cpy);
va_end(arg_cpy);
/* Restore errno in case internal_log_file_write changed it */
errno = save_errno;
@@ -348,13 +349,6 @@ cleanup_objects_atexit(void)
if (standby_running)
stop_standby_server(subscriber_dir);
-
- if (internal_log_file_fp != NULL)
- {
- if (fclose(internal_log_file_fp) != 0)
- report_createsub_fatal("could not close %s/%s.log: %m", logdir, INTERNAL_LOG_FILE_NAME);
- internal_log_file_fp = NULL;
- }
}
static void
@@ -1081,8 +1075,8 @@ server_is_in_recovery(PGconn *conn)
}
static void
-internal_log_file_write(enum pg_log_level level, const char *pg_restrict fmt,
- va_list args)
+internal_log_file_write(enum pg_log_level level, enum pg_log_part part,
+ const char *pg_restrict fmt, va_list args)
{
Assert(internal_log_file_fp);
@@ -1090,6 +1084,30 @@ internal_log_file_write(enum pg_log_level level, const char *pg_restrict fmt,
if (level < __pg_log_level)
return;
+ /* Append prefix based on the log part and log level */
+ switch (part)
+ {
+ case PG_LOG_PRIMARY:
+ switch (level)
+ {
+ case PG_LOG_ERROR:
+ fprintf(internal_log_file_fp, _("error: "));
+ break;
+ case PG_LOG_WARNING:
+ fprintf(internal_log_file_fp, _("warning: "));
+ break;
+ default:
+ break;
+ }
+ break;
+ case PG_LOG_DETAIL:
+ fprintf(internal_log_file_fp, _("detail: "));
+ break;
+ case PG_LOG_HINT:
+ fprintf(internal_log_file_fp, _("hint: "));
+ break;
+ }
+
vfprintf(internal_log_file_fp, _(fmt), args);
fprintf(internal_log_file_fp, "\n");
@@ -1098,28 +1116,15 @@ internal_log_file_write(enum pg_log_level level, const char *pg_restrict fmt,
/*
* Open a new logfile with proper permissions.
- * From src/backend/postmaster/syslogger.c
*/
static FILE *
logfile_open(const char *filename, const char *mode)
{
FILE *fh;
- mode_t oumask;
- oumask = umask((mode_t) ((~(S_IRUSR | S_IWUSR)) & (S_IRWXU | S_IRWXG | S_IRWXO)));
fh = fopen(filename, mode);
- umask(oumask);
- if (fh)
- {
- setvbuf(fh, NULL, PG_IOLBF, 0);
-
-#ifdef WIN32
- /* use CRLF line endings on Windows */
- _setmode(_fileno(fh), _O_TEXT);
-#endif
- }
- else
+ if (!fh)
report_createsub_fatal("could not open log file \"%s\": %m",
filename);
@@ -1151,8 +1156,8 @@ make_output_dirs(const char *log_basedir)
len = snprintf(logdir, MAXPGPATH, "%s/%s", log_basedir, timestamp);
if (len >= MAXPGPATH)
- report_createsub_fatal("directory path for log files, %s/%s, is too long",
- logdir, timestamp);
+ report_createsub_fatal("directory path for log files \"%s/%s\" is too long",
+ log_basedir, timestamp);
/* Create base directory (ignore if exists) */
if (mkdir(log_basedir, pg_dir_create_mode) < 0 && errno != EEXIST)
@@ -2756,10 +2761,20 @@ main(int argc, char **argv)
exit(1);
}
+ /* Rudimentary check for a data directory */
+ check_data_directory(subscriber_dir);
+
if (opt.log_dir != NULL)
{
char *internal_log_file;
+ /* Set mask based on the PGDATA permissions */
+ if (!GetDataDirectoryCreatePerm(subscriber_dir))
+ report_createsub_fatal("could not read permissions of directory \"%s\": %m",
+ subscriber_dir);
+
+ umask(pg_mode_mask);
+
make_output_dirs(opt.log_dir);
internal_log_file = psprintf("%s/%s.log", logdir,
INTERNAL_LOG_FILE_NAME);
@@ -2875,9 +2890,6 @@ main(int argc, char **argv)
pg_ctl_path = get_exec_path(argv[0], "pg_ctl");
pg_resetwal_path = get_exec_path(argv[0], "pg_resetwal");
- /* Rudimentary check for a data directory */
- check_data_directory(subscriber_dir);
-
dbinfos.two_phase = opt.two_phase;
/*
--
2.47.3