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

Assertion `srv_undo_sources || ...` failed on shutdown during DDL operation

Details

    Description

      diff --git a/storage/innobase/trx/trx0purge.cc b/storage/innobase/trx/trx0purge.cc
      index e22bbd6..8b272ab 100644
      --- a/storage/innobase/trx/trx0purge.cc
      +++ b/storage/innobase/trx/trx0purge.cc
      @@ -281,6 +281,8 @@ trx_purge_add_update_undo_to_history(
                              hist_size + undo->size, MLOG_4BYTES, mtr);
              }
       
      +  DBUG_EXECUTE_IF("mdev13201", my_sleep(1000000););
      +
              /* Before any transaction-generating background threads or the
              purge have been started, recv_recovery_rollback_active() can
              start transactions in row_merge_drop_temp_indexes() and
      

      10.2 08c493c62afae0e81f with the patch above

      2017-10-05 21:08:39 140315038668544 [Note] /data/src/10.2-bug/sql/mysqld (root[root] @ localhost []): Normal shutdown
       
      2017-10-05 21:08:39 140315038668544 [Note] Event Scheduler: Purging the queue. 0 events
      2017-10-05 21:08:39 140314702509824 [Note] InnoDB: FTS optimize thread exiting.
      mysqld: /data/src/10.2-bug/storage/innobase/trx/trx0purge.cc:307: void trx_purge_add_update_undo_to_history(trx_t*, ib_page_t*, mtr_t*): Assertion `srv_undo_sources || ((srv_startup_is_before_trx_rollback_phase || trx_rollback_or_clean_is_active) && purge_sys->state == PURGE_STATE_INIT) || (srv_force_recovery >= SRV_FORCE_NO_BACKGROUND && purge_sys->state == PURGE_STATE_DISABLED) || ((trx->undo_no == 0 || trx->in_mysql_trx_list) && srv_fast_shutdown)' failed.
      171005 21:08:41 [ERROR] mysqld got signal 6 ;
       
      #7  0x00007f9da9850ee2 in __assert_fail () from /lib/x86_64-linux-gnu/libc.so.6
      #8  0x000055e643b839f6 in trx_purge_add_update_undo_to_history (trx=0x7f9d9f3feca8, undo_page=0x7f9d9f0d4000 "", mtr=0x7f9da41263d0) at /data/src/10.2-bug/storage/innobase/trx/trx0purge.cc:300
      #9  0x000055e643bba351 in trx_undo_update_cleanup (trx=0x7f9d9f3feca8, undo_page=0x7f9d9f0d4000 "", mtr=0x7f9da41263d0) at /data/src/10.2-bug/storage/innobase/trx/trx0undo.cc:1838
      #10 0x000055e643ba903b in trx_write_serialisation_history (trx=0x7f9d9f3feca8, mtr=0x7f9da41263d0) at /data/src/10.2-bug/storage/innobase/trx/trx0trx.cc:1458
      #11 0x000055e643baa907 in trx_commit_low (trx=0x7f9d9f3feca8, mtr=0x7f9da41263d0) at /data/src/10.2-bug/storage/innobase/trx/trx0trx.cc:1939
      #12 0x000055e643baaa9a in trx_commit (trx=0x7f9d9f3feca8) at /data/src/10.2-bug/storage/innobase/trx/trx0trx.cc:2009
      #13 0x000055e643bab38f in trx_commit_for_mysql (trx=0x7f9d9f3feca8) at /data/src/10.2-bug/storage/innobase/trx/trx0trx.cc:2229
      #14 0x000055e643c8cd56 in dict_stats_exec_sql (pinfo=0x7f9d5813f958, sql=0x55e6440eb830 "PROCEDURE TABLE_STATS_SAVE () IS\nBEGIN\nDELETE FROM \"mysql/innodb_table_stats\"\nWHERE\ndatabase_name = :database_name AND\ntable_name = :table_name;\nINSERT INTO \"mysql/innodb_table_stats\"\nVALUES\n(\n:databa"..., trx=0x7f9d9f3feca8) at /data/src/10.2-bug/storage/innobase/dict/dict0stats.cc:325
      #15 0x000055e643c912b6 in dict_stats_save (table_orig=0x7f9d58143908, only_for_index=0x0) at /data/src/10.2-bug/storage/innobase/dict/dict0stats.cc:2514
      #16 0x000055e643c92fcd in dict_stats_update (table=0x7f9d58143908, stats_upd_option=DICT_STATS_EMPTY_TABLE) at /data/src/10.2-bug/storage/innobase/dict/dict0stats.cc:3269
      #17 0x000055e643b2a4fb in row_truncate_complete (table=0x7f9d58143908, trx=0x7f9d9f3fe878, fsp_flags=33, logger=@0x7f9da4127398: 0x0, err=DB_SUCCESS) at /data/src/10.2-bug/storage/innobase/row/row0trunc.cc:1275
      #18 0x000055e643b2c006 in row_truncate_table_for_mysql (table=0x7f9d58143908, trx=0x7f9d9f3fe878) at /data/src/10.2-bug/storage/innobase/row/row0trunc.cc:2114
      #19 0x000055e6439b828f in ha_innobase::truncate (this=0x7f9d5812ff28) at /data/src/10.2-bug/storage/innobase/handler/ha_innodb.cc:13567
      #20 0x000055e6436a1ef5 in handler::ha_truncate (this=0x7f9d5812ff28) at /data/src/10.2-bug/sql/handler.cc:4078
      #21 0x000055e643868712 in Sql_cmd_truncate_table::handler_truncate (this=0x7f9d58012b20, thd=0x7f9d58000b00, table_ref=0x7f9d58012508, is_tmp_table=false) at /data/src/10.2-bug/sql/sql_truncate.cc:245
      #22 0x000055e643868d4c in Sql_cmd_truncate_table::truncate_table (this=0x7f9d58012b20, thd=0x7f9d58000b00, table_ref=0x7f9d58012508) at /data/src/10.2-bug/sql/sql_truncate.cc:441
      #23 0x000055e643868ebe in Sql_cmd_truncate_table::execute (this=0x7f9d58012b20, thd=0x7f9d58000b00) at /data/src/10.2-bug/sql/sql_truncate.cc:498
      #24 0x000055e64343286c in mysql_execute_command (thd=0x7f9d58000b00) at /data/src/10.2-bug/sql/sql_parse.cc:6203
      #25 0x000055e64343711c in mysql_parse (thd=0x7f9d58000b00, rawbuf=0x7f9d58012438 "TRUNCATE TABLE t1", length=17, parser_state=0x7f9da4128200, is_com_multi=false, is_next_command=false) at /data/src/10.2-bug/sql/sql_parse.cc:7875
      #26 0x000055e643424dc0 in dispatch_command (command=COM_QUERY, thd=0x7f9d58000b00, packet=0x7f9d58008891 "TRUNCATE TABLE t1", packet_length=17, is_com_multi=false, is_next_command=false) at /data/src/10.2-bug/sql/sql_parse.cc:1812
      #27 0x000055e643423736 in do_command (thd=0x7f9d58000b00) at /data/src/10.2-bug/sql/sql_parse.cc:1360
      #28 0x000055e643570917 in do_handle_one_connection (connect=0x55e646fd3150) at /data/src/10.2-bug/sql/sql_connect.cc:1354
      #29 0x000055e6435706a4 in handle_one_connection (arg=0x55e646fd3150) at /data/src/10.2-bug/sql/sql_connect.cc:1260
      #30 0x000055e64398d08c in pfs_spawn_thread (arg=0x55e646fdd6c0) at /data/src/10.2-bug/storage/perfschema/pfs.cc:1862
      #31 0x00007f9dab795494 in start_thread (arg=0x7f9da4129700) at pthread_create.c:333
      #32 0x00007f9da990d93f in clone () from /lib/x86_64-linux-gnu/libc.so.6
      

      --source include/have_innodb.inc
       
      --let $stats= `SELECT @@innodb_stats_persistent`
      SET GLOBAL innodb_stats_persistent= ON;
       
      CREATE TABLE t1 (t TEXT) ENGINE=InnoDB;
      SET debug_dbug='+d,mdev13201';
      --enable_reconnect
       
      --send
        TRUNCATE TABLE t1;
       
      --connect (con1,localhost,root,,test)
      --source include/restart_mysqld.inc
      --disconnect con1
       
      --connection default
      --disable_abort_on_error
      --reap
      SELECT COUNT(*) FROM t1;
      DROP TABLE t1;
       
      eval SET GLOBAL innodb_stats_persistent= $stats;
      

      Attachments

        Issue Links

          Activity

            elenst Elena Stepanova created issue -
            elenst Elena Stepanova made changes -
            Field Original Value New Value
            Summary [Draft] Assertion `srv_undo_sources || ((srv_startup_is_before_trx_ rollback_phase ... Assertion `srv_undo_sources || ((s rv_startup_is_before_trx_rollback_phase || trx_rollback_or_clean_is_active) && purge_sys->state == PURGE_STATE_INIT) ... failed
            elenst Elena Stepanova made changes -
            Fix Version/s 10.2 [ 14601 ]
            Assignee Elena Stepanova [ elenst ] Marko Mäkelä [ marko ]
            Description {noformat}
            2017-06-28 17:31:09 139969092880128 [Note] /data/bld/10.2/bin/mysqld (root[root] @ localhost []): Normal shutdown

            2017-06-28 17:31:09 139969092880128 [Note] Event Scheduler: Purging the queue. 0 events
            2017-06-28 17:31:09 139968445916928 [Note] InnoDB: FTS optimize thread exiting.
            mysqld: /data/src/10.2/storage/innobase/trx/trx0purge.cc:303: void trx_purge_add_update_undo_to_history(trx_t*, ib_page_t*, mtr_t*): Assertion `srv_undo_sources || ((srv_startup_is_before_trx_
            rollback_phase || trx_rollback_or_clean_is_active) && purge_sys->state == PURGE_STATE_INIT) || (srv_force_recovery >= SRV_FORCE_NO_BACKGROUND && purge_sys->state == PURGE_STATE_DISABLED) || (t
            rx->undo_no == 0 && srv_fast_shutdown)' failed.
            170628 17:31:09 [ERROR] mysqld got signal 6 ;
            {noformat}
            {noformat:title=10.2 23edc7c88f29d7bee01f39f1a58f4ada05f724c3}
            #7 0x00007f4d1a356ee2 in __assert_fail () from /lib/x86_64-linux-gnu/libc.so.6
            #8 0x00005628d3563ff2 in trx_purge_add_update_undo_to_history (trx=0x7f4d1860d878, undo_page=0x7f4d00a14000 "", mtr=0x7f4d184c42e0) at /data/src/10.2/storage/innobase/trx/trx0purge.cc:297
            #9 0x00005628d3599e56 in trx_undo_update_cleanup (trx=0x7f4d1860d878, undo_page=0x7f4d00a14000 "", mtr=0x7f4d184c42e0) at /data/src/10.2/storage/innobase/trx/trx0undo.cc:1832
            #10 0x00005628d3589121 in trx_write_serialisation_history (trx=0x7f4d1860d878, mtr=0x7f4d184c42e0) at /data/src/10.2/storage/innobase/trx/trx0trx.cc:1470
            #11 0x00005628d358a654 in trx_commit_low (trx=0x7f4d1860d878, mtr=0x7f4d184c42e0) at /data/src/10.2/storage/innobase/trx/trx0trx.cc:1951
            #12 0x00005628d358a7e7 in trx_commit (trx=0x7f4d1860d878) at /data/src/10.2/storage/innobase/trx/trx0trx.cc:2021
            #13 0x00005628d358afa4 in trx_commit_for_mysql (trx=0x7f4d1860d878) at /data/src/10.2/storage/innobase/trx/trx0trx.cc:2240
            #14 0x00005628d366e820 in dict_stats_exec_sql (pinfo=0x7f4c9c65d5d8, sql=0x5628d3ac11d0 "PROCEDURE DELETE_FROM_TABLE_STATS () IS\nBEGIN\nDELETE FROM \"mysql/innodb_table_stats\" WHERE\ndatabase_name = :database_name AND\ntable_name = :table_name;\nEND;\n", trx=0x7f4d1860d878) at /data/src/10.2/storage/innobase/dict/dict0stats.cc:325
            #15 0x00005628d36752ca in dict_stats_delete_from_table_stats (database_name=0x7f4d184c4900 "test", table_name=0x7f4d184c49d0 "tmp389") at /data/src/10.2/storage/innobase/dict/dict0stats.cc:3528
            #16 0x00005628d36754ed in dict_stats_drop_table (db_and_table=0x7f4d184c5780 "test/tmp389", errstr=0x7f4d184c5140 "\200\006a\030M\177", errstr_sz=1024) at /data/src/10.2/storage/innobase/dict/dict0stats.cc:3606
            #17 0x00005628d34ce3c2 in row_drop_table_for_mysql (name=0x7f4d184c5780 "test/tmp389", trx=0x7f4d1860e0d8, drop_db=false, create_failed=0, nonatomic=true) at /data/src/10.2/storage/innobase/row/row0mysql.cc:3690
            #18 0x00005628d339745d in ha_innobase::delete_table (this=0x7f4c9c0151d8, name=0x7f4d184c6f30 "./test/tmp389") at /data/src/10.2/storage/innobase/handler/ha_innodb.cc:13771
            #19 0x00005628d3082566 in handler::ha_delete_table (this=0x7f4c9c0151d8, name=0x7f4d184c6f30 "./test/tmp389") at /data/src/10.2/sql/handler.cc:4295
            #20 0x00005628d307d078 in ha_delete_table (thd=0x7f4c9c000b00, table_type=0x5628d5af9b30, path=0x7f4d184c6f30 "./test/tmp389", db=0x7f4c9c011d70 "test", alias=0x7f4c9c011728 "tmp389", generate_warning=false) at /data/src/10.2/sql/handler.cc:2320
            #21 0x00005628d2ecd0c3 in quick_rm_table (thd=0x7f4c9c000b00, base=0x5628d5af9b30, db=0x7f4c9c011d70 "test", table_name=0x7f4c9c011728 "tmp389", flags=0, table_path=0x0) at /data/src/10.2/sql/sql_table.cc:2721
            #22 0x00005628d2def969 in create_table_from_items (thd=0x7f4c9c000b00, create_info=0x7f4d184c8980, create_table=0x7f4c9c011760, alter_info=0x7f4d184c88d0, items=0x7f4c9c004e40, lock=0x7f4d184c8328, hooks=0x7f4d184c8360) at /data/src/10.2/sql/sql_insert.cc:4146
            #23 0x00005628d2defefd in select_create::prepare (this=0x7f4c9c013e58, values=..., u=0x7f4c9c0045e0) at /data/src/10.2/sql/sql_insert.cc:4297
            #24 0x00005628d2e4bf96 in JOIN::prepare (this=0x7f4c9c013f50, tables_init=0x7f4c9c0121e0, wild_num=0, conds_init=0x0, og_num=3, order_init=0x7f4c9c013c20, skip_order_by=false, group_init=0x7f4c9c0130e8, having_init=0x7f4c9c0138b8, proc_param_init=0x0, select_lex_arg=0x7f4c9c004d18, unit_arg=0x7f4c9c0045e0) at /data/src/10.2/sql/sql_select.cc:1021
            #25 0x00005628d2e5510d in mysql_select (thd=0x7f4c9c000b00, tables=0x7f4c9c0121e0, wild_num=0, fields=..., conds=0x0, og_num=3, order=0x7f4c9c013c20, group=0x7f4c9c0130e8, having=0x7f4c9c0138b8, proc_param=0x0, select_options=552171997952, result=0x7f4c9c013e58, unit=0x7f4c9c0045e0, select_lex=0x7f4c9c004d18) at /data/src/10.2/sql/sql_select.cc:3646
            #26 0x00005628d2e49b44 in handle_select (thd=0x7f4c9c000b00, lex=0x7f4c9c004518, result=0x7f4c9c013e58, setup_tables_done_option=0) at /data/src/10.2/sql/sql_select.cc:373
            #27 0x00005628d2e0cd1f in mysql_execute_command (thd=0x7f4c9c000b00) at /data/src/10.2/sql/sql_parse.cc:3926
            #28 0x00005628d2e19444 in mysql_parse (thd=0x7f4c9c000b00, rawbuf=0x7f4c9c011348 "CREATE TABLE tmp389 AS SELECT SUBSTR( `col_int_key` FROM 'c' FOR `col_varchar_nokey` ) AS field1 FROM `d` GROUP BY LPAD( `col_time_key`, 'u', ( `col_date_nokey` SOUNDS LIKE '2017-07-21' ) ), BINARY ( "..., length=412, parser_state=0x7f4d184c9250, is_com_multi=false, is_next_command=false) at /data/src/10.2/sql/sql_parse.cc:7879
            #29 0x00005628d2e074f1 in dispatch_command (command=COM_QUERY, thd=0x7f4c9c000b00, packet=0x7f4c9c0d5ae1 "CREATE TABLE tmp389 AS SELECT SUBSTR( `col_int_key` FROM 'c' FOR `col_varchar_nokey` ) AS field1 FROM `d` GROUP BY LPAD( `col_time_key`, 'u', ( `col_date_nokey` SOUNDS LIKE '2017-07-21' ) ), BINARY ( "..., packet_length=412, is_com_multi=false, is_next_command=false) at /data/src/10.2/sql/sql_parse.cc:1817
            #30 0x00005628d2e05e32 in do_command (thd=0x7f4c9c000b00) at /data/src/10.2/sql/sql_parse.cc:1362
            #31 0x00005628d2f5157d in do_handle_one_connection (connect=0x5628d64c3150) at /data/src/10.2/sql/sql_connect.cc:1354
            #32 0x00005628d2f5130a in handle_one_connection (arg=0x5628d64c3150) at /data/src/10.2/sql/sql_connect.cc:1260
            #33 0x00007f4d1c29b494 in start_thread (arg=0x7f4d184ca700) at pthread_create.c:333
            #34 0x00007f4d1a41393f in clone () from /lib/x86_64-linux-gnu/libc.so.6
            {noformat}

            Not easily reproducible.
            {noformat}
            MTR_VERSION=1 perl ./mtr main.t3 --mysqld=--lower-case-table-names=1
            {noformat}
            {noformat}
            diff --git a/storage/innobase/trx/trx0purge.cc b/storage/innobase/trx/trx0purge.cc
            index e22bbd6..8b272ab 100644
            --- a/storage/innobase/trx/trx0purge.cc
            +++ b/storage/innobase/trx/trx0purge.cc
            @@ -281,6 +281,8 @@ trx_purge_add_update_undo_to_history(
                                    hist_size + undo->size, MLOG_4BYTES, mtr);
                    }
             
            + DBUG_EXECUTE_IF("mdev13201", my_sleep(1000000););
            +
                    /* Before any transaction-generating background threads or the
                    purge have been started, recv_recovery_rollback_active() can
                    start transactions in row_merge_drop_temp_indexes() and
            {noformat}
            {noformat:title=10.2 08c493c62afae0e81f with the patch above}
            2017-10-05 21:08:39 140315038668544 [Note] /data/src/10.2-bug/sql/mysqld (root[root] @ localhost []): Normal shutdown

            2017-10-05 21:08:39 140315038668544 [Note] Event Scheduler: Purging the queue. 0 events
            2017-10-05 21:08:39 140314702509824 [Note] InnoDB: FTS optimize thread exiting.
            mysqld: /data/src/10.2-bug/storage/innobase/trx/trx0purge.cc:307: void trx_purge_add_update_undo_to_history(trx_t*, ib_page_t*, mtr_t*): Assertion `srv_undo_sources || ((s
            rv_startup_is_before_trx_rollback_phase || trx_rollback_or_clean_is_active) && purge_sys->state == PURGE_STATE_INIT) || (srv_force_recovery >= SRV_FORCE_NO_BACKGROUND && p
            urge_sys->state == PURGE_STATE_DISABLED) || ((trx->undo_no == 0 || trx->in_mysql_trx_list) && srv_fast_shutdown)' failed.
            171005 21:08:41 [ERROR] mysqld got signal 6 ;

            #7 0x00007f9da9850ee2 in __assert_fail () from /lib/x86_64-linux-gnu/libc.so.6
            #8 0x000055e643b839f6 in trx_purge_add_update_undo_to_history (trx=0x7f9d9f3feca8, undo_page=0x7f9d9f0d4000 "", mtr=0x7f9da41263d0) at /data/src/10.2-bug/storage/innobase/trx/trx0purge.cc:300
            #9 0x000055e643bba351 in trx_undo_update_cleanup (trx=0x7f9d9f3feca8, undo_page=0x7f9d9f0d4000 "", mtr=0x7f9da41263d0) at /data/src/10.2-bug/storage/innobase/trx/trx0undo.cc:1838
            #10 0x000055e643ba903b in trx_write_serialisation_history (trx=0x7f9d9f3feca8, mtr=0x7f9da41263d0) at /data/src/10.2-bug/storage/innobase/trx/trx0trx.cc:1458
            #11 0x000055e643baa907 in trx_commit_low (trx=0x7f9d9f3feca8, mtr=0x7f9da41263d0) at /data/src/10.2-bug/storage/innobase/trx/trx0trx.cc:1939
            #12 0x000055e643baaa9a in trx_commit (trx=0x7f9d9f3feca8) at /data/src/10.2-bug/storage/innobase/trx/trx0trx.cc:2009
            #13 0x000055e643bab38f in trx_commit_for_mysql (trx=0x7f9d9f3feca8) at /data/src/10.2-bug/storage/innobase/trx/trx0trx.cc:2229
            #14 0x000055e643c8cd56 in dict_stats_exec_sql (pinfo=0x7f9d5813f958, sql=0x55e6440eb830 "PROCEDURE TABLE_STATS_SAVE () IS\nBEGIN\nDELETE FROM \"mysql/innodb_table_stats\"\nWHERE\ndatabase_name = :database_name AND\ntable_name = :table_name;\nINSERT INTO \"mysql/innodb_table_stats\"\nVALUES\n(\n:databa"..., trx=0x7f9d9f3feca8) at /data/src/10.2-bug/storage/innobase/dict/dict0stats.cc:325
            #15 0x000055e643c912b6 in dict_stats_save (table_orig=0x7f9d58143908, only_for_index=0x0) at /data/src/10.2-bug/storage/innobase/dict/dict0stats.cc:2514
            #16 0x000055e643c92fcd in dict_stats_update (table=0x7f9d58143908, stats_upd_option=DICT_STATS_EMPTY_TABLE) at /data/src/10.2-bug/storage/innobase/dict/dict0stats.cc:3269
            #17 0x000055e643b2a4fb in row_truncate_complete (table=0x7f9d58143908, trx=0x7f9d9f3fe878, fsp_flags=33, logger=@0x7f9da4127398: 0x0, err=DB_SUCCESS) at /data/src/10.2-bug/storage/innobase/row/row0trunc.cc:1275
            #18 0x000055e643b2c006 in row_truncate_table_for_mysql (table=0x7f9d58143908, trx=0x7f9d9f3fe878) at /data/src/10.2-bug/storage/innobase/row/row0trunc.cc:2114
            #19 0x000055e6439b828f in ha_innobase::truncate (this=0x7f9d5812ff28) at /data/src/10.2-bug/storage/innobase/handler/ha_innodb.cc:13567
            #20 0x000055e6436a1ef5 in handler::ha_truncate (this=0x7f9d5812ff28) at /data/src/10.2-bug/sql/handler.cc:4078
            #21 0x000055e643868712 in Sql_cmd_truncate_table::handler_truncate (this=0x7f9d58012b20, thd=0x7f9d58000b00, table_ref=0x7f9d58012508, is_tmp_table=false) at /data/src/10.2-bug/sql/sql_truncate.cc:245
            #22 0x000055e643868d4c in Sql_cmd_truncate_table::truncate_table (this=0x7f9d58012b20, thd=0x7f9d58000b00, table_ref=0x7f9d58012508) at /data/src/10.2-bug/sql/sql_truncate.cc:441
            #23 0x000055e643868ebe in Sql_cmd_truncate_table::execute (this=0x7f9d58012b20, thd=0x7f9d58000b00) at /data/src/10.2-bug/sql/sql_truncate.cc:498
            #24 0x000055e64343286c in mysql_execute_command (thd=0x7f9d58000b00) at /data/src/10.2-bug/sql/sql_parse.cc:6203
            #25 0x000055e64343711c in mysql_parse (thd=0x7f9d58000b00, rawbuf=0x7f9d58012438 "TRUNCATE TABLE t1", length=17, parser_state=0x7f9da4128200, is_com_multi=false, is_next_command=false) at /data/src/10.2-bug/sql/sql_parse.cc:7875
            #26 0x000055e643424dc0 in dispatch_command (command=COM_QUERY, thd=0x7f9d58000b00, packet=0x7f9d58008891 "TRUNCATE TABLE t1", packet_length=17, is_com_multi=false, is_next_command=false) at /data/src/10.2-bug/sql/sql_parse.cc:1812
            #27 0x000055e643423736 in do_command (thd=0x7f9d58000b00) at /data/src/10.2-bug/sql/sql_parse.cc:1360
            #28 0x000055e643570917 in do_handle_one_connection (connect=0x55e646fd3150) at /data/src/10.2-bug/sql/sql_connect.cc:1354
            #29 0x000055e6435706a4 in handle_one_connection (arg=0x55e646fd3150) at /data/src/10.2-bug/sql/sql_connect.cc:1260
            #30 0x000055e64398d08c in pfs_spawn_thread (arg=0x55e646fdd6c0) at /data/src/10.2-bug/storage/perfschema/pfs.cc:1862
            #31 0x00007f9dab795494 in start_thread (arg=0x7f9da4129700) at pthread_create.c:333
            #32 0x00007f9da990d93f in clone () from /lib/x86_64-linux-gnu/libc.so.6
            {noformat}
            elenst Elena Stepanova made changes -
            Description {noformat}
            diff --git a/storage/innobase/trx/trx0purge.cc b/storage/innobase/trx/trx0purge.cc
            index e22bbd6..8b272ab 100644
            --- a/storage/innobase/trx/trx0purge.cc
            +++ b/storage/innobase/trx/trx0purge.cc
            @@ -281,6 +281,8 @@ trx_purge_add_update_undo_to_history(
                                    hist_size + undo->size, MLOG_4BYTES, mtr);
                    }
             
            + DBUG_EXECUTE_IF("mdev13201", my_sleep(1000000););
            +
                    /* Before any transaction-generating background threads or the
                    purge have been started, recv_recovery_rollback_active() can
                    start transactions in row_merge_drop_temp_indexes() and
            {noformat}
            {noformat:title=10.2 08c493c62afae0e81f with the patch above}
            2017-10-05 21:08:39 140315038668544 [Note] /data/src/10.2-bug/sql/mysqld (root[root] @ localhost []): Normal shutdown

            2017-10-05 21:08:39 140315038668544 [Note] Event Scheduler: Purging the queue. 0 events
            2017-10-05 21:08:39 140314702509824 [Note] InnoDB: FTS optimize thread exiting.
            mysqld: /data/src/10.2-bug/storage/innobase/trx/trx0purge.cc:307: void trx_purge_add_update_undo_to_history(trx_t*, ib_page_t*, mtr_t*): Assertion `srv_undo_sources || ((s
            rv_startup_is_before_trx_rollback_phase || trx_rollback_or_clean_is_active) && purge_sys->state == PURGE_STATE_INIT) || (srv_force_recovery >= SRV_FORCE_NO_BACKGROUND && p
            urge_sys->state == PURGE_STATE_DISABLED) || ((trx->undo_no == 0 || trx->in_mysql_trx_list) && srv_fast_shutdown)' failed.
            171005 21:08:41 [ERROR] mysqld got signal 6 ;

            #7 0x00007f9da9850ee2 in __assert_fail () from /lib/x86_64-linux-gnu/libc.so.6
            #8 0x000055e643b839f6 in trx_purge_add_update_undo_to_history (trx=0x7f9d9f3feca8, undo_page=0x7f9d9f0d4000 "", mtr=0x7f9da41263d0) at /data/src/10.2-bug/storage/innobase/trx/trx0purge.cc:300
            #9 0x000055e643bba351 in trx_undo_update_cleanup (trx=0x7f9d9f3feca8, undo_page=0x7f9d9f0d4000 "", mtr=0x7f9da41263d0) at /data/src/10.2-bug/storage/innobase/trx/trx0undo.cc:1838
            #10 0x000055e643ba903b in trx_write_serialisation_history (trx=0x7f9d9f3feca8, mtr=0x7f9da41263d0) at /data/src/10.2-bug/storage/innobase/trx/trx0trx.cc:1458
            #11 0x000055e643baa907 in trx_commit_low (trx=0x7f9d9f3feca8, mtr=0x7f9da41263d0) at /data/src/10.2-bug/storage/innobase/trx/trx0trx.cc:1939
            #12 0x000055e643baaa9a in trx_commit (trx=0x7f9d9f3feca8) at /data/src/10.2-bug/storage/innobase/trx/trx0trx.cc:2009
            #13 0x000055e643bab38f in trx_commit_for_mysql (trx=0x7f9d9f3feca8) at /data/src/10.2-bug/storage/innobase/trx/trx0trx.cc:2229
            #14 0x000055e643c8cd56 in dict_stats_exec_sql (pinfo=0x7f9d5813f958, sql=0x55e6440eb830 "PROCEDURE TABLE_STATS_SAVE () IS\nBEGIN\nDELETE FROM \"mysql/innodb_table_stats\"\nWHERE\ndatabase_name = :database_name AND\ntable_name = :table_name;\nINSERT INTO \"mysql/innodb_table_stats\"\nVALUES\n(\n:databa"..., trx=0x7f9d9f3feca8) at /data/src/10.2-bug/storage/innobase/dict/dict0stats.cc:325
            #15 0x000055e643c912b6 in dict_stats_save (table_orig=0x7f9d58143908, only_for_index=0x0) at /data/src/10.2-bug/storage/innobase/dict/dict0stats.cc:2514
            #16 0x000055e643c92fcd in dict_stats_update (table=0x7f9d58143908, stats_upd_option=DICT_STATS_EMPTY_TABLE) at /data/src/10.2-bug/storage/innobase/dict/dict0stats.cc:3269
            #17 0x000055e643b2a4fb in row_truncate_complete (table=0x7f9d58143908, trx=0x7f9d9f3fe878, fsp_flags=33, logger=@0x7f9da4127398: 0x0, err=DB_SUCCESS) at /data/src/10.2-bug/storage/innobase/row/row0trunc.cc:1275
            #18 0x000055e643b2c006 in row_truncate_table_for_mysql (table=0x7f9d58143908, trx=0x7f9d9f3fe878) at /data/src/10.2-bug/storage/innobase/row/row0trunc.cc:2114
            #19 0x000055e6439b828f in ha_innobase::truncate (this=0x7f9d5812ff28) at /data/src/10.2-bug/storage/innobase/handler/ha_innodb.cc:13567
            #20 0x000055e6436a1ef5 in handler::ha_truncate (this=0x7f9d5812ff28) at /data/src/10.2-bug/sql/handler.cc:4078
            #21 0x000055e643868712 in Sql_cmd_truncate_table::handler_truncate (this=0x7f9d58012b20, thd=0x7f9d58000b00, table_ref=0x7f9d58012508, is_tmp_table=false) at /data/src/10.2-bug/sql/sql_truncate.cc:245
            #22 0x000055e643868d4c in Sql_cmd_truncate_table::truncate_table (this=0x7f9d58012b20, thd=0x7f9d58000b00, table_ref=0x7f9d58012508) at /data/src/10.2-bug/sql/sql_truncate.cc:441
            #23 0x000055e643868ebe in Sql_cmd_truncate_table::execute (this=0x7f9d58012b20, thd=0x7f9d58000b00) at /data/src/10.2-bug/sql/sql_truncate.cc:498
            #24 0x000055e64343286c in mysql_execute_command (thd=0x7f9d58000b00) at /data/src/10.2-bug/sql/sql_parse.cc:6203
            #25 0x000055e64343711c in mysql_parse (thd=0x7f9d58000b00, rawbuf=0x7f9d58012438 "TRUNCATE TABLE t1", length=17, parser_state=0x7f9da4128200, is_com_multi=false, is_next_command=false) at /data/src/10.2-bug/sql/sql_parse.cc:7875
            #26 0x000055e643424dc0 in dispatch_command (command=COM_QUERY, thd=0x7f9d58000b00, packet=0x7f9d58008891 "TRUNCATE TABLE t1", packet_length=17, is_com_multi=false, is_next_command=false) at /data/src/10.2-bug/sql/sql_parse.cc:1812
            #27 0x000055e643423736 in do_command (thd=0x7f9d58000b00) at /data/src/10.2-bug/sql/sql_parse.cc:1360
            #28 0x000055e643570917 in do_handle_one_connection (connect=0x55e646fd3150) at /data/src/10.2-bug/sql/sql_connect.cc:1354
            #29 0x000055e6435706a4 in handle_one_connection (arg=0x55e646fd3150) at /data/src/10.2-bug/sql/sql_connect.cc:1260
            #30 0x000055e64398d08c in pfs_spawn_thread (arg=0x55e646fdd6c0) at /data/src/10.2-bug/storage/perfschema/pfs.cc:1862
            #31 0x00007f9dab795494 in start_thread (arg=0x7f9da4129700) at pthread_create.c:333
            #32 0x00007f9da990d93f in clone () from /lib/x86_64-linux-gnu/libc.so.6
            {noformat}
            {noformat}
            diff --git a/storage/innobase/trx/trx0purge.cc b/storage/innobase/trx/trx0purge.cc
            index e22bbd6..8b272ab 100644
            --- a/storage/innobase/trx/trx0purge.cc
            +++ b/storage/innobase/trx/trx0purge.cc
            @@ -281,6 +281,8 @@ trx_purge_add_update_undo_to_history(
                                    hist_size + undo->size, MLOG_4BYTES, mtr);
                    }
             
            + DBUG_EXECUTE_IF("mdev13201", my_sleep(1000000););
            +
                    /* Before any transaction-generating background threads or the
                    purge have been started, recv_recovery_rollback_active() can
                    start transactions in row_merge_drop_temp_indexes() and
            {noformat}
            {noformat:title=10.2 08c493c62afae0e81f with the patch above}
            2017-10-05 21:08:39 140315038668544 [Note] /data/src/10.2-bug/sql/mysqld (root[root] @ localhost []): Normal shutdown

            2017-10-05 21:08:39 140315038668544 [Note] Event Scheduler: Purging the queue. 0 events
            2017-10-05 21:08:39 140314702509824 [Note] InnoDB: FTS optimize thread exiting.
            mysqld: /data/src/10.2-bug/storage/innobase/trx/trx0purge.cc:307: void trx_purge_add_update_undo_to_history(trx_t*, ib_page_t*, mtr_t*): Assertion `srv_undo_sources || ((s
            rv_startup_is_before_trx_rollback_phase || trx_rollback_or_clean_is_active) && purge_sys->state == PURGE_STATE_INIT) || (srv_force_recovery >= SRV_FORCE_NO_BACKGROUND && p
            urge_sys->state == PURGE_STATE_DISABLED) || ((trx->undo_no == 0 || trx->in_mysql_trx_list) && srv_fast_shutdown)' failed.
            171005 21:08:41 [ERROR] mysqld got signal 6 ;

            #7 0x00007f9da9850ee2 in __assert_fail () from /lib/x86_64-linux-gnu/libc.so.6
            #8 0x000055e643b839f6 in trx_purge_add_update_undo_to_history (trx=0x7f9d9f3feca8, undo_page=0x7f9d9f0d4000 "", mtr=0x7f9da41263d0) at /data/src/10.2-bug/storage/innobase/trx/trx0purge.cc:300
            #9 0x000055e643bba351 in trx_undo_update_cleanup (trx=0x7f9d9f3feca8, undo_page=0x7f9d9f0d4000 "", mtr=0x7f9da41263d0) at /data/src/10.2-bug/storage/innobase/trx/trx0undo.cc:1838
            #10 0x000055e643ba903b in trx_write_serialisation_history (trx=0x7f9d9f3feca8, mtr=0x7f9da41263d0) at /data/src/10.2-bug/storage/innobase/trx/trx0trx.cc:1458
            #11 0x000055e643baa907 in trx_commit_low (trx=0x7f9d9f3feca8, mtr=0x7f9da41263d0) at /data/src/10.2-bug/storage/innobase/trx/trx0trx.cc:1939
            #12 0x000055e643baaa9a in trx_commit (trx=0x7f9d9f3feca8) at /data/src/10.2-bug/storage/innobase/trx/trx0trx.cc:2009
            #13 0x000055e643bab38f in trx_commit_for_mysql (trx=0x7f9d9f3feca8) at /data/src/10.2-bug/storage/innobase/trx/trx0trx.cc:2229
            #14 0x000055e643c8cd56 in dict_stats_exec_sql (pinfo=0x7f9d5813f958, sql=0x55e6440eb830 "PROCEDURE TABLE_STATS_SAVE () IS\nBEGIN\nDELETE FROM \"mysql/innodb_table_stats\"\nWHERE\ndatabase_name = :database_name AND\ntable_name = :table_name;\nINSERT INTO \"mysql/innodb_table_stats\"\nVALUES\n(\n:databa"..., trx=0x7f9d9f3feca8) at /data/src/10.2-bug/storage/innobase/dict/dict0stats.cc:325
            #15 0x000055e643c912b6 in dict_stats_save (table_orig=0x7f9d58143908, only_for_index=0x0) at /data/src/10.2-bug/storage/innobase/dict/dict0stats.cc:2514
            #16 0x000055e643c92fcd in dict_stats_update (table=0x7f9d58143908, stats_upd_option=DICT_STATS_EMPTY_TABLE) at /data/src/10.2-bug/storage/innobase/dict/dict0stats.cc:3269
            #17 0x000055e643b2a4fb in row_truncate_complete (table=0x7f9d58143908, trx=0x7f9d9f3fe878, fsp_flags=33, logger=@0x7f9da4127398: 0x0, err=DB_SUCCESS) at /data/src/10.2-bug/storage/innobase/row/row0trunc.cc:1275
            #18 0x000055e643b2c006 in row_truncate_table_for_mysql (table=0x7f9d58143908, trx=0x7f9d9f3fe878) at /data/src/10.2-bug/storage/innobase/row/row0trunc.cc:2114
            #19 0x000055e6439b828f in ha_innobase::truncate (this=0x7f9d5812ff28) at /data/src/10.2-bug/storage/innobase/handler/ha_innodb.cc:13567
            #20 0x000055e6436a1ef5 in handler::ha_truncate (this=0x7f9d5812ff28) at /data/src/10.2-bug/sql/handler.cc:4078
            #21 0x000055e643868712 in Sql_cmd_truncate_table::handler_truncate (this=0x7f9d58012b20, thd=0x7f9d58000b00, table_ref=0x7f9d58012508, is_tmp_table=false) at /data/src/10.2-bug/sql/sql_truncate.cc:245
            #22 0x000055e643868d4c in Sql_cmd_truncate_table::truncate_table (this=0x7f9d58012b20, thd=0x7f9d58000b00, table_ref=0x7f9d58012508) at /data/src/10.2-bug/sql/sql_truncate.cc:441
            #23 0x000055e643868ebe in Sql_cmd_truncate_table::execute (this=0x7f9d58012b20, thd=0x7f9d58000b00) at /data/src/10.2-bug/sql/sql_truncate.cc:498
            #24 0x000055e64343286c in mysql_execute_command (thd=0x7f9d58000b00) at /data/src/10.2-bug/sql/sql_parse.cc:6203
            #25 0x000055e64343711c in mysql_parse (thd=0x7f9d58000b00, rawbuf=0x7f9d58012438 "TRUNCATE TABLE t1", length=17, parser_state=0x7f9da4128200, is_com_multi=false, is_next_command=false) at /data/src/10.2-bug/sql/sql_parse.cc:7875
            #26 0x000055e643424dc0 in dispatch_command (command=COM_QUERY, thd=0x7f9d58000b00, packet=0x7f9d58008891 "TRUNCATE TABLE t1", packet_length=17, is_com_multi=false, is_next_command=false) at /data/src/10.2-bug/sql/sql_parse.cc:1812
            #27 0x000055e643423736 in do_command (thd=0x7f9d58000b00) at /data/src/10.2-bug/sql/sql_parse.cc:1360
            #28 0x000055e643570917 in do_handle_one_connection (connect=0x55e646fd3150) at /data/src/10.2-bug/sql/sql_connect.cc:1354
            #29 0x000055e6435706a4 in handle_one_connection (arg=0x55e646fd3150) at /data/src/10.2-bug/sql/sql_connect.cc:1260
            #30 0x000055e64398d08c in pfs_spawn_thread (arg=0x55e646fdd6c0) at /data/src/10.2-bug/storage/perfschema/pfs.cc:1862
            #31 0x00007f9dab795494 in start_thread (arg=0x7f9da4129700) at pthread_create.c:333
            #32 0x00007f9da990d93f in clone () from /lib/x86_64-linux-gnu/libc.so.6
            {noformat}

            {code:sql}
            --source include/have_innodb.inc

            --let $stats= `SELECT @@innodb_stats_persistent`
            SET GLOBAL innodb_stats_persistent= ON;

            CREATE TABLE t1 (t TEXT) ENGINE=InnoDB;
            SET debug_dbug='+d,mdev13900_25';
            --enable_reconnect

            --send
              TRUNCATE TABLE t1;

            --connect (con1,localhost,root,,test)
            --source include/restart_mysqld.inc
            --disconnect con1

            --connection default
            --disable_abort_on_error
            --reap
            SELECT COUNT(*) FROM t1;
            DROP TABLE t1;

            eval SET GLOBAL innodb_stats_persistent= $stats;
            {code}
            elenst Elena Stepanova made changes -
            Attachment t3.test.gz [ 43775 ]
            elenst Elena Stepanova made changes -
            Description {noformat}
            diff --git a/storage/innobase/trx/trx0purge.cc b/storage/innobase/trx/trx0purge.cc
            index e22bbd6..8b272ab 100644
            --- a/storage/innobase/trx/trx0purge.cc
            +++ b/storage/innobase/trx/trx0purge.cc
            @@ -281,6 +281,8 @@ trx_purge_add_update_undo_to_history(
                                    hist_size + undo->size, MLOG_4BYTES, mtr);
                    }
             
            + DBUG_EXECUTE_IF("mdev13201", my_sleep(1000000););
            +
                    /* Before any transaction-generating background threads or the
                    purge have been started, recv_recovery_rollback_active() can
                    start transactions in row_merge_drop_temp_indexes() and
            {noformat}
            {noformat:title=10.2 08c493c62afae0e81f with the patch above}
            2017-10-05 21:08:39 140315038668544 [Note] /data/src/10.2-bug/sql/mysqld (root[root] @ localhost []): Normal shutdown

            2017-10-05 21:08:39 140315038668544 [Note] Event Scheduler: Purging the queue. 0 events
            2017-10-05 21:08:39 140314702509824 [Note] InnoDB: FTS optimize thread exiting.
            mysqld: /data/src/10.2-bug/storage/innobase/trx/trx0purge.cc:307: void trx_purge_add_update_undo_to_history(trx_t*, ib_page_t*, mtr_t*): Assertion `srv_undo_sources || ((s
            rv_startup_is_before_trx_rollback_phase || trx_rollback_or_clean_is_active) && purge_sys->state == PURGE_STATE_INIT) || (srv_force_recovery >= SRV_FORCE_NO_BACKGROUND && p
            urge_sys->state == PURGE_STATE_DISABLED) || ((trx->undo_no == 0 || trx->in_mysql_trx_list) && srv_fast_shutdown)' failed.
            171005 21:08:41 [ERROR] mysqld got signal 6 ;

            #7 0x00007f9da9850ee2 in __assert_fail () from /lib/x86_64-linux-gnu/libc.so.6
            #8 0x000055e643b839f6 in trx_purge_add_update_undo_to_history (trx=0x7f9d9f3feca8, undo_page=0x7f9d9f0d4000 "", mtr=0x7f9da41263d0) at /data/src/10.2-bug/storage/innobase/trx/trx0purge.cc:300
            #9 0x000055e643bba351 in trx_undo_update_cleanup (trx=0x7f9d9f3feca8, undo_page=0x7f9d9f0d4000 "", mtr=0x7f9da41263d0) at /data/src/10.2-bug/storage/innobase/trx/trx0undo.cc:1838
            #10 0x000055e643ba903b in trx_write_serialisation_history (trx=0x7f9d9f3feca8, mtr=0x7f9da41263d0) at /data/src/10.2-bug/storage/innobase/trx/trx0trx.cc:1458
            #11 0x000055e643baa907 in trx_commit_low (trx=0x7f9d9f3feca8, mtr=0x7f9da41263d0) at /data/src/10.2-bug/storage/innobase/trx/trx0trx.cc:1939
            #12 0x000055e643baaa9a in trx_commit (trx=0x7f9d9f3feca8) at /data/src/10.2-bug/storage/innobase/trx/trx0trx.cc:2009
            #13 0x000055e643bab38f in trx_commit_for_mysql (trx=0x7f9d9f3feca8) at /data/src/10.2-bug/storage/innobase/trx/trx0trx.cc:2229
            #14 0x000055e643c8cd56 in dict_stats_exec_sql (pinfo=0x7f9d5813f958, sql=0x55e6440eb830 "PROCEDURE TABLE_STATS_SAVE () IS\nBEGIN\nDELETE FROM \"mysql/innodb_table_stats\"\nWHERE\ndatabase_name = :database_name AND\ntable_name = :table_name;\nINSERT INTO \"mysql/innodb_table_stats\"\nVALUES\n(\n:databa"..., trx=0x7f9d9f3feca8) at /data/src/10.2-bug/storage/innobase/dict/dict0stats.cc:325
            #15 0x000055e643c912b6 in dict_stats_save (table_orig=0x7f9d58143908, only_for_index=0x0) at /data/src/10.2-bug/storage/innobase/dict/dict0stats.cc:2514
            #16 0x000055e643c92fcd in dict_stats_update (table=0x7f9d58143908, stats_upd_option=DICT_STATS_EMPTY_TABLE) at /data/src/10.2-bug/storage/innobase/dict/dict0stats.cc:3269
            #17 0x000055e643b2a4fb in row_truncate_complete (table=0x7f9d58143908, trx=0x7f9d9f3fe878, fsp_flags=33, logger=@0x7f9da4127398: 0x0, err=DB_SUCCESS) at /data/src/10.2-bug/storage/innobase/row/row0trunc.cc:1275
            #18 0x000055e643b2c006 in row_truncate_table_for_mysql (table=0x7f9d58143908, trx=0x7f9d9f3fe878) at /data/src/10.2-bug/storage/innobase/row/row0trunc.cc:2114
            #19 0x000055e6439b828f in ha_innobase::truncate (this=0x7f9d5812ff28) at /data/src/10.2-bug/storage/innobase/handler/ha_innodb.cc:13567
            #20 0x000055e6436a1ef5 in handler::ha_truncate (this=0x7f9d5812ff28) at /data/src/10.2-bug/sql/handler.cc:4078
            #21 0x000055e643868712 in Sql_cmd_truncate_table::handler_truncate (this=0x7f9d58012b20, thd=0x7f9d58000b00, table_ref=0x7f9d58012508, is_tmp_table=false) at /data/src/10.2-bug/sql/sql_truncate.cc:245
            #22 0x000055e643868d4c in Sql_cmd_truncate_table::truncate_table (this=0x7f9d58012b20, thd=0x7f9d58000b00, table_ref=0x7f9d58012508) at /data/src/10.2-bug/sql/sql_truncate.cc:441
            #23 0x000055e643868ebe in Sql_cmd_truncate_table::execute (this=0x7f9d58012b20, thd=0x7f9d58000b00) at /data/src/10.2-bug/sql/sql_truncate.cc:498
            #24 0x000055e64343286c in mysql_execute_command (thd=0x7f9d58000b00) at /data/src/10.2-bug/sql/sql_parse.cc:6203
            #25 0x000055e64343711c in mysql_parse (thd=0x7f9d58000b00, rawbuf=0x7f9d58012438 "TRUNCATE TABLE t1", length=17, parser_state=0x7f9da4128200, is_com_multi=false, is_next_command=false) at /data/src/10.2-bug/sql/sql_parse.cc:7875
            #26 0x000055e643424dc0 in dispatch_command (command=COM_QUERY, thd=0x7f9d58000b00, packet=0x7f9d58008891 "TRUNCATE TABLE t1", packet_length=17, is_com_multi=false, is_next_command=false) at /data/src/10.2-bug/sql/sql_parse.cc:1812
            #27 0x000055e643423736 in do_command (thd=0x7f9d58000b00) at /data/src/10.2-bug/sql/sql_parse.cc:1360
            #28 0x000055e643570917 in do_handle_one_connection (connect=0x55e646fd3150) at /data/src/10.2-bug/sql/sql_connect.cc:1354
            #29 0x000055e6435706a4 in handle_one_connection (arg=0x55e646fd3150) at /data/src/10.2-bug/sql/sql_connect.cc:1260
            #30 0x000055e64398d08c in pfs_spawn_thread (arg=0x55e646fdd6c0) at /data/src/10.2-bug/storage/perfschema/pfs.cc:1862
            #31 0x00007f9dab795494 in start_thread (arg=0x7f9da4129700) at pthread_create.c:333
            #32 0x00007f9da990d93f in clone () from /lib/x86_64-linux-gnu/libc.so.6
            {noformat}

            {code:sql}
            --source include/have_innodb.inc

            --let $stats= `SELECT @@innodb_stats_persistent`
            SET GLOBAL innodb_stats_persistent= ON;

            CREATE TABLE t1 (t TEXT) ENGINE=InnoDB;
            SET debug_dbug='+d,mdev13900_25';
            --enable_reconnect

            --send
              TRUNCATE TABLE t1;

            --connect (con1,localhost,root,,test)
            --source include/restart_mysqld.inc
            --disconnect con1

            --connection default
            --disable_abort_on_error
            --reap
            SELECT COUNT(*) FROM t1;
            DROP TABLE t1;

            eval SET GLOBAL innodb_stats_persistent= $stats;
            {code}
            {noformat}
            diff --git a/storage/innobase/trx/trx0purge.cc b/storage/innobase/trx/trx0purge.cc
            index e22bbd6..8b272ab 100644
            --- a/storage/innobase/trx/trx0purge.cc
            +++ b/storage/innobase/trx/trx0purge.cc
            @@ -281,6 +281,8 @@ trx_purge_add_update_undo_to_history(
                                    hist_size + undo->size, MLOG_4BYTES, mtr);
                    }
             
            + DBUG_EXECUTE_IF("mdev13201", my_sleep(1000000););
            +
                    /* Before any transaction-generating background threads or the
                    purge have been started, recv_recovery_rollback_active() can
                    start transactions in row_merge_drop_temp_indexes() and
            {noformat}
            {noformat:title=10.2 08c493c62afae0e81f with the patch above}
            2017-10-05 21:08:39 140315038668544 [Note] /data/src/10.2-bug/sql/mysqld (root[root] @ localhost []): Normal shutdown

            2017-10-05 21:08:39 140315038668544 [Note] Event Scheduler: Purging the queue. 0 events
            2017-10-05 21:08:39 140314702509824 [Note] InnoDB: FTS optimize thread exiting.
            mysqld: /data/src/10.2-bug/storage/innobase/trx/trx0purge.cc:307: void trx_purge_add_update_undo_to_history(trx_t*, ib_page_t*, mtr_t*): Assertion `srv_undo_sources || ((s
            rv_startup_is_before_trx_rollback_phase || trx_rollback_or_clean_is_active) && purge_sys->state == PURGE_STATE_INIT) || (srv_force_recovery >= SRV_FORCE_NO_BACKGROUND && p
            urge_sys->state == PURGE_STATE_DISABLED) || ((trx->undo_no == 0 || trx->in_mysql_trx_list) && srv_fast_shutdown)' failed.
            171005 21:08:41 [ERROR] mysqld got signal 6 ;

            #7 0x00007f9da9850ee2 in __assert_fail () from /lib/x86_64-linux-gnu/libc.so.6
            #8 0x000055e643b839f6 in trx_purge_add_update_undo_to_history (trx=0x7f9d9f3feca8, undo_page=0x7f9d9f0d4000 "", mtr=0x7f9da41263d0) at /data/src/10.2-bug/storage/innobase/trx/trx0purge.cc:300
            #9 0x000055e643bba351 in trx_undo_update_cleanup (trx=0x7f9d9f3feca8, undo_page=0x7f9d9f0d4000 "", mtr=0x7f9da41263d0) at /data/src/10.2-bug/storage/innobase/trx/trx0undo.cc:1838
            #10 0x000055e643ba903b in trx_write_serialisation_history (trx=0x7f9d9f3feca8, mtr=0x7f9da41263d0) at /data/src/10.2-bug/storage/innobase/trx/trx0trx.cc:1458
            #11 0x000055e643baa907 in trx_commit_low (trx=0x7f9d9f3feca8, mtr=0x7f9da41263d0) at /data/src/10.2-bug/storage/innobase/trx/trx0trx.cc:1939
            #12 0x000055e643baaa9a in trx_commit (trx=0x7f9d9f3feca8) at /data/src/10.2-bug/storage/innobase/trx/trx0trx.cc:2009
            #13 0x000055e643bab38f in trx_commit_for_mysql (trx=0x7f9d9f3feca8) at /data/src/10.2-bug/storage/innobase/trx/trx0trx.cc:2229
            #14 0x000055e643c8cd56 in dict_stats_exec_sql (pinfo=0x7f9d5813f958, sql=0x55e6440eb830 "PROCEDURE TABLE_STATS_SAVE () IS\nBEGIN\nDELETE FROM \"mysql/innodb_table_stats\"\nWHERE\ndatabase_name = :database_name AND\ntable_name = :table_name;\nINSERT INTO \"mysql/innodb_table_stats\"\nVALUES\n(\n:databa"..., trx=0x7f9d9f3feca8) at /data/src/10.2-bug/storage/innobase/dict/dict0stats.cc:325
            #15 0x000055e643c912b6 in dict_stats_save (table_orig=0x7f9d58143908, only_for_index=0x0) at /data/src/10.2-bug/storage/innobase/dict/dict0stats.cc:2514
            #16 0x000055e643c92fcd in dict_stats_update (table=0x7f9d58143908, stats_upd_option=DICT_STATS_EMPTY_TABLE) at /data/src/10.2-bug/storage/innobase/dict/dict0stats.cc:3269
            #17 0x000055e643b2a4fb in row_truncate_complete (table=0x7f9d58143908, trx=0x7f9d9f3fe878, fsp_flags=33, logger=@0x7f9da4127398: 0x0, err=DB_SUCCESS) at /data/src/10.2-bug/storage/innobase/row/row0trunc.cc:1275
            #18 0x000055e643b2c006 in row_truncate_table_for_mysql (table=0x7f9d58143908, trx=0x7f9d9f3fe878) at /data/src/10.2-bug/storage/innobase/row/row0trunc.cc:2114
            #19 0x000055e6439b828f in ha_innobase::truncate (this=0x7f9d5812ff28) at /data/src/10.2-bug/storage/innobase/handler/ha_innodb.cc:13567
            #20 0x000055e6436a1ef5 in handler::ha_truncate (this=0x7f9d5812ff28) at /data/src/10.2-bug/sql/handler.cc:4078
            #21 0x000055e643868712 in Sql_cmd_truncate_table::handler_truncate (this=0x7f9d58012b20, thd=0x7f9d58000b00, table_ref=0x7f9d58012508, is_tmp_table=false) at /data/src/10.2-bug/sql/sql_truncate.cc:245
            #22 0x000055e643868d4c in Sql_cmd_truncate_table::truncate_table (this=0x7f9d58012b20, thd=0x7f9d58000b00, table_ref=0x7f9d58012508) at /data/src/10.2-bug/sql/sql_truncate.cc:441
            #23 0x000055e643868ebe in Sql_cmd_truncate_table::execute (this=0x7f9d58012b20, thd=0x7f9d58000b00) at /data/src/10.2-bug/sql/sql_truncate.cc:498
            #24 0x000055e64343286c in mysql_execute_command (thd=0x7f9d58000b00) at /data/src/10.2-bug/sql/sql_parse.cc:6203
            #25 0x000055e64343711c in mysql_parse (thd=0x7f9d58000b00, rawbuf=0x7f9d58012438 "TRUNCATE TABLE t1", length=17, parser_state=0x7f9da4128200, is_com_multi=false, is_next_command=false) at /data/src/10.2-bug/sql/sql_parse.cc:7875
            #26 0x000055e643424dc0 in dispatch_command (command=COM_QUERY, thd=0x7f9d58000b00, packet=0x7f9d58008891 "TRUNCATE TABLE t1", packet_length=17, is_com_multi=false, is_next_command=false) at /data/src/10.2-bug/sql/sql_parse.cc:1812
            #27 0x000055e643423736 in do_command (thd=0x7f9d58000b00) at /data/src/10.2-bug/sql/sql_parse.cc:1360
            #28 0x000055e643570917 in do_handle_one_connection (connect=0x55e646fd3150) at /data/src/10.2-bug/sql/sql_connect.cc:1354
            #29 0x000055e6435706a4 in handle_one_connection (arg=0x55e646fd3150) at /data/src/10.2-bug/sql/sql_connect.cc:1260
            #30 0x000055e64398d08c in pfs_spawn_thread (arg=0x55e646fdd6c0) at /data/src/10.2-bug/storage/perfschema/pfs.cc:1862
            #31 0x00007f9dab795494 in start_thread (arg=0x7f9da4129700) at pthread_create.c:333
            #32 0x00007f9da990d93f in clone () from /lib/x86_64-linux-gnu/libc.so.6
            {noformat}

            {code:sql}
            --source include/have_innodb.inc

            --let $stats= `SELECT @@innodb_stats_persistent`
            SET GLOBAL innodb_stats_persistent= ON;

            CREATE TABLE t1 (t TEXT) ENGINE=InnoDB;
            SET debug_dbug='+d,mdev13201';
            --enable_reconnect

            --send
              TRUNCATE TABLE t1;

            --connect (con1,localhost,root,,test)
            --source include/restart_mysqld.inc
            --disconnect con1

            --connection default
            --disable_abort_on_error
            --reap
            SELECT COUNT(*) FROM t1;
            DROP TABLE t1;

            eval SET GLOBAL innodb_stats_persistent= $stats;
            {code}
            elenst Elena Stepanova made changes -
            Description {noformat}
            diff --git a/storage/innobase/trx/trx0purge.cc b/storage/innobase/trx/trx0purge.cc
            index e22bbd6..8b272ab 100644
            --- a/storage/innobase/trx/trx0purge.cc
            +++ b/storage/innobase/trx/trx0purge.cc
            @@ -281,6 +281,8 @@ trx_purge_add_update_undo_to_history(
                                    hist_size + undo->size, MLOG_4BYTES, mtr);
                    }
             
            + DBUG_EXECUTE_IF("mdev13201", my_sleep(1000000););
            +
                    /* Before any transaction-generating background threads or the
                    purge have been started, recv_recovery_rollback_active() can
                    start transactions in row_merge_drop_temp_indexes() and
            {noformat}
            {noformat:title=10.2 08c493c62afae0e81f with the patch above}
            2017-10-05 21:08:39 140315038668544 [Note] /data/src/10.2-bug/sql/mysqld (root[root] @ localhost []): Normal shutdown

            2017-10-05 21:08:39 140315038668544 [Note] Event Scheduler: Purging the queue. 0 events
            2017-10-05 21:08:39 140314702509824 [Note] InnoDB: FTS optimize thread exiting.
            mysqld: /data/src/10.2-bug/storage/innobase/trx/trx0purge.cc:307: void trx_purge_add_update_undo_to_history(trx_t*, ib_page_t*, mtr_t*): Assertion `srv_undo_sources || ((s
            rv_startup_is_before_trx_rollback_phase || trx_rollback_or_clean_is_active) && purge_sys->state == PURGE_STATE_INIT) || (srv_force_recovery >= SRV_FORCE_NO_BACKGROUND && p
            urge_sys->state == PURGE_STATE_DISABLED) || ((trx->undo_no == 0 || trx->in_mysql_trx_list) && srv_fast_shutdown)' failed.
            171005 21:08:41 [ERROR] mysqld got signal 6 ;

            #7 0x00007f9da9850ee2 in __assert_fail () from /lib/x86_64-linux-gnu/libc.so.6
            #8 0x000055e643b839f6 in trx_purge_add_update_undo_to_history (trx=0x7f9d9f3feca8, undo_page=0x7f9d9f0d4000 "", mtr=0x7f9da41263d0) at /data/src/10.2-bug/storage/innobase/trx/trx0purge.cc:300
            #9 0x000055e643bba351 in trx_undo_update_cleanup (trx=0x7f9d9f3feca8, undo_page=0x7f9d9f0d4000 "", mtr=0x7f9da41263d0) at /data/src/10.2-bug/storage/innobase/trx/trx0undo.cc:1838
            #10 0x000055e643ba903b in trx_write_serialisation_history (trx=0x7f9d9f3feca8, mtr=0x7f9da41263d0) at /data/src/10.2-bug/storage/innobase/trx/trx0trx.cc:1458
            #11 0x000055e643baa907 in trx_commit_low (trx=0x7f9d9f3feca8, mtr=0x7f9da41263d0) at /data/src/10.2-bug/storage/innobase/trx/trx0trx.cc:1939
            #12 0x000055e643baaa9a in trx_commit (trx=0x7f9d9f3feca8) at /data/src/10.2-bug/storage/innobase/trx/trx0trx.cc:2009
            #13 0x000055e643bab38f in trx_commit_for_mysql (trx=0x7f9d9f3feca8) at /data/src/10.2-bug/storage/innobase/trx/trx0trx.cc:2229
            #14 0x000055e643c8cd56 in dict_stats_exec_sql (pinfo=0x7f9d5813f958, sql=0x55e6440eb830 "PROCEDURE TABLE_STATS_SAVE () IS\nBEGIN\nDELETE FROM \"mysql/innodb_table_stats\"\nWHERE\ndatabase_name = :database_name AND\ntable_name = :table_name;\nINSERT INTO \"mysql/innodb_table_stats\"\nVALUES\n(\n:databa"..., trx=0x7f9d9f3feca8) at /data/src/10.2-bug/storage/innobase/dict/dict0stats.cc:325
            #15 0x000055e643c912b6 in dict_stats_save (table_orig=0x7f9d58143908, only_for_index=0x0) at /data/src/10.2-bug/storage/innobase/dict/dict0stats.cc:2514
            #16 0x000055e643c92fcd in dict_stats_update (table=0x7f9d58143908, stats_upd_option=DICT_STATS_EMPTY_TABLE) at /data/src/10.2-bug/storage/innobase/dict/dict0stats.cc:3269
            #17 0x000055e643b2a4fb in row_truncate_complete (table=0x7f9d58143908, trx=0x7f9d9f3fe878, fsp_flags=33, logger=@0x7f9da4127398: 0x0, err=DB_SUCCESS) at /data/src/10.2-bug/storage/innobase/row/row0trunc.cc:1275
            #18 0x000055e643b2c006 in row_truncate_table_for_mysql (table=0x7f9d58143908, trx=0x7f9d9f3fe878) at /data/src/10.2-bug/storage/innobase/row/row0trunc.cc:2114
            #19 0x000055e6439b828f in ha_innobase::truncate (this=0x7f9d5812ff28) at /data/src/10.2-bug/storage/innobase/handler/ha_innodb.cc:13567
            #20 0x000055e6436a1ef5 in handler::ha_truncate (this=0x7f9d5812ff28) at /data/src/10.2-bug/sql/handler.cc:4078
            #21 0x000055e643868712 in Sql_cmd_truncate_table::handler_truncate (this=0x7f9d58012b20, thd=0x7f9d58000b00, table_ref=0x7f9d58012508, is_tmp_table=false) at /data/src/10.2-bug/sql/sql_truncate.cc:245
            #22 0x000055e643868d4c in Sql_cmd_truncate_table::truncate_table (this=0x7f9d58012b20, thd=0x7f9d58000b00, table_ref=0x7f9d58012508) at /data/src/10.2-bug/sql/sql_truncate.cc:441
            #23 0x000055e643868ebe in Sql_cmd_truncate_table::execute (this=0x7f9d58012b20, thd=0x7f9d58000b00) at /data/src/10.2-bug/sql/sql_truncate.cc:498
            #24 0x000055e64343286c in mysql_execute_command (thd=0x7f9d58000b00) at /data/src/10.2-bug/sql/sql_parse.cc:6203
            #25 0x000055e64343711c in mysql_parse (thd=0x7f9d58000b00, rawbuf=0x7f9d58012438 "TRUNCATE TABLE t1", length=17, parser_state=0x7f9da4128200, is_com_multi=false, is_next_command=false) at /data/src/10.2-bug/sql/sql_parse.cc:7875
            #26 0x000055e643424dc0 in dispatch_command (command=COM_QUERY, thd=0x7f9d58000b00, packet=0x7f9d58008891 "TRUNCATE TABLE t1", packet_length=17, is_com_multi=false, is_next_command=false) at /data/src/10.2-bug/sql/sql_parse.cc:1812
            #27 0x000055e643423736 in do_command (thd=0x7f9d58000b00) at /data/src/10.2-bug/sql/sql_parse.cc:1360
            #28 0x000055e643570917 in do_handle_one_connection (connect=0x55e646fd3150) at /data/src/10.2-bug/sql/sql_connect.cc:1354
            #29 0x000055e6435706a4 in handle_one_connection (arg=0x55e646fd3150) at /data/src/10.2-bug/sql/sql_connect.cc:1260
            #30 0x000055e64398d08c in pfs_spawn_thread (arg=0x55e646fdd6c0) at /data/src/10.2-bug/storage/perfschema/pfs.cc:1862
            #31 0x00007f9dab795494 in start_thread (arg=0x7f9da4129700) at pthread_create.c:333
            #32 0x00007f9da990d93f in clone () from /lib/x86_64-linux-gnu/libc.so.6
            {noformat}

            {code:sql}
            --source include/have_innodb.inc

            --let $stats= `SELECT @@innodb_stats_persistent`
            SET GLOBAL innodb_stats_persistent= ON;

            CREATE TABLE t1 (t TEXT) ENGINE=InnoDB;
            SET debug_dbug='+d,mdev13201';
            --enable_reconnect

            --send
              TRUNCATE TABLE t1;

            --connect (con1,localhost,root,,test)
            --source include/restart_mysqld.inc
            --disconnect con1

            --connection default
            --disable_abort_on_error
            --reap
            SELECT COUNT(*) FROM t1;
            DROP TABLE t1;

            eval SET GLOBAL innodb_stats_persistent= $stats;
            {code}
            {noformat}
            diff --git a/storage/innobase/trx/trx0purge.cc b/storage/innobase/trx/trx0purge.cc
            index e22bbd6..8b272ab 100644
            --- a/storage/innobase/trx/trx0purge.cc
            +++ b/storage/innobase/trx/trx0purge.cc
            @@ -281,6 +281,8 @@ trx_purge_add_update_undo_to_history(
                                    hist_size + undo->size, MLOG_4BYTES, mtr);
                    }
             
            + DBUG_EXECUTE_IF("mdev13201", my_sleep(1000000););
            +
                    /* Before any transaction-generating background threads or the
                    purge have been started, recv_recovery_rollback_active() can
                    start transactions in row_merge_drop_temp_indexes() and
            {noformat}
            {noformat:title=10.2 08c493c62afae0e81f with the patch above}
            2017-10-05 21:08:39 140315038668544 [Note] /data/src/10.2-bug/sql/mysqld (root[root] @ localhost []): Normal shutdown

            2017-10-05 21:08:39 140315038668544 [Note] Event Scheduler: Purging the queue. 0 events
            2017-10-05 21:08:39 140314702509824 [Note] InnoDB: FTS optimize thread exiting.
            mysqld: /data/src/10.2-bug/storage/innobase/trx/trx0purge.cc:307: void trx_purge_add_update_undo_to_history(trx_t*, ib_page_t*, mtr_t*): Assertion `srv_undo_sources || ((srv_startup_is_before_trx_rollback_phase || trx_rollback_or_clean_is_active) && purge_sys->state == PURGE_STATE_INIT) || (srv_force_recovery >= SRV_FORCE_NO_BACKGROUND && purge_sys->state == PURGE_STATE_DISABLED) || ((trx->undo_no == 0 || trx->in_mysql_trx_list) && srv_fast_shutdown)' failed.
            171005 21:08:41 [ERROR] mysqld got signal 6 ;

            #7 0x00007f9da9850ee2 in __assert_fail () from /lib/x86_64-linux-gnu/libc.so.6
            #8 0x000055e643b839f6 in trx_purge_add_update_undo_to_history (trx=0x7f9d9f3feca8, undo_page=0x7f9d9f0d4000 "", mtr=0x7f9da41263d0) at /data/src/10.2-bug/storage/innobase/trx/trx0purge.cc:300
            #9 0x000055e643bba351 in trx_undo_update_cleanup (trx=0x7f9d9f3feca8, undo_page=0x7f9d9f0d4000 "", mtr=0x7f9da41263d0) at /data/src/10.2-bug/storage/innobase/trx/trx0undo.cc:1838
            #10 0x000055e643ba903b in trx_write_serialisation_history (trx=0x7f9d9f3feca8, mtr=0x7f9da41263d0) at /data/src/10.2-bug/storage/innobase/trx/trx0trx.cc:1458
            #11 0x000055e643baa907 in trx_commit_low (trx=0x7f9d9f3feca8, mtr=0x7f9da41263d0) at /data/src/10.2-bug/storage/innobase/trx/trx0trx.cc:1939
            #12 0x000055e643baaa9a in trx_commit (trx=0x7f9d9f3feca8) at /data/src/10.2-bug/storage/innobase/trx/trx0trx.cc:2009
            #13 0x000055e643bab38f in trx_commit_for_mysql (trx=0x7f9d9f3feca8) at /data/src/10.2-bug/storage/innobase/trx/trx0trx.cc:2229
            #14 0x000055e643c8cd56 in dict_stats_exec_sql (pinfo=0x7f9d5813f958, sql=0x55e6440eb830 "PROCEDURE TABLE_STATS_SAVE () IS\nBEGIN\nDELETE FROM \"mysql/innodb_table_stats\"\nWHERE\ndatabase_name = :database_name AND\ntable_name = :table_name;\nINSERT INTO \"mysql/innodb_table_stats\"\nVALUES\n(\n:databa"..., trx=0x7f9d9f3feca8) at /data/src/10.2-bug/storage/innobase/dict/dict0stats.cc:325
            #15 0x000055e643c912b6 in dict_stats_save (table_orig=0x7f9d58143908, only_for_index=0x0) at /data/src/10.2-bug/storage/innobase/dict/dict0stats.cc:2514
            #16 0x000055e643c92fcd in dict_stats_update (table=0x7f9d58143908, stats_upd_option=DICT_STATS_EMPTY_TABLE) at /data/src/10.2-bug/storage/innobase/dict/dict0stats.cc:3269
            #17 0x000055e643b2a4fb in row_truncate_complete (table=0x7f9d58143908, trx=0x7f9d9f3fe878, fsp_flags=33, logger=@0x7f9da4127398: 0x0, err=DB_SUCCESS) at /data/src/10.2-bug/storage/innobase/row/row0trunc.cc:1275
            #18 0x000055e643b2c006 in row_truncate_table_for_mysql (table=0x7f9d58143908, trx=0x7f9d9f3fe878) at /data/src/10.2-bug/storage/innobase/row/row0trunc.cc:2114
            #19 0x000055e6439b828f in ha_innobase::truncate (this=0x7f9d5812ff28) at /data/src/10.2-bug/storage/innobase/handler/ha_innodb.cc:13567
            #20 0x000055e6436a1ef5 in handler::ha_truncate (this=0x7f9d5812ff28) at /data/src/10.2-bug/sql/handler.cc:4078
            #21 0x000055e643868712 in Sql_cmd_truncate_table::handler_truncate (this=0x7f9d58012b20, thd=0x7f9d58000b00, table_ref=0x7f9d58012508, is_tmp_table=false) at /data/src/10.2-bug/sql/sql_truncate.cc:245
            #22 0x000055e643868d4c in Sql_cmd_truncate_table::truncate_table (this=0x7f9d58012b20, thd=0x7f9d58000b00, table_ref=0x7f9d58012508) at /data/src/10.2-bug/sql/sql_truncate.cc:441
            #23 0x000055e643868ebe in Sql_cmd_truncate_table::execute (this=0x7f9d58012b20, thd=0x7f9d58000b00) at /data/src/10.2-bug/sql/sql_truncate.cc:498
            #24 0x000055e64343286c in mysql_execute_command (thd=0x7f9d58000b00) at /data/src/10.2-bug/sql/sql_parse.cc:6203
            #25 0x000055e64343711c in mysql_parse (thd=0x7f9d58000b00, rawbuf=0x7f9d58012438 "TRUNCATE TABLE t1", length=17, parser_state=0x7f9da4128200, is_com_multi=false, is_next_command=false) at /data/src/10.2-bug/sql/sql_parse.cc:7875
            #26 0x000055e643424dc0 in dispatch_command (command=COM_QUERY, thd=0x7f9d58000b00, packet=0x7f9d58008891 "TRUNCATE TABLE t1", packet_length=17, is_com_multi=false, is_next_command=false) at /data/src/10.2-bug/sql/sql_parse.cc:1812
            #27 0x000055e643423736 in do_command (thd=0x7f9d58000b00) at /data/src/10.2-bug/sql/sql_parse.cc:1360
            #28 0x000055e643570917 in do_handle_one_connection (connect=0x55e646fd3150) at /data/src/10.2-bug/sql/sql_connect.cc:1354
            #29 0x000055e6435706a4 in handle_one_connection (arg=0x55e646fd3150) at /data/src/10.2-bug/sql/sql_connect.cc:1260
            #30 0x000055e64398d08c in pfs_spawn_thread (arg=0x55e646fdd6c0) at /data/src/10.2-bug/storage/perfschema/pfs.cc:1862
            #31 0x00007f9dab795494 in start_thread (arg=0x7f9da4129700) at pthread_create.c:333
            #32 0x00007f9da990d93f in clone () from /lib/x86_64-linux-gnu/libc.so.6
            {noformat}

            {code:sql}
            --source include/have_innodb.inc

            --let $stats= `SELECT @@innodb_stats_persistent`
            SET GLOBAL innodb_stats_persistent= ON;

            CREATE TABLE t1 (t TEXT) ENGINE=InnoDB;
            SET debug_dbug='+d,mdev13201';
            --enable_reconnect

            --send
              TRUNCATE TABLE t1;

            --connect (con1,localhost,root,,test)
            --source include/restart_mysqld.inc
            --disconnect con1

            --connection default
            --disable_abort_on_error
            --reap
            SELECT COUNT(*) FROM t1;
            DROP TABLE t1;

            eval SET GLOBAL innodb_stats_persistent= $stats;
            {code}
            elenst Elena Stepanova made changes -

            A little shorter test:

            --source include/have_innodb.inc
            SET GLOBAL innodb_stats_persistent= ON;
            CREATE TABLE t1 (t TEXT) ENGINE=InnoDB;
            --connect (con1,localhost,root,,test)
            SET debug_dbug='+d,mdev13201';
            --send
            TRUNCATE TABLE t1;
            --connection default
            --source include/restart_mysqld.inc
            --disconnect con1
            DROP TABLE t1;
            

            marko Marko Mäkelä added a comment - A little shorter test: --source include/have_innodb.inc SET GLOBAL innodb_stats_persistent= ON ; CREATE TABLE t1 (t TEXT) ENGINE=InnoDB; --connect (con1,localhost,root,,test) SET debug_dbug= '+d,mdev13201' ; --send TRUNCATE TABLE t1; --connection default --source include/restart_mysqld.inc --disconnect con1 DROP TABLE t1;

            This patch might not be perfect, but I think that it is good enough for now:

            diff --git a/storage/innobase/dict/dict0stats.cc b/storage/innobase/dict/dict0stats.cc
            index 2ea482095ce..7584effee9e 100644
            --- a/storage/innobase/dict/dict0stats.cc
            +++ b/storage/innobase/dict/dict0stats.cc
            @@ -293,7 +293,10 @@ dict_stats_exec_sql(
             	ut_ad(rw_lock_own(dict_operation_lock, RW_LOCK_X));
             	ut_ad(mutex_own(&dict_sys->mutex));
             
            -	if (!dict_stats_persistent_storage_check(true)) {
            +	extern bool dict_stats_start_shutdown;
            +
            +	if (dict_stats_start_shutdown
            +	    || !dict_stats_persistent_storage_check(true)) {
             		pars_info_free(pinfo);
             		return(DB_STATS_DO_NOT_EXIST);
             	}
            

            My concern is that there could still be a small race condition window between the shutdown and the update of persistent statistics. A proper fix would of course be to update the persistent statistics atomically as part of the DDL transaction (such as the TRUNCATE).
            The assertion failure is only a debug assertion; non-debug servers were never affected.

            marko Marko Mäkelä added a comment - This patch might not be perfect, but I think that it is good enough for now: diff --git a/storage/innobase/dict/dict0stats.cc b/storage/innobase/dict/dict0stats.cc index 2ea482095ce..7584effee9e 100644 --- a/storage/innobase/dict/dict0stats.cc +++ b/storage/innobase/dict/dict0stats.cc @@ -293,7 +293,10 @@ dict_stats_exec_sql( ut_ad(rw_lock_own(dict_operation_lock, RW_LOCK_X)); ut_ad(mutex_own(&dict_sys->mutex)); - if (!dict_stats_persistent_storage_check(true)) { + extern bool dict_stats_start_shutdown; + + if (dict_stats_start_shutdown + || !dict_stats_persistent_storage_check(true)) { pars_info_free(pinfo); return(DB_STATS_DO_NOT_EXIST); } My concern is that there could still be a small race condition window between the shutdown and the update of persistent statistics. A proper fix would of course be to update the persistent statistics atomically as part of the DDL transaction (such as the TRUNCATE). The assertion failure is only a debug assertion; non-debug servers were never affected.
            marko Marko Mäkelä made changes -
            Status Open [ 1 ] Confirmed [ 10101 ]
            marko Marko Mäkelä made changes -
            Status Confirmed [ 10101 ] In Progress [ 3 ]
            marko Marko Mäkelä made changes -
            Summary Assertion `srv_undo_sources || ((s rv_startup_is_before_trx_rollback_phase || trx_rollback_or_clean_is_active) && purge_sys->state == PURGE_STATE_INIT) ... failed Assertion `srv_undo_sources || ...` failed on shutdown during DDL operation
            marko Marko Mäkelä made changes -
            issue.field.resolutiondate 2017-11-21 15:57:15.0 2017-11-21 15:57:15.112
            marko Marko Mäkelä made changes -
            Fix Version/s 10.2.11 [ 22634 ]
            Fix Version/s 10.3.3 [ 22644 ]
            Fix Version/s 10.2 [ 14601 ]
            Resolution Fixed [ 1 ]
            Status In Progress [ 3 ] Closed [ 6 ]
            marko Marko Mäkelä made changes -

            The race condition will occasionally cause test failure. I think that the simplest work-around is to introduce a debug-only flag trx_t::persistent_stats.
            The proper fix would be to update the persistent statistics within the DDL transaction.

            With this fix in place, it turns out that the test would occasionally fail due to an older problem, which I filed as MDEV-14511.

            marko Marko Mäkelä added a comment - The race condition will occasionally cause test failure. I think that the simplest work-around is to introduce a debug-only flag trx_t::persistent_stats. The proper fix would be to update the persistent statistics within the DDL transaction. With this fix in place, it turns out that the test would occasionally fail due to an older problem, which I filed as MDEV-14511 .
            marko Marko Mäkelä made changes -
            Resolution Fixed [ 1 ]
            Status Closed [ 6 ] Stalled [ 10000 ]
            marko Marko Mäkelä made changes -
            Fix Version/s 10.2 [ 14601 ]
            Fix Version/s 10.3 [ 22126 ]
            Fix Version/s 10.2.11 [ 22634 ]
            Fix Version/s 10.3.3 [ 22644 ]
            marko Marko Mäkelä made changes -
            marko Marko Mäkelä made changes -
            Sprint 10.3.3-2 [ 208 ]
            marko Marko Mäkelä made changes -
            issue.field.resolutiondate 2017-12-06 18:52:50.0 2017-12-06 18:52:50.206
            marko Marko Mäkelä made changes -
            Fix Version/s 10.2.12 [ 22810 ]
            Fix Version/s 10.3.3 [ 22644 ]
            Fix Version/s 10.2 [ 14601 ]
            Fix Version/s 10.3 [ 22126 ]
            Resolution Fixed [ 1 ]
            Status Stalled [ 10000 ] Closed [ 6 ]
            serg Sergei Golubchik made changes -
            Sprint 10.3.3-2 [ 208 ]
            serg Sergei Golubchik made changes -
            Rank Ranked higher
            elenst Elena Stepanova made changes -
            serg Sergei Golubchik made changes -
            Workflow MariaDB v3 [ 81421 ] MariaDB v4 [ 152400 ]

            People

              marko Marko Mäkelä
              elenst Elena Stepanova
              Votes:
              0 Vote for this issue
              Watchers:
              2 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.