From: Noah Misch Date: Sun, 1 Oct 2023 19:20:55 +0000 (-0700) Subject: Correct assertion and comments about XLogRecordMaxSize. X-Git-Tag: REL_17_BETA1~1774 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=e1f95ec8cf6ea75d90905b2c746e2e1e9f3c9fc1;p=thirdparty%2Fpostgresql.git Correct assertion and comments about XLogRecordMaxSize. The largest allocation, of xl_tot_len+8192, is in allocate_recordbuf(). Discussion: https://postgr.es/m/20230812211327.GB2326466@rfd.leadboat.com --- diff --git a/src/backend/access/transam/xloginsert.c b/src/backend/access/transam/xloginsert.c index 258cbd70355..588626424e6 100644 --- a/src/backend/access/transam/xloginsert.c +++ b/src/backend/access/transam/xloginsert.c @@ -897,8 +897,7 @@ XLogRecordAssemble(RmgrId rmid, uint8 info, * * XLogReader machinery is only able to handle records up to a certain * size (ignoring machine resource limitations), so make sure that we will - * not emit records larger than the sizes advertised to be supported. This - * cap is based on DecodeXLogRecordRequiredSpace(). + * not emit records larger than the sizes advertised to be supported. */ if (total_len > XLogRecordMaxSize) ereport(ERROR, @@ -1339,10 +1338,12 @@ InitXLogInsert(void) /* * Check that any records assembled can be decoded. This is capped based - * on what XLogReader would require at its maximum bound. This code path + * on what XLogReader would require at its maximum bound. The XLOG_BLCKSZ + * addend covers the larger allocate_recordbuf() demand. This code path * is called once per backend, more than enough for this check. */ - size_t max_required = DecodeXLogRecordRequiredSpace(XLogRecordMaxSize); + size_t max_required = + DecodeXLogRecordRequiredSpace(XLogRecordMaxSize + XLOG_BLCKSZ); Assert(AllocSizeIsValid(max_required)); #endif diff --git a/src/include/access/xlogrecord.h b/src/include/access/xlogrecord.h index f355e08e1d3..ec9a3c802a3 100644 --- a/src/include/access/xlogrecord.h +++ b/src/include/access/xlogrecord.h @@ -68,8 +68,8 @@ typedef struct XLogRecord * in length if we ignore any allocation overhead of the XLogReader. * * To accommodate some overhead, this value allows for 4M of allocation - * overhead, that should be plenty enough for what - * DecodeXLogRecordRequiredSpace() expects as extra. + * overhead, that should be plenty enough for what the XLogReader + * infrastructure expects as extra. */ #define XLogRecordMaxSize (1020 * 1024 * 1024)