1. 18 Aug, 2020 2 commits
    • Thirunarayanan Balathandayuthapani's avatar
      MDEV-22934 Table disappear after two alter table command · 8268f266
      Thirunarayanan Balathandayuthapani authored
      Problem:
      =======
      InnoDB drops the column which has foreign key relations on it. So it
      tries to load the foreign key during rename process of copy algorithm
      even though the foreign_key_check is disabled.
      
      Solution:
      ========
      During alter copy algorithm, InnoDB ignores the error while loading
      the foreign key constraint if foreign key check is disabled. It
      should throw the warning about failure of the foreign key constraint
      when foreign key check is disabled.
      8268f266
    • Thirunarayanan Balathandayuthapani's avatar
      MDEV-23380 InnoDB reads a page from disk despite parsing MLOG_INIT_FILE_PAGE2 record · 362b18c5
      Thirunarayanan Balathandayuthapani authored
      This problem is caused by 6697135c
      (MDEV-21572). During recovery, InnoDB prefetches the siblings of
      change buffer index leaf page. It does asynchronous page read
      and recovery scenario wasn't handled in buf_read_page_background().
      It leads to the refusal of startup of the server.
      
      Solution:
      =========
        InnoDB shouldn't allow the change buffer index page siblings
      to be prefetched.
      362b18c5
  2. 13 Aug, 2020 3 commits
  3. 12 Aug, 2020 5 commits
    • Marko Mäkelä's avatar
      MDEV-20672 Inconsistent usage message for innodb_compression_algorithm · 101ce10d
      Marko Mäkelä authored
      The usage message for the innodb_compression_algorithm system variable
      did not list snappy, which was added as an optional compression algorithm
      in MariaDB 10.1.3 and might actually work since
      commit 90c52e52 (MDEV-12615)
      in MariaDB 10.1.24.
      
      Unfortunately, we will include also unavailable compression algorithms
      in the list, because ENUM parameters allow numeric values, and we do
      not want innodb_compression_algorithm=3 to change meaning depending on
      the way how the source code was compiled.
      101ce10d
    • Marko Mäkelä's avatar
      MDEV-19526 heap number overflow on innodb_page_size=64k · efd8af53
      Marko Mäkelä authored
      InnoDB only reserves 13 bits for the heap number in the record header,
      limiting the heap number to be at most 8191. But, when using
      innodb_page_size=64k and secondary index records of 7 bytes each,
      it is possible to exceed the maximum heap number.
      
      btr_cur_optimistic_insert(): Let the operation fail if the
      maximum number of records would be exceeded.
      
      page_mem_alloc_heap(): Move to the same compilation unit with the
      only caller, and let the operation fail if the maximum heap number
      has been allocated already.
      efd8af53
    • Marko Mäkelä's avatar
      MDEV-23439 Assertion size == space->size failed in buf_read_ahead_random · 18f374cb
      Marko Mäkelä authored
      The debug assertion is bogus, and we had removed it in
      commit b1ab211d (MDEV-15053)
      in the MariaDB Server 10.5 branch.
      
      For a small data file, fil_space_extend_must_retry() would always
      allocate a minimum size of 4*innodb_page_size.
      
      It is possible that random read-ahead will be triggered for
      a smaller file than this. In the observed case, the read-ahead
      was triggered for a 6-page file that used ROW_FORMAT=COMPRESSED
      with 8KiB page size. So, the desired file size was 49152 bytes,
      but the actual size was 65536 bytes.
      18f374cb
    • Marko Mäkelä's avatar
      Use DBUG_ASSERT(ptr != NULL) to ease merging to 10.3 · 4387e3a1
      Marko Mäkelä authored
      In 10.3, DBUG_ASSERT() may expand to something that includes
      __builtin_expect(), which expects integer arguments, not pointers.
      To avoid any compiler warnings, let us use an explicit rather than
      implicit comparison to the null pointer.
      4387e3a1
    • Eugene Kosov's avatar
      replace assert() with DBUG_ASSERT() · 5a4ae142
      Eugene Kosov authored
      5a4ae142
  4. 11 Aug, 2020 7 commits
    • Eugene Kosov's avatar
      add debug assertion to ilist · 01738d08
      Eugene Kosov authored
      01738d08
    • Marko Mäkelä's avatar
      MDEV-14119 Assertion cmp_rec_rec() in ALTER TABLE · c96be848
      Marko Mäkelä authored
      innobase_pk_order_preserved(): Treat an added AUTO_INCREMENT
      column in the same way as an added existing column.
      In either case, the column values are not guaranteed to
      be constant, and thus the ordering may change if such a column
      is added before any existing PRIMARY KEY columns.
      
      prepare_inplace_alter_table_dict(): Initialize
      dict_table_t::persistent_autoinc before invoking
      innobase_pk_order_preserved().
      c96be848
    • Marko Mäkelä's avatar
      MDEV-23447 SIGSEGV in fil_system_t::keyrotate_next() · de8d57e5
      Marko Mäkelä authored
      fil_system_t::keyrotate_next(): If space && space->is_in_rotation_list
      does not hold, iterate from the start of the list.
      
      In debug builds, we would typically have hit SIGSEGV because the
      iterator would have wrapped a null pointer. It might also be that
      we are dereferencing a stale pointer.
      
      There is no test case, because the encryption is very nondeterministic
      in nature, due to the use of background threads.
      
      This scenario can be hit by setting the following:
      
      SET GLOBAL innodb_encryption_threads=5;
      SET GLOBAL innodb_encryption_rotate_key_age=0;
      de8d57e5
    • Marko Mäkelä's avatar
      Fix GCC 10.2.0 -Og -Wmaybe-uninitialized · 31aef3ae
      Marko Mäkelä authored
      For some reason, GCC emits more -Wmaybe-uninitialized warnings
      when using the flag -Og than when using -O2. Many of the warnings
      look genuine.
      31aef3ae
    • Julius Goryavsky's avatar
      MDEV-21526: mysqld_multi no longer works with different server binaries · 7ad4709a
      Julius Goryavsky authored
      The problem is caused by the fact that adding the
      --defaults-group-suffix option to fix MDEV-18863 causes
      mysqld to read all options from the appropriate sections
      of the config file, including options specific to mysqld_multi.
      Reading unknown options (which are not supported by mysqld)
      causes mysqld to terminate with an error.
      
      However, the MDEV-18863 problem has been completely fixed
      by passing options on the command line, and now there is no
      need to specify the --defaults-group-suffix option (we just
      need to give priority to options passed through the command
      line, so as not to break MDEV-18863).
      7ad4709a
    • Jan Lindström's avatar
      MDEV-22543 : Galera SST donation fails, FLUSH TABLES WITH READ LOCK times out · 57d1a5fa
      Jan Lindström authored
      During SST we need to let FTWRL to use normal timeout method
      even when client is disconnected.
      57d1a5fa
    • Alexander Barkov's avatar
      Fixing sporading builtbot test failures happening at '00:00:00' sharp · caf10590
      Alexander Barkov authored
      Some tests relied on the fact that DATETIME->DATE conversion
      always produce a truncation (with a warning). This is not the case
      when the SQL statement is executed at current time '00:00:00' sharp.
      
      Adding a new SET TIMESTAMP statements to make sure time is not '00:00:00'.
      caf10590
  5. 10 Aug, 2020 8 commits
  6. 07 Aug, 2020 2 commits
  7. 06 Aug, 2020 5 commits
  8. 05 Aug, 2020 2 commits
    • Varun Gupta's avatar
      MDEV-17066: Bytes lost or Assertion `status_var.local_memory_used == 0 after... · 1e31d748
      Varun Gupta authored
      MDEV-17066: Bytes lost or Assertion `status_var.local_memory_used == 0 after DELETE with subquery with ROLLUP
      
      The issue here is when records are read from the temporary file
      (filesort result in this case) via a cache(rr_from_cache).
      The cache is initialized with init_rr_cache.
      For correlated subquery the cache allocation is happening at each execution
      of the subquery but the deallocation happens only once and that was
      when the query execution was done.
      
      So generally for subqueries we do two types of cleanup
      
      1) Full cleanup: we should free all resources of the query(like temp tables).
         This is done generally when the query execution is complete or the subquery
         re-execution is not needed (case with uncorrelated subquery)
      
      2) Partial cleanup: Minor cleanup that is required if
         the subquery needs recalculation. This is done for all the structures that
         need to be allocated for each execution (example SORT_INFO for filesort
         is allocated for each execution of the correlated subquery).
      
      The fix here would be free the cache used by rr_from_cache in the partial
      cleanup phase.
      1e31d748
    • Alexander Barkov's avatar
      MDEV-23105 Cast number string with many leading zeros to decimal gives unexpected result · 0e80f5a6
      Alexander Barkov authored
      Skip leading zeros when converting a string to decimal_t.
      0e80f5a6
  9. 04 Aug, 2020 6 commits
    • Sergei Golubchik's avatar
      a09a06d5
    • Sergei Golubchik's avatar
      5.6.49-89.0 · 2adaaeba
      Sergei Golubchik authored
      2adaaeba
    • Marko Mäkelä's avatar
      MDEV-23101 fixup: Remove redundant code · 91caf130
      Marko Mäkelä authored
      lock_rec_has_to_wait_in_queue(): Remove an obviously redundant assertion
      that was added in commit a8ec4586
      and also enclose a Galera-specific condition in #ifdef WITH_WSREP.
      91caf130
    • Sachin's avatar
      MDEV-23089 rpl_parallel2 fails in 10.5 · e3c18b8e
      Sachin authored
      Problem:- rpl_parallel2 was failing non-deterministically
      Analysis:-
      When FLUSH TABLES WITH READ LOCK is executed, it will allow all worker
      threads to complete their ongoing transactions and then it will pause them.
      At this state FTWRL will proceed to acquire global read lock. FTWRL first
      blocks threads from starting new commits, then upgrades the lock to block
      commit of existing transactions.
        Step1:
          FLUSH TABLES WITH READ LOCK - Blocks new commits
        Step2:
          * STOP SLAVE command enables 'force_abort=1' which unblocks workers,
            they continue to execute events.
          * T1: Waits in 'record_gtid' call to update 'gtid_slave_pos' table with
            its current GTID, but it is blocked becuase of Step1.
          * T2: Holds COMMIT lock and waits for T1 to commit.
        Step3:
          FLUSH TABLES WITH READ LOCK - Waiting to get BLOCK_COMMIT.
      This results in deadlock. When STOP SLAVE command allows paused workers to
      proceed, workers should skip the execution of all further events, similar
      to 'conservative' parallel mode.
      Solution:-
      We will assign 1 to skip_event_group when we are aborted in do_ftwrl_wait.
      rpl_parallel_entry->pause_sub_id is only reset when force_abort is off in
      rpl_pause_after_ftwrl.
      e3c18b8e
    • Rucha Deodhar's avatar
      MDEV-23082: ER_TABLEACCESS_DENIED_ERROR error message is truncated, · 5fb07d22
      Rucha Deodhar authored
      and inaccurately
      
      Analysis: The list of all privileges is 118 characters wide. However, the
      format of error message was: "%-.32s command denied to user...". get_length()
      sets the maximum width to 32 characters. As a result, only first 32
      characters of list of privilege are stored.
      Fix: Changing the format to "%-.100T..." so that get_length() sets width to
      100. Hence, first 100 characters of the list of privilege are stored and the
      type specifier 'T' appends '...' so that truncation can be seen.
      5fb07d22
    • Rucha Deodhar's avatar
      MDEV-14836: Assertion `m_status == DA_ERROR' failed in · 745fa255
      Rucha Deodhar authored
      Diagnostics_area::sql_errno upon query from I_S with LIMIT ROWS EXAMINED
      
      open_normal_and_derived_table() fails because the query was already killed
      as rows examined by the query are more than the limit. However, this isn't a
      real error.
      Fix: Check if there is actually an error before calling thd->sql_errno()
      and later send a warning in handle_select() if no real error.
      745fa255