1. 23 Jun, 2022 6 commits
  2. 22 Jun, 2022 7 commits
    • Marko Mäkelä's avatar
      MDEV-18976 fixup: encryption.innodb-redo-badkey · 0f0a45b2
      Marko Mäkelä authored
      When attempting to recover a database with an incorrect encryption key,
      the unencrypted page contents should be expected to differ from what
      was written before recovery. Let us suppress some more messages.
      This caused intermittent failures, depending on when the latest
      log checkpoint was triggered.
      0f0a45b2
    • Marko Mäkelä's avatar
      Merge 10.8 into 10.9 · f421d8f5
      Marko Mäkelä authored
      f421d8f5
    • Marko Mäkelä's avatar
      Merge 10.7 into 10.8 · 3a66c015
      Marko Mäkelä authored
      3a66c015
    • Sergei Petrunia's avatar
      MDEV-28882: Assertion `tmp >= 0' failed in best_access_path · 51bce3c5
      Sergei Petrunia authored
      Histogram_json_hb::range_selectivity() may return small negative
      numbers due to rounding errors in the histogram.
      
      Make sure the returned value is non-negative.
      Add an assert to catch negative values that are not small.
      
      (attempt #2)
      51bce3c5
    • Marko Mäkelä's avatar
      MDEV-22388 Corrupted undo log record leads to server crash · 6f4d0659
      Marko Mäkelä authored
      trx_undo_rec_copy(): Return nullptr if the undo record is corrupted.
      
      trx_undo_rec_get_undo_no(): Define inline with the declaration.
      
      trx_purge_dummy_rec: Replaced with a -1 pointer.
      
      row_undo_rec_get(), UndorecApplier::apply_undo_rec(): Check
      if trx_undo_rec_copy() returned nullptr.
      
      trx_purge_get_next_rec(): Return nullptr upon encountering any
      corruption, to signal the end of purge.
      6f4d0659
    • Marko Mäkelä's avatar
      Merge 10.6 into 10.7 · 8ebff3bc
      Marko Mäkelä authored
      8ebff3bc
    • Marko Mäkelä's avatar
      MDEV-28836 fixup · 0fa19fde
      Marko Mäkelä authored
      On GNU/Linux, even though the C11 aligned_alloc() appeared in
      GNU libc early on, some custom memory allocators did not
      implement it until recently. For example, before
      gperftools/gperftools@d406f2285390c402e824dd28e6992f7f890dcdf9
      the free() in tcmalloc would fail to free memory that was
      returned by aligned_alloc(), because the latter would map to the
      built-in allocator of libc. The Linux specific memalign() has a
      similar interface and is safer to use, because it has been
      available for a longer time. For AddressSanitizer, we will use
      aligned_alloc() so that the constraint on size can be enforced.
      
      buf_tmp_reserve_compression_buf(): When HAVE_ALIGNED_ALLOC holds,
      round up the size to be an integer multiple of the alignment.
      
      pfs_malloc(): In the unit test stub, round up the size to be an
      integer multiple of the alignment.
      0fa19fde
  3. 21 Jun, 2022 7 commits
    • Marko Mäkelä's avatar
      Merge 10.8 into 10.9 · 707f2aa2
      Marko Mäkelä authored
      707f2aa2
    • Marko Mäkelä's avatar
      Merge 10.7 into 10.8 · 54ac356d
      Marko Mäkelä authored
      54ac356d
    • Marko Mäkelä's avatar
      Merge 10.6 into 10.7 · 6680fd8d
      Marko Mäkelä authored
      6680fd8d
    • Marko Mäkelä's avatar
      MDEV-28836: Memory alignment cleanup · 37946731
      Marko Mäkelä authored
      Table_cache_instance: Define the structure aligned at
      the CPU cache line, and remove a pad[] data member.
      Krunal Bauskar reported this to improve performance on ARMv8.
      
      aligned_malloc(): Wrapper for the Microsoft _aligned_malloc()
      and the ISO/IEC 9899:2011 <stdlib.h> aligned_alloc().
      Note: The parameters are in the Microsoft order (size, alignment),
      opposite of aligned_alloc(alignment, size).
      Note: The standard defines that size must be an integer multiple
      of alignment. It is enforced by AddressSanitizer but not by GNU libc
      on Linux.
      
      aligned_free(): Wrapper for the Microsoft _aligned_free() and
      the standard free().
      
      HAVE_ALIGNED_ALLOC: A new test. Unfortunately, support for
      aligned_alloc() may still be missing on some platforms.
      We will fall back to posix_memalign() for those cases.
      
      HAVE_MEMALIGN: Remove, along with any use of the nonstandard memalign().
      
      PFS_ALIGNEMENT (sic): Removed; we will use CPU_LEVEL1_DCACHE_LINESIZE.
      
      PFS_ALIGNED: Defined using the C++11 keyword alignas.
      
      buf_pool_t::page_hash_table::create(),
      lock_sys_t::hash_table::create():
      lock_sys_t::hash_table::resize(): Pad the allocation size to an
      integer multiple of the alignment.
      
      Reviewed by: Vladislav Vaintroub
      37946731
    • Marko Mäkelä's avatar
      MDEV-28870 InnoDB: Missing FILE_CREATE, FILE_DELETE or FILE_MODIFY before FILE_CHECKPOINT · 2e43af69
      Marko Mäkelä authored
      There was a race condition between log_checkpoint_low() and
      deleting or renaming data files. The scenario is as follows:
      
      1. The buffer pool does not contain dirty pages.
      2. A FILE_DELETE or FILE_RENAME record is written.
      3. The checkpoint LSN will be moved ahead of the write of the record.
      4. The server is killed before the file is actually renamed or deleted.
      
      We will prevent this race condition by ensuring that a log checkpoint
      cannot occur between the durable write and the file system operation:
      
      1. Durably write the FILE_DELETE or FILE_RENAME record.
      2. Perform the file system operation.
      3. Allow any log checkpoint to proceed.
      
      mtr_t::commit_file(): Implement the DELETE or RENAME logic.
      
      fil_delete_tablespace(): Delegate some of the logic to
      mtr_t::commit_file().
      
      fil_space_t::rename(): Delegate some logic to mtr_t::commit_file().
      Remove the debug injection point fil_rename_tablespace_failure_2
      because we do test RENAME failures without any debug injection.
      
      fil_name_write_rename_low(), fil_name_write_rename(): Remove.
      
      Tested by Matthias Leich
      2e43af69
    • Marko Mäkelä's avatar
      MDEV-28845 fixup: Prevent an infinite loop · 55f02c24
      Marko Mäkelä authored
      buf_page_create_low(): Before retrying, release the exclusive page latch
      in order to prevent an infinite loop in buf_pool_t::corrupted_evict().
      55f02c24
    • Marko Mäkelä's avatar
      MDEV-28782 fixup: ./mtr --embedded · 3b662c6e
      Marko Mäkelä authored
      3b662c6e
  4. 20 Jun, 2022 3 commits
    • Vladislav Vaintroub's avatar
      MDEV-28819 Statically compiled encryption plugins do not work · 3aabda7e
      Vladislav Vaintroub authored
      Disable building hashicorp encryption plugin statically
      3aabda7e
    • Marko Mäkelä's avatar
      Merge 10.8 into 10.9 · 70fffc70
      Marko Mäkelä authored
      70fffc70
    • Marko Mäkelä's avatar
      MDEV-28879 Assertion `l->lsn <= log_sys.get_lsn()' failed around recv_recover_page · 325e6aa7
      Marko Mäkelä authored
      recv_recover_page(): Correct a debug assertion to refer to recv_sys.lsn,
      which may be ahead of log_sys.lsn during non-final recovery batches.
      In commit 685d958e (MDEV-14425)
      when some redundant LSN fields were removed,
      log_sys.log.scanned_lsn had been replaced with a reference to
      log_sys.lsn instead of the more appropriate recv_sys.lsn.
      
      recv_scan_log(): Remove a redundant call to log_sys.set_recovered_lsn().
      It suffices to adjust the log_sys.lsn after parsing (and before starting
      to apply) records for the last batch.
      
      Note: Normally, log_sys.lsn must be the latest log sequence number.
      Before the final recovery batch, this may be safely violated, because
      log_write_up_to() will be a no-op. That function will be invoked by the
      buf_flush_page_cleaner thread to initiate writes of recovered pages.
      325e6aa7
  5. 18 Jun, 2022 1 commit
  6. 17 Jun, 2022 2 commits
  7. 16 Jun, 2022 10 commits
  8. 15 Jun, 2022 4 commits
    • Monty's avatar
      MDEV-28858 Wrong result with table elimination combined with not_null_range_scan · 674842be
      Monty authored
      The bug was that build_notnull_conds_for_range_scans() did not take into
      account the join_tab is not yet sorted with constant tables first.
      Fixed the bug by testing explicitely if a table is a const table.
      674842be
    • Marko Mäkelä's avatar
      MDEV-28845 InnoDB: Failing assertion: bpage->can_relocate() in buf0lru.cc · 253806df
      Marko Mäkelä authored
      Since commit 0b47c126 (MDEV-13542)
      we treat all-zero pages as corrupted ones.
      
      During a stress test, a read-ahead of an all-zero page was triggered
      and the page read was completed concurrently with buf_page_create_low().
      This caused the assertion to fail, because buf_page_create_low() was
      waiting for the page latch.
      
      buf_page_get_low(): Only invoke buf_pool_t::corrupted_evict()
      if the block was not already marked as corrupted.
      
      buf_page_create_low(): On page identifier mismatch, retry the
      buf_pool.page_hash lookup.
      
      buf_pool_t::corrupted_evict(): Set the state of the block to FREED
      so that a concurrent buf_page_get_low() will refuse to load the page.
      Wait for the page latch to be vacant before proceeding to remove
      the block from buf_pool.page_hash and buf_pool.LRU.
      
      page_id_t::set_corrupted(), page_id_t::is_corrupted(): Accessors
      for indicating a corrupted page identifier.
      
      Tested by Matthias Leich
      253806df
    • Marko Mäkelä's avatar
      MDEV-13542 fixup: Relax an assertion · 0850267d
      Marko Mäkelä authored
      0850267d
    • Vlad Lesin's avatar
      MDEV-28832 infinite loop in mariabackup if log LOG_HEADER_FORMAT field is 0 · 27309fc6
      Vlad Lesin authored
      Avoid the loop with getting rid of back and forth jumping.
      27309fc6