1. 26 Jul, 2022 3 commits
    • Mikhail Chalov's avatar
      Use memory safe snprintf() in Connect Engine · 19af1890
      Mikhail Chalov authored
      This commit replaces sprintf(buf, ...) with
      snprintf(buf, sizeof(buf), ...),
      specifically in the "easy" cases where buf is allocated with a size
      known at compile time.
      
      The changes make sure we are not write outside array/string bounds which
      will lead to undefined behaviour. In case the code is trying to write
      outside bounds - safe version of functions simply cut the string
      messages so we process this gracefully.
      
      All new code of the whole pull request, including one or several files
      that are either new files or modified ones, are contributed under the BSD-new
      license.  I am contributing on behalf of my employer Amazon Web Services,
      Inc.
      
      bsonudf.cpp warnings cleanup by Daniel Black
      
      Reviewer: Daniel Black
      19af1890
    • Marko Mäkelä's avatar
      95eb5e5a
    • Marko Mäkelä's avatar
      5d0f7534
  2. 25 Jul, 2022 5 commits
    • Brandon Nesterenko's avatar
      MDEV-21087/MDEV-21433: ER_SLAVE_INCIDENT arrives at slave without failure specifics · 555c12a5
      Brandon Nesterenko authored
      Problem:
      =======
      
      This patch addresses two issues:
      
       1. An incident event can be incorrectly reported for transactions
      which are rolled back successfully. That is, an incident event
      should only be generated for failed “non-transactional transactions”
      (i.e., those which modify non-transactional tables) because they
      cannot be rolled back.
      
       2. When the mariadb slave (error) stops at receiving the incident
      event there's no description of what led to it. Neither in the event
      nor in the master's error log.
      
      Solution:
      ========
      
      Before reporting an incident event for a transaction, first validate
      that it is “non-transactional” (i.e. cannot be safely rolled back).
      To determine if a transaction is non-transactional,
        lex->stmt_accessed_table(LEX::STMT_WRITES_NON_TRANS_TABLE)
      is used because it is set previously in
      THD::decide_logging_format().
      
      Additionally, when an incident event is written, write an error
      message to the server’s error log to indicate the underlying issue.
      
      Reviewed by:
      ===========
      Andrei Elkin <andrei.elkin@mariadb.com>
      555c12a5
    • Rucha Deodhar's avatar
      This commit is a fixup for MDEV-28762 · 46ff6608
      Rucha Deodhar authored
      46ff6608
    • Marko Mäkelä's avatar
      Fix DBUG_ENTER/return mismatch · f1c8749f
      Marko Mäkelä authored
      Spotted by Thirunarayanan Balathandayuthapani.
      f1c8749f
    • Marko Mäkelä's avatar
      MDEV-28980 InnoDB: Failing assertion: len <= MAX_TABLE_NAME_LEN · 8aa37c26
      Marko Mäkelä authored
      dict_load_foreigns(): Use a correctly sized buffer for the maximum-length
      SYS_FOREIGN.ID. In case of overflow, do not crash the server but instead
      return DB_CORRUPTION.
      8aa37c26
    • Brad Smith's avatar
  3. 23 Jul, 2022 1 commit
  4. 22 Jul, 2022 3 commits
  5. 21 Jul, 2022 1 commit
  6. 20 Jul, 2022 1 commit
  7. 18 Jul, 2022 9 commits
    • Aleksey Midenkov's avatar
      MDEV-29023 MTR hangs after multiple failures · 18488048
      Aleksey Midenkov authored
      Passing $opt_parallel as $childs is wrong: child can be killed before
      it connects and you will never decrement $childs for this.
      
      Another problem is (and that is the cause of this bug): child can be
      killed and never close server socket. This can happen f.ex. after
      unmaskable KILL signal. In such case the socket is closed by reaping
      the child but that never happens inside reading the socket loop in
      run_test_server().
      
      The proper design is the waitless reap of children inside the socket
      loop and if there is no more children we finish the socket loop. Since
      there is Windows variation where we don't control the children via
      waitpid(), all the clients must normally close the socket and only
      this can finish the socket loop. For Unix variation we reckon that
      case as all children closed the socket but not all yet died and for
      that we do final waiting waitpid() (was done before the patch as
      well).
      
      To be more complete, we now handle 3 end-of-game scenarios in Unix:
      
         1. all children closed socket, all children died: everything is
            handled by the socket loop;
      
         2. all children closed socket, not all yet died: we wait for alive
            children to die after exiting the socket loop;
      
         3. not all children closed socket, all children died: everything is
            handled by the socket loop.
      
      For Windows end-of-game scenario is only one:
      
         All children close the socket.
      18488048
    • Aleksey Midenkov's avatar
      MDEV-29023 waitpid() cleanup · 7ca5c7d8
      Aleksey Midenkov authored
      The case for "Unknown process $ret_pid exited" is never known to be
      valid. Such state is not documented for waitpid().
      7ca5c7d8
    • Aleksey Midenkov's avatar
    • Aleksey Midenkov's avatar
    • Aleksey Midenkov's avatar
      MDEV-28931 MTR prints detailed stack trace unconditionally · e9be5428
      Aleksey Midenkov authored
      66832e3a introduced change that prints core dumps in very detailed
      format. That's completely out of user-friendliness but serves as a
      measure for debugging hard-reproducible bugs.
      
      The proper way to implement this:
      
        1. it must be controlled by command-line and environment variable;
        2. detailed traces must be default for buildbots only, for user
           invocations normal stack traces should be printed.
      
      Options for control are: MTR_PRINT_CORE and --print-core that accept
      the following values:
      
        no	         Don't print core
        short	       	 Print stack trace of failed thread
        medium	 Print stack traces of all threads
        detailed       Print all stack traces with debug context
        custom:<code>  Use debugger commands <code> to print stack trace
      
      Default setting is: short (see env_or_default() call in pre_setup())
      
      For environment variable wrong values are silently ignored (falls back
      to default setting, see env_or_default()).
      
      Command-line option --print-core (or -C) overrides environment
      variable. Its default value is 'short' if not specified explicitly
      (same env_or_default() call in pre_setup()). Explicit values are
      checked for validity.
      
      --print-method option can specify by which debugger we print
      cores. For Windows there is only one choice: cdb. For Unix the values
      are: gdb, dbx, lldb, auto. Default value is: auto
      
      In 'auto' we try to use all possible debuggers until success.
      e9be5428
    • Aleksey Midenkov's avatar
      MDEV-28931 Debugger.pm readability fix · 220fb679
      Aleksey Midenkov authored
      setup_boot_args(), setup_client_args(), setup_args() traversing
      datastructures on each invocation. Even if performance is not
      important to perl script (though it definitely saves some CO2), this
      nonetheless provokes some code-reading questions. Reading and
      debugging such code is not convenient.
      
      The better way is to prepare all the data in advance in an easily
      readable form as well as do the validation step before any further
      processing.
      
      Use mtr_report() instead of die() like the other code does.
      
      TODO: do_args() does even more data processing magic. Prepare that
      data according the above strategy in advance in pre_setup() if possible.
      220fb679
    • Aleksey Midenkov's avatar
      MDEV-28931 --verbose option is too verbose · ce7820eb
      Aleksey Midenkov authored
      GetOpt::Long bundling option for convenient one-char verbosity levels:
      
        -v    General verbosity (file and execute operations)
        -vv   High verbosity (algorithmic considerations)
        -vvv  Debug verbosity (anything else)
      ce7820eb
    • Aleksey Midenkov's avatar
      MDEV-28931 Cleanup: try GDB to print core first · 83f7d25c
      Aleksey Midenkov authored
      Do we still need this Sun Studio hack?
      83f7d25c
    • Vladislav Vaintroub's avatar
      990ddaba
  8. 17 Jul, 2022 1 commit
  9. 14 Jul, 2022 2 commits
  10. 13 Jul, 2022 1 commit
    • Brandon Nesterenko's avatar
      MDEV-28487: sequences not respect value of binlog_row_image with select nextval(seq_gen) · 02e85aea
      Brandon Nesterenko authored
      Problem:
      ========
      When using sequences, the function
      sequence_definition::write(TABLE *table, bool all_fields)
      is used to save DML/DDL updates to sequence tables (e.g. nextval,
      setval, and alter). Prior to this patch, the value all_fields was
      always false when invoked via nextval and setval, which forced the
      bitmap to only include changed columns.
      
      Solution:
      ========
      Change all_fields when invoked via nextval and setval to be reliant
      on binlog_row_image, such that it is false when binlog_row_image is
      MINIMAL, and true otherwise.
      
      Reviewed By:
      ===========
      Andrei Elkin <andrei.elkin@mariadb.com>
      02e85aea
  11. 11 Jul, 2022 3 commits
    • Sergei Golubchik's avatar
      MDEV-21445 update test results · 96be3fe8
      Sergei Golubchik authored
      followup for 57f5c319
      96be3fe8
    • Marko Mäkelä's avatar
      MDEV-28689, MDEV-28690: Remove ctrl_mutex · b817afaa
      Marko Mäkelä authored
      This reverts the revert 4f62dfe6
      and fixes the hang that was introduced when ctrl_mutex was removed.
      
      The test mariabackup.compress_qpress covers this code, but the
      test is skipped if a stand-alone qpress executable is not available.
      It is not available in many software repositories, possibly because
      the code base has not been updated since 2010.
      
      This was tested with an executable that was compile from the source
      code at http://www.quicklz.com/qpress-11-source.zip (after adding
      a missing #include <unistd.h> for the definition of isatty()).
      
      Compared to the grandparent commit (before the revert), the changes
      are as follows:
      
      comp_thread_ctxt_t::done_cond: A separate condition for completed
      compression, signaling that thd->to_len has been updated.
      
      compress_write(): Replace some threads[i] with thd.
      Reset thd->to_len = 0 after consuming the compressed data.
      
      compress_worker_thread_func(): After consuming the uncompressed
      data, set thd->data_avail = FALSE. After compressing, signal
      thd->done_cond.
      b817afaa
    • Vladislav Vaintroub's avatar
      4f62dfe6
  12. 10 Jul, 2022 1 commit
    • Sergei Golubchik's avatar
      MDEV-28197 Linux mariadb-client build does not accept Unicode characters · 7598ef4b
      Sergei Golubchik authored
      Apparently newer libedit is readline-compatible enough
      to be detected as a readline, with USE_NEW_READLINE_INTERFACE defined
      and USE_LIBEDIT_INTERFACE not defined.
      
      Let's set the locale unconditionally, independently from the
      readline/libedit variant. It's already happening anyway now,
      unless one specifies --default-character-set explicitly.
      7598ef4b
  13. 07 Jul, 2022 2 commits
    • Sergei Petrunia's avatar
      MDEV-28871: Assert ... failed in JOIN::dbug_verify_sj_inner_tables... · 0e9a255e
      Sergei Petrunia authored
      optimize_semi_joins() calls update_sj_state() to update semi-join
      optimization state in the JOIN class.
      
      greedy_search() algorithm considers different join prefixes,
      and then picks one table to put into the join prefix.
      Most of the semi-join optimization state is in the table's entry
      in the join->positions[cur_prefix_size].
      
      However, it also needs to call update_sj_state() to update the
      semi-join optimization state in the JOIN class.
      
      There is one exception, which is the cause of this bug: when we're
      inside optimize_semi_join_nests() and are optimizing a subquery,
      optimize_semi_joins() does nothing, it doesn't call update_sj_state().
      
      greedy_search() must not do that either.
      0e9a255e
    • Vladislav Vaintroub's avatar
      MDEV-28746 Wrong error code ER_BAD_DB_ERROR for long filenames · 66c06735
      Vladislav Vaintroub authored
      Add check for path length if CreateFile fails with ERROR_PATH_NOT_FOUND.
      66c06735
  14. 06 Jul, 2022 3 commits
  15. 05 Jul, 2022 3 commits
  16. 04 Jul, 2022 1 commit