Uploaded image for project: 'MariaDB Server'
  1. MariaDB Server
  2. MDEV-13451

Assertion `!recv_no_ibuf_operations' failed in ulint ibuf_page_low

Details

    Description

      10.2 6d51817d2cd79edbc15328bef532a5375f184219

      mysqld: /data/src/10.2/storage/innobase/ibuf/ibuf0ibuf.cc:1144: ulint ibuf_page_low(const page_id_t&, const page_size_t&, ulint, const char*, unsigned int, mtr_t*): Assertion `!recv_no_ibuf_operations' failed.
      170804 16:14:56 [ERROR] mysqld got signal 6 ;
       
      #7  0x00007f5c32b42ee2 in __assert_fail () from /lib/x86_64-linux-gnu/libc.so.6
      #8  0x000055b3ae6bcc57 in ibuf_page_low (page_id=..., page_size=..., x_latch=0, file=0x55b3aeca3878 "/data/src/10.2/storage/innobase/ibuf/ibuf0ibuf.cc", line=548, mtr=0x0) at /data/src/10.2/storage/innobase/ibuf/ibuf0ibuf.cc:1144
      #9  0x000055b3ae8d1212 in buf_page_get_gen (page_id=..., page_size=..., rw_latch=2, guess=0x0, mode=10, file=0x55b3aeca3878 "/data/src/10.2/storage/innobase/ibuf/ibuf0ibuf.cc", line=548, mtr=0x7ffc538321c0, err=0x0) at /data/src/10.2/storage/innobase/buf/buf0buf.cc:4210
      #10 0x000055b3ae6bbc4b in ibuf_init_at_db_start () at /data/src/10.2/storage/innobase/ibuf/ibuf0ibuf.cc:548
      #11 0x000055b3ae9061b3 in dict_boot () at /data/src/10.2/storage/innobase/dict/dict0boot.cc:487
      #12 0x000055b3ae812260 in innobase_start_or_create_for_mysql () at /data/src/10.2/storage/innobase/srv/srv0start.cc:2233
      #13 0x000055b3ae652f99 in innobase_init (p=0x55b3b131a190) at /data/src/10.2/storage/innobase/handler/ha_innodb.cc:4422
      #14 0x000055b3ae34a1b3 in ha_initialize_handlerton (plugin=0x55b3b12273c0) at /data/src/10.2/sql/handler.cc:512
      #15 0x000055b3ae0f49e3 in plugin_initialize (tmp_root=0x7ffc5383a8a0, plugin=0x55b3b12273c0, argc=0x55b3af61e770 <remaining_argc>, argv=0x55b3b10de370, options_only=false) at /data/src/10.2/sql/sql_plugin.cc:1413
      #16 0x000055b3ae0f55ec in plugin_init (argc=0x55b3af61e770 <remaining_argc>, argv=0x55b3b10de370, flags=2) at /data/src/10.2/sql/sql_plugin.cc:1695
      #17 0x000055b3ae002062 in init_server_components () at /data/src/10.2/sql/mysqld.cc:5255
      #18 0x000055b3ae0030e7 in mysqld_main (argc=144, argv=0x55b3b10de370) at /data/src/10.2/sql/mysqld.cc:5845
      #19 0x000055b3adff7fc0 in main (argc=22, argv=0x7ffc5383b638) at /data/src/10.2/sql/main.cc:25
      

      Test case is attached, run it with --mem --repeat=N

      The assertion started failing in 10.2 tree with this commit:

      commit 42f657cd2fab9acb00b15e00c7cc630f64ecc6ec
      Author: Marko Mäkelä <marko.makela@mariadb.com>
      Date:   Fri Jul 7 18:29:31 2017 +0300
       
          MDEV-13267 At startup with crash recovery: mtr_t::commit_checkpoint(lsn_t, bool): Assertion `!recv_no_log_write' failed
      

      Before this commit, the same test case would cause Assertion `!recv_no_log_write' failure.

      Attachments

        Issue Links

          Activity

            This is a debug-only assertion failure. We do not really need to set the ‘is inside change buffer’ flag in the code that only reads the change buffer state at startup.

            At this point of execution, change buffer merge must indeed remain prohibited.

            diff --git a/storage/innobase/ibuf/ibuf0ibuf.cc b/storage/innobase/ibuf/ibuf0ibuf.cc
            index b4cbe7d4480..d021f8c0085 100644
            --- a/storage/innobase/ibuf/ibuf0ibuf.cc
            +++ b/storage/innobase/ibuf/ibuf0ibuf.cc
            @@ -534,7 +534,6 @@ ibuf_init_at_db_start(void)
             
             	fseg_n_reserved_pages(header_page + IBUF_HEADER + IBUF_TREE_SEG_HEADER,
             			      &n_used, &mtr);
            -	ibuf_enter(&mtr);
             
             	ut_ad(n_used >= 2);
             
            @@ -556,7 +555,7 @@ ibuf_init_at_db_start(void)
             	mutex_exit(&ibuf_mutex);
             
             	ibuf->empty = page_is_empty(root);
            -	ibuf_mtr_commit(&mtr);
            +	mtr.commit();
             
             	ibuf->index = dict_mem_index_create(
             		"innodb_change_buffer", "CLUST_IND",
            

            marko Marko Mäkelä added a comment - This is a debug-only assertion failure. We do not really need to set the ‘is inside change buffer’ flag in the code that only reads the change buffer state at startup. At this point of execution, change buffer merge must indeed remain prohibited. diff --git a/storage/innobase/ibuf/ibuf0ibuf.cc b/storage/innobase/ibuf/ibuf0ibuf.cc index b4cbe7d4480..d021f8c0085 100644 --- a/storage/innobase/ibuf/ibuf0ibuf.cc +++ b/storage/innobase/ibuf/ibuf0ibuf.cc @@ -534,7 +534,6 @@ ibuf_init_at_db_start(void) fseg_n_reserved_pages(header_page + IBUF_HEADER + IBUF_TREE_SEG_HEADER, &n_used, &mtr); - ibuf_enter(&mtr); ut_ad(n_used >= 2); @@ -556,7 +555,7 @@ ibuf_init_at_db_start(void) mutex_exit(&ibuf_mutex); ibuf->empty = page_is_empty(root); - ibuf_mtr_commit(&mtr); + mtr.commit(); ibuf->index = dict_mem_index_create( "innodb_change_buffer", "CLUST_IND",

            ok to push and no need for test case.

            jplindst Jan Lindström (Inactive) added a comment - ok to push and no need for test case.

            People

              marko Marko Mäkelä
              elenst Elena Stepanova
              Votes:
              0 Vote for this issue
              Watchers:
              3 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved:

                Git Integration

                  Error rendering 'com.xiplink.jira.git.jira_git_plugin:git-issue-webpanel'. Please contact your Jira administrators.