Use INT_MAX for wal size related gucs's max value

Started by Junwang Zhaoalmost 3 years ago3 messageshackers
Jump to latest
#1Junwang Zhao
zhjwpku@gmail.com

The wal size related gucs use the MB unit, so we should just use
INT_MAX instead of MAX_KILOBYTES as the max value.

--
Regards
Junwang Zhao

Attachments:

0001-use-INT_MAX-for-wal-size-related-max-value.patchapplication/octet-stream; name=0001-use-INT_MAX-for-wal-size-related-max-value.patchDownload+4-5
#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: Junwang Zhao (#1)
Re: Use INT_MAX for wal size related gucs's max value

Junwang Zhao <zhjwpku@gmail.com> writes:

The wal size related gucs use the MB unit, so we should just use
INT_MAX instead of MAX_KILOBYTES as the max value.

The point of MAX_KILOBYTES is to avoid overflow when the value
is multiplied by 1kB. It does seem like that might not be
appropriate for these values, but that doesn't mean that we can
blithely go to INT_MAX. Have you chased down how they are used?

regards, tom lane

#3Junwang Zhao
zhjwpku@gmail.com
In reply to: Tom Lane (#2)
Re: Use INT_MAX for wal size related gucs's max value

These gucs are always used with ConvertToXSegs, to calculate the count of
wal segments(see the following code snip), and wal_segment_size can be
configured by initdb as a value of a power of 2 between 1 and 1024 (megabytes),
so I think INT_MAX should be safe here.

/*
* Convert values of GUCs measured in megabytes to equiv. segment count.
* Rounds down.
*/
#define ConvertToXSegs(x, segsize) XLogMBVarToSegs((x), (segsize))

/*
* Convert values of GUCs measured in megabytes to equiv. segment count.
* Rounds down.
*/
#define XLogMBVarToSegs(mbvar, wal_segsz_bytes) \
((mbvar) / ((wal_segsz_bytes) / (1024 * 1024)))

On Wed, Apr 19, 2023 at 11:33 AM Tom Lane <tgl@sss.pgh.pa.us> wrote:

Junwang Zhao <zhjwpku@gmail.com> writes:

The wal size related gucs use the MB unit, so we should just use
INT_MAX instead of MAX_KILOBYTES as the max value.

The point of MAX_KILOBYTES is to avoid overflow when the value
is multiplied by 1kB. It does seem like that might not be
appropriate for these values, but that doesn't mean that we can
blithely go to INT_MAX. Have you chased down how they are used?

regards, tom lane

--
Regards
Junwang Zhao