1. 17 Aug, 2021 1 commit
    • Vlad Lesin's avatar
      MDEV-26206 gap lock is not set if implicit lock exists · 2d259187
      Vlad Lesin authored
      If lock type is LOCK_GAP or LOCK_ORDINARY, and the transaction holds
      implicit lock for the record, then explicit gap-lock will not be set for
      the record, as lock_rec_convert_impl_to_expl() returns true and
      lock_rec_convert_impl_to_expl() bypasses lock_rec_lock() call.
      
      The fix converts explicit lock to implicit one if requested lock type is
      not LOCK_REC_NOT_GAP.
      
      innodb_information_schema test result is also changed as after the fix
      the following statements execution:
      
      SET autocommit=0;
      INSERT INTO t1 VALUES (5,10);
      SELECT * FROM t1 FOR UPDATE;
      
      leads to additional gap lock requests.
      2d259187
  2. 05 Aug, 2021 2 commits
    • Daniel Bartholomew's avatar
      bump the VERSION · d9526ae6
      Daniel Bartholomew authored
      d9526ae6
    • Yongxin Xu's avatar
      MDEV-24523 Execution of JSON_REPLACE failed on Spider · fa6eaead
      Yongxin Xu authored
      JSON_REPLACE() function executed with an error on Spider SE.
      This patch fixes the problem, and it also fixes the MDEV-24541.
      
      The problem is that Item_func_json_insert::func_name() returns
      the wrong function name "json_update". 
      The Spider SE reconstructs a query based on the return value
      in some cases. Thus, if the return value is wrong, the Spider SE
      may generate a wrong query.
      fa6eaead
  3. 02 Aug, 2021 3 commits
  4. 31 Jul, 2021 1 commit
    • Sergei Golubchik's avatar
      MDEV-23752 SHOW EXPLAIN FOR thd waits for sleep · 2cdf8a93
      Sergei Golubchik authored
      fix main.processlist_notembedded test
      
      * before EXPLAINing `select sleep` wait for select to start
        (fixes "Target is not running an EXPLAINable command")
      * after killing sleep, wait for it to die
        (fixes test failures on --repeat when old sleep shows on a test rerun)
      
      * unify with 10.3, copy minor changes from there
        (`--echo End of 5.5` vs `--echo # End of 5.5`, etc)
      2cdf8a93
  5. 29 Jul, 2021 4 commits
    • Oleksandr Byelkin's avatar
    • Oleksandr Byelkin's avatar
      Merge branch '10.2' into 10.3 · 83d7e4fa
      Oleksandr Byelkin authored
      83d7e4fa
    • Nikita Malyavin's avatar
      MDEV-20154 Assertion `len <= col->len | ...` failed in row_merge_buf_add · 22709897
      Nikita Malyavin authored
      len was containing garbage, since vctempl->mysql_col_offset was
      containing old value while calling row_mysql_store_col_in_innobase_format
      from innobase_get_computed_value().
      
      It was not updated after the first ALTER TABLE call, because it's INPLACE
      logic considered there's nothing to update, and exited immediately from
      ha_innobase::inplace_alter_table().
      
      However, vcol metadata needs an update, since vcols structure is changed
      in mysql record.
      
      The regression was introduced by 12614af1. There, refcount==1 condition
      was removed, which turned out to be crucial, though racy. The idea was to
      update vc_templ after each (sequencing) ALTER TABLE.
      
      We should do the same another way, and there may be a plenty of solutions,
      but the simplest one is to add a following condition:
        if vcol structure is changed, drop vc_templ; it will be recreated on next
        ha_innobase::open() call.
      
      in prepare_inplace_alter_table. It is safe, since innodb inplace changes
      require at least HA_ALTER_INPLACE_SHARED_LOCK_AFTER_PREPARE, which
      guarantee MDL_EXCLUSIVE on this stage.
      
      alter_templ_needs_rebuild() also has to track the columns not indexed, to
      keep vc_templ correct.
      
      Note that vc_templ is always kept constructed and available after
      ha_innobase::open() call, even on INSERT, though no virtual columns are
      evaluated during that statement
      inside innodb.
      
      In the test case suplied, it will be recreated on the second ALTER TABLE.
      22709897
    • Marko Mäkelä's avatar
      Cleanup: Remove redundant conditions · 0e8981ef
      Marko Mäkelä authored
      ha_innobase::prepare_inplace_alter_table(): Remove always-true conditions.
      Near the start of the function, we would already have returned if
      no ALTER TABLE operation flags were set that would require special
      action from InnoDB.
      
      It turns out that the conditions were redundant already when they were
      introduced in mysql/mysql-server@241387a2b6b61fb8a4f78dc4ad0aaa289400c694
      and in commit 068c6197.
      
      Thanks to Nikita Malyavin for noticing this.
      0e8981ef
  6. 28 Jul, 2021 6 commits
  7. 27 Jul, 2021 12 commits
    • Sergei Golubchik's avatar
      latest C/C · dfadc903
      Sergei Golubchik authored
      dfadc903
    • Sergei Golubchik's avatar
      MDEV-7209 mroonga storage engine fails to build on OpenBSD · 65e3d085
      Sergei Golubchik authored
      rename files `version` -> `version_full`
      65e3d085
    • Sergei Golubchik's avatar
    • Sergei Golubchik's avatar
      8.45 · 4683ce82
      Sergei Golubchik authored
      4683ce82
    • Sergei Golubchik's avatar
      a32373b6
    • Nikita Malyavin's avatar
      add const qualifiers to sys_var::value_ptr functions and fix const casts · 6ed47508
      Nikita Malyavin authored
      This is important since Sys_var_typelib and its descendants return
      pointers to constant symbols from *_value_ptr, which are situated in
      write-protected-memory.
      
      * functions const-qualified:
        - value_ptr
        - session_value_ptr
        - global_value_ptr
        - default_value_ptr
        - Sys_var_vers_asof::value_ptr
        - other minor private ones
      
      * remove C-style typecasts when it discards qualifiers
      6ed47508
    • Nikita Malyavin's avatar
      MDEV-16026 MDEV-16481 refactor Sys_var_vers_asof · c6bff469
      Nikita Malyavin authored
      MDEV-16026: Forbid global system_versioning_asof in non-default time zone
      
      * store `system_versioning_asof` in unix time;
      * both session and global vars are processed in session timezone;
      * setting `default` does not copy global variable anymore. Instead, it sets
        system_time to SYSTEM_TIME_UNSPECIFIED, which means that no 'AS OF' time
        is applied and `now()` can be assumed
      
      As a regression, we cannot assign values below 1970 (UTC) anymore
      
      MDEV-16481: set global system_versioning_asof=sf() crashes in specific case
      
      * sys_vars.h: add `MYSQL_TIME` field to `set_var::save_result`
      * sys_vars.ic: get rid of calling `var->value->get_date()` from
       `Sys_var_vers_asof::update()`
      * versioning.sysvars: add test; remove double warning
      
      refactor Sys_var_vers_asof
      
      * inherit from sys_var rather than Sys_var_enum
      * remove junk "DEFAULT" keyword. There is DEFAULT in SQL grammar for it.
      * make all conversions in check() to avoid possible errors
      * avoid double var->value evaluation, which could
        consequence in undefined behavior
      c6bff469
    • Marko Mäkelä's avatar
      Merge 10.2 into 10.3 · f50eb0d3
      Marko Mäkelä authored
      f50eb0d3
    • 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
  8. 26 Jul, 2021 5 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
    • Sergei Golubchik's avatar
      dissapear -> disappear · 2575eaa5
      Sergei Golubchik authored
      2575eaa5
    • 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
  9. 25 Jul, 2021 1 commit
    • Nayuta Yanagisawa's avatar
      MDEV-24517 follow-up: Fix for test with --ps-protocol · f52d3936
      Nayuta Yanagisawa authored
      Tests for the Spider storage engine often use the following idiom:
      
      --let $command=CREATE TABLE t1 (...);CREATE TABLE t2 (...); ...
      --eval $command
      
      However, the idiom seems to work in the normal protocol, but fails
      in the prepared statement (ps) protocol.
      As testing CREATE TABLE statements in the ps protocol, we wrap the
      idiom by --disable_ps_protocol and --enable_ps_protocol.
      f52d3936
  10. 24 Jul, 2021 5 commits