Skip to content

Commit 84dd243

Browse files
committed
MDEV-36760 log_t::append_prepare_wait(): Bogus assertion on write_lsn
log_t::append_prepare_wait(): Do not attempt to read log_sys.write_lsn because it is not protected by log_sys.latch but by write_lock, which we cannot hold here. The assertion could fail if log_t::write_buf() is executing concurrently, and it has not yet executed log_write_buf() or updated log_sys.write_lsn. Fixes up commit acd071f (MDEV-21923)
1 parent 2263c8a commit 84dd243

File tree

1 file changed

+7
-8
lines changed

1 file changed

+7
-8
lines changed

storage/innobase/mtr/mtr0mtr.cc

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -916,25 +916,24 @@ ATTRIBUTE_COLD void log_t::append_prepare_wait(bool late, bool ex) noexcept
916916
{
917917
got_ex:
918918
const uint64_t l= write_lsn_offset.load(std::memory_order_relaxed);
919-
const lsn_t lsn{base_lsn.load(std::memory_order_relaxed)};
920-
ut_d(lsn_t ll= lsn + (l & (WRITE_BACKOFF - 1)));
921-
ut_ad(is_mmap()
922-
? ll - get_flushed_lsn(std::memory_order_relaxed) < capacity()
923-
: ll - write_lsn - ((write_size - 1) & (write_lsn - first_lsn)) <
924-
buf_size);
919+
const lsn_t lsn= base_lsn.load(std::memory_order_relaxed) +
920+
(l & (WRITE_BACKOFF - 1));
925921
waits++;
926922
#ifdef HAVE_PMEM
927923
const bool is_pmem{is_mmap()};
928924
if (is_pmem)
929-
persist(lsn + (l & (WRITE_BACKOFF - 1)));
925+
{
926+
ut_ad(lsn - get_flushed_lsn(std::memory_order_relaxed) < capacity());
927+
persist(lsn);
928+
}
930929
#endif
931930
latch.wr_unlock();
932931
/* write_buf() or persist() will clear the WRITE_BACKOFF flag,
933932
which our caller will recheck. */
934933
#ifdef HAVE_PMEM
935934
if (!is_pmem)
936935
#endif
937-
log_write_up_to(lsn + (l & (WRITE_BACKOFF - 1)), false);
936+
log_write_up_to(lsn, false);
938937
if (ex)
939938
{
940939
latch.wr_lock(SRW_LOCK_CALL);

0 commit comments

Comments
 (0)