On Tue, Feb 19, 2019 at 05:09:33PM +0900, Masahiko Sawada wrote: > On Tue, Feb 19, 2019 at 1:28 AM Andres Freund <[email protected]> wrote: >> Well, I'd not thought we'd do it without acquiring the other slot. But >> that still seems to be easy enough to address, we just need to recheck >> whether the slot still exists (with the right name) the second time we >> acquire the spinlock? > > Yeah, I think that would work. The attached patch takes this > direction. Please review it.
+ if (XLogRecPtrIsInvalid(copy_restart_lsn) ||
+ copy_restart_lsn < src_restart_lsn ||
+ src_islogical != copy_islogical ||
+ strcmp(copy_name, NameStr(*src_name)) != 0)
+ ereport(ERROR,
+ (errmsg("could not copy logical replication slot
\"%s\"",
+ NameStr(*src_name)),
+ errdetail("The source replication slot has been
dropped during copy")));
+
+ /* Install copied values again */
+ SpinLockAcquire(&MyReplicationSlot->mutex);
Worth worrying about this window not reduced to zero? If the slot is
dropped between both then the same issue would arise.
--
Michael
signature.asc
Description: PGP signature
