pgsql: Simplify replacement code for preadv and pwritev. - Mailing list pgsql-committers

From Thomas Munro
Subject pgsql: Simplify replacement code for preadv and pwritev.
Date
Msg-id E1oJmiV-000MQ8-Pv@gemulon.postgresql.org
Whole thread Raw
List pgsql-committers
Simplify replacement code for preadv and pwritev.

preadv() and pwritev() are not standardized by POSIX, but appeared in
NetBSD in 1999 and were adopted by at least OpenBSD, FreeBSD,
DragonFlyBSD, Linux, AIX, illumos and macOS.  We don't use them much
yet, but an active proposal uses them heavily.

In 15, we had two replacement implementations for other OSes: one based
on lseek() + -v function if available for true vector I/O, and the other
based on a loop over p- function.

The former would be an obstacle to hypothetical future multi-threaded
code sharing file descriptors, while the latter would not, since commit
cf112c12.  Furthermore, the number of targeted systems that could
benefit from the former's potential upside has dwindled to just one
niche OS, since macOS added the functions and we de-supported HP-UX.
That doesn't seem like a good trade-off.

Therefore, drop the lseek()-based variant, and also the pg_ prefix now
that the file position portability hazard is gone.

At the time of writing, the only systems in our build farm that lack
native preadv/pwritev and thus use fallback code are:

 * Solaris (but not illumos)
 * macOS before release 11.0
 * Windows

With this commit, the above systems will now use the *same* fallback
code, the version that loops over pread()/pwrite().  Windows already
used that (though a later proposal may include true vector I/O for
Windows), so this decision really only affects Solaris, until it gets
around to adding these system calls.

Also remove some useless includes while here.

Reviewed-by: Andres Freund <andres@anarazel.de>
Discussion: https://postgr.es/m/CA+hUKGJ3LHeP9w5Fgzdr4G8AnEtJ=z=p6hGDEm4qYGEUX5B6fQ@mail.gmail.com

Branch
------
master

Details
-------
https://git.postgresql.org/pg/commitdiff/a0dc82711221aa220c5246fe788e5ed28924a4ea

Modified Files
--------------
configure                     |  2 +-
configure.ac                  |  2 --
src/backend/storage/file/fd.c |  4 ++--
src/include/pg_config.h.in    |  6 ------
src/include/port/pg_iovec.h   | 12 ++++--------
src/port/preadv.c             | 17 +----------------
src/port/pwritev.c            | 17 +----------------
src/tools/msvc/Solution.pm    |  2 --
8 files changed, 9 insertions(+), 53 deletions(-)


pgsql-committers by date:

Previous
From: Michael Paquier
Date:
Subject: pgsql: Make consistent a couple of log messages when parsing HBA files
Next
From: Peter Geoghegan
Date:
Subject: pgsql: Fix nbtree maximum item size macro.