1. 29 May, 2020 2 commits
  2. 27 May, 2020 17 commits
  3. 26 May, 2020 10 commits
    • Eugene Kosov's avatar
      intrusive::list fixes · 18d8f06f
      Eugene Kosov authored
      namespace intrusive: removed
      
      split class into two: ilist<T> and sized_ilist<T> which has a size field.
      
      ilist<T> no more NULLify pointers to bring a slignly better performance.
      As a consequence, fil_space_t::is_in_unflushed_spaces and
      fil_space_t::is_in_rotation_list boolean members are needed now.
      18d8f06f
    • Monty's avatar
      Fixed crash in aria recovery when using bulk insert · 403dacf6
      Monty authored
      MDEV-20578 Got error 126 when executing undo undo_key_delete
      upon Aria crash recovery
      
      The crash happens in this scenario:
      - Table with unique keys and non unique keys
      - Batch insert (LOAD DATA or INSERT ... SELECT) with REPLACE
      - Some insert succeeds followed by duplicate key error
      
      In the above scenario the table gets corrupted.
      
      The bug was that we don't generate any undo entry for the
      failed insert as the whole insert can be ignored by undo.
      The code did however not take into account that when bulk
      insert is used, we would write cached keys to the file on
      failure and undo would wrongly ignore these.
      
      Fixed by moving the writing of the cache keys after we write
      the aborted-insert event to the log.
      403dacf6
    • Andrei Elkin's avatar
      MDEV-15152 Optimistic parallel slave doesnt cope well with START SLAVE UNTIL · 0c1f97b3
      Andrei Elkin authored
      The immediate bug was caused by a failure to recognize a correct
      position to stop the slave applier run in optimistic parallel mode.
      There were the following set of issues that the analysis unveil.
      1 incorrect estimate for the event binlog position passed to
        is_until_satisfied
      2 wait for workers to complete by the driver thread did not account non-group events
        that could be left unprocessed and thus to mix up the last executed
        binlog group's file and position:
        the file remained old and the position related to the new rotated file
      3 incorrect 'slave reached file:pos' by the parallel slave report in the error log
      4 relay log UNTIL missed out the parallel slave branch in
        is_until_satisfied.
      
      The patch addresses all of them to simplify logics of log change
      notification in either the master and relay-log until case.
      P.1 is addressed with passing the event into is_until_satisfied()
      for proper analisis by the function.
      P.2 is fixed by changes in handle_queued_pos_update().
      P.4 required removing relay-log change notification by workers.
      Instead the driver thread updates the notion of the current relay-log
      fully itself with aid of introduced
      bool Relay_log_info::until_relay_log_names_defer.
      
      An extra print out of the requested until file:pos is arranged
      with --log-warning=3.
      0c1f97b3
    • Andrei Elkin's avatar
    • Andrei Elkin's avatar
      MDEV-15152 Optimistic parallel slave doesnt cope well with START SLAVE UNTIL · dbe447a7
      Andrei Elkin authored
      The immediate bug was caused by a failure to recognize a correct
      position to stop the slave applier run in optimistic parallel mode.
      There were the following set of issues that the analysis unveil.
      1 incorrect estimate for the event binlog position passed to
        is_until_satisfied
      2 wait for workers to complete by the driver thread did not account non-group events
        that could be left unprocessed and thus to mix up the last executed
        binlog group's file and position:
        the file remained old and the position related to the new rotated file
      3 incorrect 'slave reached file:pos' by the parallel slave report in the error log
      4 relay log UNTIL missed out the parallel slave branch in
        is_until_satisfied.
      
      The patch addresses all of them to simplify logics of log change
      notification in either the master and relay-log until case.
      P.1 is addressed with passing the event into is_until_satisfied()
      for proper analisis by the function.
      P.2 is fixed by changes in handle_queued_pos_update().
      P.4 required removing relay-log change notification by workers.
      Instead the driver thread updates the notion of the current relay-log
      fully itself with aid of introduced
      bool Relay_log_info::until_relay_log_names_defer.
      
      An extra print out of the requested until file:pos is arranged
      with --log-warning=3.
      dbe447a7
    • Aleksey Midenkov's avatar
      MDEV-20015 Assertion `!in_use->is_error()' failed in TABLE::update_virtual_field · f1f14c20
      Aleksey Midenkov authored
      update_virtual_field() is called as part of index rebuild in
      ha_myisam::repair() (MDEV-5800) which is done on bulk INSERT finish.
      
      Assertion in update_virtual_field() was put as part of MDEV-16222
      because update_virtual_field() returns in_use->is_error(). The idea:
      wrongly mixed semantics of error status before update_virtual_field()
      and the status returned by update_virtual_field(). The former can
      falsely influence the latter.
      f1f14c20
    • Marko Mäkelä's avatar
      Merge 10.1 into 10.2 · 6a26e0c7
      Marko Mäkelä authored
      6a26e0c7
    • Marko Mäkelä's avatar
      Merge 5.5 into 10.1 · adbf85fc
      Marko Mäkelä authored
      adbf85fc
    • Marko Mäkelä's avatar
      MDEV-22513 main.processlist_notembedded Timeout in wait_until_count_sessions · 9bbd685e
      Marko Mäkelä authored
      Do not blindly disconnect the connection that is in WAIT_FOR
      because it could happen that neither the disconnect nor the
      SIGNAL would be processed before RESET would discard the signal.
      9bbd685e
    • Aleksey Midenkov's avatar
      MDEV-19751 Wrong partitioning by KEY() after primary key dropped · fbcfbb0e
      Aleksey Midenkov authored
      Default (empty) field list in partitioning by KEY() clause is assigned
      from primary key. If primary key is changed the partitioning field
      list is changed as well, so repartitioning required. Not applicable to
      any non-primary keys as default field list may be taken only from
      primary key.
      fbcfbb0e
  4. 25 May, 2020 4 commits
    • Varun Gupta's avatar
      MDEV-21495: Conditional jump or move depends on uninitialised value in sel_arg_range_seq_next · 76f4ae82
      Varun Gupta authored
      Initialize the parameter PARAM::max_key_part when we iterate over the ranges to get estimates
      from EITS.
      76f4ae82
    • Marko Mäkelä's avatar
      MDEV-17092 use-after-poison around lock_trx_handle_wait_low · 5530a93f
      Marko Mäkelä authored
      There was a race condition where the connection of the
      victim of a KILL statement is disconnected while the
      KILL statement is executing.
      
      As a side effect of this fix, we will make XA PREPARE
      transactions immune to KILL statements.
      
      Starting with MariaDB 10.2, we have a pool of trx_t objects.
      trx_free() would only free memory to the pool. We poison the
      contents of freed objects in the pool in order to catch misuse.
      
      trx_free(): Unpoison also trx->mysql_thd and trx->state.
      This is to counter the poisoning of *trx in trx_pools->mem_free().
      Unpoison only on AddressSanitizer or Valgrind, but not on MemorySanitizer.
      
      Pool: Unpoison allocated objects only on AddressSanitizer or
      Valgrind, but not on MemorySanitizer.
      
      innobase_kill_query(): Properly protect trx, acquiring also
      trx_sys_t::mutex and checking trx_t::mysql_thd and trx_t::state.
      5530a93f
    • Marko Mäkelä's avatar
      MDEV-22545 post-fix: Fix a test result · e2c74938
      Marko Mäkelä authored
      commit cf52dd17 failed to
      adjust the result of the test main.mysqldump.
      e2c74938
    • Varun Gupta's avatar
      MDEV-22461: JOIN::make_aggr_tables_info(): Assertion `select_options & (1ULL << 17)' failed. · 4a6b28c7
      Varun Gupta authored
      A temporary table is needed for window function computation but if only a NAMED WINDOW SPEC
      is used and there is no window function, then there is no need to create a temporary
      table as there is no stage to compute WINDOW FUNCTION
      4a6b28c7
  5. 24 May, 2020 1 commit
  6. 23 May, 2020 2 commits
    • Monty's avatar
      Fixed compiler failure on windows · d8e2fa0c
      Monty authored
      d8e2fa0c
    • 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
  7. 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
  8. 20 May, 2020 1 commit