v2-0001-Use-LW_SHARED-in-walsummarizer.c-for-WALSummarize.patch

application/octet-stream

Filename: v2-0001-Use-LW_SHARED-in-walsummarizer.c-for-WALSummarize.patch
Type: application/octet-stream
Part: 0
Message: Re: Use LW_SHARED in WakeupWalSummarizer() for WALSummarizerLock lock

Patch

Format: format-patch
Series: patch v2-0001
Subject: Use LW_SHARED in walsummarizer.c for WALSummarizerLock lock where possible.
File+
src/backend/postmaster/walsummarizer.c 2 2
From 13a736ad884ce7713d0ffe677a8f9a0d0ef01575 Mon Sep 17 00:00:00 2001
From: Masahiko Sawada <sawada.mshk@gmail.com>
Date: Mon, 25 Aug 2025 15:36:20 -0700
Subject: [PATCH v2] Use LW_SHARED in walsummarizer.c for WALSummarizerLock
 lock where possible.

Previously, we used LW_EXCLUSIVE in several places despite only reading
WalSummarizerCtl fields. This patch reduces the lock level to LW_SHARED
where we are only reading the shared fields.

Backpatch to 17, where wal summarization was introduced.

Reviewed-by: Nathan Bossart <nathandbossart@gmail.com>
Discussion: https://postgr.es/m/CAD21AoDdKhf_9oriEYxY-JCdF+Oe_muhca3pcdkMEdBMzyHyKw@mail.gmail.com
Backpatch-through: 17
---
 src/backend/postmaster/walsummarizer.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/backend/postmaster/walsummarizer.c b/src/backend/postmaster/walsummarizer.c
index 777c9a8d555..e1f142f20c7 100644
--- a/src/backend/postmaster/walsummarizer.c
+++ b/src/backend/postmaster/walsummarizer.c
@@ -644,7 +644,7 @@ WakeupWalSummarizer(void)
 	if (WalSummarizerCtl == NULL)
 		return;
 
-	LWLockAcquire(WALSummarizerLock, LW_EXCLUSIVE);
+	LWLockAcquire(WALSummarizerLock, LW_SHARED);
 	pgprocno = WalSummarizerCtl->summarizer_pgprocno;
 	LWLockRelease(WALSummarizerLock);
 
@@ -685,7 +685,7 @@ WaitForWalSummarization(XLogRecPtr lsn)
 		/*
 		 * If the LSN summarized on disk has reached the target value, stop.
 		 */
-		LWLockAcquire(WALSummarizerLock, LW_EXCLUSIVE);
+		LWLockAcquire(WALSummarizerLock, LW_SHARED);
 		summarized_lsn = WalSummarizerCtl->summarized_lsn;
 		pending_lsn = WalSummarizerCtl->pending_lsn;
 		LWLockRelease(WALSummarizerLock);
-- 
2.47.3