Thread

  1. [PATCH] Add missing XLogEnsureRecordSpace() call in LogLogicalMessage

    Henson Choi <assam258@gmail.com> — 2025-12-30T01:21:26Z

    Hi hackers,
    
    LogLogicalMessage() in src/backend/replication/logical/message.c is
    missing the XLogEnsureRecordSpace() call that appears before every
    other XLogBeginInsert() in the codebase.
    
    While this currently works because the 3 rdatas used here fit within
    the default allocation of MAX_GENERIC_XLOG_RDATAS (20), this pattern
    inconsistency could cause issues if:
    
    1. MAX_GENERIC_XLOG_RDATAS is reduced in the future
    2. This function is modified to use more rdatas
    3. Someone copies this code without realizing the omission
    
    All other WAL insertion code follows the pattern of calling
    XLogEnsureRecordSpace() before XLogBeginInsert(). This patch adds
    the missing call for consistency.
    
     XLogRecPtr
     LogLogicalMessage(const char *prefix, const char *message, size_t size,
                       bool transactional, bool flush)
     {
         ...
         xlrec.prefix_size = strlen(prefix) + 1;
         xlrec.message_size = size;
    
    +    XLogEnsureRecordSpace(0, 3);
         XLogBeginInsert();
         XLogRegisterData(&xlrec, SizeOfLogicalMessage);
         XLogRegisterData(prefix, xlrec.prefix_size);
         XLogRegisterData(message, size);
         ...
     }
    
    Best regards,
    Henson