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

MariaDB aborts with LOAD DATA and TRUNCATE

    XMLWordPrintable

Details

    • Bug
    • Status: Closed (View Workflow)
    • Major
    • Resolution: Won't Fix
    • 10.3.29
    • N/A
    • Galera
    • None

    Description

      Hi,
      MariaDB Cluster fails with the following stack trace if LOAD DATA and TRUNCATE runs at the same time:

      May 26 21:16:06 juan-arruti-node1 mysqld: 2021-05-26 21:16:06 128 [ERROR] WSREP: FSM: no such a transition ABORTING -> REPLICATING
      May 26 21:16:06 juan-arruti-node1 mysqld: 210526 21:16:06 [ERROR] mysqld got signal 6 ;
      May 26 21:16:06 juan-arruti-node1 mysqld: This could be because you hit a bug. It is also possible that this binary
      May 26 21:16:06 juan-arruti-node1 mysqld: or one of the libraries it was linked against is corrupt, improperly built,
      May 26 21:16:06 juan-arruti-node1 mysqld: or misconfigured. This error can also be caused by malfunctioning hardware.
      May 26 21:16:06 juan-arruti-node1 mysqld: To report this bug, see https://mariadb.com/kb/en/reporting-bugs
      May 26 21:16:06 juan-arruti-node1 mysqld: We will try our best to scrape up some info that will hopefully help
      May 26 21:16:06 juan-arruti-node1 mysqld: diagnose the problem, but since we have already crashed,
      May 26 21:16:06 juan-arruti-node1 mysqld: something is definitely wrong and this may fail.
      May 26 21:16:06 juan-arruti-node1 mysqld: Server version: 10.3.29-MariaDB-log
      May 26 21:16:06 juan-arruti-node1 mysqld: key_buffer_size=134217728
      May 26 21:16:06 juan-arruti-node1 mysqld: read_buffer_size=131072
      May 26 21:16:06 juan-arruti-node1 mysqld: max_used_connections=3
      May 26 21:16:06 juan-arruti-node1 mysqld: max_threads=153
      May 26 21:16:06 juan-arruti-node1 mysqld: thread_count=12
      May 26 21:16:06 juan-arruti-node1 mysqld: It is possible that mysqld could use up to
      May 26 21:16:06 juan-arruti-node1 mysqld: key_buffer_size + (read_buffer_size + sort_buffer_size)*max_threads = 467429 K  bytes of memory
      May 26 21:16:06 juan-arruti-node1 mysqld: Hope that's ok; if not, decrease some variables in the equation.
      May 26 21:16:06 juan-arruti-node1 mysqld: Thread pointer: 0x7f30540009a8
      May 26 21:16:06 juan-arruti-node1 mysqld: Attempting backtrace. You can use the following information to find out
      May 26 21:16:06 juan-arruti-node1 mysqld: where mysqld died. If you see no messages after this, something went
      May 26 21:16:06 juan-arruti-node1 mysqld: terribly wrong...
      May 26 21:16:06 juan-arruti-node1 mysqld: stack_bottom = 0x7f30e4076d30 thread_stack 0x49000
      May 26 21:16:06 juan-arruti-node1 mysqld: /usr/sbin/mysqld(my_print_stacktrace+0x2e)[0x55d8dd525a7e]
      May 26 21:16:06 juan-arruti-node1 mysqld: /usr/sbin/mysqld(handle_fatal_signal+0x30f)[0x55d8dcfb8f1f]
      May 26 21:16:06 juan-arruti-node1 mysqld: sigaction.c:0(__restore_rt)[0x7f30f8215630]
      May 26 21:16:06 juan-arruti-node1 mysqld: :0(__GI_raise)[0x7f30f7e6e387]
      May 26 21:16:06 juan-arruti-node1 mysqld: :0(__GI_abort)[0x7f30f7e6fa78]
      May 26 21:16:06 juan-arruti-node1 mysqld: src/fsm.hpp:104(galera::FSM<galera::TrxHandle::State, galera::TrxHandle::Transition, galera::EmptyGuard, galera::EmptyAction>::shift_to(galera::TrxHandle::State))[0x7f30f4508b0c]
      May 26 21:16:06 juan-arruti-node1 mysqld: src/gcs.hpp:228(gcs_repl)[0x7f30f44fe861]
      May 26 21:16:06 juan-arruti-node1 mysqld: src/wsrep_provider.cpp:515(galera_pre_commit)[0x7f30f44e392a]
      May 26 21:16:06 juan-arruti-node1 mysqld: /usr/sbin/mysqld(wsrep_run_wsrep_commit+0x6ed)[0x55d8dcf247ed]
      May 26 21:16:06 juan-arruti-node1 mysqld: /usr/sbin/mysqld(+0x7252c8)[0x55d8dcf252c8]
      May 26 21:16:06 juan-arruti-node1 mysqld: /usr/sbin/mysqld(_Z15ha_commit_transP3THDb+0x1a6)[0x55d8dcfbc386]
      May 26 21:16:06 juan-arruti-node1 mysqld: /usr/sbin/mysqld(_Z17trans_commit_stmtP3THD+0x57)[0x55d8dcec3907]
      May 26 21:16:06 juan-arruti-node1 mysqld: /usr/sbin/mysqld(_Z21mysql_execute_commandP3THD+0x2a5)[0x55d8dcdd6295]
      May 26 21:16:06 juan-arruti-node1 mysqld: /usr/sbin/mysqld(_Z11mysql_parseP3THDPcjP12Parser_statebb+0x1fb)[0x55d8dcdde0eb]
      May 26 21:16:06 juan-arruti-node1 mysqld: /usr/sbin/mysqld(+0x4e1b30)[0x55d8dcce1b30]
      May 26 21:16:06 juan-arruti-node1 mysqld: /usr/sbin/mysqld(_Z16dispatch_command19enum_server_commandP3THDPcjbb+0x2689)[0x55d8dcde1079]
      May 26 21:16:06 juan-arruti-node1 mysqld: /usr/sbin/mysqld(_Z10do_commandP3THD+0x11b)[0x55d8dcde155b]
      May 26 21:16:06 juan-arruti-node1 mysqld: /usr/sbin/mysqld(_Z24do_handle_one_connectionP7CONNECT+0x1d6)[0x55d8dceb69c6]
      May 26 21:16:06 juan-arruti-node1 mysqld: /usr/sbin/mysqld(handle_one_connection+0x3d)[0x55d8dceb6add]
      May 26 21:16:06 juan-arruti-node1 mysqld: pthread_create.c:0(start_thread)[0x7f30f820dea5]
      May 26 21:16:06 juan-arruti-node1 mysqld: /lib64/libc.so.6(clone+0x6d)[0x7f30f7f369fd]
      May 26 21:16:06 juan-arruti-node1 mysqld: Trying to get some variables.
      May 26 21:16:06 juan-arruti-node1 mysqld: Some pointers may be invalid and cause the dump to abort.
      May 26 21:16:06 juan-arruti-node1 mysqld: Query (0x7f305400f5f8): load data local infile '/tmp/testcase' into table test.t2
      May 26 21:16:06 juan-arruti-node1 mysqld: Connection ID (thread ID): 128
      

      You can find below the steps to reproduce it, let the loop run concurrently in all sessions for a while (5 minutes) and the database should abort:

      # Session 1
      while true; do {
      	mysql -e "drop table if exists test.t1"
      	mysql test < /tmp/t1.sql 
      	mysql -e "purge binary logs before now();"
      	mysql -e "load data local infile '/tmp/testcase' into table test.t1 ;"
      	mysql -e "purge binary logs before now();"
      } done;
       
      # Session 2
      while true; do {
      	mysql -e "drop table if exists test.t2"
      	mysql test < /tmp/t2.sql 
      	mysql -e "purge binary logs before now();"
      	mysql -e "load data local infile '/tmp/testcase' into table test.t2 ;"
      	mysql -e "purge binary logs before now();"
      } done;
       
      # Session 3
      while true; do {
      	mysql -e "truncate table test.t1"
      	mysql -e "truncate table test.t2"
      } done;
      

      You can find attached the testcase file to load the data while t1.sql and t2.sql files contain table DDL. I couldn't reproduce it without purging logs, maybe there is a connection with:
      https://jira.mariadb.org/browse/MDEV-17262

      Regards,

      Attachments

        1. t1.sql
          0.4 kB
        2. t2.sql
          0.4 kB
        3. testcaseaa
          5.00 MB
        4. testcaseab
          5.00 MB
        5. testcaseac
          5.00 MB
        6. testcasead
          5.00 MB
        7. testcaseae
          5.00 MB
        8. testcaseaf
          5.00 MB
        9. testcaseag
          5.00 MB
        10. testcaseah
          1.28 MB

        Activity

          People

            seppo Seppo Jaakola
            juanarru Juan Pablo Arruti
            Votes:
            1 Vote for this issue
            Watchers:
            4 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.