Re: Force streaming every change in logical decoding - Mailing list pgsql-hackers
From | Peter Smith |
---|---|
Subject | Re: Force streaming every change in logical decoding |
Date | |
Msg-id | CAHut+PukSTynewgneyvqDqXjDfQcGCqTXREXefC0JuyBLB-Luw@mail.gmail.com Whole thread Raw |
In response to | RE: Force streaming every change in logical decoding ("shiy.fnst@fujitsu.com" <shiy.fnst@fujitsu.com>) |
Responses |
RE: Force streaming every change in logical decoding
|
List | pgsql-hackers |
Here are some review comments for patch v2. Since the GUC is still under design maybe these comments can be ignored for now, but I guess similar comments will apply in future anyhow (just with some name changes). ====== 1. Commit message Add a new GUC force_stream_mode, when it is set on, send the change to output plugin immediately in streaming mode. Otherwise, send until logical_decoding_work_mem is exceeded. ~ Is that quite right? I thought it was more like shown below: SUGGESTION Add a new GUC 'force_stream_mode' which modifies behavior when streaming mode is enabled. If force_stream_mode is on the changes are sent to the output plugin immediately. Otherwise,(when force_stream_mode is off) changes are written to memory until logical_decoding_work_mem is exceeded. ====== 2. doc/src/sgml/config.sgml + <para> + Specifies whether to force sending the changes to output plugin + immediately in streaming mode. If set to <literal>off</literal> (the + default), send until <varname>logical_decoding_work_mem</varname> is + exceeded. + </para> Suggest slight rewording like #1. SUGGESTION This modifies the behavior when streaming mode is enabled. If set to <literal>on</literal> the changes are sent to the output plugin immediately. If set <literal>off</literal> (the default), changes are written to memory until <varname>logical_decoding_work_mem</varname> is exceeded. ====== 3. More docs. It might be helpful if this developer option is referenced also on the page "31.10.1 Logical Replication > Configuration Settings > Publishers" [1] ====== src/backend/replication/logical/reorderbuffer.c 4. GUCs +/* + * Whether to send the change to output plugin immediately in streaming mode. + * When it is off, wait until logical_decoding_work_mem is exceeded. + */ +bool force_stream_mode; 4a. "to output plugin" -> "to the output plugin" ~ 4b. By convention (see. [2]) IIUC there should be some indication that these (this and 'logical_decoding_work_mem') are GUC variables. e.g. these should be refactored to be grouped togther without the other static var in between. And add a comment for them both like: /* GUC variable. */ ~ 4c. Also, (see [2]) it makes the code more readable to give the GUC an explicit initial value. SUGGESTION bool force_stream_mode = false; ~~~ 5. ReorderBufferCheckMemoryLimit + /* we know there has to be one, because the size is not zero */ Uppercase comment. Although not strictly added by this patch you might as well make this change while adjusting the indentation. ====== src/backend/utils/misc/guc_tables.c 6. + { + {"force_stream_mode", PGC_USERSET, DEVELOPER_OPTIONS, + gettext_noop("Force sending the changes to output plugin immediately if streaming is supported, without waiting till logical_decoding_work_mem."), + NULL, + GUC_NOT_IN_SAMPLE + }, + &force_stream_mode, + false, + NULL, NULL, NULL + }, "without waiting till logical_decoding_work_mem.".... seem like an incomplete sentence SUGGESTION Force sending any streaming changes to the output plugin immediately without waiting until logical_decoding_work_mem is exceeded."), ------ [1] https://www.postgresql.org/docs/devel/logical-replication-config.html [2] GUC declarations - https://github.com/postgres/postgres/commit/d9d873bac67047cfacc9f5ef96ee488f2cb0f1c3 Kind Regards, Peter Smith. Fujitsu Australia
pgsql-hackers by date: