[MDEV-26082] Assertion failure in buf_pool.watch_is_sentinel() Created: 2021-07-02  Updated: 2021-07-23  Resolved: 2021-07-23

Status: Closed
Project: MariaDB Server
Component/s: Storage Engine - InnoDB
Affects Version/s: 10.6.3, 10.5
Fix Version/s: 10.5.12, 10.6.4

Type: Bug Priority: Critical
Reporter: Marko Mäkelä Assignee: Marko Mäkelä
Resolution: Fixed Votes: 0
Labels: None

Issue Links:
Duplicate
is duplicated by MDEV-26200 buf_pool.flush_list corruption in buf... Closed

 Description   

Observed on buildbot:

10.6 0ad8a825a8901d4b5e704fed3fc65e93cea18f18

CURRENT_TEST: encryption.innodb_encryption_tables
mysqltest: At line 74: query 'update innodb_redundant set c1 = c1 + 1' failed: <Unknown> (2013): Lost connection to server during query
mariadbd: /home/buildbot/buildbot/build/mariadb-10.6.3/storage/innobase/include/buf0buf.h:1598: bool buf_pool_t::watch_is_sentinel(const buf_page_t&): Assertion `((&(&mutex)->m_mutex)->count > 0 && pthread_equal(pthread_self(), (&(&mutex)->m_mutex)->thread)) || hash_lock_get(bpage.id())->is_locked()' failed.
#9  0xb6f93d8b in __assert_fail () from /lib/i386-linux-gnu/libc.so.6
#10 0x80f4d72f in buf_pool_t::watch_is_sentinel (this=0x81d5fd00 <buf_pool>, bpage=...) at /home/buildbot/buildbot/build/mariadb-10.6.3/storage/innobase/include/buf0buf.h:1597
#11 0x8119231c in buf_page_get_low (page_id=..., zip_size=0, rw_latch=1, guess=0xb090e4a0, mode=10, mtr=0xaaec16a0, err=0xaaec09d4, allow_ibuf_merge=false) at /home/buildbot/buildbot/build/mariadb-10.6.3/storage/innobase/buf/buf0buf.cc:2630
#12 0x81193854 in buf_page_get_gen (page_id=..., zip_size=0, rw_latch=1, guess=0xb090e4a0, mode=10, mtr=0xaaec16a0, err=0xaaec09d4, allow_ibuf_merge=false) at /home/buildbot/buildbot/build/mariadb-10.6.3/storage/innobase/buf/buf0buf.cc:3111
#13 0x81157c35 in btr_cur_search_to_nth_level_func (index=0xb052d6a0, level=0, tuple=0xb32d8618, mode=PAGE_CUR_LE, latch_mode=2, cursor=0x842974a8, ahi_latch=0x0, mtr=0xaaec16a0, autoinc=0) at /home/buildbot/buildbot/build/mariadb-10.6.3/storage/innobase/btr/btr0cur.cc:1613
#14 0x810927b5 in btr_pcur_open_low (index=0xb052d6a0, level=0, tuple=0xb32d8618, mode=PAGE_CUR_LE, latch_mode=2, cursor=0x842974a8, autoinc=0, mtr=0xaaec16a0) at /home/buildbot/buildbot/build/mariadb-10.6.3/storage/innobase/include/btr0pcur.ic:444
#15 0x810960a1 in row_search_on_row_ref (pcur=0x842974a8, mode=2, table=0xb052cd50, ref=0xb32d8618, mtr=0xaaec16a0) at /home/buildbot/buildbot/build/mariadb-10.6.3/storage/innobase/row/row0row.cc:1215
#16 0x81088d94 in row_purge_reposition_pcur (mode=2, node=0x84297440, mtr=0xaaec16a0) at /home/buildbot/buildbot/build/mariadb-10.6.3/storage/innobase/row/row0purge.cc:81
#17 0x8108abcc in row_purge_reset_trx_id (node=0x84297440, mtr=0xaaec16a0) at /home/buildbot/buildbot/build/mariadb-10.6.3/storage/innobase/row/row0purge.cc:760

The code:

  bool watch_is_sentinel(const buf_page_t &bpage)
  {
#ifdef SAFE_MUTEX
    DBUG_ASSERT(mysql_mutex_is_owner(&mutex) ||
                hash_lock_get(bpage.id())->is_locked());
#endif /* SAFE_MUTEX */

We are expected to hold either buf_pool.mutex or the buf_pool.page_hash latch for the page, and apparently that is not the case.



 Comments   
Comment by Marko Mäkelä [ 2021-07-23 ]

It seems that MDEV-26200 might have fixed this bug. The test does use a ROW_FORMAT=COMPRESSED table, and the cause of the race condition ought to be MDEV-25113.

The cross-reference shows only that failure for the 10.6 branch. Buildbot was not lucky enough to hit the failure in 10.5.

Generated at Thu Feb 08 09:42:36 UTC 2024 using Jira 8.20.16#820016-sha1:9d11dbea5f4be3d4cc21f03a88dd11d8c8687422.