postgresql/src/backend/utils
Michael Paquier fa88928470 Generate automatically code and documentation related to wait events
The documentation and the code is generated automatically from a new
file called wait_event_names.txt, formatted in sections dedicated to
each wait event class (Timeout, Lock, IO, etc.) with three tab-separated
fields:
- C symbol in enums
- Format in the system views
- Description in the docs

Using this approach has several advantages, as we have proved to be
rather bad in maintaining this area of the tree across the years:
- The order of each item in the documentation and the code, which should
be alphabetical, has become incorrect multiple times, and the script
generating the code and documentation has a few rules to enforce that,
making the maintenance a no-brainer.
- Some wait events were added to the code, but not documented, so this
cannot be missed now.
- The order of the tables for each wait event class is enforced in the
documentation (the input .txt file does so as well for clarity, though
this is not mandatory).
- Less code, shaving 1.2k lines from the tree, with 1/3 of the savings
coming from the code, the rest from the documentation.

The wait event types "Lock" and "LWLock" still have their own code path
for their code, hence only the documentation is created for them.  These
classes are listed with a special marker called WAIT_EVENT_DOCONLY in
the input file.

Adding a new wait event now requires only an update of
wait_event_names.txt, with "Lock" and "LWLock" treated as exceptions.

This commit has been tested with configure/Makefile, the CI and VPATH
build.  clean, distclean and maintainer-clean were working fine.

Author: Bertrand Drouvot, Michael Paquier
Discussion: https://postgr.es/m/77a86b3a-c4a8-5f5d-69b9-d70bbf2e9b98@gmail.com
2023-07-05 10:53:11 +09:00
..
activity Generate automatically code and documentation related to wait events 2023-07-05 10:53:11 +09:00
adt Generate automatically code and documentation related to wait events 2023-07-05 10:53:11 +09:00
cache Avoid Assert failure when processing empty statement in aborted xact. 2023-06-21 11:07:24 -04:00
error Update copyright for 2023 2023-01-02 15:00:37 -05:00
fmgr Pre-beta mechanical code beautification. 2023-05-19 17:24:48 -04:00
hash Update copyright for 2023 2023-01-02 15:00:37 -05:00
init Error message wording improvements 2023-06-29 09:14:55 +02:00
mb Pre-beta mechanical code beautification. 2023-05-19 17:24:48 -04:00
misc Add macro for maximum statistics target 2023-07-03 07:18:57 +02:00
mmgr Re-bin segment when memory pages are freed. 2023-07-04 15:16:47 +12:00
resowner Pre-beta mechanical code beautification. 2023-05-19 17:24:48 -04:00
sort nbtree: Allocate new pages in separate function. 2023-06-10 14:08:25 -07:00
time Pre-beta mechanical code beautification. 2023-05-19 17:24:48 -04:00
.gitignore
Gen_dummy_probes.pl Pre-beta mechanical code beautification. 2023-05-19 17:24:48 -04:00
Gen_dummy_probes.pl.prolog Update copyright for 2023 2023-01-02 15:00:37 -05:00
Gen_dummy_probes.sed Update copyright for 2023 2023-01-02 15:00:37 -05:00
Gen_fmgrtab.pl Pre-beta mechanical code beautification. 2023-05-19 17:24:48 -04:00
Makefile Update copyright for 2023 2023-01-02 15:00:37 -05:00
README.Gen_dummy_probes Tweak generation of Gen_dummy_probes.pl 2021-05-11 20:02:02 -04:00
errcodes.txt Update copyright for 2023 2023-01-02 15:00:37 -05:00
generate-errcodes.pl Pre-beta mechanical code beautification. 2023-05-19 17:24:48 -04:00
meson.build Update copyright for 2023 2023-01-02 15:00:37 -05:00
postprocess_dtrace.sed Update copyright for 2023 2023-01-02 15:00:37 -05:00
probes.d bufmgr: Introduce infrastructure for faster relation extension 2023-04-05 16:21:09 -07:00

README.Gen_dummy_probes

# Generating dummy probes

If Postgres isn't configured with dtrace enabled, we need to generate
dummy probes for the entries in probes.d, that do nothing.

This is accomplished in Unix via the sed script `Gen_dummy_probes.sed`. We
used to use this in MSVC builds using the perl utility `psed`, which mimicked
sed. However, that utility disappeared from Windows perl distributions and so
we converted the sed script to a perl script to be used in MSVC builds.

We still keep the sed script as the authoritative source for generating
these dummy probes because except on Windows perl is not a hard requirement
when building from a tarball.

So, if you need to change the way dummy probes are generated, first change
the sed script, and when it's working generate the perl script. This can
be accomplished by using the perl utility s2p.

s2p is no longer part of the perl core, so it might not be on your system,
but it is available on CPAN and also in many package systems. e.g.
on Fedora it can be installed using `cpan App::s2p` or
`dnf install perl-App-s2p`.

The Makefile contains a recipe for regenerating Gen_dummy_probes.pl, so all
you need to do is once you have s2p installed is `make Gen_dummy_probes.pl`
Note that in a VPATH build this will generate the file in the vpath tree,
not the source tree.