1. 13 Sep, 2023 2 commits
  2. 12 Sep, 2023 2 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
    • 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
  3. 11 Sep, 2023 7 commits
    • 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
  4. 09 Sep, 2023 1 commit
  5. 08 Sep, 2023 7 commits
  6. 07 Sep, 2023 1 commit
    • 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
  7. 06 Sep, 2023 8 commits
  8. 05 Sep, 2023 8 commits
    • 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
    • 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
  9. 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.4 into 10.5 · 59952b26
      Marko Mäkelä authored
      59952b26
  10. 02 Sep, 2023 2 commits
    • Dmitry Shulga's avatar
      MDEV-14959: Fixed memory leak relating with view and IS · d0a872c2
      Dmitry Shulga authored
      Fixed memory leak taken place on executing a prepared statement or
      a stored routine that querying a view and this view constructed
      on an information schema table. For example,
      
      Lets consider the following definition of the view 'v1'
      CREATE VIEW v1 AS SELECT table_name FROM information_schema.views
      ORDER BY table_name;
      
      Querying this view in PS mode result in hit of assert.
      PREPARE stmt FROM "SELECT * FROM v1";
      EXECUTE stmt;
      EXECUTE stmt; (*)
      
      Running the statement marked with (*) leads to a crash in case
      server build with mode to control allocation of a memory from SP/PS
      memory root on the second and following executions of PS/SP.
      
      The reason of leaking the memory is that a memory allocated on
      processing of FRM file for the view requested from a PS/PS memory
      root meaning that this memory be released only when a stored routine
      be evicted from SP-cache or a prepared statement be deallocated
      that typically happens on termination of a user session.
      
      To fix the issue switch to a memory root specially created for
      allocation of short-lived objects that requested on parsing FRM.
      d0a872c2
    • Dmitry Shulga's avatar
      MDEV-14959: Fixed memory leak happened on re-parsing a view that substitutes a table · be023562
      Dmitry Shulga authored
      In case a table accessed by a PS/SP is dropped after the first execution of
      PS/SP and a view created with the same name as a table just dropped then
      the second execution of PS/SP leads to allocation of a memory on SP/PS
      memory root already marked as read only on first execution.
      
      For example, the following test case:
      CREATE TABLE t1 (a INT);
      PREPARE stmt FROM "INSERT INTO t1 VALUES (1)";
      EXECUTE stmt;
      DROP TABLE t1;
      CREATE VIEW t1 S SELECT 1;
      --error ER_NON_INSERTABLE_TABLE
      EXECUTE stmt; # (*)
      DROP VIEW t1;
      
      will hit assert on running the statement 'EXECUTE stmt' marked with (*)
      when allocation of a memory be performed on parsing the view.
      
      Memory allocation is requested inside the function mysql_make_view
      when a view definition being parsed. In order to avoid an assertion
      failure, call of the function mysql_make_view() must be moved after
      invocation of the function check_and_update_table_version().
      It will result in re-preparing the whole PS statement or current
      SP instruction that will free currently allocated items and reset
      read_only flag for the memory root.
      be023562