Re: Synchronizing slots from primary to standby
От | Amit Kapila |
---|---|
Тема | Re: Synchronizing slots from primary to standby |
Дата | |
Msg-id | CAA4eK1+5CBU5i=7yqytdY1FRSd2DQYoyUPGWcD_T0fOZjpvK6Q@mail.gmail.com обсуждение исходный текст |
Ответ на | Re: Synchronizing slots from primary to standby (Amit Kapila <amit.kapila16@gmail.com>) |
Список | pgsql-hackers |
On Mon, Nov 20, 2023 at 4:28 PM Amit Kapila <amit.kapila16@gmail.com> wrote: > > 9. > +synchronize_one_slot(WalReceiverConn *wrconn, RemoteSlot *remote_slot, > + bool *slot_updated) > { > ... > + else > + { > + TransactionId xmin_horizon = InvalidTransactionId; > + ReplicationSlot *slot; > + > + ReplicationSlotCreate(remote_slot->name, true, RS_EPHEMERAL, > + remote_slot->two_phase, false); > + slot = MyReplicationSlot; > + > + SpinLockAcquire(&slot->mutex); > + slot->data.database = get_database_oid(remote_slot->database, false); > + > + /* Mark it as sync initiated by slot-sync worker */ > + slot->data.sync_state = SYNCSLOT_STATE_INITIATED; > + slot->data.failover = true; > + > + namestrcpy(&slot->data.plugin, remote_slot->plugin); > + SpinLockRelease(&slot->mutex); > + > + ReplicationSlotReserveWal(); > + > > How and when will this init state (SYNCSLOT_STATE_INITIATED) persist to disk? > On closer inspection, I see that it is done inside wait_for_primary_and_sync() when it fails to sync. I think it is better to refactor the code a bit and persist it in synchronize_one_slot() to make the code flow easier to understand. -- With Regards, Amit Kapila.
В списке pgsql-hackers по дате отправления: