1. 10 Aug, 2023 4 commits
    • Oleksandr Byelkin's avatar
      Merge branch '10.6' into 10.9 · 3e0009dc
      Oleksandr Byelkin authored
      3e0009dc
    • Oleksandr Byelkin's avatar
      Merge branch '10.5' into 10.6 · 0d16eb35
      Oleksandr Byelkin authored
      0d16eb35
    • Oleksandr Byelkin's avatar
      Merge branch '10.4' into 10.5 · 7e650253
      Oleksandr Byelkin authored
      7e650253
    • Monty's avatar
      MDEV-31893 Valgrind reports issues in main.join_cache_notasan · 2aea9387
      Monty authored
      This is also related to
      MDEV-31348 Assertion `last_key_entry >= end_pos' failed in virtual bool
                 JOIN_CACHE_HASHED::put_record()
      
      Valgrind exposed a problem with the join_cache for hash joins:
      =25636== Conditional jump or move depends on uninitialised value(s)
      ==25636== at 0xA8FF4E: JOIN_CACHE_HASHED::init_hash_table()
                (sql_join_cache.cc:2901)
      
      The reason for this was that avg_record_length contained a random value
      if one had used SET optimizer_switch='optimize_join_buffer_size=off'.
      
      This causes either 'random size' memory to be allocated (up to
      join_buffer_size) which can increase memory usage or, if avg_record_length
      is less than the row size, memory overwrites in thd->mem_root, which is
      bad.
      
      Fixed by setting avg_record_length in JOIN_CACHE_HASHED::init()
      before it's used.
      
      There is no test case for MDEV-31893 as valgrind of join_cache_notasan
      checks that.
      I added a test case for MDEV-31348.
      2aea9387
  2. 09 Aug, 2023 2 commits
    • Oleksandr Byelkin's avatar
      Merge branch '10.6' into 10.9 · f692b2b6
      Oleksandr Byelkin authored
      # Conflicts:
      #	mysql-test/main/sp.result
      #	mysql-test/main/sp.test
      f692b2b6
    • Sergei Petrunia's avatar
      MDEV-31877: ASAN errors in Exec_time_tracker::get_cycles with innodb slow log verbosity · 8d210fc2
      Sergei Petrunia authored
      Remove redundant delete_explain_query() calls in
      
      sp_instr_set::exec_core(), sp_instr_set_row_field::exec_core(),
      sp_instr_set_row_field_by_name::exec_core().
      
      These calls are made before the SP instruction's tables are
      "closed" by close_thread_tables() call.
      
      When we call close_thread_tables() after that, we no longer
      can collect engine's counter variables, as they use the data
      structures that are located in the Explain Data Structures.
      
      Also, these delete_explain_query() calls are redundant, as
      sp_lex_keeper::reset_lex_and_exec_core() has another
      delete_explain_query() call, which is located in the right
      location after the close_thread_tables() call.
      8d210fc2
  3. 08 Aug, 2023 4 commits
  4. 07 Aug, 2023 2 commits
  5. 06 Aug, 2023 1 commit
  6. 04 Aug, 2023 8 commits
  7. 03 Aug, 2023 1 commit
    • Oleg Smirnov's avatar
      MDEV-31743 Server crash in store_length, assertion failure in... · 8e8c020f
      Oleg Smirnov authored
      MDEV-31743 Server crash in store_length, assertion failure in Type_handler_string_result::sort_length
      
      After MDEV-21580 the truncation of SORT_FIELD::length
        set_if_smaller(sortorder->length, thd->variables.max_sort_length)
      
      became conditional:
        if (is_variable_sized())
          set_if_smaller(length, thd->variables.max_sort_length)
      
      To provide correct functioning of is_variable_sized() SORT_FIELD::type
      must be set properly. This commit adds the necessary initialization
      of SORT_FIELD::type to JOIN_TAB::remove_duplicates() as it is done
      in filesort's sortlength() function.
      
      DBUG_ASSERT is added to sortlength() just in case to prevent
      a possible uint32 overflow
      8e8c020f
  8. 02 Aug, 2023 4 commits
    • Marko Mäkelä's avatar
      MDEV-31827 InnoDB multi-batch recovery stops prematurely · a89527e1
      Marko Mäkelä authored
      recv_scan_log(): On recv_sys_t::PREMATURE_EOF, keep reading more log
      if recv_sys.lsn < recv_sys.scanned_lsn.
      
      recv_recovery_from_checkpoint_start(): Add a safety check to abort
      crash recovery if recv_sys.lsn is not recv_sys.scanned_lsn.
      
      This fixes a serious database corruption bug that was introduced by
      commit 2f9e2647 (MDEV-29911).
      a89527e1
    • Sergei Golubchik's avatar
      MDEV-31822 ALTER TABLE ENGINE=x started failing instead of producing warning... · 61acb436
      Sergei Golubchik authored
      MDEV-31822 ALTER TABLE ENGINE=x started failing instead of producing warning on unsupported TRANSACTIONAL=1
      
      make TRANSACTIONAL table option behave similar to other engine-defined
      table options. If the engine doesn't suport it:
      * if specified expicitly in CREATE or ALTER - it's ER_UNKNOWN_OPTION
      * an error or a warning depending on sql_mode IGNORE_BAD_TABLE_OPTIONS
      * in ALTER TABLE from the engine that suppors it to the engine that
        doesn't - silently preserved (no warning)
      * it is commented out in SHOW CREATE unless IGNORE_BAD_TABLE_OPTIONS
      61acb436
    • Sergei Golubchik's avatar
      MDEV-18114 Foreign Key Constraint actions don't affect Virtual Column · da09ae05
      Sergei Golubchik authored
      * invoke check_expression() for all vcol_info's in
        mysql_prepare_create_table() to check for FK CASCADE
      * also check for SET NULL and SET DEFAULT
      * to check against existing FKs when a vcol is added in ALTER TABLE,
        old FKs must be added to the new_key_list just like other indexes are
      * check columns recursively, if vcol1 references vcol2,
        flags of vcol2 must be taken into account
      * remove check_table_name_processor(), put that logic under
        check_vcol_func_processor() to avoid walking the tree twice
      da09ae05
    • Marko Mäkelä's avatar
      MDEV-31791: Recovery on memory-mapped log occasionally fails · 8760fe11
      Marko Mäkelä authored
      recv_ring::copy_if_needed(): If the record wraps around the
      memory-mapped ib_logfile0, do copy it also if len==0
      (the record consists only of a header, like FREE_PAGE and INIT_PAGE
      records do).
      
      recv_sys_t::parse(): Invoke recv_ring::copy_if_needed() for INIT_PAGE
      and FREE_PAGE records, so that if these records wrap around the
      memory-mapped ib_logfile0, they will be correctly copied to
      recv_sys.pages.
      
      Together with commit 0d175968 (MDEV-31354)
      this fixes occasional failures of the test innodb.recovery_memory.
      8760fe11
  9. 01 Aug, 2023 14 commits
    • Sergei Golubchik's avatar
      cleanup: key->key_create_info.check_for_duplicate_indexes -> key->old · ab1191c0
      Sergei Golubchik authored
      mark old keys in the ALTER TABLE with the `old` flag, not with
      the `key_create_info.check_for_duplicate_indexes`.
      
      This allows to mark old foreign keys too.
      ab1191c0
    • Sergei Golubchik's avatar
      cleanup: Item_field::check_vcol_func_processor() · 0c9794d0
      Sergei Golubchik authored
      to declutter Item_field::check_vcol_func_processor(), move alter_info
      specific part of it into Alter_info::check_vcol_field()
      0c9794d0
    • Sergei Golubchik's avatar
      cleanup: put db/table_name into Alter_info · b8233b38
      Sergei Golubchik authored
      also, prefer Lex_table_name and Lex_ident over LEX_CSTRING
      b8233b38
    • Sergei Golubchik's avatar
      cleanup: reorder enum_fk_option · 2f6d464f
      Sergei Golubchik authored
      2f6d464f
    • Sergei Golubchik's avatar
      cleanup: remove unused keyinfo flag · f7a9f446
      Sergei Golubchik authored
      HA_UNIQUE_CHECK was
      * only used internally by MyISAM/Aria
      * only used for internal temporary tables (for DISTINCT)
      * never saved in frm
      * saved in MYI/MAD but only for temporary tables
      * only set, never checked
      
      it's safe to remove it and free the bit (there are only 16 of them)
      f7a9f446
    • Sergei Golubchik's avatar
      cleanup: invert return code · 383baa81
      Sergei Golubchik authored
      383baa81
    • Sergei Golubchik's avatar
      cleanup: remove redundant arguments · 010f535b
      Sergei Golubchik authored
      010f535b
    • Sergei Golubchik's avatar
      cleanup: cosmetic changes · bf5cc31d
      Sergei Golubchik authored
      bf5cc31d
    • Sergei Petrunia's avatar
      MDEV-31764: ASAN use-after-poison in trace_engine_stats in ANALYZE JSON · 691e964d
      Sergei Petrunia authored
      Do not attempt to produce "r_engine_stats" on the temporary (=work) tables.
      These tables may be
      - re-created during the query execution
      - freed during the query execution (This is done e.g. in JOIN::cleanup(),
        before we produce ANALYZE FORMAT=JSON output).
      
      - (Also, make save_explain_data() functions not set handler_for_stats
        to point to handler objects that do not have handler->handler_stats set.
        If the storage engine is not collecting handler_stats, it will not have
        them when we're producing ANALYZE FORMAT=JSON output, either).
      691e964d
    • Oleksandr Byelkin's avatar
      New CC 3.3 · 138717b1
      Oleksandr Byelkin authored
      138717b1
    • Oleksandr Byelkin's avatar
      Merge branch '10.5' into 10.6 · 6bf8483c
      Oleksandr Byelkin authored
      6bf8483c
    • Marko Mäkelä's avatar
      MDEV-27593: Crashing on I/O error is unhelpful · 72928e64
      Marko Mäkelä authored
      buf_page_t::write_complete(), buf_page_write_complete(),
      IORequest::write_complete(): Add a parameter for passing
      an error code. If an error occurred, we will release the
      io-fix, buffer-fix and page latch but not reset the
      oldest_modification field. The block would remain in
      buf_pool.LRU and possibly buf_pool.flush_list, to be written
      again later, by buf_flush_page_cleaner(). If all page writes
      start consistently failing, all write threads should eventually
      hang in log_free_check() because the log checkpoint cannot
      be advanced to make room in the circular write-ahead-log ib_logfile0.
      
      IORequest::read_complete(): Add a parameter for passing
      an error code. If a read operation fails, we report the error
      and discard the page, just like we would do if the page checksum
      was not validated or the page could not be decrypted.
      This only affects asynchronous reads, due to linear or random read-ahead
      or crash recovery. When buf_page_get_low() invokes buf_read_page(),
      that will be a synchronous read, not involving this code.
      
      This was tested by randomly injecting errors in
      write_io_callback() and read_io_callback(), like this:
      
        if (!ut_rnd_interval(100))
          cb->m_err= 42;
      72928e64
    • Marko Mäkelä's avatar
      MDEV-31816 fixup: Relax a debug assertion · 96cfdb87
      Marko Mäkelä authored
      buf_LRU_free_page(): The block may also be in the IBUF_EXIST state
      when executing the test innodb.innodb_bulk_create_index_debug.
      96cfdb87
    • Oleksandr Byelkin's avatar
      Merge branch '10.4' into 10.5 · 65405308
      Oleksandr Byelkin authored
      65405308