Skip to content

Commit

Permalink
Rename io_direct to debug_io_direct.
Browse files Browse the repository at this point in the history
Give the new GUC introduced by d4e71df a name that is clearly not
intended for mainstream use quite yet.

Future proposals would drop the prefix only after adding infrastructure
to make it efficient.  Having the switch in the tree sooner is good
because it might lead to new discoveries about the hazards awaiting us
on a wide range of systems, but that name was too enticing and could
lead to cross-version confusion in future, per complaints from Noah and
Justin.

Suggested-by: Noah Misch <noah@leadboat.com>
Reviewed-by: Noah Misch <noah@leadboat.com>
Reviewed-by: Justin Pryzby <pryzby@telsasoft.com> (the idea, not the patch)
Reviewed-by: Tom Lane <tgl@sss.pgh.pa.us> (ditto)
Discussion: https://postgr.es/m/20230430041106.GA2268796%40rfd.leadboat.com
  • Loading branch information
macdice committed May 14, 2023
1 parent 4d5105a commit 319bae9
Show file tree
Hide file tree
Showing 4 changed files with 38 additions and 38 deletions.
64 changes: 32 additions & 32 deletions doc/src/sgml/config.sgml
Original file line number Diff line number Diff line change
Expand Up @@ -11160,6 +11160,38 @@ dynamic_library_path = 'C:\tools\postgresql;H:\my_project\lib;$libdir'
</listitem>
</varlistentry>

<varlistentry id="guc-debug-io-direct" xreflabel="debug_io_direct">
<term><varname>debug_io_direct</varname> (<type>string</type>)
<indexterm>
<primary><varname>debug_io_direct</varname> configuration parameter</primary>
</indexterm>
</term>
<listitem>
<para>
Ask the kernel to minimize caching effects for relation data and WAL
files using <literal>O_DIRECT</literal> (most Unix-like systems),
<literal>F_NOCACHE</literal> (macOS) or
<literal>FILE_FLAG_NO_BUFFERING</literal> (Windows).
</para>
<para>
May be set to an empty string (the default) to disable use of direct
I/O, or a comma-separated list of operations that should use direct I/O.
The valid options are <literal>data</literal> for
main data files, <literal>wal</literal> for WAL files, and
<literal>wal_init</literal> for WAL files when being initially
allocated.
</para>
<para>
Some operating systems and file systems do not support direct I/O, so
non-default settings may be rejected at startup or cause errors.
</para>
<para>
Currently this feature reduces performance, and is intended for
developer testing only.
</para>
</listitem>
</varlistentry>

<varlistentry id="guc-debug-parallel-query" xreflabel="debug_parallel_query">
<term><varname>debug_parallel_query</varname> (<type>enum</type>)
<indexterm>
Expand Down Expand Up @@ -11221,38 +11253,6 @@ dynamic_library_path = 'C:\tools\postgresql;H:\my_project\lib;$libdir'
</listitem>
</varlistentry>

<varlistentry id="guc-io-direct" xreflabel="io_direct">
<term><varname>io_direct</varname> (<type>string</type>)
<indexterm>
<primary><varname>io_direct</varname> configuration parameter</primary>
</indexterm>
</term>
<listitem>
<para>
Ask the kernel to minimize caching effects for relation data and WAL
files using <literal>O_DIRECT</literal> (most Unix-like systems),
<literal>F_NOCACHE</literal> (macOS) or
<literal>FILE_FLAG_NO_BUFFERING</literal> (Windows).
</para>
<para>
May be set to an empty string (the default) to disable use of direct
I/O, or a comma-separated list of operations that should use direct I/O.
The valid options are <literal>data</literal> for
main data files, <literal>wal</literal> for WAL files, and
<literal>wal_init</literal> for WAL files when being initially
allocated.
</para>
<para>
Some operating systems and file systems do not support direct I/O, so
non-default settings may be rejected at startup or cause errors.
</para>
<para>
Currently this feature reduces performance, and is intended for
developer testing only.
</para>
</listitem>
</varlistentry>

<varlistentry id="guc-post-auth-delay" xreflabel="post_auth_delay">
<term><varname>post_auth_delay</varname> (<type>integer</type>)
<indexterm>
Expand Down
8 changes: 4 additions & 4 deletions src/backend/storage/file/fd.c
Original file line number Diff line number Diff line change
Expand Up @@ -3844,7 +3844,7 @@ check_io_direct(char **newval, void **extra, GucSource source)
#if PG_O_DIRECT == 0
if (strcmp(*newval, "") != 0)
{
GUC_check_errdetail("io_direct is not supported on this platform.");
GUC_check_errdetail("debug_io_direct is not supported on this platform.");
result = false;
}
flags = 0;
Expand All @@ -3859,7 +3859,7 @@ check_io_direct(char **newval, void **extra, GucSource source)
if (!SplitGUCList(rawstring, ',', &elemlist))
{
GUC_check_errdetail("invalid list syntax in parameter \"%s\"",
"io_direct");
"debug_io_direct");
pfree(rawstring);
list_free(elemlist);
return false;
Expand Down Expand Up @@ -3891,14 +3891,14 @@ check_io_direct(char **newval, void **extra, GucSource source)
#if XLOG_BLCKSZ < PG_IO_ALIGN_SIZE
if (result && (flags & (IO_DIRECT_WAL | IO_DIRECT_WAL_INIT)))
{
GUC_check_errdetail("io_direct is not supported for WAL because XLOG_BLCKSZ is too small");
GUC_check_errdetail("debug_io_direct is not supported for WAL because XLOG_BLCKSZ is too small");
result = false;
}
#endif
#if BLCKSZ < PG_IO_ALIGN_SIZE
if (result && (flags & IO_DIRECT_DATA))
{
GUC_check_errdetail("io_direct is not supported for data because BLCKSZ is too small");
GUC_check_errdetail("debug_io_direct is not supported for data because BLCKSZ is too small");
result = false;
}
#endif
Expand Down
2 changes: 1 addition & 1 deletion src/backend/utils/misc/guc_tables.c
Original file line number Diff line number Diff line change
Expand Up @@ -4568,7 +4568,7 @@ struct config_string ConfigureNamesString[] =
},

{
{"io_direct", PGC_POSTMASTER, DEVELOPER_OPTIONS,
{"debug_io_direct", PGC_POSTMASTER, DEVELOPER_OPTIONS,
gettext_noop("Use direct I/O for file access."),
NULL,
GUC_LIST_INPUT | GUC_NOT_IN_SAMPLE
Expand Down
2 changes: 1 addition & 1 deletion src/test/modules/test_misc/t/004_io_direct.pl
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@
$node->init;
$node->append_conf(
'postgresql.conf', qq{
io_direct = 'data,wal,wal_init'
debug_io_direct = 'data,wal,wal_init'
shared_buffers = '256kB' # tiny to force I/O
wal_level = replica # minimal runs out of shared_buffers when set so tiny
});
Expand Down

0 comments on commit 319bae9

Please sign in to comment.