1. 23 May, 2020 1 commit
    • Monty's avatar
      Fixed deadlock with LOCK TABLES and ALTER TABLE · be647ff1
      Monty authored
      MDEV-21398 Deadlock (server hang) or assertion failure in
      Diagnostics_area::set_error_status upon ALTER under lock
      
      This failure could only happen if one locked the same table
      multiple times and then did an ALTER TABLE on the table.
      
      Major change is to change all instances of
      table->m_needs_reopen= true;
      to
      table->mark_table_for_reopen();
      
      The main fix for the problem was to ensure that we mark all
      instances of the table in the locked_table_list and when we
      reopen the tables, we first close all tables before reopening
      and locking them.
      
      Other things:
      - Don't call thd->locked_tables_list.reopen_tables if there
        are no tables marked for reopen. (performance)
      be647ff1
  2. 22 May, 2020 3 commits
    • Alexander Barkov's avatar
      MDEV-22111 ERROR 1064 & 1033 and SIGSEGV on CREATE TABLE w/ various charsets... · 6462af1c
      Alexander Barkov authored
      MDEV-22111 ERROR 1064 & 1033 and SIGSEGV on CREATE TABLE w/ various charsets on 10.4/5 optimized builds | Assertion `(uint) (table_check_constraints - share->check_constraints) == (uint) (share->table_check_constraints - share->field_check_constraints)' failed
      
      Additional 10.2 specific tests (with JSON)
      6462af1c
    • Alexander Barkov's avatar
      bdab5b66
    • Alexander Barkov's avatar
      MDEV-22111 ERROR 1064 & 1033 and SIGSEGV on CREATE TABLE w/ various charsets... · cb9c49a9
      Alexander Barkov authored
      MDEV-22111 ERROR 1064 & 1033 and SIGSEGV on CREATE TABLE w/ various charsets on 10.4/5 optimized builds | Assertion `(uint) (table_check_constraints - share->check_constraints) == (uint) (share->table_check_constraints - share->field_check_constraints)' failed
      
      The code incorrectly assumed in multiple places that TYPELIB
      values cannot have 0x00 bytes inside. In fact they can:
      
        CREATE TABLE t1 (a ENUM(0x61, 0x0062) CHARACTER SET BINARY);
      
      Note, the TYPELIB value encoding used in FRM is ambiguous about 0x00.
      
      So this fix is partial.
      
      It fixes 0x00 bytes in many (but not all) places:
      
      - In the middle or in the end of a value:
          CREATE TABLE t1 (a ENUM(0x6100) ...);
          CREATE TABLE t1 (a ENUM(0x610062) ...);
      
      - In the beginning of the first value:
          CREATE TABLE t1 (a ENUM(0x0061));
          CREATE TABLE t1 (a ENUM(0x0061), b ENUM('b'));
      
      - In the beginning of the second (and following) value of the *last* ENUM/SET
        in the table:
      
          CREATE TABLE t1 (a ENUM('a',0x0061));
          CREATE TABLE t1 (a ENUM('a'), b ENUM('b',0x0061));
      
      However, it does not fix 0x00 when:
      
      - 0x00 byte is in the beginning of a value of a non-last ENUM/SET
        causes an error:
      
         CREATE TABLE t1 (a ENUM('a',0x0061), b ENUM('b'));
         ERROR 1033 (HY000): Incorrect information in file: './test/t1.frm'
      
        This is an ambuguous case and will be fixed separately.
        We need a new TYPELIB encoding to fix this.
      
      Details:
      
      - unireg.cc
      
        The function pack_header() incorrectly used strlen() to detect
        a TYPELIB value length. Adding a new function typelib_values_packed_length()
        which uses TYPELIB::type_lengths[n] to detect the n-th value length,
        and reusing the new function in pack_header() and packed_fields_length()
      
      - table.cc
        fix_type_pointers() assumed in multiple places that values cannot have
        0x00 inside and used strlen(TYPELIB::type_names[n]) to set
        the corresponding TYPELIB::type_lengths[n].
      
        Also, fix_type_pointers() did not check the encoded data for consistency.
      
        Rewriting fix_type_pointers() code to populate TYPELIB::type_names[n] and
        TYPELIB::type_lengths[n] at the same time, so no additional loop
        with strlen() is needed any more.
      
        Adding many data consistency tests.
      
        Fixing the main loop in fix_type_pointers() to use memchr() instead of
        strchr() to handle 0x00 properly.
      
        Fixing create_key_infos() to return the result in a LEX_STRING rather
        that in a char*.
      cb9c49a9
  3. 20 May, 2020 11 commits
    • Sujatha's avatar
      MDEV-22451: SIGSEGV in __memmove_avx_unaligned_erms/memcpy from _my_b_write on... · 450a5b33
      Sujatha authored
      MDEV-22451: SIGSEGV in __memmove_avx_unaligned_erms/memcpy from _my_b_write on CREATE after RESET MASTER
      
      Merge branch '10.1' into 10.2
      450a5b33
    • Marko Mäkelä's avatar
      MDEV-19114 post-push fix: SIGSEGV on INSERT · 22a6fa57
      Marko Mäkelä authored
      ins_node_create_entry_list(): Create dummy empty tuples for
      corrupted or incomplete indexes, to avoid dereferencing a NULL
      dict_field_t::col pointer in row_build_index_entry_low().
      
      This issue was found by a crash in the test gcol.innodb_virtual_basic
      when merging the fix to 10.5.
      22a6fa57
    • Sujatha's avatar
      MDEV-22451: SIGSEGV in __memmove_avx_unaligned_erms/memcpy from _my_b_write on... · 836d7089
      Sujatha authored
      MDEV-22451: SIGSEGV in __memmove_avx_unaligned_erms/memcpy from _my_b_write on CREATE after RESET MASTER
      
      Analysis:
      ========
      RESET MASTER TO # command deletes all binary log files listed in the index
      file, resets the binary log index file to be empty, and creates a new binary
      log with number #. When the user provided binary log number is greater than
      the max allowed value '2147483647' server fails to generate a new binary log.
      The RESET MASTER statement marks the binlog closure status as
      'LOG_CLOSE_TO_BE_OPENED' and exits. Statements which follow RESET MASTER
      try to write to binary log they find the log_state != LOG_CLOSED and
      proceed to write to binary log cache and it results in crash.
      
      Fix:
      ===
      During MYSQL_BIN_LOG open, if generation of new binary log name fails then the
      "log_state" needs to be marked as "LOG_CLOSED". With this further statements
      will find binary log as closed and they will skip writing to the binary log.
      836d7089
    • Rasmus Johansson's avatar
      MDEV-22631 fix · ed29782a
      Rasmus Johansson authored
      ed29782a
    • Rasmus Johansson's avatar
      MDEV-22631 fix · a6b4d4be
      Rasmus Johansson authored
      a6b4d4be
    • Marko Mäkelä's avatar
      Merge 10.1 into 10.2 · e380f447
      Marko Mäkelä authored
      e380f447
    • Thirunarayanan Balathandayuthapani's avatar
      MDEV-22633 Assertion failed in prepare_inplace_alter_table_dict · 1893a137
      Thirunarayanan Balathandayuthapani authored
      prepare_inplace_alter_table_dict(): In the error handling, relax
      a debug assertion for the case that we did not execute
      dict_stats_wait_bg_to_stop_using_table() yet.
      1893a137
    • Marko Mäkelä's avatar
      MDEV-22258 Limit innodb_encryption_threads to 255 · 6b2c8cac
      Marko Mäkelä authored
      For no good reason, innodb_encryption_threads was limited to
      4,294,967,295. Expectedly, the server would crash if such an
      insane value was specified. Let us limit the maximum to 255.
      
      The encryption threads are not doing much useful work.
      They are basically only dirtying pages by performing
      dummy writes via the redo log. The encryption key rotation
      or the in-place addition or removal of encryption
      will take place in the page cleaner.
      
      In a quick test on a 20-core CPU (40 threads in total),
      the sweet spot on an otherwise idle server seemed to be
      innodb_encryption_threads=16 for the test
      encryption.encrypt_and_grep. The new limit 255 should be
      more than enough for even bigger servers.
      6b2c8cac
    • Yury Kurlykov's avatar
      MDEV-22629 Remove fts_indexes field from struct fts_update_t (#1537) · d2900d91
      Yury Kurlykov authored
      fts_indexes field in fts_update_t never used. So replace fts_update_t
      with doc_id_t in the code
      d2900d91
    • Marko Mäkelä's avatar
      dd95935e
    • Jan Lindström's avatar
      MDEV-18838 : galera.galera_toi_truncate: Test failure: mysqltest: query 'reap'... · ad0f85bc
      Jan Lindström authored
      MDEV-18838 : galera.galera_toi_truncate: Test failure: mysqltest: query 'reap' succeeded - should have failed with errno 1213
      
      Test cleanup.
      ad0f85bc
  4. 19 May, 2020 12 commits
  5. 18 May, 2020 5 commits
  6. 17 May, 2020 3 commits
  7. 16 May, 2020 1 commit
  8. 15 May, 2020 4 commits