From de0a000dafc2e66ce2e39282d3aa1c704fe0390e Mon Sep 17 00:00:00 2001 From: Konstantin Knizhnik Date: Mon, 11 Nov 2024 21:04:12 +0200 Subject: [PATCH] Do not wallog AUX files at replica (#515) Co-authored-by: Konstantin Knizhnik --- src/backend/access/heap/rewriteheap.c | 5 +++++ src/backend/replication/logical/snapbuild.c | 20 ++++++++++++++------ src/backend/replication/slot.c | 4 ++-- 3 files changed, 21 insertions(+), 8 deletions(-) diff --git a/src/backend/access/heap/rewriteheap.c b/src/backend/access/heap/rewriteheap.c index 3fbc091ff70..da04027ee1e 100644 --- a/src/backend/access/heap/rewriteheap.c +++ b/src/backend/access/heap/rewriteheap.c @@ -793,6 +793,11 @@ static void wallog_mapping_file(char const* path, int fd) { char prefix[MAXPGPATH]; + + /* Do not wallog AUX file at replica */ + if (!XLogInsertAllowed()) + return; + snprintf(prefix, sizeof(prefix), "neon-file:%s", path); if (fd < 0) { diff --git a/src/backend/replication/logical/snapbuild.c b/src/backend/replication/logical/snapbuild.c index e39aa0b2a28..7e34db85e77 100644 --- a/src/backend/replication/logical/snapbuild.c +++ b/src/backend/replication/logical/snapbuild.c @@ -1737,9 +1737,13 @@ SnapBuildSerialize(SnapBuild *builder, XLogRecPtr lsn) (errcode_for_file_access(), errmsg("could not open file \"%s\": %m", tmppath))); - /* NEON specific: persist snapshot in storage using logical message */ - snprintf(prefix, sizeof(prefix), "neon-file:%s", path); - XLogFlush(LogLogicalMessage(prefix, (char*)ondisk, needed_length, false)); + /* Do not wallog AUX file at replica */ + if (XLogInsertAllowed()) + { + /* NEON specific: persist snapshot in storage using logical message */ + snprintf(prefix, sizeof(prefix), "neon-file:%s", path); + XLogFlush(LogLogicalMessage(prefix, (char*)ondisk, needed_length, false)); + } errno = 0; pgstat_report_wait_start(WAIT_EVENT_SNAPBUILD_WRITE); @@ -2106,9 +2110,13 @@ CheckPointSnapBuild(void) { elog(DEBUG1, "removing snapbuild snapshot %s", path); - /* NEON specific: delete file from storage using logical message */ - snprintf(prefix, sizeof(prefix), "neon-file:%s", path); - XLogFlush(LogLogicalMessage(prefix, NULL, 0, false)); + /* Do not wallog AUX file at replica */ + if (XLogInsertAllowed()) + { + /* NEON specific: delete file from storage using logical message */ + snprintf(prefix, sizeof(prefix), "neon-file:%s", path); + XLogFlush(LogLogicalMessage(prefix, NULL, 0, false)); + } /* * It's not particularly harmful, though strange, if we can't diff --git a/src/backend/replication/slot.c b/src/backend/replication/slot.c index 73effda08a6..afb1af987a7 100644 --- a/src/backend/replication/slot.c +++ b/src/backend/replication/slot.c @@ -606,7 +606,7 @@ ReplicationSlotDropPtr(ReplicationSlot *slot) sprintf(path, "pg_replslot/%s", NameStr(slot->data.name)); sprintf(tmppath, "pg_replslot/%s.tmp", NameStr(slot->data.name)); - if (SlotIsLogical(slot)) + if (SlotIsLogical(slot) && XLogInsertAllowed()) { /* NEON specific: delete slot from storage using logical message */ char prefix[MAXPGPATH]; @@ -1579,7 +1579,7 @@ SaveSlotToPath(ReplicationSlot *slot, const char *dir, int elevel) SnapBuildOnDiskChecksummedSize); FIN_CRC32C(cp.checksum); - if (SlotIsLogical(slot) && cp.slotdata.restart_lsn != InvalidXLogRecPtr) + if (SlotIsLogical(slot) && XLogInsertAllowed() && cp.slotdata.restart_lsn != InvalidXLogRecPtr) { /* NEON specific: persist slot in storage using logical message */ char prefix[MAXPGPATH];