1. 07 Mar, 2022 1 commit
    • Daniel Black's avatar
      MDEV-27891: SIGSEGV in InnoDB buffer pool resize · b6a24724
      Daniel Black authored
      During an increase in resize, the new curr_size got a value
      less than old_size.
      
      As n_chunks_new and n_chunks have a strong correlation to the
      resizing operation in progress, we can use them and remove the
      need for old_size.
      
      For convienece the n_chunks_new < n_chunks is now the is_shrinking
      function.
      
      The volatile compiler optimization on n_chunks{,_new} is removed
      as real mutex uses are needed.
      
      Other n_chunks_new/n_chunks methods:
      
      n_chunks_new and n_chunks almost always read and altered under
      the pool mutex.
      
      Exceptions are:
      * i_s_innodb_buffer_page_fill,
      * buf_pool_t::is_uncompressed (via is_blocked_field)
      These need reexamining for the need of a mutex, however comments
      indicates this already.
      
      get_n_pages has uses in buffer pool load, recover log memory
      exhaustion estimates and innodb status so take the minimum number
      of chunks for safety.
      
      The buf_pool_t::running_out function also uses curr_size/old_size.
      We replace this hot function calculation with just n_chunks_new.
      This is the new size of the chunks before the resizing occurs.
      
      If we are resizing down, we've already got the case we had previously
      (as the minimum). If we are resizing upwards, we are taking an
      optimistic view that there will be buffer chunks available for locks.
      As this memory allocation is occurring immediately next the resizing
      function it seems likely.
      
      Compiler hint UNIV_UNLIKELY removed to leave it to the branch
      predictor to make an informed decision.
      
      Added test case of a smaller size than the Marko/Roel original
      in JIRA reducing the size to 256M. SEGV hits roughly 1/10 times
      but its better than a 21G memory size.
      
      Reviewer: Marko
      b6a24724
  2. 03 Mar, 2022 1 commit
  3. 01 Mar, 2022 7 commits
  4. 28 Feb, 2022 10 commits
    • Monty's avatar
      Fixed sporadic error in main.backup_locks · 72437cbc
      Monty authored
      The follwoing could happen if InnoDB did some background work while
      test was running:
      
      @@ -5,6 +5,8 @@
       SELECT LOCK_MODE, LOCK_TYPE, TABLE_SCHEMA, TABLE_NAME FROM information_schema.metadata_lock_info;
       LOCK_MODE      LOCK_TYPE       TABLE_SCHEMA    TABLE_NAME
       MDL_SHARED_HIGH_PRIO   Table metadata lock     test    t1
      +MDL_SHARED     Table metadata lock     mysql   innodb_table_stats
      +MDL_SHARED     Table metadata lock     mysql   innodb_index_stat
      72437cbc
    • Marko Mäkelä's avatar
      Merge 10.5 into 10.6 · edb311ae
      Marko Mäkelä authored
      edb311ae
    • Marko Mäkelä's avatar
      MDEV-27964: Work around SIGSEGV in WITH_MSAN builds · bc020058
      Marko Mäkelä authored
      We will move all tests of the ENCRYPT() function to the test
      main.func_crypt, which will be disabled in MSAN builds for now.
      bc020058
    • Marko Mäkelä's avatar
      Merge fixup: -Wconversion · 08d39bdf
      Marko Mäkelä authored
      In merge cc1d9062 the 32-bit builds
      were broken.
      08d39bdf
    • Marko Mäkelä's avatar
      Merge 10.5 into 10.6 · 5c21cba6
      Marko Mäkelä authored
      5c21cba6
    • Marko Mäkelä's avatar
      Avoid some failures WITH_MSAN · 13076bd3
      Marko Mäkelä authored
      13076bd3
    • Marko Mäkelä's avatar
      Merge 10.4 into 10.5 · cc1d9062
      Marko Mäkelä authored
      cc1d9062
    • Marko Mäkelä's avatar
      Merge 10.3 into 10.4 · 3c58cdd9
      Marko Mäkelä authored
      3c58cdd9
    • Marko Mäkelä's avatar
      MDEV-27800: Avoid garbage TRX_UNDO_TRX_NO on TRX_UNDO_CACHED pages · 0635088d
      Marko Mäkelä authored
      In commit c7d04487 (MDEV-15132)
      MariaDB Server 10.3 stopped writing the latest transaction identifier
      to the TRX_SYS page. Instead, the transaction identifier will be
      recovered from undo log pages.
      
      Unfortunately, before commit 3926673c
      and mysql/mysql-server@dc29792ff2996aefbb6e64bb2f0bc3aa8fc879e9
      (MySQL 5.1.48 or MariaDB 5.1.48) InnoDB did not always initialize all
      data fields, but some garbage could be left behind in unused parts
      of data pages.
      
      In undo log pages that are essentially free, but added to a list for
      reuse (TRX_UNDO_CACHED) the TRX_UNDO_TRX_NO fields could contain garbage,
      instead of 0. As long as such undo pages are being reused and never
      marked completely free, the garbage contents may remain forever.
      In fact, the function trx_undo_header_create() and the record
      MLOG_UNDO_HDR_CREATE will only initialize TRX_UNDO_TRX_ID, but leave
      TRX_UNDO_TRX_NO uninitialized.
      
      trx_undo_mem_create_at_db_start(): Only read the TRX_UNDO_TRX_NO
      fields of TRX_UNDO_CACHED pages if the TRX_UNDO_PAGE_TYPE is 0,
      that is, the page was updated by MariaDB Server 10.3. Earlier versions
      would always write the TRX_UNDO_PAGE_TYPE as 1 or 2.
      
      trx_undo_header_create(): Zero out the TRX_UNDO_TRX_NO field.
      Strictly speaking, this will change the semantics of the
      MLOG_UNDO_HDR_CREATE record, but it should not do any harm to
      overwrite a potentially garbage field with zeroes.
      
      Note: This fix will only help future upgrades straight from
      MariaDB Server 10.2 or MySQL 5.6 or earlier. If such an upgrade has
      already been made, then an earlier server startup could have
      fast-forwarded the transaction ID sequence to a large value.
      If this large value cannot be represented in 48 bits (the size of
      the DB_TRX_ID column in clustered index records), then various
      strange things can happen.
      0635088d
    • Marko Mäkelä's avatar
      Merge 10.2 into 10.3 · 535bef86
      Marko Mäkelä authored
      535bef86
  5. 25 Feb, 2022 12 commits
  6. 24 Feb, 2022 4 commits
  7. 23 Feb, 2022 5 commits
    • Marko Mäkelä's avatar
      Merge 10.5 into 10.6 · 164a6aa4
      Marko Mäkelä authored
      164a6aa4
    • Marko Mäkelä's avatar
      Extend have_sanitizer with ASAN+UBSAN and MSAN · b91a123d
      Marko Mäkelä authored
      Disable some tests that are too slow or big for MSAN.
      b91a123d
    • Marko Mäkelä's avatar
      Merge 10.4 into 10.5 · 23368b76
      Marko Mäkelä authored
      23368b76
    • Julius Goryavsky's avatar
      MDEV-26377: Stricter validation of ssl-mode values · a3da3c8a
      Julius Goryavsky authored
      This commit adds validation of the values of the ssl-mode parameter
      in SSL scripts, since now only a basic check for the presence of the
      "VERIFY_" prefix is performed there to detect "VERIFY_IDENTITY" and
      "VERIFY_CA", but all other values are not checked at all.
      
      In addition, this commit removes leading and trailing spaces from
      parameter values that SST scripts read from configuration files or
      from the command line so that they do not interfere with parameter
      checks and substitutions. Parameter substitution has been made more
      robust against characters in strings that the shell might erroneously
      interpret as regexp.
      a3da3c8a
    • Marko Mäkelä's avatar
      MDEV-27798 SIGSEGV in dict_index_t::reconstruct_fields() · 46764652
      Marko Mäkelä authored
      When recovery is rolling back an incomplete instant DROP COLUMN
      operation, it may access non-existing fields. Let us avoid
      invoking std::find_if() outside the valid bounds of the array.
      
      This bug was reproduced with the Random Query Generator, using a
      combination of instant DROP, ADD...FIRST, CHANGE (renaming a column).
      Unfortunately, we were unable to create an mtr test case for
      reproducing this, despite spending considerable effort on it.
      46764652