1. 17 Apr, 2024 8 commits
    • Marko Mäkelä's avatar
      MDEV-33779 InnoDB row operations could be faster · e459ce83
      Marko Mäkelä authored
      We have quite a few assertions
      	ut_a(m_prebuilt->trx == thd_to_trx(ha_thd()));
      in low-level functions.
      These had better be debug assertions for performance reasons.
      It should suffice to check that condition in the less frequently invoked
      ha_innobase::change_active_index().
      
      convert_search_mode_to_innobase(): Return whether the mode is
      unsupported, and optionally update ha_innobase::m_last_match_mode.
      
      ha_innobase::index_read(): Only branch on find_flag once, and
      simplify the error handling after invoking row_search_mvcc().
      
      ha_innobase::rnd_pos(): Remove an assertion that is duplicating one
      in ha_innobase::index_read(), which we are calling unconditionally.
      
      ha_innobase::records_in_range(): Check only once whether
      min_key, max_key are null pointers.
      
      row_sel_convert_mysql_key_to_innobase(): Declare all parameters
      except the conversion buffer pointer (buf) to be nonnull.
      
      Reviewed by: Debarun Banerjee
      e459ce83
    • Marko Mäkelä's avatar
      Merge 10.5 into 10.6 · 829cb1a4
      Marko Mäkelä authored
      829cb1a4
    • Marko Mäkelä's avatar
      MDEV-33855 MSAN use-of-uninitialized-value in rtr_pcur_getnext_from_path() · 46e9e92e
      Marko Mäkelä authored
      rtr_pcur_getnext_from_path(): Remove a bogus assertion
      that may cause a data races with buf_LRU_block_free_non_file_page().
      
      If my_latch_mode == BTR_MODIFY_LEAF, we would have released all page
      latches and buffer-fixes by invoking mtr->rollback_to_savepoint(1).
      After this point, the btr_cur->page_cur.block is no longer valid and
      must not be accessed.
      
      Before 03ca6495 this assertion had
      been disabled, because the preprocessor symbol UNIV_RTR_DEBUG
      had never been enabled (except when explicitly specified in
      CMAKE_CXX_FLAGS).
      
      Reviewed by: Debarun Banerjee
      46e9e92e
    • Vladislav Vaintroub's avatar
      MDEV-33840 tpool- switch to longer maintainence timer interval, if pool is idle · f6e9600f
      Vladislav Vaintroub authored
      Previous solution, that would entirely switch timer off, turned out
      to be deadlock prone.
      
      This patch fixed previous attempt to switch between long/short interval
      periods in MDEV-24295. Now, initial state of the timer is fixed (it is ON).
      Also, avoid switching timer to longer periods if there is any activity in
      the pool.
      f6e9600f
    • Vladislav Vaintroub's avatar
      2ba79aba
    • Marko Mäkelä's avatar
      Merge 10.4 into 10.5 · 3a3fe300
      Marko Mäkelä authored
      3a3fe300
    • Marko Mäkelä's avatar
      Tests: remove a duplicated check · 9164c2b8
      Marko Mäkelä authored
      This fixes up the merge commit 9b182756
      9164c2b8
    • Jan Lindström's avatar
      MDEV-33895 : Galera test failure on galera_sr.MDEV-25718 · 4aeba259
      Jan Lindström authored
      Test was waiting INSERT-clause to make rollback but
      wait_condition was too tight. State could be
      Freeing items or Rollback. Fixed wait_condition
      to expect one of them.
      4aeba259
  2. 16 Apr, 2024 4 commits
    • Sergei Golubchik's avatar
      MDEV-33889 Read only server throws error when running a create temporary table as select statement · 41e7ceb0
      Sergei Golubchik authored
      create_partitioning_metadata() should only mark transaction r/w
      if it actually did anything (that is, the table is partitioned).
      
      otherwise it's a no-op, called even for temporary tables and
      it shouldn't do anything at all
      41e7ceb0
    • Dave Gosselin's avatar
      Factor TABLE_LIST creation from add_table_to_list · a8a75ba2
      Dave Gosselin authored
      Ideally our methods and functions should do one thing, do that well,
      and do only that.  add_table_to_list does far more than adding a
      table to a list, so this commit factors the TABLE_LIST creation out
      to a new TABLE_LIST constructor.  It then uses placement new()
      to create it in the correct memory area (result of thd->calloc).
      Benefits of this approach:
       1. add_table_to_list now returns as early as possible on an error
       2. fewer side-effects incurred on creating the TABLE_LIST object
       3. TABLE_LIST won't be calloc'd if copy_to_db fails
       4. local declarations moved closer to their respective first uses
       5. improved code readability and logical flow
      Also factored a couple of other functions to keep the happy path
      more to the left, which makes them easier to follow at a glance.
      a8a75ba2
    • Oleksandr Byelkin's avatar
      Merge branch '10.4' into 10.5 · 9b182756
      Oleksandr Byelkin authored
      9b182756
    • Oleksandr Byelkin's avatar
      MDEV-33861 main.query_cache fails with embedded after enabling WITH_PROTECT_STATEMENT_MEMROOT · 50998a6c
      Oleksandr Byelkin authored
      Synopsis: If SELECT returned answer from Query Cache it is not really executed.
      
      The reason for firing of assertion
        DBUG_ASSERT((mem_root->flags & ROOT_FLAG_READ_ONLY) == 0);
      is that in case the query_cache is on and the same query run by different
      stored routines the following use case can take place:
      First, lets say that bodies of routines used by the test case are the same
      and contains the only query 'SELECT * FROM t1';
        call p1() -- a result set is stored in query cache for further use.
        call p2() -- the same query is run against the table t1, that result in
                     not running the actual query but using its cached result.
                     On finishing execution of this routine, its memory root is
                     marked for read only since every SP instruction that this
                     routine contains has been executed.
        INSERT INT t1 VALUE (1); -- force following invalidation of query cache
        call p2() -- query the table t1 will result in assertion failure since its
                     execution would require allocation on the memory root that
                     has been already marked as read only memory root
      
      The root cause of firing the assertion is that memory root of the stored
      routine 'p2' was marked as read only although actual execution of the query
      contained inside hadn't been performed.
      
      To fix the issue, mark a SP instruction as not yet run in case its execution
      doesn't result in real query processing and a result set got from query cache
      instead.
      
      Note that, this issue relates server built in debug mode AND with the protect
      statement memory root feature turned on. It doesn't affect server built
      in release mode.
      50998a6c
  3. 15 Apr, 2024 5 commits
  4. 14 Apr, 2024 3 commits
  5. 13 Apr, 2024 6 commits
    • Sergei Golubchik's avatar
      feedback plugin: abort sending the report on server shutdown · 8bc32410
      Sergei Golubchik authored
      network timeouts might be rather large and feedback plugin
      waits forever for the sender thread to exit.
      
      an alternative could've been to use GNU-specific pthread_timedjoin_np(),
      where _np mean "not portable".
      8bc32410
    • Sergei Golubchik's avatar
      Fixed random failure in main.kill_processlist-6619 (take 3) · 6a4ac4c7
      Sergei Golubchik authored
      followup for 81f75ca8
      
      improve over take 2. It's technically possible, though unlikely,
      to see THD after it already reset the info to NULL, but has not
      changed the command to COM_SLEEP yet (see THD::mark_connection_idle()).
      
      Let's wait for "Sleep", not for NULL.
      6a4ac4c7
    • Sergei Golubchik's avatar
      galera/suite.pm: perl warning · 69b5fdf3
      Sergei Golubchik authored
      Unescaped left brace in regex is passed through in regex
      69b5fdf3
    • Tony Chen's avatar
      Minor improvements to options error handling · 79706fd3
      Tony Chen authored
      - Add additional MTRs for more coverage on invalid options
      - Updating a few error messages to be more informative
      - Use the exit code from handle_options() when there is an error processing
        user options
      
      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.
      79706fd3
    • Tony Chen's avatar
      MDEV-33469 Fix behavior on invalid arguments · 47d75cdd
      Tony Chen authored
      When passing in an invalid value (e.g. incorrect data type) for a variable, the
      server startup will fail with misleading error messages.
      
      The behavior **before** this change:
      
      For server options:
      - The error message will indicate that the argument is being adjusted to a valid value
      - Server startup still fails
      
      For plugin options:
      - The error message will indicate that the argument is being adjusted to a valid value
      - The plugin is still disabled
      - Server startup fails with a message that it does not recognize the plugin option
      
      The behavior **after** this change:
      
      For server options:
      - Output that an invalid argument was provided
      - Exit server startup
      
      For plugin options:
      - Output that an invalid argument was provided
      - Disable the plugin
      - Attempt to continue server startup
      
      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.
      47d75cdd
    • Tony Chen's avatar
      Simplify MTR for handling multiple invalid options · dd639985
      Tony Chen authored
      In 69a4d6ae, an MTR test was added to verify that we handled multiple invalid
      options.  However, the logic to perform this test relied on a non-trivial regex
      to filter out the noise in the logs.
      
      Instead, we now just simply search for what we expect to be in the logs.
      
      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.
      dd639985
  6. 12 Apr, 2024 1 commit
    • Vlad Lesin's avatar
      MDEV-33802 Weird read view after ROLLBACK of other transactions. · d7fc975c
      Vlad Lesin authored
      In the case if some unique key fields are nullable, there can be
      several records with the same key fields in unique index with at least
      one key field equal to NULL, as NULL != NULL.
      
      When transaction is resumed after waiting on the record with at least one
      key field equal to NULL, and stored in persistent cursor record is
      deleted, persistent cursor can be restored to the record with all key
      fields equal to the stored ones, but with at least one field equal to
      NULL. And such record is wrongly treated as a record with the same unique
      key as stored in persistent cursor record one, what is wrong as
      NULL != NULL.
      
      The fix is to check if at least one unique field is NULL in restored
      persistent cursor position, and, if so, then don't treat the record as
      one with the same unique key as in the stored record key.
      
      dict_index_t::nulls_equal was removed, as it was initially developed for
      never existed in MariaDB "intrinsic tables", and there is no code, which
      would set it to "true".
      
      Reviewed by Marko Mäkelä.
      d7fc975c
  7. 11 Apr, 2024 9 commits
    • Sergei Golubchik's avatar
      spider should suppress errors in close_connection · 8dda6027
      Sergei Golubchik authored
      because stmt_da no longer expects errors at this stage,
      but mysql_close() call can still hit my_error() in net_serv.cc
      8dda6027
    • Brandon Nesterenko's avatar
      MDEV-10684: rpl.rpl_domain_id_filter_restart fails in buildbot · a6aecbb0
      Brandon Nesterenko authored
      The test failure in rpl.rpl_domain_id_filter_restart is caused by
      MDEV-33887. That is, the test uses master_pos_wait() (called
      indirectly by sync_slave_with_master) to try and wait for the
      replica to catch up to the master. However, the waited on
      transaction is ignored by the configured
        CHANGE MASTER TO IGNORE_DOMAIN_IDS=()
      As MDEV-33887 reports, due to the IO thread updating the binlog
      coordinates and the SQL thread updating the GTID state, if the
      replica is stopped in-between these updates, the replica state will
      be inconsistent. That is, the test expects that the GTID state will
      be updated, so upon restart, the replica will be up-to-date.
      However, if the replica is stopped before the SQL thread updates its
      GTID state, then upon restart, the replica will fetch the previously
      ignored event, which is no longer ignored upon restart, and execute
      it. This leads to the sporadic extra row in t2.
      
      This patch changes master_pos_wait() to use master_gtid_wait() to
      ensure the replica state is consistent with the master state.
      a6aecbb0
    • Sergei Golubchik's avatar
      cleanup: rpl.rpl_semi_sync_shutdown_await_ack · 340d93a8
      Sergei Golubchik authored
      avoid using multiple files with the same functionality.
      340d93a8
    • Sergei Golubchik's avatar
      make innodb.monitor test idempotent · e5c9904e
      Sergei Golubchik authored
      e5c9904e
    • Marko Mäkelä's avatar
      Fix g++-14 -Wtemplate-id-cdtor · 04be12a8
      Marko Mäkelä authored
      04be12a8
    • anson1014's avatar
      Link beginner instructions in README.md · f131c609
      anson1014 authored
      When navigating through the existing links in the README, it is not
      immediately obvious where to go to find instructions in building
      and testing the source code. Since the README is often the first
      thing people see when looking at a repository, this information
      should be front and centre so that newcomers to the project can
      get setup as quickly as possible.
      f131c609
    • Ian Gilfillan's avatar
      Update README.md · 8785b797
      Ian Gilfillan authored
      8785b797
    • Sergei Golubchik's avatar
      Merge branch '10.5' into 10.6 · 41296a07
      Sergei Golubchik authored
      41296a07
    • Marko Mäkelä's avatar
      MDEV-33325 Crash in flst_read_addr on corrupted data · 263932d5
      Marko Mäkelä authored
      flst_read_addr(): Remove assertions. Instead, we will check these
      conditions in the callers and avoid a crash in case of corruption.
      We will check the conditions more carefully, because the callers
      know more exact bounds for the page numbers and the byte offsets
      withing pages.
      
      flst_remove(), flst_add_first(), flst_add_last(): Add a parameter
      for passing fil_space_t::free_limit. None of the lists may point to
      pages that are beyond the current initialized length of the
      tablespace.
      
      trx_rseg_mem_restore(): Access the first page of the tablespace,
      so that we will correctly recover rseg->space->free_limit
      in case some log based recovery is pending.
      
      ibuf_remove_free_page(): Only look up the root page once, and
      validate the last page number.
      
      Reviewed by: Debarun Banerjee
      263932d5
  8. 10 Apr, 2024 4 commits