Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit c03c2ea

Browse files
Refine the guidelines for rmgrdesc authors.
Clarify the goals of the recently added guidelines for rmgrdesc authors: to avoid gratuitous inconsistencies across resource managers, and to make it reasonably easy to write a reusable custom parser. Beyond that, the guidelines leave rmgrdesc authors with a significant amount of leeway. This even includes the leeway to invent custom conventions (in cases where it's warranted). Follow-up to commit 7d8219a. Author: Peter Geoghegan <[email protected]> Reviewed-By: Melanie Plageman <[email protected]> Discussion: https://postgr.es/m/CAH2-WzkbYuvwYKm-Y-72QEh6SPMQcAo9uONv+mR3bMGcu9E_Cg@mail.gmail.com
1 parent 96149a1 commit c03c2ea

File tree

2 files changed

+44
-20
lines changed

2 files changed

+44
-20
lines changed

src/backend/access/rmgrdesc/rmgrdesc_utils.c

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -16,26 +16,6 @@
1616
#include "access/rmgrdesc_utils.h"
1717
#include "storage/off.h"
1818

19-
/*
20-
* Guidelines for formatting desc functions:
21-
*
22-
* member1_name: member1_value, member2_name: member2_value
23-
*
24-
* If the value is a list, please use:
25-
*
26-
* member3_name: [ member3_list_value1, member3_list_value2 ]
27-
*
28-
* The first item appended to the string should not be prepended by any spaces
29-
* or comma, however all subsequent appends to the string are responsible for
30-
* prepending themselves with a comma followed by a space.
31-
*
32-
* Flags should be in ALL CAPS.
33-
*
34-
* For lists/arrays of items, the number of those items should be listed at
35-
* the beginning with all of the other numbers.
36-
*
37-
* Composite objects in a list should be surrounded with { }.
38-
*/
3919
void
4020
array_desc(StringInfo buf, void *array, size_t elem_size, int count,
4121
void (*elem_desc) (StringInfo buf, void *elem, void *data),

src/include/access/rmgrdesc_utils.h

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,50 @@
1212
#ifndef RMGRDESC_UTILS_H_
1313
#define RMGRDESC_UTILS_H_
1414

15+
/*
16+
* Guidelines for rmgrdesc routine authors:
17+
*
18+
* The goal of these guidelines is to avoid gratuitous inconsistencies across
19+
* each rmgr, and to allow users to parse desc output strings without too much
20+
* difficulty. This is not an API specification or an interchange format.
21+
* (Only heapam and nbtree desc routines follow these guidelines at present,
22+
* in any case.)
23+
*
24+
* Record descriptions are similar to JSON style key/value objects. However,
25+
* there is no explicit "string" type/string escaping. Top-level { } brackets
26+
* should be omitted. For example:
27+
*
28+
* snapshotConflictHorizon: 0, flags: 0x03
29+
*
30+
* Record descriptions may contain variable-length arrays. For example:
31+
*
32+
* nunused: 5, unused: [1, 2, 3, 4, 5]
33+
*
34+
* Nested objects are supported via { } brackets. They generally appear
35+
* inside variable-length arrays. For example:
36+
*
37+
* ndeleted: 0, nupdated: 1, deleted: [], updated: [{ off: 45, nptids: 1, ptids: [0] }]
38+
*
39+
* Try to output things in an order that faithfully represents the order of
40+
* fields from the underlying physical WAL record struct. Key names should be
41+
* unique (at the same nesting level) to make parsing easy. It's a good idea
42+
* if the number of items in the array appears before the array.
43+
*
44+
* It's okay for individual WAL record types to invent their own conventions.
45+
* For example, Heap2's PRUNE record descriptions use a custom array format
46+
* for the record's "redirected" field:
47+
*
48+
* ... redirected: [1->4, 5->9], dead: [10, 11], unused: [3, 7, 8]
49+
*
50+
* Arguably the desc routine should be using object notation for this instead.
51+
* However, there is value in using a custom format when it conveys useful
52+
* information about the underlying physical data structures.
53+
*
54+
* This ad-hoc format has the advantage of being close to the format used for
55+
* the "dead" and "unused" arrays (which follow the standard desc convention
56+
* for page offset number arrays). It suggests that the "redirected" elements
57+
* shown are just pairs of page offset numbers (which is how it really works).
58+
*/
1559
extern void array_desc(StringInfo buf, void *array, size_t elem_size, int count,
1660
void (*elem_desc) (StringInfo buf, void *elem, void *data),
1761
void *data);

0 commit comments

Comments
 (0)