From b27e48213fbc1d0ff698be4ae5a0eb3e161d9172 Mon Sep 17 00:00:00 2001 From: Alexander Korotkov Date: Sun, 14 Dec 2025 17:18:32 +0200 Subject: [PATCH] Refactor WaitLSNType enum to use a macro for type count Change WAIT_LSN_TYPE_COUNT from an enum sentinel to a macro definition, in a similar way to IOObject, IOContext, and BackendType enums. Remove explicit enum value assignments well. Author: Xuneng Zhou --- src/backend/access/transam/xlogwait.c | 10 +++++----- src/include/access/xlogwait.h | 7 ++++--- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/src/backend/access/transam/xlogwait.c b/src/backend/access/transam/xlogwait.c index 84613fc39c7..6109381c0f0 100644 --- a/src/backend/access/transam/xlogwait.c +++ b/src/backend/access/transam/xlogwait.c @@ -126,7 +126,7 @@ updateMinWaitedLSN(WaitLSNType lsnType) XLogRecPtr minWaitedLSN = PG_UINT64_MAX; int i = (int) lsnType; - Assert(i >= 0 && i < (int) WAIT_LSN_TYPE_COUNT); + Assert(i >= 0 && i < WAIT_LSN_TYPE_COUNT); if (!pairingheap_is_empty(&waitLSNState->waitersHeap[i])) { @@ -147,7 +147,7 @@ addLSNWaiter(XLogRecPtr lsn, WaitLSNType lsnType) WaitLSNProcInfo *procInfo = &waitLSNState->procInfos[MyProcNumber]; int i = (int) lsnType; - Assert(i >= 0 && i < (int) WAIT_LSN_TYPE_COUNT); + Assert(i >= 0 && i < WAIT_LSN_TYPE_COUNT); LWLockAcquire(WaitLSNLock, LW_EXCLUSIVE); @@ -172,7 +172,7 @@ deleteLSNWaiter(WaitLSNType lsnType) WaitLSNProcInfo *procInfo = &waitLSNState->procInfos[MyProcNumber]; int i = (int) lsnType; - Assert(i >= 0 && i < (int) WAIT_LSN_TYPE_COUNT); + Assert(i >= 0 && i < WAIT_LSN_TYPE_COUNT); LWLockAcquire(WaitLSNLock, LW_EXCLUSIVE); @@ -213,7 +213,7 @@ wakeupWaiters(WaitLSNType lsnType, XLogRecPtr currentLSN) int numWakeUpProcs; int i = (int) lsnType; - Assert(i >= 0 && i < (int) WAIT_LSN_TYPE_COUNT); + Assert(i >= 0 && i < WAIT_LSN_TYPE_COUNT); do { @@ -270,7 +270,7 @@ WaitLSNWakeup(WaitLSNType lsnType, XLogRecPtr currentLSN) { int i = (int) lsnType; - Assert(i >= 0 && i < (int) WAIT_LSN_TYPE_COUNT); + Assert(i >= 0 && i < WAIT_LSN_TYPE_COUNT); /* * Fast path check. Skip if currentLSN is InvalidXLogRecPtr, which means diff --git a/src/include/access/xlogwait.h b/src/include/access/xlogwait.h index e607441d618..3e8fcbd9177 100644 --- a/src/include/access/xlogwait.h +++ b/src/include/access/xlogwait.h @@ -35,11 +35,12 @@ typedef enum */ typedef enum WaitLSNType { - WAIT_LSN_TYPE_REPLAY = 0, /* Waiting for replay on standby */ - WAIT_LSN_TYPE_FLUSH = 1, /* Waiting for flush on primary */ - WAIT_LSN_TYPE_COUNT = 2 + WAIT_LSN_TYPE_REPLAY, /* Waiting for replay on standby */ + WAIT_LSN_TYPE_FLUSH, /* Waiting for flush on primary */ } WaitLSNType; +#define WAIT_LSN_TYPE_COUNT (WAIT_LSN_TYPE_FLUSH + 1) + /* * WaitLSNProcInfo - the shared memory structure representing information * about the single process, which may wait for LSN operations. An item of -- 2.39.5