1. 14 Sep, 2023 2 commits
  2. 13 Sep, 2023 2 commits
  3. 12 Sep, 2023 4 commits
    • Marko Mäkelä's avatar
      MDEV-32150 InnoDB reports corruption on 32-bit platforms with ibd files sizes > 4GB · d20a4da2
      Marko Mäkelä authored
      buf_read_page_low(): Use 64-bit arithmetics when computing the
      file byte offset. In other calls to fil_space_t::io() the offset
      was being computed correctly, for example by
      buf_page_t::physical_offset().
      d20a4da2
    • Marko Mäkelä's avatar
      MDEV-30100 fixup: Remove a failing debug assertion · 736901b4
      Marko Mäkelä authored
      trx_purge_truncate_history(): Remove a debug assertion that
      had originally been added in
      commit 0de3be8c (MDEV-30671).
      In trx_t::commit_empty() we do not have any efficient way to rewind
      rseg.needs_purge to an accurate value that would satisfy this
      debug assertion.
      
      Note: No correctness property should be violated here. At the point
      where the debug assertion was located, we had already established
      that purge_sys.sees(rseg.needs_purge) holds, that is, it is safe
      to remove everything from rseg.
      736901b4
    • Marko Mäkelä's avatar
      MDEV-26782 fixup: Remove dead code · 3c840ae7
      Marko Mäkelä authored
      trx_undo_reuse_cached(): Assert that this is being invoked on the
      persistent rollback segment of the transaction, and remove dead code
      that was handling cached temporary undo log. This was missed in
      commit 51e62cb3 (MDEV-26782).
      3c840ae7
    • sjaakola's avatar
      MDEV-31833 replication breaks when using optimistic replication and replica is a galera node · a3cbc44b
      sjaakola authored
      MariaDB async replication SQL thread was stopped for any failure
      in applying of replication events and error message logged for the failure
      was: "Node has dropped from cluster". The assumption was that event applying
      failure is always due to node dropping out.
      With optimistic parallel replication, event applying can fail for natural
      reasons and applying should be retried to handle the failure. This retry
      logic was never exercised because the slave SQL thread was stopped with first
      applying failure.
      
      To support optimistic parallel replication retrying logic this commit will
      now skip replication slave abort, if node remains in cluster (wsrep_ready==ON)
      and replication is configured for optimistic or aggressive retry logic.
      
      During the development of this fix, galera.galera_as_slave_nonprim test showed
      some problems. The test was analyzed, and it appears to need some attention.
      One excessive sleep command was removed in this commit, but it will need more
      fixes still to be fully deterministic. After this commit galera_as_slave_nonprim
      is successful, though.
      Signed-off-by: default avatarJulius Goryavsky <julius.goryavsky@mariadb.com>
      a3cbc44b
  4. 11 Sep, 2023 13 commits
    • Thirunarayanan Balathandayuthapani's avatar
      MDEV-32145 Disable read-ahead for temporary tablespace · a03b8cd0
      Thirunarayanan Balathandayuthapani authored
      - Lifetime of temporary tables is expected to be short, it would
      seem to make sense to assume that all temporary tablespace pages
      will remain in the buffer pool. It doesn't make sense to have
      read-ahead for pages of temporary tablespace
      a03b8cd0
    • Marko Mäkelä's avatar
      MDEV-32134 InnoDB hang in buf_flush_wait_LRU_batch_end() · cdd2fa7f
      Marko Mäkelä authored
      buf_flush_page_cleaner(): Before finishing a batch, wake up any threads
      that are waiting for buf_pool.done_flush_LRU.
      
      This should fix a hung shutdown that we observed
      after SET GLOBAL innodb_buffer_pool_size started was executed
      to shrink the InnoDB buffer pool.
      cdd2fa7f
    • Marko Mäkelä's avatar
      MDEV-32103 InnoDB ALTER TABLE is not crash-safe · 466d9f5f
      Marko Mäkelä authored
      Starting with commit 4ff5311d
      log_write_up_to(trx->commit_lsn, true) in DDL operations could end up
      being a no-op, because trx->commit_lsn would be 0.
      
      trx_flush_log_if_needed(): Revert an incorrect attempt to ensure
      that DDL operations are crash-safe.
      
      trx_t::commit(std::vector<pfs_os_file_t> &), ha_innobase::rename_table():
      Set trx_t::flush_log_later so that trx_t::commit_in_memory() will
      retain trx_t::commit_lsn for the final durability call.
      
      Tested by: Matthias Leich
      466d9f5f
    • Marko Mäkelä's avatar
      MDEV-30531 Corrupt index(es) on busy table when using FOREIGN KEY · 4a8291fc
      Marko Mäkelä authored
      lock_wait(): Never return the transient error code DB_LOCK_WAIT.
      In commit 78a04a4c (MDEV-29869)
      some assignments assign trx->error_state = DB_SUCCESS were removed,
      and it was possible that the field was left at its initial value
      DB_LOCK_WAIT.
      
      The test case for this is nondeterministic; without this fix, it
      would only occasionally fail.
      
      Reviewed by: Vladislav Lesin
      4a8291fc
    • Marko Mäkelä's avatar
      MDEV-32096 Parallel replication lags because innobase_kill_query() may fail to... · e039720b
      Marko Mäkelä authored
      MDEV-32096 Parallel replication lags because innobase_kill_query() may fail to interrupt a lock wait
      
      lock_sys_t::cancel(trx_t*): Remove, and merge to its only caller
      innobase_kill_query().
      
      innobase_kill_query(): Before reading trx->lock.wait_lock,
      do acquire lock_sys.wait_mutex, like we did before
      commit e71e6133 (MDEV-24671).
      In this way, we should not miss a recently started lock wait
      by the killee transaction.
      
      lock_rec_lock(): Add a DEBUG_SYNC "lock_rec" for the test case.
      
      lock_wait(): Invoke trx_is_interrupted() before entering the wait,
      in case innobase_kill_query() was invoked some time earlier and
      some longer-running operation did not check for interrupts.
      As suggested by Vladislav Lesin, do not overwrite
      trx->error_state==DB_INTERRUPTED with DB_SUCCESS.
      This would avoid a call to trx_is_interrupted() when the test is
      modified to use the DEBUG_SYNC point lock_wait_start instead of lock_rec.
      Avoid some redundant loads of trx->lock.wait_lock; cache the value
      in the local variable wait_lock.
      
      Deadlock::check_and_resolve(): Take wait_lock as a parameter and
      return wait_lock (or -1 or nullptr). We only need to reload
      trx->lock.wait_lock if lock_sys.wait_mutex had been released
      and reacquired.
      
      trx_t::error_state: Correctly document the data member.
      
      trx_lock_t::was_chosen_as_deadlock_victim: Clarify that other threads
      may set the field (or flags in it) while holding lock_sys.wait_mutex.
      
      Thanks to Johannes Baumgarten for reporting the problem and testing
      the fix, as well as to Kristian Nielsen for suggesting the fix.
      
      Reviewed by: Vladislav Lesin
      Tested by: Matthias Leich
      e039720b
    • Marko Mäkelä's avatar
      Merge 10.5 into 10.6 · 0dd25f28
      Marko Mäkelä authored
      0dd25f28
    • Marko Mäkelä's avatar
      MDEV-21679 fixup for s390x · ef569c32
      Marko Mäkelä authored
      Some s390x environments include
      https://github.com/madler/zlib/pull/410
      and a more pessimistic compressBound: (sourceLen * 16 + 2308) / 8 + 6.
      Let us adjust the recently enabled tests accordingly.
      ef569c32
    • Marko Mäkelä's avatar
      MDEV-32144 Debug assertion failure w == MAYBE_NOP in mtr_t::memcpy() · 384eb570
      Marko Mäkelä authored
      trx_undo_write_trx_xid(): Silence the debug assertion by passing
      a template parameter that causes us to not care that the contents of
      the page did not actually change and no log record would be written.
      This debug assertion could fail if XA PREPARE was executed multiple
      times with the same XID.
      384eb570
    • Marko Mäkelä's avatar
      Merge 10.4 into 10.5 · f8f7d9de
      Marko Mäkelä authored
      f8f7d9de
    • Marko Mäkelä's avatar
      MDEV-23841: Memory leak in innodb_monitor_validate() · 65c99207
      Marko Mäkelä authored
      innodb_monitor_validate(): Let item_val_str() allocate the memory
      in THD, so that it will be available to innodb_monitor_update().
      In this way, there is no need to allocate another buffer, and
      no problem if the call to innodb_monitor_update() is skipped due
      to an invalid value that is passed to another configuration parameter.
      
      There are some other callers to st_mysql_sys_var::val_str()
      that validate configuration parameters that are related to FULLTEXT INDEX,
      but they will allocate memory by invoking thd_strmake().
      65c99207
    • Marko Mäkelä's avatar
      MDEV-21664 Add opt files for have_innodb_Xk.inc · 5299f0c4
      Marko Mäkelä authored
      Currently include/have_innodb_4k.inc etc. files only check that the
      server is running with the corresponding page size. I think it would
      be more convenient if they actually enforced the setting.
      5299f0c4
    • Marko Mäkelä's avatar
      MDEV-21679 innodb_zip.index_large_prefix_4k fails with ER_TOO_BIG_ROWSIZE · d4fd4ae4
      Marko Mäkelä authored
      The test innodb_zip.index_large_prefix_4k would not run unless it is
      invoked as
      ./mtr --mysqld=--innodb-page-size=4k innodb_zip.index_large_prefix_4k
      
      This test was originally developed to cover an option that was removed
      in commit 0c92794d. Starting with
      MariaDB Server 10.2, which introduced innodb_default_row_format=dynamic,
      the option innodb_large_prefix had become useless.
      
      Let us remove some of the stale tests and adjust the outcome to the
      expected behaviour.
      d4fd4ae4
    • Marko Mäkelä's avatar
      MDEV-21678 innodb_gis.gis_split_nan fails with ER_CANT_CREATE_GEOMETRY_OBJECT · 86f6129c
      Marko Mäkelä authored
      Let us avoid inserting the rows fid=714 and fid=715, because we would
      evaluate g=NULL for them, and NULL values are not allowed in InnoDB
      SPATIAL INDEX.
      
      Also, let the test run on any page size, and on non-debug builds.
      86f6129c
  5. 09 Sep, 2023 1 commit
  6. 08 Sep, 2023 7 commits
  7. 07 Sep, 2023 2 commits
    • Kristian Nielsen's avatar
      MDEV-10356: rpl.rpl_parallel_temptable failure due to incorrect commit optimization of temptables · e937a64d
      Kristian Nielsen authored
      The problem was that parallel replication of temporary tables using
      statement-based binlogging could overlap the COMMIT in one thread with a DML
      or DROP TEMPORARY TABLE in another thread using the same temporary table.
      Temporary tables are not safe for concurrent access, so this caused
      reference to freed memory and possibly other nastiness.
      
      The fix is to disable the optimisation with overlapping commits of one
      transaction with the start of a later transaction, when temporary tables are
      in use. Then the following event groups will be blocked from starting until
      the one using temporary tables is completed.
      
      This also fixes occasional test failures of rpl.rpl_parallel_temptable seen
      in Buildbot.
      Signed-off-by: default avatarKristian Nielsen <knielsen@knielsen-hq.org>
      e937a64d
    • Nayana Thorat's avatar
      MDEV-29324 s390x patch srw_lock.cc · 961b96a5
      Nayana Thorat authored
      Fix debug mode build failure on s390x.
      Replaced builtin_ttest by __builtin_tx_nesting_depth() > 0 as a s390x equivalent version of the expression.
      961b96a5
  8. 06 Sep, 2023 8 commits
  9. 05 Sep, 2023 1 commit
    • Monty's avatar
      Small corrections to MDEV-29693 ANALYZE TABLE · f009c4da
      Monty authored
      32 bit MariaDB crashed in innodb.innodb-16k and a few other tests.
      Fixed by using correct sizeof() calls.
      
      Histograms where not read if first read was without histograms.
      f009c4da