1. 19 Jan, 2024 5 commits
    • Marko Mäkelä's avatar
      MDEV-33275 buf_flush_LRU(): mysql_mutex_assert_owner(&buf_pool.mutex) failed · 7e65e302
      Marko Mäkelä authored
      In commit a55b951e (MDEV-26827)
      an error was introduced in a rarely executed code path of the
      buf_flush_page_cleaner() thread. As a result, the function
      buf_flush_LRU() could be invoked while not holding buf_pool.mutex.
      
      Reviewed by: Debarun Banerjee
      7e65e302
    • Marko Mäkelä's avatar
      MDEV-33053 InnoDB LRU flushing does not run before running out of buffer pool · d34479dc
      Marko Mäkelä authored
      buf_flush_LRU(): Display a warning if no pages could be evicted and
      no writes initiated.
      
      buf_pool_t::need_LRU_eviction(): Renamed from buf_pool_t::ran_out().
      Check if the amount of free pages is smaller than innodb_lru_scan_depth
      instead of checking if it is 0.
      
      buf_flush_page_cleaner(): For the final LRU flush after a checkpoint
      flush, use a "budget" of innodb_io_capacity_max, like we do in the
      case when we are not in "furious" checkpoint flushing.
      
      Co-developed by: Debarun Banerjee
      Reviewed by: Debarun Banerjee
      Tested by: Matthias Leich
      d34479dc
    • Oleksandr Byelkin's avatar
      new CC 3.3 · 16f2f8e5
      Oleksandr Byelkin authored
      16f2f8e5
    • Daniel Black's avatar
      innodb: IO Error message missing space · 82e86334
      Daniel Black authored
      Noted by Susmeet Khaire - thanks.
      82e86334
    • Marko Mäkelä's avatar
      MDEV-33095 innodb_flush_method=O_DIRECT creates excessive errors on Solaris · a6290a5b
      Marko Mäkelä authored
      The directio(3C) function on Solaris is supported on NFS and UFS
      while the majority of users should be on ZFS, which is a copy-on-write
      file system that implements transparent compression and therefore
      cannot support unbuffered I/O.
      
      Let us remove the call to directio() and simply treat
      innodb_flush_method=O_DIRECT in the same way as the previous
      default value innodb_flush_method=fsync on Solaris. Also, let us
      remove some dead code around calls to os_file_set_nocache() on
      platforms where fcntl(2) is not usable with O_DIRECT.
      
      On IBM AIX, O_DIRECT is not documented for fcntl(2), only for open(2).
      a6290a5b
  2. 18 Jan, 2024 1 commit
  3. 17 Jan, 2024 3 commits
    • Marko Mäkelä's avatar
      Merge 10.5 into 10.6 · 3a96eba2
      Marko Mäkelä authored
      3a96eba2
    • Marko Mäkelä's avatar
      MDEV-30940: Try to fix the test · 6a514ef6
      Marko Mäkelä authored
      6a514ef6
    • Marko Mäkelä's avatar
      MDEV-33213 History list is not shrunk unless there is a pause in the workload · f8c88d90
      Marko Mäkelä authored
      The parameter innodb_undo_log_truncate=ON enables a multi-phased logic:
      1. Any "producers" (new starting transactions) are prohibited
      from using the rollback segments that reside in the undo tablespace.
      2. Any transactions that use any of the rollback segments must be
      committed or aborted.
      3. The purge of committed transaction history must process all the
      rollback segments.
      4. The undo tablespace is truncated and rebuilt.
      5. The rollback segments are re-enabled for new transactions.
      
      There was one flaw in this logic: The first step was not being invoked
      as often as it could be, and therefore innodb_undo_log_truncate=ON
      would have no chance to work during a heavy write workload.
      
      Independent of innodb_undo_log_truncate, even after
      commit 86767bcc
      we are missing some chances to free processed undo log pages.
      If we prohibited the creation of new transactions in one busy
      rollback segment at a time, we would be eventually guaranteed
      to be able to free such pages.
      
      purge_sys_t::skipped_rseg: The current candidate rollback segment
      for shrinking the history independent of innodb_undo_log_truncate.
      
      purge_sys_t::iterator::free_history_rseg(): Renamed from
      trx_purge_truncate_rseg_history(). Implement the logic
      around purge_sys.m_skipped_rseg.
      
      purge_sys_t::truncate_undo_space: Renamed from truncate.
      
      purge_sys.truncate_undo_space.last: Changed the type to integer
      to get rid of some pointer dereferencing and conditional branches.
      
      purge_sys_t::truncating_tablespace(), purge_sys_t::undo_truncate_try():
      Refactored from trx_purge_truncate_history().
      Set purge_sys.truncate_undo_space.current if applicable,
      or return an already set purge_sys.truncate_undo_space.current.
      
      purge_coordinator_state::do_purge(): Invoke
      purge_sys_t::truncating_tablespace() as part of the normal work loop,
      to implement innodb_undo_log_truncate=ON as often as possible.
      
      trx_purge_truncate_rseg_history(): Remove a redundant parameter.
      
      trx_undo_truncate_start(): Replace dead code with a debug assertion.
      
      Correctness tested by: Matthias Leich
      Performance tested by: Axel Schwenke
      Reviewed by: Debarun Banerjee
      f8c88d90
  4. 16 Jan, 2024 2 commits
  5. 15 Jan, 2024 1 commit
    • Thirunarayanan Balathandayuthapani's avatar
      MDEV-32968 InnoDB fails to restore tablespace first page from doublewrite... · caad34df
      Thirunarayanan Balathandayuthapani authored
      MDEV-32968  InnoDB fails to restore tablespace first page from doublewrite buffer when page is empty
      
      - InnoDB fails to find the space id from the page0 of
      the tablespace. In that case, InnoDB can use
      doublewrite buffer to recover the page0 and write
      into the file.
      
      - buf_dblwr_t::init_or_load_pages(): Loads only the pages
      which are valid.(page lsn >= checkpoint). To do that,
      InnoDB has to open the redo log before system
      tablespace, read the latest checkpoint information.
      
      recv_dblwr_t::find_first_page():
      1) Iterate the doublewrite buffer pages and find the 0th page
      2) Read the tablespace flags, space id from the 0th page.
      3) Read the 1st, 2nd and 3rd page from tablespace file and
      compare the space id with the space id which is stored
      in doublewrite buffer.
      4) If it matches then we can write into the file.
      5) Return space which matches the pages from the file.
      
      SysTablespace::read_lsn_and_check_flags(): Remove the
      retry logic for validating the first page. After
      restoring the first page from doublewrite buffer,
      assign tablespace flags by reading the first page.
      
      recv_recovery_read_max_checkpoint(): Reads the maximum
      checkpoint information from log file
      
      recv_recovery_from_checkpoint_start(): Avoid reading
      the checkpoint header information from log file
      
      Datafile::validate_first_page(): Throw error in case
      of first page validation fails.
      caad34df
  6. 14 Jan, 2024 1 commit
  7. 13 Jan, 2024 1 commit
  8. 12 Jan, 2024 3 commits
  9. 11 Jan, 2024 5 commits
  10. 10 Jan, 2024 9 commits
    • Marko Mäkelä's avatar
      MDEV-33112 innodb_undo_log_truncate=ON is blocking page write · 3613fb2a
      Marko Mäkelä authored
      When innodb_undo_log_truncate=ON causes an InnoDB undo tablespace
      to be truncated, we must guarantee that the undo tablespace will
      be rebuilt atomically: After mtr_t::commit_shrink() has durably
      written the mini-transaction that rebuilds the undo tablespace,
      we must not write any old pages to the tablespace.
      
      To guarantee this, in trx_purge_truncate_history() we used to
      traverse the entire buf_pool.flush_list in order to acquire
      exclusive latches on all pages for the undo tablespace that
      reside in the buffer pool, so that those pages cannot be written
      and will be evicted during mtr_t::commit_shrink(). But, this
      traversal may interfere with the page writing activity of
      buf_flush_page_cleaner(). It would be better to lazily discard
      the old pages of the truncated undo tablespace.
      
      fil_space_t::is_being_truncated, fil_space_t::clear_stopping(): Remove.
      
      fil_space_t::create_lsn: A new field, identifying the LSN of the
      latest rebuild of a tablespace.
      
      buf_page_t::flush(), buf_flush_try_neighbors(): Evict pages whose
      FIL_PAGE_LSN is below fil_space_t::create_lsn.
      
      mtr_t::commit_shrink(): Update fil_space_t::create_lsn and
      fil_space_t::size right before the log is durably written and the
      tablespace file is being truncated.
      
      fsp_page_create(), trx_purge_truncate_history(): Simplify the logic.
      
      Reviewed by: Thirunarayanan Balathandayuthapani, Vladislav Lesin
      Performance tested by: Axel Schwenke
      Correctness tested by: Matthias Leich
      3613fb2a
    • Marko Mäkelä's avatar
    • Sergei Golubchik's avatar
      MDEV-33092 Undefined reference to concurrency on Solaris · 761d5c89
      Sergei Golubchik authored
      remove thr_setconcurrency()
      followup for 8bbcaab1
      
      Fix by Rainer Orth
      761d5c89
    • Sergei Golubchik's avatar
      MDEV-32984 Update federated table and column privileges · c4ebf87f
      Sergei Golubchik authored
      mark auto-inc columns for read/write on INSERT,
      but only for read on UPDATE
      c4ebf87f
    • Yuchen Pei's avatar
      Merge branch '10.4' into 10.5 · c9902a20
      Yuchen Pei authored
      c9902a20
    • Marko Mäkelä's avatar
      MDEV-33137: Assertion end_lsn == page_lsn failed in recv_recover_page · 4cbf75dd
      Marko Mäkelä authored
      trx_purge_free_segment(), trx_purge_truncate_rseg_history():
      Do not claim that the blocks will be modified in the mini-transaction,
      because that will not always be the case. Whenever there is a
      modification, mtr_t::set_modified() will flag it.
      
      The debug assertion that failed in recovery is checking that all
      changes to data pages are covered by log records. Due to these
      incorrect calls, we would unnecessarily write unmodified data pages,
      which is something that commit 05fa4558
      aims to avoid.
      
      The incorrect calls had originally been added in
      commit de31ca6a (MDEV-32820) and
      commit 86767bcc (MDEV-29593).
      
      Reviewed by: Vladislav Lesin
      Tested by: Elena Stepanova
      4cbf75dd
    • Yuchen Pei's avatar
      MDEV-29718 Fix spider detection of same data node server · bc3d416a
      Yuchen Pei authored
      When the host is not specified, it defaults to localhost.
      bc3d416a
    • Yuchen Pei's avatar
      MDEV-33008 Fix spider table discovery · eabc74aa
      Yuchen Pei authored
      A new column was introduced to the show index output in 10.6 in
      f691d986
      
      Thus we update the check of the number of columns to be at least 13,
      rather than exactly 13.
      
      Also backport an err number and format from 10.5 for better error
      messages when the column number is wrong.
      eabc74aa
    • Rainer Orth's avatar
      MDEV-8941 Compile on Solaris (SPARC) fails with errors in filamvct.cpp · 2310f659
      Rainer Orth authored
      There are a large number of uses of `strerror` in the codebase,
      the local declaration in `storage/connect/tabvct.cpp` is the only one.
      
      Given that none is needed elsewhere, I conclude that this instance can
      simply be removed.
      2310f659
  11. 09 Jan, 2024 8 commits
  12. 08 Jan, 2024 1 commit