1. 11 Sep, 2023 9 commits
    • 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
  2. 09 Sep, 2023 1 commit
  3. 08 Sep, 2023 7 commits
  4. 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
  5. 06 Sep, 2023 8 commits
  6. 05 Sep, 2023 11 commits
    • 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
    • Monty's avatar
      Removed compiler warning from connect/filamdbf.cpp · 182a08a8
      Monty authored
      182a08a8
    • Monty's avatar
      Fix compression tests for s390x · b0847443
      Monty authored
      The problem is that s390x is not using the default bzip library we use
      on other platforms, which causes compressed string lengths to be differnt
      than what mtr tests expects.
      
      Fixed by:
      - Added have_normal_bzip.inc, which checks if compress() returns the
        expected length.
      - Adjust the results to match the expected one
        - main.func_compress.test & archive.archive
      - Don't print lengths that depends on compression library
        - mysqlbinlog compress tests & connect.zip
      - Don't print DATA_LENGTH for SET column_compression_zlib_level=1
        - main.column_compression
      b0847443
    • Dmitry Shulga's avatar
      Merge branch '10.5' into 10.6 · de5dba9e
      Dmitry Shulga authored
      de5dba9e
    • Aleksey Midenkov's avatar
      MDEV-30836 MTR hangs after tests have completed · a49b9314
      Aleksey Midenkov authored
      The problem is in manager/worker communication when worker sends
      WARNINGS and then TESTRESULT. If manager yet didn't read WARNINGS
      response both responses get into the same buffer, can_read() will
      indicate we have data only once and we must read all the data from the
      socket at once. Otherwise TESTRESULT response is lost and manager
      waits it forever.
      
      The fix now instead of single line reads the socket in a loop. But if
      there is only one response in the buffer the second read will be
      blocked waiting until new data arrives. That can be overcame by
      blocking(0) which sets the handle into non-blocking mode. If there is
      no data second read just returns undef.
      
      The problem is non-blocking mode is not supported by all perl flavors
      on Windows. Strawberry and ActiveState do not support it. Cygwin and
      MSYS2 do support. There is some ioctl() hack that was known to "work"
      but it doesn't do what is expected (it does not return data when there
      is data). So for Windows if it is not Cygwin we disable the fix.
      a49b9314
    • Aleksey Midenkov's avatar
      MDEV-30836 MTR MSYS2 fix attempt · 848b3af8
      Aleksey Midenkov authored
      MSYS2 is basically Cygwin, except it has more easy installation (but
      with tools which are not used) and it has some more control of path
      conversion via MSYS2_ARG_CONV_EXCL and MSYS2_ENV_CONV_EXCL. So it
      should be more Windows-friendly than Cygwin.
      
      Installation
      
      Similar to Cygwin, except installing patch requires additional command
      run from shell:
      
          pacman -S patch
      
      MSYS2 still doesn't work as it returns wierd "Bad address" when
      exec-ing forked process from create_process(). Same exec from
      standalone perl -e runs just fine... :(
      848b3af8
    • Aleksey Midenkov's avatar
      MDEV-30836 MTR Cygwin fix · 640cd404
      Aleksey Midenkov authored
      Cygwin is more Unix-oriented. It does not treat \n as \r\n in regexps
      (fixed by \R), it supplies Unix-style paths (fixed by
      mixed_path()). It does some cleanup on paths when running exe, so it
      will be different in exe output (like with $exe_mysqld, comparing
      basename() is enough).
      
      Cygwin installation
      
      1. Just install latest perl version (only base package) and
         patchutils from cygwin-setup;
      2. Don't forget to add c:\cygwin64\bin into system path
         before any other perl flavors;
      3. There is path-style conflict (see below), you must replace
         c:\cygwin64\bin\sh.exe with the wrapper. Run MTR with
         --cygwin-subshell-fix=do for that. Make sure you are running Cygwin
         perl for the option to work.
      4. Restart buildbot via net stop buildbot; net start buildbot
      
      Path-style conflict of Cygwin-ish Perl
      
      Some exe paths are passed to mysqltest which are executed by a native
      call. This requires native-style paths (\-style). These exe paths also
      executed by Perl itself. Either by MTR itself which is not so
      critical, but also by tests' --perl blocks which is impossible to
      change. And if Perl detects shell-expansion or uses pipe command it
      passess this exe path to /bin/sh which is Cygwin-compiled bash that
      cannot work with \-style (or at least in -c processing). Thus we require
      \-style on some parts of MTR execution and /-style on another parts.
      
      The examples of tests which cover these different parts are:
      
          main.mysqlbinlog_row_compressed \
          main.sp_trans_log
      
      That could be great to force Perl to use something different from
      /bin/sh, but unfortunately /bin/sh is compiled-in into binary. So the
      only solution left is to overwrite /bin/sh with some wrapper script
      which passes the command to cmd.exe instead of bash.
      640cd404
    • Aleksey Midenkov's avatar
      MDEV-30836 MTR Cygwin subshell wrapper fix · 4ed58303
      Aleksey Midenkov authored
      See "Path-style conflict" in "MDEV-30836 MTR Cygwin fix" for explanation.
      
      To install subshell fix use --cygwin-subshell-fix=do
      To uninstall use --cygwin-subshell-fix=remove
      
      This works only from Cygwin environment. As long as perl on PATH is
      from Cygwin you are on Cygwin environment. Check it with
      
           perl --version
      
           This is perl 5, version 36, subversion 1 (v5.36.1) built for
           x86_64-cygwin-threads-multi
      4ed58303
    • Aleksey Midenkov's avatar
      MDEV-30836 run_test_server() refactored · 0815a3b6
      Aleksey Midenkov authored
      run_test_server() is actually manager main loop. We move out this
      function into Manager package and split into run() and
      parse_protocol(). The latter is needed for the fix. Moving into
      separate package helps to make some common variables which was local
      to run_test_server().
      
      Functions from the main package is now prefixed with main:: (should be
      reorganized somehow later or auto-imported).
      0815a3b6
    • Aleksey Midenkov's avatar
      MDEV-30836 MTR misc improvements · 92fb31f0
      Aleksey Midenkov authored
      1. Better logging and error reporting;
      2. Worker process title;
      3. Some comments
      
      Worker process title example:
      
       446209 pts/2    R+     0:00 mysql-test-run.pl worker[01] :42146 -> :35027 versioning.view
       446210 pts/2    S+     0:00 mysql-test-run.pl worker[02] :42150 -> :35027 versioning.view
       446211 pts/2    S+     0:00 mysql-test-run.pl worker[03] :42154 -> :35027 versioning.foreign
       446212 pts/2    S+     0:00 mysql-test-run.pl worker[04] :42160 -> :35027 versioning.autoinc
      
      Manager-worker localhost socket connection is represented by a pair :source -> :destination ports.
      
      -vv Now adds --verbose to mysqltest as well, see var/mysqltest.log for the output.
      92fb31f0
    • Dmitry Shulga's avatar
      Merge branch '10.4' into 10.5 · 68a925b3
      Dmitry Shulga authored
      68a925b3
  7. 04 Sep, 2023 2 commits
    • Daniel Black's avatar
      MDEV-25177 Better indication of refusing to start because of ProtectHome · 91ab8194
      Daniel Black authored
      Create test for for case insensitive gives a basic warning on creating
      a test file and the next thing a user might see is an abort.
      
      ProtectHome and other systemd setting protect system services from
      accessing user data. Unfortunately some of our users do put things
      on /home due space or other reasons.
      
      Rather than enumberate the systemd options in a very clunkly fragile
      way we put an error associated with the "Can't create test file" and
      hope the user can work it out from there.
      
      %M tip thanks Sergei.
      91ab8194
    • Marko Mäkelä's avatar
      Merge 10.5 into 10.6 · b0a43818
      Marko Mäkelä authored
      b0a43818