On Mon, Feb 24, 2025 at 10:57 AM Amit Kapila <amit.kapil...@gmail.com> wrote:
>
> On Tue, Feb 18, 2025 at 12:16 AM Shubham Khanna
> <khannashubham1...@gmail.com> wrote:
> >
>
> -static void check_publisher(const struct LogicalRepInfo *dbinfo);
> -static char *setup_publisher(struct LogicalRepInfo *dbinfo);
> +static void check_publisher(const struct LogicalRepInfo *dbinfo, bool
> two_phase);
> +static char *setup_publisher(struct LogicalRepInfo *dbinfo, bool two_phase);
>  static void check_subscriber(const struct LogicalRepInfo *dbinfo);
>  static void setup_subscriber(struct LogicalRepInfo *dbinfo,
> - const char *consistent_lsn);
> + const char *consistent_lsn, bool two_phase);
>  static void setup_recovery(const struct LogicalRepInfo *dbinfo, const
> char *datadir,
>      const char *lsn);
>  static void drop_primary_replication_slot(struct LogicalRepInfo *dbinfo,
>     const char *slotname);
>  static void drop_failover_replication_slots(struct LogicalRepInfo *dbinfo);
>  static char *create_logical_replication_slot(PGconn *conn,
> - struct LogicalRepInfo *dbinfo);
> + struct LogicalRepInfo *dbinfo,
> + bool two_phase);
>  static void drop_replication_slot(PGconn *conn, struct LogicalRepInfo 
> *dbinfo,
>     const char *slot_name);
>  static void pg_ctl_status(const char *pg_ctl_cmd, int rc);
> @@ -98,7 +100,9 @@ static void wait_for_end_recovery(const char *conninfo,
>     const struct CreateSubscriberOptions *opt);
>  static void create_publication(PGconn *conn, struct LogicalRepInfo *dbinfo);
>  static void drop_publication(PGconn *conn, struct LogicalRepInfo *dbinfo);
> -static void create_subscription(PGconn *conn, const struct
> LogicalRepInfo *dbinfo);
> +static void create_subscription(PGconn *conn,
> + const struct LogicalRepInfo *dbinfo,
> + bool two_phase);
>
> Specifying two_phase as a separate parameter in so many APIs looks
> odd. Wouldn't it be better to make it part of LogicalRepInfo as we do
> with other parameters of CreateSubscriberOptions?
>

I agree that passing two_phase as a separate parameter across multiple
function calls adds redundancy. It would be more consistent and
maintainable to include two_phase as part of LogicalRepInfo, similar
to how other options from CreateSubscriberOptions are handled.
I have created a new structure  LogicalRepInfos to include a bool
two_phase field. This way, all functions that require two_phase can
access it directly from the LogicalRepInfos structure, reducing
unnecessary argument passing.

The attached patch contains the suggested changes.

Thanks and regards,
Shubham Khanna.

Attachment: v16-0001-Add-support-for-two-phase-commit-in-pg_createsub.patch
Description: Binary data

Reply via email to