postgresql/src/backend/access/rmgrdesc
Alexander Korotkov 4ed8f0913b Index SLRUs by 64-bit integers rather than by 32-bit integers
We've had repeated bugs in the area of handling SLRU wraparound in the past,
some of which have caused data loss. Switching to an indexing system for SLRUs
that does not wrap around should allow us to get rid of a whole bunch
of problems and improve the overall reliability of the system.

This particular patch however only changes the indexing and doesn't address
the wraparound per se. This is going to be done in the following patches.

Author: Maxim Orlov, Aleksander Alekseev, Alexander Korotkov, Teodor Sigaev
Author: Nikita Glukhov, Pavel Borisov, Yura Sokolov
Reviewed-by: Jacob Champion, Heikki Linnakangas, Alexander Korotkov
Reviewed-by: Japin Li, Pavel Borisov, Tom Lane, Peter Eisentraut, Andres Freund
Reviewed-by: Andrey Borodin, Dilip Kumar, Aleksander Alekseev
Discussion: https://postgr.es/m/CACG%3DezZe1NQSCnfHOr78AtAZxJZeCvxrts0ygrxYwe%3DpyyjVWA%40mail.gmail.com
Discussion: https://postgr.es/m/CAJ7c6TPDOYBYrnCAeyndkBktO0WG2xSdYduTF0nxq%2BvfkmTF5Q%40mail.gmail.com
2023-11-29 01:40:56 +02:00
..
Makefile Show more detail in heapam rmgr descriptions. 2023-04-07 16:08:52 -07:00
README Add rmgrdesc README 2023-10-02 12:18:57 +03:00
brindesc.c Update copyright for 2023 2023-01-02 15:00:37 -05:00
clogdesc.c Index SLRUs by 64-bit integers rather than by 32-bit integers 2023-11-29 01:40:56 +02:00
committsdesc.c Index SLRUs by 64-bit integers rather than by 32-bit integers 2023-11-29 01:40:56 +02:00
dbasedesc.c Pre-beta mechanical code beautification. 2023-05-19 17:24:48 -04:00
genericdesc.c Update copyright for 2023 2023-01-02 15:00:37 -05:00
gindesc.c Pre-beta mechanical code beautification. 2023-05-19 17:24:48 -04:00
gistdesc.c Update copyright for 2023 2023-01-02 15:00:37 -05:00
hashdesc.c Update copyright for 2023 2023-01-02 15:00:37 -05:00
heapdesc.c Tidy-up some appendStringInfo*() usages 2023-10-03 17:09:52 +13:00
logicalmsgdesc.c Update copyright for 2023 2023-01-02 15:00:37 -05:00
meson.build Show more detail in heapam rmgr descriptions. 2023-04-07 16:08:52 -07:00
mxactdesc.c Index SLRUs by 64-bit integers rather than by 32-bit integers 2023-11-29 01:40:56 +02:00
nbtdesc.c Tidy-up some appendStringInfo*() usages 2023-10-03 17:09:52 +13:00
relmapdesc.c Update copyright for 2023 2023-01-02 15:00:37 -05:00
replorigindesc.c Update copyright for 2023 2023-01-02 15:00:37 -05:00
rmgrdesc_utils.c Tidy-up some appendStringInfo*() usages 2023-10-03 17:09:52 +13:00
seqdesc.c Update copyright for 2023 2023-01-02 15:00:37 -05:00
smgrdesc.c Update copyright for 2023 2023-01-02 15:00:37 -05:00
spgdesc.c Update copyright for 2023 2023-01-02 15:00:37 -05:00
standbydesc.c Update copyright for 2023 2023-01-02 15:00:37 -05:00
tblspcdesc.c Update copyright for 2023 2023-01-02 15:00:37 -05:00
xactdesc.c Update copyright for 2023 2023-01-02 15:00:37 -05:00
xlogdesc.c During online checkpoints, insert XLOG_CHECKPOINT_REDO at redo point. 2023-10-19 14:47:29 -04:00

README

src/backend/access/rmgrdesc/README

WAL resource manager description functions
==========================================

For debugging purposes, there is a "description function", or rmgrdesc
function, for each WAL resource manager. The rmgrdesc function parses the WAL
record and prints the contents of the WAL record in a somewhat human-readable
format.

The rmgrdesc functions for all resource managers are gathered in this
directory, because they are also used in the stand-alone pg_waldump program.
They could potentially be used by out-of-tree debugging tools too, although
neither the description functions nor the output format should be considered
part of a stable API

Guidelines for rmgrdesc output format
-------------------------------------

The goal of these guidelines is to avoid gratuitous inconsistencies across
each rmgr, and to allow users to parse desc output strings without too much
difficulty.  This is not an API specification or an interchange format.
(Only heapam and nbtree desc routines follow these guidelines at present, in
any case.)

Record descriptions are similar to JSON style key/value objects.  However,
there is no explicit "string" type/string escaping.  Top-level { } brackets
should be omitted.  For example:

snapshotConflictHorizon: 0, flags: 0x03

Record descriptions may contain variable-length arrays.  For example:

nunused: 5, unused: [1, 2, 3, 4, 5]

Nested objects are supported via { } brackets.  They generally appear inside
variable-length arrays.  For example:

ndeleted: 0, nupdated: 1, deleted: [], updated: [{ off: 45, nptids: 1, ptids: [0] }]

Try to output things in an order that faithfully represents the order of
fields from the underlying physical WAL record struct.  Key names should be
unique (at the same nesting level) to make parsing easy.  It's a good idea if
the number of items in the array appears before the array.

It's okay for individual WAL record types to invent their own conventions.
For example, Heap2's PRUNE record descriptions use a custom array format for
the record's "redirected" field:

... redirected: [1->4, 5->9], dead: [10, 11], unused: [3, 7, 8]

Arguably the desc routine should be using object notation for this instead.
However, there is value in using a custom format when it conveys useful
information about the underlying physical data structures.

This ad-hoc format has the advantage of being close to the format used for
the "dead" and "unused" arrays (which follow the standard desc convention for
page offset number arrays).  It suggests that the "redirected" elements shown
are just pairs of page offset numbers (which is how it really works).

rmgrdesc_utils.c contains some helper functions to print data in this format.