[PATCH] Renumber confusing value for GUC_UNIT_BYTE

From: Justin Pryzby <pryzby(at)telsasoft(dot)com>
To: Beena Emerson <memissemerson(at)gmail(dot)com>
Cc: Andres Freund <andres(at)anarazel(dot)de>, pgsql-hackers(at)postgresql(dot)org
Subject: [PATCH] Renumber confusing value for GUC_UNIT_BYTE
Date: 2022-07-20 14:52:21
Message-ID: 20220720145220.GJ12702@telsasoft.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-committers pgsql-hackers

The GUC units are currently defined like:

#define GUC_UNIT_KB 0x1000 /* value is in kilobytes */
#define GUC_UNIT_BLOCKS 0x2000 /* value is in blocks */
#define GUC_UNIT_XBLOCKS 0x3000 /* value is in xlog blocks */
#define GUC_UNIT_MB 0x4000 /* value is in megabytes */
#define GUC_UNIT_BYTE 0x8000 /* value is in bytes */
#define GUC_UNIT_MEMORY 0xF000 /* mask for size-related units */

#define GUC_UNIT_MS 0x10000 /* value is in milliseconds */
#define GUC_UNIT_S 0x20000 /* value is in seconds */
#define GUC_UNIT_MIN 0x30000 /* value is in minutes */
#define GUC_UNIT_TIME 0xF0000 /* mask for time-related units */

0x3000 and 0x30000 seemed wrong, since they're a combination of other flags
rather than being an independant power of two.

But actually, these aren't flags: they're tested in a "case" statement for
equality, not in a bitwise & test.

So the outlier is actually 0x8000, added at:
|commit 6e7baa322773ff8c79d4d8883c99fdeff5bfa679
|Author: Andres Freund <andres(at)anarazel(dot)de>
|Date: Tue Sep 12 12:13:12 2017 -0700
|
| Introduce BYTES unit for GUCs.

It looks like that originated here:

https://www.postgresql.org/message-id/CAOG9ApEu8bXVwBxkOO9J7ZpM76TASK_vFMEEiCEjwhMmSLiaqQ%40mail.gmail.com

commit 162e4838103e7957cccfe7868fc28397b55ca1d7
Author: Justin Pryzby <pryzbyj(at)telsasoft(dot)com>
Date: Wed Jul 20 09:27:24 2022 -0500

Renumber confusing value for GUC_UNIT_BYTE

It had a power-of-two value, which looks right, and causes the other values
which aren't powers-of-two to look wrong. But this is tested for equality and
not a bitwise test.

See also:
6e7baa322773ff8c79d4d8883c99fdeff5bfa679
https://www.postgresql.org/message-id/CAOG9ApEu8bXVwBxkOO9J7ZpM76TASK_vFMEEiCEjwhMmSLiaqQ%40mail.gmail.com

diff --git a/src/include/utils/guc.h b/src/include/utils/guc.h
index 4d0920c42e2..be928fac881 100644
--- a/src/include/utils/guc.h
+++ b/src/include/utils/guc.h
@@ -219,11 +219,12 @@ typedef enum
#define GUC_DISALLOW_IN_AUTO_FILE 0x0800 /* can't set in
* PG_AUTOCONF_FILENAME */

+/* GUC_UNIT_* are not flags - they're tested for equality */
#define GUC_UNIT_KB 0x1000 /* value is in kilobytes */
#define GUC_UNIT_BLOCKS 0x2000 /* value is in blocks */
#define GUC_UNIT_XBLOCKS 0x3000 /* value is in xlog blocks */
#define GUC_UNIT_MB 0x4000 /* value is in megabytes */
-#define GUC_UNIT_BYTE 0x8000 /* value is in bytes */
+#define GUC_UNIT_BYTE 0x5000 /* value is in bytes */
#define GUC_UNIT_MEMORY 0xF000 /* mask for size-related units */

#define GUC_UNIT_MS 0x10000 /* value is in milliseconds */

Responses

Browse pgsql-committers by date

  From Date Subject
Next Message Andres Freund 2022-07-20 15:05:00 Re: pgsql: Default to hidden visibility for extension libraries where possi
Previous Message Tom Lane 2022-07-20 14:20:04 Re: pgsql: Default to hidden visibility for extension libraries where possi

Browse pgsql-hackers by date

  From Date Subject
Next Message Andres Freund 2022-07-20 15:05:00 Re: pgsql: Default to hidden visibility for extension libraries where possi
Previous Message Fujii Masao 2022-07-20 14:50:44 Remove useless arguments in ReadCheckpointRecord().