On Thu, Jan 18, 2024 at 4:49 PM Amit Kapila <amit.kapil...@gmail.com> wrote:
> 2. > +synchronize_one_slot(WalReceiverConn *wrconn, RemoteSlot *remote_slot) > { > ... > + LWLockAcquire(ProcArrayLock, LW_EXCLUSIVE); > + xmin_horizon = GetOldestSafeDecodingTransactionId(true); > + SpinLockAcquire(&slot->mutex); > + slot->data.catalog_xmin = xmin_horizon; > + SpinLockRelease(&slot->mutex); > ... > } > > Here, why slot->effective_catalog_xmin is not updated? The same is > required by a later call to ReplicationSlotsComputeRequiredXmin(). I > see that the prior version v60-0002 has the corresponding change but > it is missing in the latest version. Any reason? I think it was a mistake in v61. Added it back in v64.. > > 3. > + * Return true either if the slot is marked as RS_PERSISTENT (sync-ready) or > + * is synced periodically (if it was already sync-ready). Return false > + * otherwise. > + */ > +static bool > +update_and_persist_slot(RemoteSlot *remote_slot) > > The second part of the above comment (or is synced periodically (if it > was already sync-ready)) is not clear to me. Does it intend to > describe the case when we try to update the already created temp slot > in the last call. If so, that is not very clear because periodically > sounds like it can be due to repeated sync for sync-ready slot. The comment was as per old functionality where this function was doing persist and save both. In v61 code changed, but comment was not updated. I have changed it now in v64. > 4. > +update_and_persist_slot(RemoteSlot *remote_slot) > { > ... > + (void) local_slot_update(remote_slot); > ... > } > > Can we write a comment to state the reason why we don't care about the > return value here? Since it is the first time 'local_slot_update' is happening on any slot, the return value must be true i.e. local_slot_update() should not skip the update. I have thus added an Assert on return value now (in v64). thanks Shveta