Dear Hou, Thanks for updating the patch. Few comments:
01. worker.c ``` +/* + * The minimum (100ms) and maximum (3 minutes) intervals for advancing + * non-removable transaction IDs. + */ +#define MIN_XID_ADVANCEMENT_INTERVAL 100 +#define MAX_XID_ADVANCEMENT_INTERVAL 180000L ``` Since the max_interval is an integer variable, it can be s/180000L/180000/. 02. ErrorOnReservedSlotName() Currently the function is callsed from three points - create_physical_replication_slot(), create_logical_replication_slot() and CreateReplicationSlot(). Can we move them to the ReplicationSlotCreate(), or combine into ReplicationSlotValidateName()? 03. advance_conflict_slot_xmin() ``` Assert(TransactionIdIsValid(MyReplicationSlot->data.xmin)); ``` Assuming the case that the launcher crashed just after ReplicationSlotCreate(CONFLICT_DETECTION_SLOT). After the restart, the slot can be acquired since SearchNamedReplicationSlot(CONFLICT_DETECTION_SLOT) is true, but the process would fail the assert because data.xmin is still invalid. I think we should re-create the slot when the xmin is invalid. Thought? 04. documentation Should we update "Configuration Settings" section in logical-replication.sgml because an additional slot is required? 05. check_remote_recovery() Can we add a test case related with this? Best regards, Hayato Kuroda FUJITSU LIMITED