1. 18 Feb, 2024 1 commit
    • Vladislav Vaintroub's avatar
      MDEV-33482: Optimize WolfSSL for improved performance · d510f805
      Vladislav Vaintroub authored
      - Use "new" math library WOLFSSL_SP_MATH_ALL, which is now  promoted by
        WolfSSL for faster performance. "fastmath" we  used previously is going
        to be deprecated, it was not really always fast.
      - Optimize common RSA math operations with WOLFSSL_HAVE_SP_RSA
      - Incorporate assembly optimizations, currently for Intel x64 only
      
      This patch significantly reduces execution time for SSL tests like
      main.ssl-big and main.ssl_connect, which now run 2 to 3 times faster.
      
      Notably, when this patch is applied to 11.4, server startup in with
      ephemeral certificates becomes approximately 10x faster due to optimized
      wolfSSL_EVP_PKEY_keygen().
      
      Additionally, refactored WolfSSL by removing old workarounds and
      consolidating wolfssl and wolfcrypt into a single library wolfssl, just
      like it was done in WolfSSL's own CMake.
      d510f805
  2. 15 Feb, 2024 1 commit
    • Daniel Black's avatar
      MDEV-33301 memlock with systemd still not working · 8a1904d7
      Daniel Black authored
      CapabilityBoundingSet included CAP_IPC_LOCK in MDEV-9095, however
      it requires that the executable has the capability marked in extended
      attributes also.
      
      The alternate to this is raising the RLIMIT_MEMLOCK for the service/
      process to be able to complete the mlockall system call. This needs to
      be adjusted to whatever the MariaDB server was going to allocate.
      Rather than leave the non-obvious mapping of settings and tuning,
      add the capability so its easier for the user.
      
      We set the capability, if possible, but may never be used depending
      on user settings. As such in the Debian postinst script, don't
      complain if this fails.
      
      The CAP_IPC_LOCK also facilitates the mmaping of huge memory pages.
      (see man mmap), like mariadb uses with --large-pages.
      8a1904d7
  3. 14 Feb, 2024 1 commit
    • Dave Gosselin's avatar
      MDEV-30975 Wrong result with cross Join given join order · 0185ac64
      Dave Gosselin authored
      For queries with derived tables populated having some side-effect, we
      will fill such a derived table more than once, but without clearing
      its rows.  Consequently it will have duplicate rows.
      An example query exhibiting the problem is
        SELECT STRAIGHT_JOIN c1 FROM t1 JOIN (SELECT @A := 0) x;
      Since mysql_derived_fill will, for UNCACHEABLE_DEPENDENT tables, drop
      all rows and repopulate, we relax the condition at line 1204: rather
      than assume all uncacheable values prevent early return, we now
      allow an early return for uncacheable values other than
      UNCACHEABLE_DEPENDENT.  In general, we only populate derived tables
      once unless they're dependent tables.
      0185ac64
  4. 13 Feb, 2024 9 commits
    • Alexey Botchkov's avatar
      MDEV-33393 audit plugin do not report user did the action.. · 85517f60
      Alexey Botchkov authored
      The '<replication_slave>' user is assigned to the slave replication
      thread so this name appears in the auditing logs.
      85517f60
    • Marko Mäkelä's avatar
      Merge 10.4 into 10.5 · b770633e
      Marko Mäkelä authored
      b770633e
    • Marko Mäkelä's avatar
      MDEV-33332 SIGSEGV in buf_read_ahead_linear() when bpage is in buf_pool.watch · 68d9deb6
      Marko Mäkelä authored
      buf_read_ahead_linear(): If buf_pool.watch_is_sentinel(*bpage),
      do not attempt to read the page frame because the pointer would be null
      for the elements of buf_pool.watch[].
      
      Hitting this bug requires the use of a non-default value of
      innodb_change_buffering.
      68d9deb6
    • Marko Mäkelä's avatar
      Fix GCC 14 -Wcalloc-transposed-args · d86deee3
      Marko Mäkelä authored
      d86deee3
    • Otto Kekäläinen's avatar
      Properly introduce wsrep_sst_backup script in project packaging · d64ade30
      Otto Kekäläinen authored
      The script wsrep_sst_backup was introduced on MariaDB 10.3 in commit
      9b2fa2ae. The new script was automatically included in RPM packages but not
      in Debian packages (which started to fail on warning about stray file).
      
      Include wsrep_sst_backup in the mariadb-server-10.5+ package, and also
      include a stub man page so that packaging of a new script is complete.
      
      Related:
      https://galeracluster.com/documentation/html_docs_20210213-1355-master/documentation/backup-cluster.html
      
      This commit was originally submitted in May 2022 in
      https://github.com/MariaDB/server/pull/2129 but upstream indicated only
      in May 2023 that it might get merged, thus this is for a later release.
      
      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.
      d64ade30
    • Oleksandr Byelkin's avatar
      fix view protocol in MDEV-29179 · ae709b64
      Oleksandr Byelkin authored
      ae709b64
    • Jan Tojnar's avatar
      MDEV-33439 Fix build with libxml2 2.12 · cae18632
      Jan Tojnar authored
      libxml2 2.12.0 made `xmlGetLastError()` return `const` pointer:
      
      https://gitlab.gnome.org/GNOME/libxml2/-/commit/61034116d0a3c8b295c6137956adc3ae55720711
      
      Clang 16 does not like this:
      
          error: assigning to 'xmlErrorPtr' (aka '_xmlError *') from 'const xmlError *' (aka 'const _xmlError *') discards qualifiers
          error: cannot initialize a variable of type 'xmlErrorPtr' (aka '_xmlError *') with an rvalue of type 'const xmlError *' (aka 'const _xmlError *')
      
      Let’s update the variables to `const`.
      For older versions, it will be automatically converted.
      
      But then `xmlResetError(xmlError*)` will not like the `const` pointer:
      
          error: no matching function for call to 'xmlResetError'
          note: candidate function not viable: 1st argument ('const xmlError *' (aka 'const _xmlError *')) would lose const qualifier
      
      Let’s replace it with `xmlResetLastError()`.
      
      ALso remove `LIBXMLDOC::Xerr` protected member property.
      It was introduced in 65b0e545
      along with the `xmlResetError` calls.
      It does not appear to be used for anything.
      cae18632
    • Sean Adams's avatar
      MDEV-24507: Server Crash using UDF in WHERE clause of VIEW · 3281b6b8
      Sean Adams authored
      These changes are submitted under the BSD 3-clause License.
      
      The original ticket describes a server crash when using a UDF in the WHERE clause of a view.  The crash also happens when using a UDF in the WHERE clause of a SELECT that uses a sub-query in the FROM clause.
      
      When the UDF does not have a _deinit function the server crashes in udf_handler::cleanup (sql/item_func.cc:3467).
      When the UDF has both an _init and a _deinit function but _init does not allocate memory for initid->ptr the server crashes in udf_handler::cleanup (sql/item_func.cc:3467).
      When the UDF has both an _init and a _deinit function and allocates/deallocates  memory for initid->ptr the server crashes in the memory deallocation of the _deinit function.
      
      The sequence of events seen are:
        1. A UDF, U, is created for the query.
        2. The UDF _init function is called using U->initid.
        3. U is cloned for the sub-query using the [default|implicit] copy constructor, resulting in V.
        4. The UDF _init function is called using V->initid.  U->initid and V->initid are the same value.
        5. The UDF function is called.
        6. The UDF _deinit function is called using U->initid.  If any memory was allocated for initid->ptr it is deallocated here.
        7. udf_handler::cleanup deletes the U->buffers String array.
        8. The UDF _deinit function is called using V->initid.  If any memory was allocated for initid->ptr it was previously deallocated and _deinit crashes the server.
        9. udf_handler::cleanup deletes the V->buffers String array. V->buffers was the same values as U->buffers which was already deallocated.  The server crashes.
      
      The solution is to create a[n explicit] copy constructor for udf_handler which sets not_original to true.  Later, not_original is set back to false (0) after udf_handler::fix_fields has set up a new value for initid->ptr.
      3281b6b8
    • Trevor Gross's avatar
      Fix a case of `unused-but-set-variable` · b909b525
      Trevor Gross authored
      The `unused-but-set-variable` warning is raised on MacOS from the
      `posix_fadvise` standin macro, since offset is often otherwise unused. Add a
      cast to absorb this warning.
      Signed-off-by: default avatarTrevor Gross <tmgross@umich.edu>
      b909b525
  5. 12 Feb, 2024 10 commits
    • Brad Smith's avatar
      Fix timeout(1) usage in wsrep_sst_mariabackup on *BSD · 44f5fa2d
      Brad Smith authored
      Also fix the usage of timeout(1) on NetBSD, OpenBSD and DragonFly.
      44f5fa2d
    • Marko Mäkelä's avatar
      MDEV-30528 CREATE FULLTEXT INDEX assertion failure WITH SYSTEM VERSIONING · ca88eac8
      Marko Mäkelä authored
      ha_innobase::check_if_supported_inplace_alter(): Require ALGORITHM=COPY
      when creating a FULLTEXT INDEX on a versioned table.
      
      row_merge_buf_add(), row_merge_read_clustered_index(): Remove the parameter
      or local variable history_fts that had been added in the attempt to fix
      MDEV-25004.
      
      Reviewed by: Thirunarayanan Balathandayuthapani
      Tested by: Matthias Leich
      ca88eac8
    • Yuchen Pei's avatar
      MDEV-33441 Do not deinit plugin variables when retry requested · c37216de
      Yuchen Pei authored
      After MDEV-31400, plugins are allowed to ask for retries when failing
      initialisation. However, such failures also cause plugin system
      variables to be deleted (plugin_variables_deinit()) before retrying
      and are not re-added during retry.
      
      We fix this by checking that if the plugin has requested a retry the
      variables are not deleted. Because plugin_deinitialize() also calls
      plugin_variables_deinit(), if the retry fails, the variables will
      still be deleted.
      
      Alternatives considered:
      
      - remove the plugin_variables_deinit() from plugin_initialize() error
      handling altogether. We decide to take a more conservative approach
      here.
      
      - re-add the system variables during retry. It is more complicated
      than simply iterating over plugin->system_vars and call
      my_hash_insert(). For example we will need to assign values to
      the test_load field and extract more code from test_plugin_options(),
      if that is possible.
      c37216de
    • Marko Mäkelä's avatar
      MDEV-33383: Corrupted red-black tree due to incorrect comparison · 81f3e97b
      Marko Mäkelä authored
      fts_doc_id_cmp(): Replaces several duplicated functions for
      comparing two doc_id_t*. On IA-32, AMD64, ARMv7, ARMv8, RISC-V
      this should make use of some conditional ALU instructions.
      On POWER there will be conditional jumps. Unlike the original
      functions, these will return the correct result even if the
      difference of the two doc_id does not fit in the int data type.
      We use static_assert() and offsetof() to check at compilation time
      that this function is compatible with the rbt_create() calls.
      
      fts_query_compare_rank(): As documented, return -1 and not 1
      when the rank are equal and r1->doc_id < r2->doc_id. This will
      affect the result of ha_innobase::ft_read().
      
      fts_ptr2_cmp(), fts_ptr1_ptr2_cmp(): These replace
      fts_trx_table_cmp(), fts_trx_table_id_cmp().
      The fts_savepoint_t::tables will be sorted by dict_table_t*
      rather than dict_table_t::id. There was no correctness bug in
      the previous comparison predicates. We can avoid one level of
      unnecessary pointer dereferencing in this way.
      Actually, fts_savepoint_t is duplicating trx_t::mod_tables.
      MDEV-33401 was filed about removing it.
      
      The added unit test innodb_rbt-t covers both the previous buggy comparison
      predicate and the revised fts_doc_id_cmp(), using keys which led to
      finding the bug. Thanks to Shaohua Wang from Alibaba for providing the
      example and the revised comparison predicate.
      
      Reviewed by: Thirunarayanan Balathandayuthapani
      81f3e97b
    • Marko Mäkelä's avatar
      Cleanup: Remove changed_pages_bitmap · 92f87f2c
      Marko Mäkelä authored
      The innodb_changed_pages plugin only was part of XtraDB, never InnoDB.
      It would be useful for incremental backups.
      We will remove the code from mariadb-backup for now, because it cannot
      serve any useful purpose until the server part has been implemented.
      92f87f2c
    • Marko Mäkelä's avatar
      MDEV-33383: Replace fts_doc_id_cmp, ib_vector_sort · 47122a61
      Marko Mäkelä authored
      fts_doc_ids_sort(): Sort an array of doc_id_t by C++11 std::sort().
      
      fts_doc_id_cmp(), ib_vector_sort(): Remove. The comparison was
      returning an incorrect result when the difference exceeded the int range.
      
      Reviewed by: Thirunarayanan Balathandayuthapani
      47122a61
    • Brandon Nesterenko's avatar
      MDEV-29369: rpl.rpl_semi_sync_shutdown_await_ack fails regularly with Result content mismatch · 03d1346e
      Brandon Nesterenko authored
      This test was prone to failures for a few reasons, summarized below:
      
       1) MDEV-32168 introduced “only_running_threads=1” to
      slave_stop.inc, which allowed the stop logic to bypass an
      attempting-to-reconnect IO thread. That is, the IO thread could
      realize the master shutdown in `read_event()`, and thereby call into
      `try_to_reconnect()`. This would leave the IO thread up when the
      test expected it to be stopped. Fixed by explicitly stopping the
      IO thread and allowing an error state, as the above case would
      lead to errno 2003.
      
       2) On slow systems (or those running profiling tools, e.g. MSAN),
      the waiting-for-ack transaction can complete before the system
      processes the `SHUTDOWN WAIT FOR ALL SLAVES`. There was shutdown
      preparation logic in-between the transaction and shutdown itself,
      which contributes to this problem. This patch also moves this
      preparation logic before the transaction, so there is less to do
      in-between the calls.
      
       3) Changed work-around for MDEV-28141 to use debug_sync instead
      of sleep delay, as it was still possible to hit the bug on very
      slow systems.
      
       4) Masked MTR variable reset with disable/enable query log
      
      Reviewed By:
      ============
      Kristian Nielsen <knielsen@knielsen-hq.org>
      03d1346e
    • Brandon Nesterenko's avatar
      MDEV-14357: rpl.rpl_domain_id_filter_io_crash failed in buildbot with wrong result · ee895583
      Brandon Nesterenko authored
      A race condition with the SQL thread, where depending on if it was
      killed before or after it had executed the fake/generated IGN_GTIDS
      Gtid_list_log_event, may or may not update gtid_slave_pos with the
      position of the ignored events. Then, the slave would be restarted
      while resetting IGNORE_DOMAIN_IDS to be empty, which would result in
      the slave requesting different starting locations, depending on
      whether or not gtid_slave_pos was updated. And, because previously
      ignored events could now be requested and executed (no longer
      ignored), their presence would fail the test.
      
      This patch fixes this in two ways. First, to use GTID positions for
      synchronization rather than binlog file positions. Then second, to
      synchronize the SQL thread’s gtid_slave_pos with the ignored events
      before killing the SQL thread.
      
      To consistently reproduce the test failure, the following patch can
      be applied:
      
      diff --git a/sql/log_event_server.cc b/sql/log_event_server.cc
      index f51f5b7deec..de62233acff 100644
      --- a/sql/log_event_server.cc
      +++ b/sql/log_event_server.cc
      @@ -3686,6 +3686,12 @@ Gtid_list_log_event::do_apply_event(rpl_group_info *rgi)
           void *hton= NULL;
           uint32 i;
      
      +    sleep(1);
      +    if (rli->sql_driver_thd->killed || rli->abort_slave)
      +    {
      +      return 0;
      +    }
      +
      
      Reviewed By:
      ============
      Kristian Nielsen <knielsen@knielsen-hq.org>
      ee895583
    • Oleksandr Byelkin's avatar
    • Marko Mäkelä's avatar
      Merge 10.4 into 10.5 · 8ec12e0d
      Marko Mäkelä authored
      8ec12e0d
  6. 11 Feb, 2024 1 commit
  7. 10 Feb, 2024 2 commits
    • Oleg Smirnov's avatar
      c32e59ac
    • Oleg Smirnov's avatar
      MDEV-30660 Aggregation functions fail to leverage uniqueness property · 15623c7f
      Oleg Smirnov authored
      When executing a statement of the form
        SELECT AGGR_FN(DISTINCT c1, c2,..,cn) FROM t1,
      where AGGR_FN is an aggregate function such as COUNT(), AVG() or SUM(),
      and a unique index exists on table t1 covering some or all of the
      columns (c1, c2,..,cn), the retrieved values are inherently unique.
      Consequently, the need for de-duplication imposed by the DISTINCT
      clause can be eliminated, leading to optimization of aggregation
      operations.
      This optimization applies under the following conditions:
        - only one table involved in the join (not counting const tables)
        - some arguments of the aggregate function are fields
              (not functions/subqueries)
      
      This optimization extends to queries of the form
        SELECT AGGR_FN(c1, c2,..,cn) GROUP BY cx,..cy
      when a unique index covers some or all of the columns
      (c1, c2,..cn, cx,..cy)
      15623c7f
  8. 09 Feb, 2024 1 commit
  9. 08 Feb, 2024 10 commits
    • Marko Mäkelä's avatar
      MDEV-33277 In-place upgrade causes invalid AUTO_INCREMENT values · 0381921e
      Marko Mäkelä authored
      MDEV-33308 CHECK TABLE is modifying .frm file even if --read-only
      
      As noted in commit d0ef1aaf,
      MySQL as well as older versions of MariaDB server would during
      ALTER TABLE ... IMPORT TABLESPACE write bogus values to the
      PAGE_MAX_TRX_ID field to pages of the clustered index, instead of
      letting that field remain 0.
      In commit 8777458a this field
      was repurposed for PAGE_ROOT_AUTO_INC in the clustered index root page.
      
      To avoid trouble when upgrading from MySQL or older versions of MariaDB,
      we will try to detect and correct bogus values of PAGE_ROOT_AUTO_INC
      when opening a table for the first time from the SQL layer.
      
      btr_read_autoinc_with_fallback(): Add the parameters to mysql_version,max
      to indicate the TABLE_SHARE::mysql_version of the .frm file and the
      maximum value allowed for the type of the AUTO_INCREMENT column.
      In case the table was originally created in MySQL or an older version of
      MariaDB, read also the maximum value of the AUTO_INCREMENT column from
      the table and reset the PAGE_ROOT_AUTO_INC if it is above the limit.
      
      dict_table_t::get_index(const dict_col_t &) const: Find an index that
      starts with the specified column.
      
      ha_innobase::check_for_upgrade(): Return HA_ADMIN_FAILED if InnoDB
      needs upgrading but is in read-only mode. In this way, the call to
      update_frm_version() will be skipped.
      
      row_import_autoinc(): Adjust the AUTO_INCREMENT column at the end of
      ALTER TABLE...IMPORT TABLESPACE. This refinement was suggested by
      Debarun Banerjee.
      
      The changes outside InnoDB were developed by Michael 'Monty' Widenius:
      
      Added print_check_msg() service for easy reporting of check/repair messages
      in ENGINE=Aria and ENGINE=InnoDB.
      Fixed that CHECK TABLE do not update the .frm file under --read-only.
      Added 'handler_flags' to HA_CHECK_OPT as a way for storage engines to
      store state from handler::check_for_upgrade().
      
      Reviewed by: Debarun Banerjee
      0381921e
    • Dmitry Shulga's avatar
      MDEV-15703: Crash in EXECUTE IMMEDIATE 'CREATE OR REPLACE TABLE t1 (a INT DEFAULT ?)' USING DEFAULT · e48bd474
      Dmitry Shulga authored
      This patch fixes the issue with passing the DEFAULT or IGNORE values to
      positional parameters for some kind of SQL statements to be executed
      as prepared statements.
      
      The main idea of the patch is to associate an actual value being passed
      by the USING clause with the positional parameter represented by
      the Item_param class. Such association must be performed on execution of
      UPDATE statement in PS/SP mode. Other corner cases that results in
      server crash is on handling CREATE TABLE when positional parameter
      placed after the DEFAULT clause or CALL statement and passing either
      the value DEFAULT or IGNORE as an actual value for the positional parameter.
      This case is fixed by checking whether an error is set in diagnostics
      area at the function pack_vcols() on return from the function pack_expression()
      e48bd474
    • Dmitry Shulga's avatar
      MDEV-15703: Crash in EXECUTE IMMEDIATE 'CREATE OR REPLACE TABLE t1 (a INT... · 6b2cd786
      Dmitry Shulga authored
      MDEV-15703: Crash in EXECUTE IMMEDIATE 'CREATE OR REPLACE TABLE t1 (a INT DEFAULT ?)' USING DEFAULT, UBSAN runtime error: member call on null pointer of type 'struct TABLE_LIST' in Item_param::save_in_field
      
      This is the prerequisite patch to refactor the method
        Item_default_value::fix_fields.
      The former implementation of this method was extracted and placed
      into the standalone function make_default_field() and the method
      Item_default_value::tie_field(). The motivation for this modification
      is upcoming changes for core implementation of the task MDEV-15703
      since these functions will be used from several places within
      the source code.
      6b2cd786
    • Marko Mäkelä's avatar
      MDEV-33400 Adaptive hash index corruption after DISCARD TABLESPACE · 85db5347
      Marko Mäkelä authored
      row_discard_tablespace(): Do not invoke dict_index_t::clear_instant_alter()
      because that would corrupt any adaptive hash index entries in the table.
      
      row_import_for_mysql(): Invoke dict_index_t::clear_instant_alter()
      after detaching any adaptive hash index entries.
      85db5347
    • Daniel Bartholomew's avatar
      bump the VERSION · 23101304
      Daniel Bartholomew authored
      23101304
    • Daniel Black's avatar
      MDEV-4827 mysqldump --dump-slave=2 --master-data=2 doesn't record both · 915d9514
      Daniel Black authored
      Recording both is useful on a replication relay when the backup
      can be used to replace the server, or ack as a new replica to the
      server.
      
      If an option=2, commented is selected, allow the alternate option
      to exist.
      
      This still disables --dump-slave=1 --master-data=1 as having the
      a CHANGE MASTER TO and START SLAVE on different positions would be
      confusing and dangerious to the try to execute the output. The
      previous behaviour of silently disabling --master-data occurs in
      this case.
      
      The commented code related to --dump-slave/--master-data is greatly
      expanded for human consumption.
      
      A redundant opt_slave_data= 0 was removed from get_opts. If
      --dump-slave=1 or 2, then the only possible value of --master-data
      is a valid one.
      
      Re-order to preference gtid based replication.
      
      Based of code from Elena Stepanova.
      
      Review by: Brandon Nesterenko and Anel Husakovic
      915d9514
    • Daniel Black's avatar
      MDEV-4827: prelude - additional gtid/no-gtid tests for mysqldump · f7adf129
      Daniel Black authored
      This will make it easier to show changes.
      f7adf129
    • mariadb-DebarunBanerjee's avatar
      MDEV-33274 The test encryption.innodb-redo-nokeys often fails · 5e704706
      mariadb-DebarunBanerjee authored
      If we fail to open a tablespace while looking for FILE_CHECKPOINT, we
      set the corruption flag. Specifically, if encryption key is missing, we
      would not be able to open an encrypted tablespace and the flag could be
      set. We miss checking for this flag and report "Missing FILE_CHECKPOINT"
      
      Address review comment to improve the test. Flush pages before starting
      no-checkpoint block. It should improve the number of cases where the
      test is skipped because some intermediate checkpoint is triggered.
      5e704706
    • Daniel Lenski's avatar
      Fix inconsistent definition of... · 6e406bb6
      Daniel Lenski authored
      Fix inconsistent definition of PERFORMANCE_SCHEMA.REPLICATION_APPLIER_STATUS.COUNT_TRANSACTIONS_RETRIES column
      
      This column (`COUNT_TRANSACTIONS_RETRIES`) is defined as `BIGINT UNSIGNED`
      (64-bit unsigned integer) in the user-visible SQL definition:
      https://github.com/MariaDB/server/blob/182ff21ace34ea4f00fb5b66689b172323d91f99/storage/perfschema/table_replication_applier_status.cc#L66
      
          "COUNT_TRANSACTIONS_RETRIES BIGINT unsigned not null comment 'The number of retries that were made because the replication SQL thread failed to apply a transaction.',"
      
      And its value is internally set/updated using the `set_field_ulonglong`
      function:
      https://github.com/MariaDB/server/blob/182ff21ace34ea4f00fb5b66689b172323d91f99/storage/perfschema/table_replication_applier_status.cc#L231-L233
      
          case 3: /* total number of times transactions were retried */
            set_field_ulonglong(f, m_row.count_transactions_retries);
            break;
      
      … but the structure where it is stored allocates only `ulong` for it:
      https://github.com/MariaDB/server/blob/182ff21ace34ea4f00fb5b66689b172323d91f99/storage/perfschema/table_replication_applier_status.h#L62
      
          ulong count_transactions_retries;
      
      As a result of this inconsistency:
      
      1. On any platform where `ulong` is `uint32_t` and `ulonglong` is `uint64_t`,
         setting this value would corrupt the 4 bytes of memory *following* the 4
         bytes actually allocated for it.
      
         Likely this problem was never noticed because this is the final element in
         the structure, and the structure is padded by the compiler to prevent
         memory corruption errors.
      
      2. On any BIG-ENDIAN platform where `ulong` is `uint32_t` and `ulonglong`
         is `uint64_t`, reading back the value of this column will result in
         total garbage.
      
         Likely this problem was never noticed because MariaDB has not been
         tested on 32-bit big-endian platforms.
      
      In order not to affect the user-visible/SQL definition of this column, the
      correct way to fix this issue is to change it to `ulonglong` in the
      structure definition.  See
      https://github.com/MariaDB/server/pull/2763/files#r1329110832 for the
      original identification and discussion of this issue.
      
      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
      6e406bb6
    • Robin Newhouse's avatar
      Fix ninja build for cracklib_password_check · 68c0f6d8
      Robin Newhouse authored
      As was done in dc771113 for `support-files/CMakeLists.txt`
      Do not rely on existence of `CMakeFiles/${target}.dir` directory
      existence. It is not there for custom targets in Ninja build.
      
      This regression was introduced in #1131 which likely copied the pattern
      from e79e8406 before that regression was addressed in dc771113.
      
      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.
      68c0f6d8
  10. 07 Feb, 2024 4 commits
    • mariadb-DebarunBanerjee's avatar
      MDEV-33023 Crash in mariadb-backup --prepare --export after --prepare · fb9da7f7
      mariadb-DebarunBanerjee authored
      mariadb-backup with --prepare option could result in empty redo log
      file. When --prepare is followed by --prepare --export, we exit early
      in srv_start function without opening the ibdata1 tablespace. Later
      while trying to read rollback segment header page, we hit the debug
      assert which claims that the system space should already have been
      opened.
      
      There are two assert cases here.
      
      Issue-1: System tablespace object is not there in fil space hash i.e.
      srv_sys_space.open_or_create() is not called.
      
      Issue-2: The system tablespace data file ibdata1 is not opened i.e.
      fil_system.sys_space->open() is not called.
      
      Fix: For empty redo log and restore operation, open system tablespace
      before returning.
      fb9da7f7
    • Vlad Lesin's avatar
      MDEV-33004 innodb.cursor-restore-locking test fails · f5373db8
      Vlad Lesin authored
      THE FIX MUST NOT BE MERGED TO 10.6+, BECAUSE 10.6+ IS NOT AFFECTED!
      
      The test is waiting for delete-marked record purging. But this does not
      happen under the following conditions:
      
      1. "START TRANSACTION WITH CONSISTENT SNAPSHOT" - is active, has not
      been rolled back yet
      2. "DELETE FROM t WHERE b = 20 # trx_1" - is committed
      3. "INSERT INTO t VALUES(10, 20) # trx_2" - hanging on
      "ib_after_row_insert" sync point, waiting for "first_ins_cont" signal
      4. "DELETE FROM t WHERE b = 20 # trx_3" - blocked on delete-marked by
      trx_1 record, waiting for trx_2
      5. connection "default" is waiting on
      'now WAIT_FOR row_purge_del_mark_finished'
      
      purge_coordinator_callback_low() sets
      
      purge_state.m_history_length= srv_do_purge(&n_total_purged);
      
      even if nothing was purged, like in our case. Nothing was purged because
      transaction with consistent snapshot was still alive during purging
      procedure.
      
      Then purge_coordinator_timer_callback() does not wake purge thread if
      the following condition is true:
      
      purge_state.m_history_length == trx_sys.rseg_history_len
      
      The above condition is true for our case, because we are waiting for
      delete-marked record purging, and trx_sys.rseg_history_len does not
      grow.
      
      Only 10.5 is affected, because there is no such condition in 10.6, i.e.
      purge thread is woken up even if history size was not changed during
      purge coordinator thread suspending.
      
      The easiest way to fix it is just to remove the test from 10.5.
      f5373db8
    • Thirunarayanan Balathandayuthapani's avatar
      MDEV-33341 innodb.undo_space_dblwr test case fails with Unknown Storage Engine InnoDB · c31b1ee2
      Thirunarayanan Balathandayuthapani authored
      - Failed to reset the innodb_fil_make_page_dirty_debug variable in
      innodb_saved_page_number_debug_basic test case.
      c31b1ee2
    • Yuchen Pei's avatar