Improve comments in slru.{c,h} about segment name format
authorMichael Paquier <[email protected]>
Tue, 23 Jul 2024 07:54:51 +0000 (16:54 +0900)
committerMichael Paquier <[email protected]>
Tue, 23 Jul 2024 07:54:51 +0000 (16:54 +0900)
slru.h described incorrectly how SLRU segment names are formatted
depending on the segment number and if long or short segment names are
used.  This commit closes the gap with a better description, fitting
with the reality.

Reported-by: Noah Misch
Author: Aleksander Alekseev
Discussion: https://postgr.es/m/20240626002747[email protected]
Backpatch-through: 17

src/backend/access/transam/slru.c
src/include/access/slru.h

index 77b05cc0a746db79b5f8968880bb673b83ecbb4c..248aa1a6553b6106013b4f4391e65a9914900d5b 100644 (file)
 #include "storage/shmem.h"
 #include "utils/guc_hooks.h"
 
+/*
+ * Converts segment number to the filename of the segment.
+ *
+ * "path" should point to a buffer at least MAXPGPATH characters long.
+ *
+ * If ctl->long_segment_names is true, segno can be in the range [0, 2^60-1].
+ * The resulting file name is made of 15 characters, e.g. dir/123456789ABCDEF.
+ *
+ * If ctl->long_segment_names is false, segno can be in the range [0, 2^24-1].
+ * The resulting file name is made of 4 to 6 characters, as of:
+ *
+ *  dir/1234   for [0, 2^16-1]
+ *  dir/12345  for [2^16, 2^20-1]
+ *  dir/123456 for [2^20, 2^24-1]
+ */
 static inline int
 SlruFileName(SlruCtl ctl, char *path, int64 segno)
 {
index 8a8d1918733f45b26d72bb95882fd67bdbafcd59..97e612cd100b983d7ada268a96698dc4840de76a 100644 (file)
@@ -134,10 +134,9 @@ typedef struct SlruCtlData
    bits16      bank_mask;
 
    /*
-    * If true, use long segment filenames formed from lower 48 bits of the
-    * segment number, e.g. pg_xact/000000001234. Otherwise, use short
-    * filenames formed from lower 16 bits of the segment number e.g.
-    * pg_xact/1234.
+    * If true, use long segment file names.  Otherwise, use short file names.
+    *
+    * For details about the file name format, see SlruFileName().
     */
    bool        long_segment_names;