1. 19 Oct, 2023 3 commits
  2. 18 Oct, 2023 1 commit
    • Marko Mäkelä's avatar
      MDEV-32511: Race condition between checkpoint and page write · cfd17881
      Marko Mäkelä authored
      fil_aio_callback(): Invoke fil_node_t::complete_write() before
      releasing any page latch, so that in case a log checkpoint is
      executed roughly concurrently with the first write into a file
      since the previous checkpoint, we will not miss a fdatasync()
      or fsync() call to make the write durable.
      cfd17881
  3. 17 Oct, 2023 1 commit
    • Thirunarayanan Balathandayuthapani's avatar
      MDEV-31851 After crash recovery, undo tablespace fails to open · 3da5d047
      Thirunarayanan Balathandayuthapani authored
      Problem:
      ========
      - InnoDB fails to open undo tablespace when page0 is corrupted
      and fails to throw error.
      
      Solution:
      =========
      - InnoDB throws DB_CORRUPTION error when InnoDB encounters
      page0 corruption of undo tablespace.
      
      - InnoDB restores the page0 of undo tablespace from
      doublewrite buffer if it encounters page corruption
      
      - Moved Datafile::restore_from_doublewrite() to
      recv_dblwr_t::restore_first_page(). So that undo
      tablespace and system tablespace can use this function
      instead of duplicating the code
      
      srv_undo_tablespace_open(): Returns 0 if file doesn't exist
      or ULINT_UNDEFINED if page0 is corrupted.
      3da5d047
  4. 14 Oct, 2023 1 commit
  5. 13 Oct, 2023 2 commits
  6. 12 Oct, 2023 3 commits
  7. 08 Oct, 2023 5 commits
    • Monty's avatar
      Fixed that log_slow.test works with view_protocol · b04af648
      Monty authored
      Part of the test did not work with view_protocol as the query written
      to the slow_log table is changed because of view_protocol.
      b04af648
    • Monty's avatar
      Fixed compiler warnings in connect/odbconn.cpp · 1dd6d9a0
      Monty authored
      1dd6d9a0
    • Monty's avatar
      MDEV-22243 type_test.type_test_double fails with 'NUMERIC_SCALE NULL' · 9d19b652
      Monty authored
      There where several reasons why the test failed:
      - Constructors for Field_double and Field_float changed an argument
        to the constructor instead of a the correct class variable.
      - gcc 7.5.0 produced wrong code when inlining Field_double constructor
        into Field_test_double constructor.
      
      Fixed by changing the correct class variable and make the constructors
      not inline to go around the gcc bug.
      9d19b652
    • Monty's avatar
      MDEV-31349 test maria.maria-purge failed on 'aria_log.00000002 not found' · 185591c1
      Monty authored
      The bug was in the test case.
      The problem was that maria_empty_logs.inc deleted aria log files before
      the server was properly shutdown.
      Fixed by waiting for pid file to disappear before starting to delete log
      files.
      
      Other things:
      - Fixed that translog_purge_at_flush() will not stop deleting files even
        if one file could not be deleted.
      185591c1
    • Monty's avatar
      Fixed randomly failing test main.order_by_optimizer_innodb · 424a7a26
      Monty authored
      The problem was that sometimes InnoDB returned sligtly wrong record count
      for table, which causes the optimizer to disregard the result from
      the range optimizer. The end result was that the optimizer choosed a
      ref access instead of a range access which caused errors in buildbot.
      
      Fixed by adding more rows to the table to ensure that table scan is
      more costly than range scan of the given interval.
      424a7a26
  8. 06 Oct, 2023 2 commits
  9. 25 Sep, 2023 2 commits
  10. 24 Sep, 2023 1 commit
  11. 22 Sep, 2023 3 commits
  12. 21 Sep, 2023 1 commit
    • Vlad Lesin's avatar
      MDEV-30165 X-lock on supremum for prepared transaction for RR · 95730372
      Vlad Lesin authored
      trx_t::set_skip_lock_inheritance() must be invoked at the very beginning
      of lock_release_on_prepare(). Currently  trx_t::set_skip_lock_inheritance()
      is invoked at the end of lock_release_on_prepare() when lock_sys and trx
      are released, and there can be a case when locks on prepare are released,
      but "not inherit gap locks" bit has not yet been set, and page split
      inherits lock to supremum.
      
      Also reset supremum bit and rebuild waiting queue when XA is prepared.
      
      Reviewed by: Marko Mäkelä
      95730372
  13. 20 Sep, 2023 3 commits
  14. 19 Sep, 2023 11 commits
    • Daniel Black's avatar
      MDEV-27757 Database upgrade fails from 5.1: slow_log table · bf5c2512
      Daniel Black authored
      The table structure from MySQL-5.1.14 is:
      
      CREATE TABLE `slow_log` (
        `start_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
        `user_host` mediumtext NOT NULL,
        `query_time` time NOT NULL,
        `lock_time` time NOT NULL,
        `rows_sent` int(11) NOT NULL,
        `rows_examined` int(11) NOT NULL,
        `db` varchar(512) DEFAULT NULL,
        `last_insert_id` int(11) DEFAULT NULL,
        `insert_id` int(11) DEFAULT NULL,
        `server_id` int(11) DEFAULT NULL,
        `sql_text` mediumtext NOT NULL
      ) ENGINE=CSV DEFAULT CHARSET=utf8 COMMENT='Slow log'
      
      Even as far back as MySQL-5.5.40 this table could be created as NULLs
      where not permitted in the CSV table time, but it seems they
      where allowed sometime.
      
      As the first part of mariadb-upgrade adds the column thread_id without
      correcting the 'NULL'able status of existing columns it fails.
      
      We reorder the sql statements in the ugprade as follows:
      
      ALTER TABLE slow_log MODIFY {columns} {new types} NOT NULL,....
      
      As thread_id doesn't exist in the above statement it was removed from
      the first ALTER TABLE statement to prevent failure.
      
      Previous ALTER TABLE slow_log where moved later appending thread_id
      and rows_affected, and also enforces the type of thread_id if it
      was incorrectly like the now first ALTER STATEMENT slow_log used
      to do.
      bf5c2512
    • Daniel Black's avatar
    • Monty's avatar
      Disabled gcol.innodb_virtual_fk · 2ed54611
      Monty authored
      Constant failures with:
      "InnoDB: tried to purge non-delete-marked record in index"
      2ed54611
    • Monty's avatar
      Fixed random failuring test main.innodb_ext_key · 5c9d8315
      Monty authored
      Fixed by copying the solution from 11.0
      5c9d8315
    • Monty's avatar
      Fixed compiler failure in lib_sql.cc · 8a3a88a7
      Monty authored
      8a3a88a7
    • Monty's avatar
      Correction of receent PR in mroonga for 10.5 · 821d691a
      Monty authored
      Updated ha_mroonga::storage_check_if_supported_inplace_alter to support
      new ALTER TABLE flags.
      
      This fixes failing tests:
      mroonga/storage.alter_table_add_index_unique_duplicated
      mroonga/storage.alter_table_add_index_unique_multiple_column_duplicated
      821d691a
    • Marko Mäkelä's avatar
      MDEV-21174 fixup: Remove unused ut_bit_set_nth() · d58f43f8
      Marko Mäkelä authored
      This fixes up commit 56f6dab1
      d58f43f8
    • Marko Mäkelä's avatar
      Merge 10.4 into 10.5 · 6c05edfd
      Marko Mäkelä authored
      6c05edfd
    • Marko Mäkelä's avatar
      MDEV-31605 cmake/stack_direction.c does not work correctly on clang 16 · d0abbdf5
      Marko Mäkelä authored
      According to commit ea568419
      the stack normally grows downwards, except on HP PA-RISC where
      it grows upwards. Because determining the stack direction is not
      possible in a portable way, let us determine the default STACK_DIRECTION
      in CMake based on the ISA.
      
      On clang 16.0.6 running on and targeting AMD64, STACK_DIRECTION=1 is
      being incorrectly detected, causing the failure of a number of tests.
      d0abbdf5
    • Marko Mäkelä's avatar
      MDEV-30024 InnoDB: tried to purge non-delete-marked of a virtual column prefix · 76b688f1
      Marko Mäkelä authored
      row_vers_vc_matches_cluster(): Invoke dtype_get_at_most_n_mbchars()
      to extract the correct number of bytes corresponding to the number
      of characters in a virtual column prefix index, just like we do in
      row_sel_sec_rec_is_for_clust_rec().
      
      The test case would occasionally reproduce the failure when this
      fix is not present.
      76b688f1
    • Dmitry Shulga's avatar
      MDEV-23902: MariaDB crash on calling function · 68353dc9
      Dmitry Shulga authored
      On creation of a VIEW that depends on a stored routine an instance of
      the class Item_func_sp is allocated on a memory root of SP statement.
      It happens since mysql_make_view() calls the method
        THD::activate_stmt_arena_if_needed()
      before parsing definition of the view.
      On the other hand, when sp_head's rcontext is created an instance of
      the class Field referenced by the data member
        Item_func_sp::result_field
      is allocated on the Item_func_sp's Query_arena (call arena) that set up
      inside the method
        Item_sp::execute_impl
      just before calling the method
        sp_head::execute_function()
      
      On return from the method sp_head::execute_function() all items allocated
      on the Item_func_sp's Query_arena are released and its memory root is freed
      (see implementation of the method Item_sp::execute_impl). As a consequence,
      the pointer
        Item_func_sp::result_field
      references to the deallocated memory. Later, when the method
        sp_head::execute
      cleans up items allocated for just executed SP instruction the method
        Item_func_sp::cleanup is invoked and tries to delete an object referenced
      by data member Item_func_sp::result_field that points to already deallocated
      memory, that results in a server abnormal termination.
      
      To fix the issue the current active arena shouldn't be switched to
      a statement arena inside the function mysql_make_view() that invoked indirectly
      by the method sp_head::rcontext_create. It is implemented by introducing
      the new Query_arena's state STMT_SP_QUERY_ARGUMENTS that is set when explicit
      Query_arena is created for placing SP arguments and other caller's side items
      used during SP execution. Then the method THD::activate_stmt_arena_if_needed()
      checks Query_arena's state and returns immediately without switching to
      statement's arena.
      68353dc9
  15. 18 Sep, 2023 1 commit
    • Daniel Black's avatar
      MDEV-21194: mariadb-install-db doesn't properly grant proxy privileges to all created user accounts · 8bbe3a3c
      Daniel Black authored
      mariadb-install-db --auth-root-authentication-method=normal created 4
      root accounts by default, but only two of these had PROXY privilege
      granted.
      
      mariadb-install-db (default option
      --auth-root-authentication-method=socket) as non-root user also didn't
      grant PROXY priv to the created nonroot@localhost user.
      
      To fix this, in mysql_system_tables_data.sql, we re-use tmp_user_nopasswd
      as this contains the list of all root users.
      
      REPLACE INTO tmp_proxies_priv SELECT @current_hostname, IFNULL(@auth_root_socket, 'root')
      creates the $user@$current_host but will not error if @auth_root_socket
      is null. Note @current_hostname lines are filtered out with
      --cross-bootstrap in mariadb-install-db so it was needed to include this
      expression for consistency.
      
      Like the existing mysql_system_tables.sql is used to create teh
      $user@localhost proxies_priv.
      
      Test cases roles.acl_statistics, perfschema,privilege_table_io depends on the number of proxy users.
      
      After:
      
      --auth-root-authentication-method=normal:
      
      MariaDB [mysql]> select * from global_priv;
      +-----------+-------------+--------------------------------------------------------------------------------------------------------------------------+
      | Host      | User        | Priv                                                                                                                     |
      +-----------+-------------+--------------------------------------------------------------------------------------------------------------------------+
      | localhost | mariadb.sys | {"access":0,"plugin":"mysql_native_password","authentication_string":"","account_locked":true,"password_last_changed":0} |
      | localhost | root        | {"access":18446744073709551615}                                                                                          |
      | bark      | root        | {"access":18446744073709551615}                                                                                          |
      | 127.0.0.1 | root        | {"access":18446744073709551615}                                                                                          |
      | ::1       | root        | {"access":18446744073709551615}                                                                                          |
      | localhost |             | {}                                                                                                                       |
      | bark      |             | {}                                                                                                                       |
      +-----------+-------------+--------------------------------------------------------------------------------------------------------------------------+
      7 rows in set (0.001 sec)
      
      MariaDB [mysql]> select * from proxies_priv;
      +-----------+------+--------------+--------------+------------+---------+---------------------+
      | Host      | User | Proxied_host | Proxied_user | With_grant | Grantor | Timestamp           |
      +-----------+------+--------------+--------------+------------+---------+---------------------+
      | localhost | root |              |              |          1 |         | 2023-07-10 12:12:24 |
      | 127.0.0.1 | root |              |              |          1 |         | 2023-07-10 12:12:24 |
      | ::1       | root |              |              |          1 |         | 2023-07-10 12:12:24 |
      | bark      | root |              |              |          1 |         | 2023-07-10 12:12:24 |
      +-----------+------+--------------+--------------+------------+---------+---------------------+
      
      --auth-root-authentication-method=socket:
      
      MariaDB [mysql]> select * from proxies_priv;
      +-----------+------+--------------+--------------+------------+---------+---------------------+
      | Host      | User | Proxied_host | Proxied_user | With_grant | Grantor | Timestamp           |
      +-----------+------+--------------+--------------+------------+---------+---------------------+
      | localhost | root |              |              |          1 |         | 2023-07-10 12:11:55 |
      | localhost | dan  |              |              |          1 |         | 2023-07-10 12:11:55 |
      | bark      | dan  |              |              |          1 |         | 2023-07-10 12:11:55 |
      +-----------+------+--------------+--------------+------------+---------+---------------------+
      3 rows in set (0.017 sec)
      
      MariaDB [mysql]> select * from global_priv;
      +-----------+-------------+--------------------------------------------------------------------------------------------------------------------------------------------+
      | Host      | User        | Priv                                                                                                                                       |
      +-----------+-------------+--------------------------------------------------------------------------------------------------------------------------------------------+
      | localhost | mariadb.sys | {"access":0,"plugin":"mysql_native_password","authentication_string":"","account_locked":true,"password_last_changed":0}                   |
      | localhost | root        | {"access":18446744073709551615,"plugin":"mysql_native_password","authentication_string":"invalid","auth_or":[{},{"plugin":"unix_socket"}]} |
      | localhost | dan         | {"access":18446744073709551615,"plugin":"mysql_native_password","authentication_string":"invalid","auth_or":[{},{"plugin":"unix_socket"}]} |
      | localhost |             | {}                                                                                                                                         |
      | bark      |             | {}                                                                                                                                         |
      +-----------+-------------+--------------------------------------------------------------------------------------------------------------------------------------------+
      5 rows in set (0.000 sec)
      
      MariaDB [mysql]> show grants;
      +----------------------------------------------------------------------------------------------------------------------------------------+
      | Grants for dan@localhost                                                                                                               |
      +----------------------------------------------------------------------------------------------------------------------------------------+
      | GRANT ALL PRIVILEGES ON *.* TO `dan`@`localhost` IDENTIFIED VIA mysql_native_password USING 'invalid' OR unix_socket WITH GRANT OPTION |
      | GRANT PROXY ON ''@'%' TO 'dan'@'localhost' WITH GRANT OPTION                                                                           |
      +----------------------------------------------------------------------------------------------------------------------------------------+
      8bbe3a3c