1. 30 Jun, 2020 1 commit
    • Eugene Kosov's avatar
      speed up fil_validate() in debug builds · 17109001
      Eugene Kosov authored
      This function is very common in a debug build. I can even see it in
      profiler.
      
      This patch reduces execution time of fil_validate() from
      8948ns
      8367ns
      8650ns
      8906ns
      8448ns
      
      to
      260ns
      232ns
      403ns
      275ns
      169ns
      in my environment.
      
      The trick is a faster fil_space_t iteration. Hash table
      is typically initialized with a size of 50,000. And looping through
      it is slow. Slower, than iterating an exact amount of fil_space_t
      which is typically less than ten.
      
      Only debug builds are affected.
      17109001
  2. 24 Jun, 2020 3 commits
  3. 23 Jun, 2020 5 commits
    • Jan Lindström's avatar
      Test case cleanups. · eba91897
      Jan Lindström authored
      eba91897
    • MikkoJaakola's avatar
      MDEV-21759 galera.galera_parallel_autoinc_manytrx sporadic failures. · 51c8289e
      MikkoJaakola authored
      The galera.galera_parallel_autoinc_manytrx mtr test opens and runs test
      scenario through 3 connections to node 1 and one connection to node 2.
      In the test initialization phase, the test creates two tables 't1' and 'ten'
      and then creates a stored procedure 'p1' to operate on these tables.
      These 3 create DDL statements are issued through same connection to node 1.
      
      In the next test phase, the mtr script uses send command to launch the call
      for the p1 stored procedure through all 3 connections to node 1 and through
      one connection to node 2. As the mtr send command is asynchronous,
      this test phase is non blocking and fast operation.
      Now, if the replication between nodes is slow, it may happen that the
      initialization phase DDL statements have not been received or have not been
      fully applied in node 2. Therefore there is no guarantee that the test tables
      and the stored procedure have been created in node 2. Yet, the test is trying
      to call p1 in node 2.
      
      In the failure case error logs, there is error message
      "MTR failed: query 'reap' failed: 1305: PROCEDURE test.p1 does not exist"
      
      The reap command through connection to node 2, is the first place where test
      execution may observe that test tables and/or stored procedure are not yet
      created in node 2.
      
      The fix in this commit adds a wait condition in connection to node 2, to wait
      until the stored procedure is created before calling the stored procedure.
      The wait is implemented by looking in information_schema.routines for the p1
      stored procedure.
      51c8289e
    • Alexey Yurchenko's avatar
      Fix include statements in galera_ipv6_mariabackup_section and · 3ddb0805
      Alexey Yurchenko authored
      galera_ipv6_mariabackup MTR tests
      3ddb0805
    • Jan Lindström's avatar
      MDEV-22125 : galera.galera_drop_multi MTR failed: InnoDB: MySQL is trying to... · 5d7e067c
      Jan Lindström authored
      MDEV-22125 : galera.galera_drop_multi MTR failed: InnoDB: MySQL is trying to drop database `fts`.`` though there are still open handles
      
      MDEV-22140 galera.galera_drop_database MTR failed: InnoDB: MySQL is trying to drop database `fts`.`` though there are still open handles
      
      Add wait conditions to wait that all operations are done in both
      nodes.
      5d7e067c
    • Jan Lindström's avatar
      MDEV-20928 : Galera test failure on galera.galera_var_innodb_disallow_writes:... · 319886ec
      Jan Lindström authored
      MDEV-20928 : Galera test failure on galera.galera_var_innodb_disallow_writes: Result length mismatch
      
      Add wait_conditions to force desired execution.
      319886ec
  4. 22 Jun, 2020 3 commits
    • Alexander Barkov's avatar
      MDEV-22976 CAST(JSON_EXTRACT() AS DECIMAL) does not handle boolean values · 30903c37
      Alexander Barkov authored
      Item_func_json_extract did not implement val_decimal(),
      so CAST(JSON_EXTRACT('{"x":true}', '$.x') AS DECIMAL) erroneously
      returned 0 with a warning because of convertion from the string "true"
      to decimal.
      
      Implementing val_decimal(), so boolean values are correctly handled.
      30903c37
    • Aleksey Midenkov's avatar
      MDEV-22179 rr support for mtr review · 009ef36d
      Aleksey Midenkov authored
      * --rr-arg instead of --rr_option
      * Bootstrap saved to rr.bootstrap
      * Replication slaves are saved to rr.N dirs
      * Perl coding fixes
      009ef36d
    • Sachin's avatar
      MDEV-22179 rr(record and replay) support for mtr · 804ed12e
      Sachin authored
      This feature adds the support for rr in mtr. These 2 options are added
      --rr         run   the mysqld in rr record mode
      --rr_option= run the rr with custom record option, for multiple
                   options use --rr_option= for each option.
                   For example
                    ./mtr main.view --rr_option=-h --rr_option=-u --rr_option=-c=23
      --boot-rr    run the mysqld performing bootstrap in rr record mode
      
      Recording are stored in mysql-test/var/rr folder.
      To run recording please run
      rr replay var/rr/mysql-X
      
      Limitations
      Restart will create a new recording.
      Repeat will work on same recording , So might be harder to debug.
      If test create the multiple instance of mariadb all will be stored in var/rr
      804ed12e
  5. 18 Jun, 2020 1 commit
    • Thirunarayanan Balathandayuthapani's avatar
      MDEV-22811 DDL fails to drop and re-create FTS index · e30c4cfc
      Thirunarayanan Balathandayuthapani authored
      Problem:
      ========
      - InnoDB clears the fts resource when last FTS index is being dropped
      if the table has user defined FTS_DOC_ID. While creating the new fts
      index, InnoDB expects to have FTS resources.
      
      Fix:
      ===
      fts_drop_index(): Removed the fts resource clear.
      
      fts_clear_all(): Clear the fts resource when there are no new fts
      index to be added.
      
      commit_cache_norebuild(), row_merge_drop_indexes():
      Tries to call fts resource after removing associated fts index
      from table object
      e30c4cfc
  6. 17 Jun, 2020 1 commit
    • Alexander Barkov's avatar
      MDEV-21695 Server crashes in TABLE::evaluate_update_default_function upon UPDATE on temporary table · b46b7144
      Alexander Barkov authored
      copy_data_between_tables() sets to->s->default_fields to 0, as a part
      of the code disabling ON UPDATE actions for all old fields
      (so ON UPDATE is enable only for new fields during copying).
      After the actual copying, copy_data_between_tables() did not restore
      to->s->default_fields to the original value. As a result, the
      TABLE_SHARE to->s was left in a wrong state after copy_data_between_tables()
      and further open_table_from_share() using this TABLE_SHARE did not
      populate TABLE::default_field, which further made
      TABLE::evaluate_update_default_function() crash on access to NULL
      pointer.
      
      Fix:
      Changing copy_data_between_tables() to restore to->s->default_fields
      to its original value after the copying loop.
      b46b7144
  7. 16 Jun, 2020 1 commit
  8. 15 Jun, 2020 1 commit
  9. 14 Jun, 2020 3 commits
    • Sergei Petrunia's avatar
      MDEV-22779: Crash: Prepared Statement ..., part #2. · e623d247
      Sergei Petrunia authored
      For the sake of completeness, call sync_clones in reset_stmt_params, too.
      e623d247
    • Sergei Petrunia's avatar
      MDEV-22779: Crash: Prepared Statement with a '?' parameter inside a re-used CTE · 21e79331
      Sergei Petrunia authored
      When a prepared statement parameter '?' is used in a CTE that is used
      multiple times, the following happens:
      - The CTE definition is re-parsed multiple times.
      - There are multiple Item_param objects referring to the same "?" in
      the original query.
      - Prepared_statement::param has a pointer to the first of them, the
        others are "clones".
      - When prepared statement parameter gets the value, it should be passed
        over to clones with param->sync_clones() call.
      
      This call is made in insert_params(), etc. It was not made in
      insert_params_with_log().
      
      This would cause Item_param to not have any value which would confuse
      the query optimizer.
      
      Added the missing call.
      21e79331
    • Marko Mäkelä's avatar
      MDEV-22889: Disable innodb.innodb_force_recovery_rollback · 2cd6afb0
      Marko Mäkelä authored
      The test case that was added for MDEV-21217
      (commit b68f1d84)
      should have only two possible outcomes for the locking SELECT statement:
      
      (1) The statement is blocked, and the test will eventually fail
      with a lock wait timeout. This is what I observed when the
      code fix for MDEV-21217 was missing.
      
      (2) The lock conflict will ensure that the statement will execute
      after the rollback has completed, and an empty table will be observed.
      This is the expected outcome with the recovery fix.
      
      What occasionally happens (in some of our CI environments only, so far)
      is that the locking SELECT will return all 1,000 rows of the table that
      had been inserted by the transaction that was never supposed to be
      committed. One possibility is that the transaction was unexpectedly
      committed when the server was killed.
      
      Let us disable the test until the reason of the failure has been
      determined and addressed.
      2cd6afb0
  10. 13 Jun, 2020 1 commit
  11. 12 Jun, 2020 1 commit
  12. 11 Jun, 2020 3 commits
  13. 10 Jun, 2020 5 commits
  14. 09 Jun, 2020 2 commits
    • Daniel Black's avatar
      innodb: dict_mem_table_add_col - compile warning fix argument 1 null where... · 90274278
      Daniel Black authored
      innodb: dict_mem_table_add_col - compile warning fix argument 1 null where non-null expected (#1584)
      
      cd /build-mariadb-server-10.5-mysql_release/storage/innobase && /usr/bin/powerpc64le-linux-gnu-g++  -DBTR_CUR_ADAPT -DBTR_CUR_HASH_ADAPT -DCOMPILER_HINTS -DDBUG_TRACE -DEMBEDDED_LIBRARY -DHAVE_BZIP2=1 -DHAVE_C99_INITIALIZERS -DHAVE_CONFIG_H -DHAVE_FALLOC_PUNCH_HOLE_AND_KEEP_SIZE=1 -DHAVE_IB_LINUX_FUTEX=1 -DHAVE_LZ4=1 -DHAVE_LZ4_COMPRESS_DEFAULT=1 -DHAVE_LZMA=1 -DHAVE_NANOSLEEP=1 -DHAVE_OPENSSL -DHAVE_SCHED_GETCPU=1 -DLINUX_NATIVE_AIO=1 -DMUTEX_EVENT -DWITH_INNODB_DISALLOW_WRITES -D_FILE_OFFSET_BITS=64 -Iwsrep-lib/include -Iwsrep-lib/wsrep-API/v26 -I/home/dan/build-mariadb-server-10.5-mysql_release/include -Istorage/innobase/include -Istorage/innobase/handler -Ilibbinlogevents/include -Itpool -Iinclude -Isql  -pie -fPIC -Wl,-z,relro,-z,now -fstack-protector --param=ssp-buffer-size=4 -Wconversion -Wno-sign-conversion -O3 -g -static-libgcc -fno-omit-frame-pointer -fno-strict-aliasing -Wno-uninitialized -D_FORTIFY_SOURCE=2 -DDBUG_OFF -Wall -Wextra -Wformat-security -Wno-format-truncation -Wno-init-self -Wno-nonnull-compare -Wno-unused-parameter -Woverloaded-virtual -Wnon-virtual-dtor -Wvla -Wwrite-strings   -DUNIV_LINUX -D_GNU_SOURCE=1 -fPIC -fvisibility=hidden -std=gnu++11 -o CMakeFiles/innobase_embedded.dir/dict/dict0load.cc.o -c storage/innobase/dict/dict0load.cc
      storage/innobase/dict/dict0load.cc: In function ‘const char* dict_process_sys_columns_rec(mem_heap_t*, const rec_t*, dict_col_t*, table_id_t*, const char**, ulint*)’:
      storage/innobase/dict/dict0load.cc:1653:26: warning: argument 1 null where non-null expected [-Wnonnull]
          dict_mem_table_add_col(table, heap, name, mtype,
          ~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~
                   prtype, col_len);
                   ~~~~~~~~~~~~~~~~
      In file included from storage/innobase/include/dict0dict.h:32:0,
                       from storage/innobase/include/btr0pcur.h:30,
                       from storage/innobase/dict/dict0load.cc:31:
      storage/innobase/include/dict0mem.h:323:1: note: in a call to function ‘void dict_mem_table_add_col(dict_table_t*, mem_heap_t*, const char*, ulint, ulint, ulint)’ declared here
       dict_mem_table_add_col(
       ^~~~~~~~~~~~~~~~~~~~~~
      90274278
    • rucha174's avatar
      MDEV-22830: SQL_CALC_FOUND_ROWS not working properly for single SELECT for DUAL · 44339123
      rucha174 authored
      In case of SELECT without tables which returns either 0 or 1 rows,
      JOIN::exec_inner() did not check if the flag representing SQL_CALC_FOUND_ROWS
      is set or not and send_records was direclty assigned 0. So SELECT FOUND_ROWS()
      was giving 0 in the output. Now it checks if the flag is set, if it is set
      send_record=1 else 0. 1 is the number of rows that could have been sent
      to the client if the SELECT query had SQL_CALC_FOUND_ROWS.
      It is 0 when no rows were sent because the SELECT query did not have
      SQL_CALC_FOUND_ROWS.
      44339123
  15. 08 Jun, 2020 3 commits
    • Sujatha's avatar
      MDEV-22717: Conditional jump or move depends on uninitialised value(s) in... · e1045a76
      Sujatha authored
      MDEV-22717: Conditional jump or move depends on uninitialised value(s) in find_uniq_filename(char*, unsigned long)
      
      Fix:
      ===
      Initialize 'number' variable to '0'.
      e1045a76
    • Ian Gilfillan's avatar
      Client spelling mistakes · 4f488569
      Ian Gilfillan authored
      4f488569
    • Marko Mäkelä's avatar
      MDEV-22827 InnoDB: Failing assertion: purge_sys->n_stop == 0 · f458b40f
      Marko Mäkelä authored
      When MDEV-22769 introduced srv_shutdown_state=SRV_SHUTDOWN_INITIATED in
      commit efc70da5
      we forgot to adjust a few checks for SRV_SHUTDOWN_NONE.
      
      In the initial shutdown step, we are waiting for the background
      DROP TABLE queue to be processed or discarded. At that time,
      some background tasks (such as buffer pool resizing or dumping
      or encryption key rotation) may be terminated, but others must
      remain running normally.
      
      srv_purge_coordinator_suspend(), srv_purge_coordinator_thread(),
      srv_start_wait_for_purge_to_start(): Treat SRV_SHUTDOWN_NONE
      and SRV_SHUTDOWN_INITIATED equally.
      f458b40f
  16. 06 Jun, 2020 6 commits
    • Varun Gupta's avatar
      MDEV-22728: SIGFPE in Unique::get_cost_calc_buff_size from... · d218d1aa
      Varun Gupta authored
      MDEV-22728: SIGFPE in Unique::get_cost_calc_buff_size from prepare_search_best_index_intersect on optimized builds
      
      For low sort_buffer_size, in the cost calculation of using the Unique object the elements in the tree were evaluated to 0, make sure to have atleast 1 element in the Unique tree.
      
      Also for the function Unique::get allocate memory for atleast MERGEBUFF2+1 keys.
      d218d1aa
    • Igor Babaev's avatar
      MDEV-22748 MariaDB crash on WITH RECURSIVE large query · e9dbbf11
      Igor Babaev authored
      This bug is the same as the bug MDEV-17024. The crashes caused by these
      bugs were due to premature cleanups of the unit specifying recursive CTEs
      that happened in some cases when there were several outer references the
      same recursive CTE.
      The problem of premature cleanups for recursive CTEs could be already
      resolved by the correction in TABLE_LIST::set_as_with_table() introduced
      in this patch. ALL other changes introduced by the patches for MDEV-17024
      and MDEV-22748 guarantee that this clean-ups are performed as soon as
      possible: when the select containing the last outer reference to a
      recursive CTE is being cleaned up the specification of the recursive CTE
      should be cleaned up as well.
      e9dbbf11
    • Marko Mäkelä's avatar
      MDEV-22817: Skip the test in --embedded · be0c46eb
      Marko Mäkelä authored
      be0c46eb
    • Marko Mäkelä's avatar
      MDEV-22817: Add a test case · 187b9c92
      Marko Mäkelä authored
      187b9c92
    • Marko Mäkelä's avatar
      Merge 10.1 into 10.2 · 0df01ccb
      Marko Mäkelä authored
      0df01ccb
    • Marko Mäkelä's avatar
      MDEV-22818 Server crash on corrupted ROW_FORMAT=COMPRESSED page · 1bd5b75c
      Marko Mäkelä authored
      page_zip_fields_decode(): Do not dereference index=NULL.
      Instead, return NULL early. The only caller does not care
      about the values of output parameters in that case.
      
      This bug was introduced in MySQL 5.7.6 by
      mysql/mysql-server@9eae0edb7a8e4004328e61157f5f3b39cebe1b2b
      and in MariaDB 10.2.2 by
      commit 2e814d47.
      
      Thanks to my son for pointing this out after investigating
      the output of a static analysis tool.
      1bd5b75c