1. 12 Sep, 2024 1 commit
  2. 10 Sep, 2024 1 commit
  3. 09 Sep, 2024 2 commits
  4. 06 Sep, 2024 2 commits
  5. 05 Sep, 2024 2 commits
  6. 04 Sep, 2024 1 commit
    • Marko Mäkelä's avatar
      MDEV-34446 SIGSEGV on SET GLOBAL innodb_log_file_size with memory-mapped log file · fe5829a1
      Marko Mäkelä authored
      log_t::resize_write(): Advance log_sys.resize_lsn and reset
      the resize_log offset to START_OFFSET whenever the memory-mapped buffer
      would wrap around.
      
      Previously, in case the initial target offset would be beyond the
      requested innodb_log_file_size, we only adjusted the offset but
      not the LSN. An incorrect LSN would cause log_sys.buf_free to be out
      of bounds when the log resizing completes.
      
      The log_sys.lsn_lock will cover the entire duration of replicating
      memory-mapped log for resizing. We just need a mutex that is compatible
      with the caller holding log_sys.latch. While the choice of mtr_t::finisher
      (for normal log writes) depends on mtr_t::spin_wait_delay,
      replicating the log during resizing is a rare operation where we can
      afford possible additional context switching overhead.
      fe5829a1
  7. 03 Sep, 2024 5 commits
    • Marko Mäkelä's avatar
      MDEV-34845 buf_flush_buffer_pool(): Assertion `!os_aio_pending_reads()' failed · 9f0b1066
      Marko Mäkelä authored
      buf_flush_buffer_pool(): Wait for any pending asynchronous reads
      to complete. This assertion failed in a run where buf_read_ahead_linear()
      had been triggered in an SQL statement that was executed right
      before shutdown.
      
      Reviewed by: Debarun Banerjee
      9f0b1066
    • Marko Mäkelä's avatar
      MDEV-34791: Redundant page lookups hurt performance · 9878238f
      Marko Mäkelä authored
      btr_cur_t::search_leaf(): When the index root page is also a leaf page,
      we may need to upgrade our existing shared root page latch into an
      exclusive latch. Even if we end up waiting, the root page won't be able
      to go away while we hold an index()->lock. The index page may be split;
      that is all.
      
      btr_latch_prev(): Acquire the page latch while holding a buffer-fix
      and an index tree latch. Merge the change buffer if needed. Use
      buf_pool_t::page_fix() for this special case instead of complicating
      buf_page_get_low() and buf_page_get_gen().
      
      row_merge_read_clustered_index(): Remove some code that does not seem
      to be useful. No difference was observed with regard to removing this
      code when a CREATE INDEX or OPTIMIZE TABLE statement was run concurrently
      with sysbench oltp_update_index --tables=1 --table_size=1000 --threads=16.
      
      buf_pool_t::unzip(): Decompress a ROW_FORMAT=COMPRESSED page.
      
      buf_pool_t::page_fix(): Handle also ROW_FORMAT=COMPRESSED pages
      as well as change buffer merge. Optionally return an error.
      Add a flag for suppressing a page latch wait and a special return
      value -1 to indicate that the call would block.
      This is the preferred way of buffer-fixing blocks.
      The functions buf_page_get_gen() and buf_page_get_low() are only being
      invoked with rw_latch=RW_NO_LATCH in operations on SPATIAL INDEX.
      
      buf_page_t: Define some static functions for interpreting state().
      
      buf_page_get_zip(), buf_read_page(),
      buf_read_ahead_random(), buf_read_ahead_linear():
      Remove the redundant parameter zip_size. We must look up the
      tablespace and can invoke fil_space_t::zip_size() on it.
      
      buf_page_get_low(): Require mtr!=nullptr.
      
      buf_page_get_gen(): Implement some lock downgrading during recovery.
      
      ibuf_page_low(): Use buf_pool_t::page_fix() in a debug check.
      We do wait for a page read here, because otherwise a debug assertion in
      buf_page_get_low() in the test innodb.ibuf_delete could occasionally fail.
      
      PageConverter::operator(): Invoke buf_pool_t::page_fix() in order
      to possibly evict a block. This allows us to remove some
      special case code from buf_page_get_low().
      9878238f
    • Denis Protivensky's avatar
      MDEV-33133: MDL conflict handling code should skip BF-aborted trxs · 4e2c02a1
      Denis Protivensky authored
      It's possible that MDL conflict handling code is called more
      than once for a transaction when:
      - it holds more than one conflicting MDL lock
      - reschedule_waiters() is executed,
      which results in repeated attempts to BF-abort already aborted
      transaction.
      In such situations, it might be that BF-aborting logic sees
      a partially rolled back transaction and erroneously decides
      on future actions for such a transaction.
      
      The specific situation tested and fixed is when a SR transaction
      applied in the node gets BF-aborted by a started TOI operation.
      It's then caught with the server transaction already rolled back,
      but with no MDL locks yet released. This caused wrong state
      detection for such a transaction during repeated MDL conflict
      handling code execution.
      Signed-off-by: default avatarJulius Goryavsky <julius.goryavsky@mariadb.com>
      4e2c02a1
    • Julius Goryavsky's avatar
      Merge branch '10.5' into '10.6' · d5a669b6
      Julius Goryavsky authored
      d5a669b6
    • Julius Goryavsky's avatar
  8. 02 Sep, 2024 4 commits
  9. 01 Sep, 2024 12 commits
  10. 30 Aug, 2024 2 commits
  11. 29 Aug, 2024 8 commits
    • Marko Mäkelä's avatar
      Merge 10.11 into 11.2 · e91a7994
      Marko Mäkelä authored
      e91a7994
    • Marko Mäkelä's avatar
      MDEV-34750 SET GLOBAL innodb_log_file_size is not crash safe · 984606d7
      Marko Mäkelä authored
      The recent commit 4ca355d8 (MDEV-33894)
      caused a serious regression for online InnoDB ib_logfile0 resizing,
      breaking crash-safety unless the memory-mapped log file interface is
      being used. However, the log resizing was broken also before this.
      
      To prevent such regressions in the future, we extend the test
      innodb.log_file_size_online with a kill and restart of the server
      and with some writes running concurrently with the log size change.
      When run enough many times, this test revealed all the bugs that
      are being fixed by the code changes.
      
      log_t::resize_start(): Do not allow the resized log to start before
      the current log sequence number. In this way, there is no need to
      copy anything to the first block of resize_buf. The previous logic
      regarding that was incorrect in two ways. First, we would have to
      copy from the last written buffer (buf or flush_buf). Second, we failed
      to ensure that the mini-transaction end marker bytes would be 1
      in the buffer. If the source ib_logfile0 had wrapped around an odd number
      of times, the end marker would be 0. This was occasionally observed
      when running the test innodb.log_file_size_online.
      
      log_t::resize_write_buf(): To adjust for the resize_start() change,
      do not write anything that would be before the resize_lsn.
      Take the buffer (resize_buf or resize_flush_buf) as a parameter.
      Starting with commit 4ca355d8
      we no longer swap buffers when rewriting the last log block.
      
      log_t::append(): Define as a static function; only some debug
      assertions need to refer to the log_sys object.
      
      innodb_log_file_size_update(): Wake up the buf_flush_page_cleaner()
      if needed, and wait for it to complete a batch while waiting for
      the log resizing to be completed. If the current LSN is behind the
      resize target LSN, we will write redundant FILE_CHECKPOINT records to
      ensure that the log resizing completes. If the buf_pool.flush_list is
      empty or the buf_flush_page_cleaner() is stuck for some reason, our wait
      will time out in 5 seconds, so that we can periodically check if the
      execution of SET GLOBAL innodb_log_file_size was aborted. Previously,
      we could get into a busy loop here while the buf_flush_page_cleaner()
      would remain idle.
      984606d7
    • Jan Lindström's avatar
      MDEV-31173 : Server crashes when setting wsrep_cluster_address after adding... · 9091afdc
      Jan Lindström authored
      MDEV-31173 : Server crashes when setting wsrep_cluster_address after adding invalid value to wsrep_allowlist table
      
      Problem was that wsrep_schema tables were not marked as
      category information. Fix allows access to wsrep_schema
      tables even when node is detached.
      
      This is 10.4-10.9 version of fix.
      Signed-off-by: default avatarJulius Goryavsky <julius.goryavsky@mariadb.com>
      9091afdc
    • Jan Lindström's avatar
      MDEV-33997 : Assertion `((WSREP_PROVIDER_EXISTS_ && this->variables.wsrep_on)... · b1d74b7e
      Jan Lindström authored
      MDEV-33997 : Assertion `((WSREP_PROVIDER_EXISTS_ && this->variables.wsrep_on) && wsrep_emulate_bin_log) || mysql_bin_log.is_open()' failed in int THD::binlog_write_row(TABLE*, bool, const uchar*)
      
      Problem was that we did not found that table was partitioned
      and then we should find what is actual underlaying storage
      engine.
      
      We should not use RSU for !InnoDB tables.
      Signed-off-by: default avatarJulius Goryavsky <julius.goryavsky@mariadb.com>
      b1d74b7e
    • Oleksandr Byelkin's avatar
      MDEV-34831: MDEV-34704 introduces a typo, --qick · 5a61fd58
      Oleksandr Byelkin authored
      Fix MDEV-34704 typos.
      5a61fd58
    • Oleksandr Byelkin's avatar
      Merge branch '10.6' into 10.11 · 3a1ff739
      Oleksandr Byelkin authored
      3a1ff739
    • Oleksandr Byelkin's avatar
      Merge branch '10.5' into 10.6 · a4654ecc
      Oleksandr Byelkin authored
      a4654ecc
    • Oleksandr Byelkin's avatar
      MDEV-34833 Assertion failure in Item_float::do_build_clone (Item_static_float_func) · 03a5455c
      Oleksandr Byelkin authored
      Added missing method of Item_static_float_func
      03a5455c