1. 27 Jul, 2021 4 commits
    • Marko Mäkelä's avatar
      MDEV-25998 fixup: Avoid a hang · afe00bb7
      Marko Mäkelä authored
      btr_scrub_start_space(): Avoid an unnecessary tablespace lookup
      and related acquisition of fil_system->mutex. In MariaDB Server 10.3
      we would get deadlocks between that mutex and a crypt_data mutex.
      
      The fix was developed by Thirunarayanan Balathandayuthapani.
      afe00bb7
    • Marko Mäkelä's avatar
      e11cae71
    • Marko Mäkelä's avatar
      MDEV-24393 InnoDB disregards --skip-external-locking · da094188
      Marko Mäkelä authored
      On POSIX systems, InnoDB would unconditionally acquire advisory locks
      on the files that it opens. On Linux, this would be observable by
      a large number of entries in /proc/locks.
      
      Other storage engines would only acquire advisory locks on files
      based on the Boolean configuration parameter external_locking.
      
      Let InnoDB do the same.
      
      NOTE: The --skip-external-locking is activated by default. To have
      InnoDB acquire advisory locks, --external-locking must be specified.
      
      Reviewed by: Sergei Golubchik
      da094188
    • Marko Mäkelä's avatar
      MDEV-25594: Improve debug checks · cf1fc598
      Marko Mäkelä authored
      trx_t::will_lock: Changed the type to bool.
      
      trx_t::is_autocommit_non_locking(): Replaces
      trx_is_autocommit_non_locking().
      
      trx_is_ac_nl_ro(): Remove (replaced with equivalent assertion expressions).
      
      assert_trx_nonlocking_or_in_list(): Remove.
      Replaced with at least as strict checks in each place.
      
      check_trx_state(): Moved to a static function; partially replaced with
      individual debug assertions implementing equivalent or stricter checks.
      
      This is a backport of commit 7b51d11c
      from 10.5.
      cf1fc598
  2. 26 Jul, 2021 4 commits
    • Jan Lindström's avatar
      MDEV-26062 : InnoDB: WSREP: referenced FK check fail: Lock wait index... · 0bd9f755
      Jan Lindström authored
      MDEV-26062 : InnoDB: WSREP: referenced FK check fail: Lock wait index `PRIMARY` table `schema`.`child_table`
      
      Problem was that not all normal error codes where not handled
      after wsrep_row_upd_check_foreign_constraints() call. Furhermore,
      debug assertion did not contain all normal error cases. Changed
      ib:: calls to WSREP_ calls to use wsrep instrumentation.
      0bd9f755
    • Thirunarayanan Balathandayuthapani's avatar
      MDEV-25998 InnoDB removes the tablespace from default encrypt list early · ce870b2a
      Thirunarayanan Balathandayuthapani authored
      Problem:
      =========
      As a part of MDEV-14398 patch, InnoDB added and removed
      the tablespace from default encrypt list. But InnoDB removes
      the tablespace from the default encrypt list too early due to
      i) other encryption thread working on the tablespace
      ii) When tablespace is being flushed at the end of
      key rotation
      
      InnoDB fails to decrypt/encrypt the tablespace since
      the tablespace removed too early and it leads to
      test case failure.
      
      Solution:
      =========
      Avoid the removal of tablespace from default_encrypt_list
      only when
      1) Another active encryption thread working on tablespace
      2) Eligible for tablespace key rotation
      3) Tablespace is in flushing phase
      
      Removed the workaround in encryption.innodb_encryption_filekeys test case.
      ce870b2a
    • Eugene Kosov's avatar
      0711a53a
    • Rucha Deodhar's avatar
      MDEV-23786: Assertion `!is_set() || (m_status == DA_OK_BULK && is_bulk_op())' · af0b26f9
      Rucha Deodhar authored
      failed for TokuDB engine CREATE TABLE
      
      Analysis: Assertion failure happens because the database doesn't exist to
      create the table but ha_tokudb::create() still returns false.
      So error is not reported.
      Fix: Store the error state and report the error.
      af0b26f9
  3. 24 Jul, 2021 1 commit
  4. 23 Jul, 2021 3 commits
  5. 22 Jul, 2021 7 commits
  6. 21 Jul, 2021 4 commits
    • Igor Babaev's avatar
      MDEV-26189 Missing handling of unknown column in WHERE of recursive CTE · 4aeb2b1c
      Igor Babaev authored
      SQL processor failed to catch references to unknown columns and other
      errors of the phase of semantic analysis in the specification of a
      hanging recursive CTE. This happened because the function
      With_clause::prepare_unreferenced_elements() failed to detect a CTE as
      a hanging CTE if the CTE was recursive.
      Fixing this problem in the code of the mentioned function opened another
      problem: EXPLAIN started including the lines for the specifications of
      hanging recursive CTEs in its output. This problem also was fixed in this
      patch.
      
      Approved by Dmitry Shulga <dmitry.shulga@mariadb.com>
      4aeb2b1c
    • Hollow Man's avatar
      Typo fixes in item_strfunc.cc · bd711d4f
      Hollow Man authored
      bd711d4f
    • Heinz Wiesinger's avatar
      Add feature summary at the end of cmake. · 751ebe44
      Heinz Wiesinger authored
      This gives a short overview over found/missing dependencies as well
      as enabled/disabled features.
      
      Initial author Heinz Wiesinger <heinz@m2mobi.com>
      Additions by Vicențiu Ciorbaru <vicentiu@mariadb.org>
      * Report all plugins enabled via MYSQL_ADD_PLUGIN
      * Simplify code. Eliminate duplication by making use of WITH_xxx
        variable values to set feature "ON" / "OFF" state.
      
      Reviewed by: wlad@mariadb.com (code details) serg@mariadb.com (the idea)
      751ebe44
    • Vicențiu Ciorbaru's avatar
      2b017367
  7. 20 Jul, 2021 9 commits
    • Igor Babaev's avatar
      MDEV-25565 Crash on 2-nd execution of SP/PS for query calculating window functions · 4c387945
      Igor Babaev authored
                 from view
      
      A crash of the server happened when executing a stored procedure whose the
      only query calculated window functions over a mergeable view specified
      as a select from non-mergeable view. The crash could be reproduced if
      the window specifications of the window functions were identical and both
      contained PARTITION lists and ORDER BY lists. A crash also happened on
      the second execution of the prepared statement created for such query.
      If to use derived tables or CTE instead of views the problem still
      manifests itself crashing the server.
      
      When optimizing the window specifications of a window function the
      server can substitute the partition lists and the order lists for
      the corresponding lists from another window specification in the case
      when the lists are identical. This substitution is not permanent and should
      be rolled back before the second execution. It was not done and this
      ultimately led to a crash when resolving the column names at the second
      execution of SP/PS.
      4c387945
    • Igor Babaev's avatar
      MDEV-26025 Server crashes while executing query with CTE in PS/SP · 872422dc
      Igor Babaev authored
      This bug appeared after the patch for bug MDEV-23886. Due to this bug
      execution of queries with CTEs used the same CTE at least twice via
      prepared statements or with stored procedures caused crashes of the server.
      It happened because the select created for any of not the first usage of
      a CTE erroneously was not included into all_selects_list.
      This patch corrects the patch applied to fix the bug MDEV-26108.
      
      Approved by Oleksandr Byelkin <sanja@mariadb.com>
      872422dc
    • Eugene Kosov's avatar
      7da1cfb0
    • Eugene Kosov's avatar
      MDEV-25361 innochecksum must not report errors for freed pages · 1918bdf3
      Eugene Kosov authored
      Store and maintain xdes pages always. And doesn't verify checksums for
      freed pages.
      
      innochecksum can work only with the first space file of multiple ones.
      Tell about it and abort in case of not the first file.
      1918bdf3
    • Jagdeep Sidhu's avatar
      Fix switch case statement in trx_flush_log_if_needed_low() · 5f8651ac
      Jagdeep Sidhu authored
      In commit 2e814d47 on MariaDB 10.2
      the switch case statement in trx_flush_log_if_needed_low() regressed.
      
      Since 10.2 this code was refactored to have switches in descending
      order, so value of 3 for innodb_flush_log_at_trx_commit is behaving
      the same as value of 2, that is no FSYNC is being enforced during
      COMMIT phase. The switch should however not be empty and cases 2 and 3
      should not have the identical contents.
      
      As per documentation, setting innodb_flush_log_at_trx_commit to 3
      should do FSYNC to disk if innodb_flush_log_at_trx_commit is set to 3.
      This fixes the regression so that the switch statement again does
      what users expect the setting should do.
      
      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.
      5f8651ac
    • Vladislav Vaintroub's avatar
      fix libmariadb compilation, on GCC. · 1cfcf32c
      Vladislav Vaintroub authored
      1cfcf32c
    • Sergei Golubchik's avatar
      MDEV-20787 Script dgcov.pl does not work · ce2a2bff
      Sergei Golubchik authored
      When building with `make` gcov files use full path names,
      when building with `ninja` gcov files use paths relative to the source root
      
      in gcov_one_file() the current directory is somewhere under CMakeFiles/,
      so if a file exists in the specified location, this location
      must've been a full path name.
      ce2a2bff
    • Sergei Golubchik's avatar
      MDEV-20787 Script dgcov.pl does not work · 6638cf2e
      Sergei Golubchik authored
      For every file.gcda file, gcov <7.x created file.cc.gcda.gcov.
      While gcov 7.x and 8.x create file.cc.gcov
      And sometimes otherfile.h.gcov or otherfile.ic.gcov, for included files.
      
      (gcov 9.x+ creates .json.gz files, see MDEV-26102)
      
      So, we use `gcov -l` that will create file.cc.gcda##file.cc.gcov,
      file.cc.gcda##otherfile.h.gcov, etc. And we search and parse all
      those file.cc.gcda*.gcov files.
      6638cf2e
    • Vladislav Vaintroub's avatar
      Update libmariadb · 0151590d
      Vladislav Vaintroub authored
      0151590d
  8. 19 Jul, 2021 3 commits
    • Igor Babaev's avatar
      MDEV-26135 Assertion failure when executing PS with a hanging recursive CTE · f0533497
      Igor Babaev authored
      The bug affected execution of queries with With clauses containing so-called
      hanging recursive CTEs in PREPARE mode. A CTE is hanging if it's not used
      in the query. Preparation of a prepared statement from a query with a
      hanging CTE caused a leak in the server and execution of this prepared
      statement led to an assert failure of the server built in the debug mode.
      This happened because the units specifying recursive CTEs erroneously were
      not cleaned up if those CTEs were hanging.
      The patch enforces cleanup of hanging recursive CTEs in the same way as
      other hanging CTEs.
      
      Approved by dmitry.shulga@mariadb.com
      f0533497
    • Sergei Golubchik's avatar
      fix mysqld_safe --help · b7886f55
      Sergei Golubchik authored
      put defaults* options first (and together).
      list --defaults-group-suffix too
      b7886f55
    • Dmitry Shulga's avatar
      MDEV-26145: Incorrect metadata is sent on running query with union in PS mode · bab989ab
      Dmitry Shulga authored
      Test cases like the following one produce different result sets if it's run
      with and without th option --ps-protocol.
      
      CREATE TABLE t1(a INT);
      --enable_metadata
      (SELECT MAX(a) FROM t1) UNION (SELECT MAX(a) FROM t1);
      --disable_metadata
      DROP TABLE t1;
      
      Result sets differ in metadata for the query
        (SELECT MAX(a) FROM t1) UNION (SELECT MAX(a) FROM t1);
      
      The reason for different content of query metadata is that for queries
      with union the items being created on JOIN preparing phase is placed into
      item_list from SELECT_LEX_UNIT whereas for queries without union item_list
      from SELECT_LEX is used instead.
      bab989ab
  9. 16 Jul, 2021 1 commit
    • Nikita Malyavin's avatar
      MDEV-23597 Assertion `marked_for_read()' failed while evaluating DEFAULT · c47e4aab
      Nikita Malyavin authored
      The columns that are part of DEFAULT expression were not read-marked
      in statements like UPDATE...SET b=DEFAULT.
      
      The problem is `F(DEFAULT)` expression depends of the left-hand side of an
      assignment. However, setup_fields accepts only right-hand side value.
      Neither Item::fix_fields does.
      
      Suchwise, b=DEFAULT(b) works fine, because Item_default_field has
      information on what field it is default of:
          if (thd->mark_used_columns != MARK_COLUMNS_NONE)
            def_field->default_value->expr->update_used_tables();
      
      in Item_default_value::fix_fields().
      
      It is not reasonable to pass a left-hand side to Item:fix_fields, because
      the case is rare, so the rewrite
        b= F(DEFAULT)  ->  b= F(DEFAULT(b))
      
      is made instead.
      
      Both UPDATE and multi-UPDATE are affected, however any form of INSERT
      is not: it marks all the fields in DEFAULT expressions for read in
      TABLE::mark_default_fields_for_write().
      c47e4aab
  10. 15 Jul, 2021 2 commits
  11. 14 Jul, 2021 1 commit
    • Nayuta Yanagisawa's avatar
      MDEV-25985 Spider handle ">=" as ">" in some cases · 0f6e170c
      Nayuta Yanagisawa authored
      The function spider_db_append_key_where_internal() converts
      HA_READ_AFTER_KEY to '>'. The conversion seems to be correct for
      single-column indexes because HA_READ_AFTER_KEY means "read the
      key after the provided value."
      
      However, how about multi-column indexes? Assume that there is a
      multi-column index on c1 and c2 and we search with the condition
      'c1 >= 100 AND c2 > 200'. The key_range.flag corresponds to the
      search condition could be HA_READ_AFTER_KEY. In such a case,
      we could not simply convert HA_READ_AFTER_KEY to '>'.
      
      The correct conversion is to convert HA_READ_AFTER_KEY to '>'
      only for the last column in key_part_map and to convert
      HA_READ_AFTER_KEY to '>=' for the other column.
      
      The similar discussion also applies to the conversion from
      key_range.flag to a sign of inequality.
      0f6e170c
  12. 13 Jul, 2021 1 commit