Re: Logical Replication of sequences

vignesh C <vignesh21@gmail.com>

From: vignesh C <vignesh21@gmail.com>
To: Peter Smith <smithpb2250@gmail.com>
Cc: "Hayato Kuroda (Fujitsu)" <kuroda.hayato@fujitsu.com>, Masahiko Sawada <sawada.mshk@gmail.com>, shveta malik <shveta.malik@gmail.com>, Shlok Kyal <shlok.kyal.oss@gmail.com>, Amit Kapila <amit.kapila16@gmail.com>, Peter Eisentraut <peter@eisentraut.org>, PostgreSQL Hackers <pgsql-hackers@lists.postgresql.org>, Euler Taveira <euler@eulerto.com>, Michael Paquier <michael@paquier.xyz>, "Zhijie Hou (Fujitsu)" <houzj.fnst@fujitsu.com>, "Jonathan S. Katz" <jkatz@postgresql.org>
Date: 2025-04-24T10:29:46Z
Lists: pgsql-hackers

Commits

Same data as JSON: GET /api/v1/messages/:b64id/commits the thread's linked commits as JSON, with link sources. API reference →
  1. Doc: Add documentation for sequence synchronization.

  2. Remove unused assignment in CREATE PUBLICATION grammar.

  3. Add seq_sync_error_count to subscription statistics.

  4. Fix few issues in commit 5509055d69.

  5. Add sequence synchronization for logical replication.

  6. Add worker type argument to logical replication worker functions.

  7. Introduce "REFRESH SEQUENCES" for subscriptions.

  8. Refactor logical worker synchronization code into a separate file.

  9. Standardize use of REFRESH PUBLICATION in code and messages.

  10. Add "ALL SEQUENCES" support to publications.

  11. Expose sequence page LSN via pg_get_sequence_data.

  12. Resume conflict-relevant data retention automatically.

  13. Post-commit review fixes for 228c370868.

  14. Generate GUC tables from .dat file

Attachments

On Thu, 24 Apr 2025 at 05:07, Peter Smith <smithpb2250@gmail.com> wrote:
>
> Hi Vignesh,
>
> Some review comments for patch v20250422-0003.
>
> ======
> src/backend/replication/logical/syncutils.c
>
> 1.
> +/*
> + * Exit routine for synchronization worker.
> + */
> +pg_noreturn void
> +SyncFinishWorker(void)
>
> Why does this have the pg_noreturn annotation? None of the other void
> functions do.

It indicates that the function will not return control flow to the
calling function after it finishes. This is not a new function, it was
just moved from tablesync.c
> ======
> src/include/replication/worker_internal.h
>
> 4.
> @@ -250,6 +252,7 @@ extern void logicalrep_worker_stop(Oid subid, Oid relid);
>  extern void logicalrep_pa_worker_stop(ParallelApplyWorkerInfo *winfo);
>  extern void logicalrep_worker_wakeup(Oid subid, Oid relid);
>  extern void logicalrep_worker_wakeup_ptr(LogicalRepWorker *worker);
> +pg_noreturn extern void SyncFinishWorker(void);
>
>  extern int logicalrep_sync_worker_count(Oid subid);
>
> @@ -259,9 +262,13 @@ extern void
> ReplicationOriginNameForLogicalRep(Oid suboid, Oid relid,
>  extern bool AllTablesyncsReady(void);
>  extern void UpdateTwoPhaseState(Oid suboid, char new_state);
>
> -extern void process_syncing_tables(XLogRecPtr current_lsn);
> -extern void invalidate_syncing_table_states(Datum arg, int cacheid,
> - uint32 hashvalue);
> +extern bool FetchRelationStates(bool *started_tx);
> +extern bool WaitForRelationStateChange(Oid relid, char expected_state);
> +extern void ProcessSyncingTablesForSync(XLogRecPtr current_lsn);
> +extern void ProcessSyncingTablesForApply(XLogRecPtr current_lsn);
> +extern void SyncProcessRelations(XLogRecPtr current_lsn);
> +extern void SyncInvalidateRelationStates(Datum arg, int cacheid,
> + uint32 hashvalue);
>
> ~
>
> 4a.
> Why does SyncFinishWorker have the pg_noreturn annotation? None of the
> other void functions do.

This is same as comment #1

The rest of the comments were fixed.
Also the comments from [1] and [2] are fixed in the attached v20250424 version.
[1] - https://www.postgresql.org/message-id/CAHut%2BPticXRg4_W%3Dd7H37DWPh5LNePbcQ5RKc3vUW5HCzAX_fg%40mail.gmail.com
[2] - https://www.postgresql.org/message-id/CAHut%2BPtBhb89%2B1DAYUFc%3D1Ojkh1mHro%2Bg3UCqMZAQoSpPQoqZA%40mail.gmail.com

Regards,
Vignesh