Re: POC: enable logical decoding when wal_level = 'replica' without a server restart

From: Masahiko Sawada <sawada(dot)mshk(at)gmail(dot)com>
To: Peter Smith <smithpb2250(at)gmail(dot)com>
Cc: shveta malik <shveta(dot)malik(at)gmail(dot)com>, Amit Kapila <amit(dot)kapila16(at)gmail(dot)com>, "Hayato Kuroda (Fujitsu)" <kuroda(dot)hayato(at)fujitsu(dot)com>, Ashutosh Bapat <ashutosh(dot)bapat(dot)oss(at)gmail(dot)com>, Shlok Kyal <shlok(dot)kyal(dot)oss(at)gmail(dot)com>, Bertrand Drouvot <bertranddrouvot(dot)pg(at)gmail(dot)com>, PostgreSQL-development <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: POC: enable logical decoding when wal_level = 'replica' without a server restart
Date: 2025-10-15 20:17:24
Message-ID: CAD21AoBCYRscPxLH0iiV3c3YC5X5BPtosu5G4jcrbuf0_6WtxA@mail.gmail.com
Views: Whole Thread | Raw Message | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

On Tue, Oct 14, 2025 at 12:52 AM Peter Smith <smithpb2250(at)gmail(dot)com> wrote:
>
> Hi Sawada-San,
>
> I started to look again at this thread. Here are some comments for v18
> (the documentation only).

Thank you for reviewing the patch!

>
> ======
> doc/src/sgml/config.sgml
>
> 1.
> + <para>
> + It is important to note that when
> <varname>wal_level</varname> is set to
> + <literal>replica</literal>, the effective WAL level can
> automatically change
> + based on the presence of <link
> linkend="logicaldecoding-replication-slots">
> + logical replication slots</link>. The system automatically
> increases the
> + effective WAL level to <literal>logical</literal> when
> creating the first
> + logical replication slot, and decreases it back to
> <literal>replica</literal>
> + when dropping the last logical replication slot. The current
> effective WAL
> + level can be monitored through <xref
> linkend="guc-effective-wal-level"/>
> + parameter.
> + </para>
>
>
> As you say "It is important to note...". So, should this all be using
> <note> SGML markup?

I'm not sure when we have to use <note> but I find that it's not
necessary here. I think we can change later if others think so too.

>
> ~~~
>
> 2.
> + <indexterm>
> + <primary><varname>effective_wal_level</varname> configuration
> parameter</primary>
> + </indexterm>
>
> Should this even be called a "configuration parameter", given that you
> can't configure it?

I think we call even pre-set GUC parameters "configuration
parameters", so it should follow.

>
> ======
> doc/src/sgml/logicaldecoding.sgml
>
> 3.
> + <para>
> + When <varname>wal_level</varname> is set to <literal>replica</literal>,
> + logical decoding is automatically activated upon creation of the first
> + logical replication slot. This activation process involves several steps
> + and requires waiting for any concurrent transactions to finish, ensuring
> + system-wide consistency. Conversely, when the last logical
> replication slot
> + is dropped from a system with <varname>wal_level</varname> set to
> + <literal>replica</literal>, logical decoding is automatically disabled.
> + Note that the deactivation of logical decoding might take some time as
> + it is performed asynchronously by the checkpointer process.
> + </para>
>
> Here it seems to be describing again the concept of the
> "effective_wal_level" as in the config.sgml, so should this paragraph
> also make mention of that terminology, and link to that concept like
> was done before?

Could you elaborate on why we need to mention effective_wal_level
here? I thought that in this section, it's sufficient to describe what
conditions are required to enable or disable logical decoding.

> ~~~
>
> 4.
> Existing logical slots on standby also get invalidated if
> - <varname>wal_level</varname> on the primary is reduced to less than
> - <literal>logical</literal>.
> + logical decoding is disabled on the primary.
>
> Would it be easier just to leave the text as it was, but say
> "effective_wal_level" instead of "wal_level"?

I find that saying "if logical decoding is disabled" sounds more
understandable for users than saying "if effective_wal_level is
reduced to less than logical", but what do you think?

> ======
> doc/src/sgml/system-views.sgml
>
> 5.
> <para>
> <literal>wal_level_insufficient</literal> means that the
> - primary doesn't have a <xref linkend="guc-wal-level"/> sufficient to
> - perform logical decoding. It is set only for logical slots.
> + logical decoding is disabled on primary (See
> + <xref linkend="logicaldecoding-explanation-log-dec"/>. It is set
> + only for logical slots.
> </para>
>
> 5a.
> Should this also make use of the "effective_wal_level" terminology?
>
> e.g
> "...means that the logical decoding is disabled on primary (i.e the
> effective_wal_level is not logical)"

What is the point of mentioning both "logical decoding is disabled"
and "effective_wal_level is not logical"? I think it isn't necessary
to mention both things in all the places where we mention logical
decoding availability, but I'll change it if others also think the
same.

>
> ~
>
> 5b.
> Would it be better to list all these reasons in alphabetical order?
>
> ~
>
> 5c.
> I felt the "It is set only for logical slots" to be a bit vague. IMO
> it is clearer to say "This reason value is only used for logical
> slots".
>
> Alternatively, maybe the whole list should be restructured like below
>
> SUGGESTION
> The reason for the slot's invalidation. NULL if the slot is not invalidated.
>
> Possible reason values for logical or physical slots are:
> - wal_removed means ...
> - idle_timeout means ...
>
> Possible reason values, only for logical slots are:
> - rows_removed means ...
> - wal_level_insufficient means ...

I find that those changes would be a general improvement for the
description of invalidation_reason. It should be discussed in a
separate thread.

>
> ~
>
> 5d.
> A missing closing parenthesis. "(See xxx"

Fixed.

Regards,

--
Masahiko Sawada
Amazon Web Services: https://aws.amazon.com

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Joel Jacobson 2025-10-15 20:39:14 Re: Optimize LISTEN/NOTIFY
Previous Message Arseniy Mukhin 2025-10-15 19:53:38 Re: Optimize LISTEN/NOTIFY