1. 14 Sep, 2023 1 commit
  2. 13 Sep, 2023 3 commits
    • Brandon Nesterenko's avatar
      MDEV-31177: SHOW SLAVE STATUS Last_SQL_Errno Race Condition on Errored Slave Restart · 1407f999
      Brandon Nesterenko authored
      The SQL thread and a user connection executing SHOW SLAVE STATUS
      have a race condition on Last_SQL_Errno, such that a slave which
      previously errored and stopped, on its next start, SHOW SLAVE STATUS
      can show that the SQL Thread is running while the previous error is
      also showing.
      
      The fix is to move when the last error is cleared when the SQL
      thread starts to occur before setting the status of
      Slave_SQL_Running.
      
      Thanks to Kristian Nielson for his work diagnosing the problem!
      
      Reviewed By:
      ============
      Andrei Elkin <andrei.elkin@mariadb.com>
      Kristian Nielson <knielsen@knielsen-hq.org>
      1407f999
    • Daniel Black's avatar
      MDEV-31369 Disable TLS v1.0 and 1.1 for MariaDB · 1831f8e4
      Daniel Black authored
      Remove TLSv1.1 from the default tls_version system variable.
      
      Output a warning if TLSv1.0 or TLSv1.1 are selected.
      
      Thanks Tingyao Nian for the feature request.
      1831f8e4
    • Oleg Smirnov's avatar
      MDEV-31315 Add client_ed25519.dll to the list of plugins shipped with HeidiSQL · 5fe8d0d5
      Oleg Smirnov authored
      There is a list of plugins in the WiX configuration file for HeidiSQL,
      and the installer only installs DLLs from that list although the HeidiSQL
      portable archive may include other plugins.
      
      This commit adds client_ed25519.dll to this list and also rearranges
      the list alphabetically, so it is easier to verify its contents
      5fe8d0d5
  3. 11 Sep, 2023 9 commits
  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 6 commits
    • 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
  9. 04 Sep, 2023 1 commit
    • 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
  10. 02 Sep, 2023 3 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
    • Dmitry Shulga's avatar
      MDEV-14959: Fixed possible memory leaks that could happen on running PS/SP depending on a trigger · 1d502a29
      Dmitry Shulga authored
      Moved call of the function check_and_update_table_version() just
      before the place where the function extend_table_list() is invoked
      in order to avoid allocation of memory on a PS/SP memory root
      marked as read only. It happens by the reason that the function
      extend_table_list() invokes sp_add_used_routine() to add a trigger
      created for the table in time frame between execution the statement
      EXECUTE `stmt_id` .
      
      For example, the following test case
      create table t1 (a int);
      
      prepare stmt from "insert into t1 (a) value (1)";
      execute stmt;
      
      create trigger t1_bi before insert on t1 for each row
        set @message= new.a;
      
      execute stmt; # (*)
      
      adds the trigger t1_bi to a list of used routines that involves
      allocation of a memory on PS memory root that has been already marked
      as read only on first run of the statement 'execute stmt'.
      In result, when the statement marked with (*) is executed it results in
      assert hit.
      
      To fix the issue call the function check_and_update_table_version()
      before invocation of extend_table_list() to force re-compilation of
      PS/SP that resets read-only flag of its memory root.
      1d502a29