1. 04 Aug, 2022 1 commit
    • Marko Mäkelä's avatar
      MDEV-29115 mariabackup.mdev-14447 started failing in a new way · 558f1eff
      Marko Mäkelä authored
      The test mariabackup.mdev-14447 is inserting relatively much
      data while concurrently backing up the data. The test often fails
      on CI systems, possibly due to an inherent race condition between
      the producer (server) and consumer (backup) that would be solved
      if the backup was being produced by the server (MDEV-14992).
      
      The written data volume was increased somewhat by
      commit 4179f93d (MDEV-18976).
      Let us trim the log volume by not writing PAGE_CHECKSUM records
      or row-level undo log records, and make the test cover what was
      intended to cover by creating the table in the system tablespace.
      558f1eff
  2. 03 Aug, 2022 3 commits
  3. 02 Aug, 2022 11 commits
  4. 01 Aug, 2022 12 commits
    • Aleksey Midenkov's avatar
      MDEV-28727 ALTER TABLE ALGORITHM=NOCOPY does not work after upgrade · 1ea5e402
      Aleksey Midenkov authored
      MDEV-20704 changed the rules of how (HA_BINARY_PACK_KEY |
      HA_VAR_LENGTH_KEY) flags are added. Older FRMs before that fix had
      these flags for DOUBLE index. After that fix when ALTER sees such old
      FRM it thinks it cannot do instant alter because of failed
      compare_keys_but_name(): it compares flags against tmp table created
      by ALTER.
      
      MDEV-20704 fix was actually not about DOUBLE type but about
      FIELDFLAG_BLOB which affected DOUBLE. So there is no direct knowledge
      that any other types were not affected.
      
      The proposed fix under CHECK TABLE checks if FRM has
      (HA_BINARY_PACK_KEY | HA_VAR_LENGTH_KEY) flags and was created prior
      MDEV-20704 and if so issues "needs upgrade". When mysqlcheck and
      mysql_upgrade see such status they issue ALTER TABLE FORCE and upgrade
      the table to the version of server.
      1ea5e402
    • Aleksey Midenkov's avatar
      MDEV-21540 Initialization of already inited long unique index on reorganize partition · 231feabd
      Aleksey Midenkov authored
      Handler for existing partition was already index-inited at the
      beginning of copy_partitions().
      
      In the case of REORGANIZE PARTITION we fill new partition by calling
      its ha_write_row() (handler is storage engine of new partition). From
      that we go through the below conditions:
      
          if (this->inited == RND)
            table->clone_handler_for_update();
          handler *h= table->update_handler ? table->update_handler : table->file;
      
      First, the above misses the meaning of this->inited check. Now it is
      new partition and this handler is not inited. So, we assign
      table->file which is ha_partition and is really not known to be inited
      or not. It is supposed (this == table->file), otherwise we are
      out of the logic for using update_handler. This patch adds DBUG_ASSERT
      for that.
      
      Second, we call check_duplicate_long_entries() for table->file and
      that calls ha_partition::index_init() which calls index_init() for
      each partition's handler. But the existing parititions' handlers was
      already inited in copy_partitions() and we fail on assertion.
      
      The fix implies that we don't need check_duplicate_long_entries()
      per-partition as we've already done check_duplicate_long_entries() for
      ha_partition. For REORGANIZE PARTITION that means existing row was
      already checked at previous INSERT/UPDATE commands, so no need to
      check it again (see NOTE in handler::ha_write_row()).
      
      The fix also optimizes ha_update_row() so
      check_duplicate_long_entries_update() is not called per-partition
      considering it was already called for ha_partition. Besides,
      per-partition duplicate check is not really usable.
      231feabd
    • Julius Goryavsky's avatar
      MDEV-28758: Mariabackup copies binary logs to backup directory · 7fb1f919
      Julius Goryavsky authored
      This commit restores defaults and functionality regarding binlogs
      to the way it was prior to MDEV-27524. The mariabackup utility no
      longer saves binlogs files as part of a backup without the --galera-info
      option. However, since we use --galera-info during SST, the behavior
      of mariabackup changes and, in combination with GTIDs support enabled,
      mariabackup transfers one (most recent) binlog file obtained after
      FLUSH BINARY LOGS. In other cases, binlogs are not transferred during
      SST in mariabackup mode. As for SST in the rsync mode, it works the
      same way as before MDEV-27524 - by default it transfers one last
      binlog file.
      
      The --sst-max-binlogs option for mariabackup and the sst_max_binlogs
      parameter in the [sst] / server sections are no longer supported for
      SST via mariabackup.
      7fb1f919
    • Sergei Golubchik's avatar
      only copy buffer pool dump in SST galera mode · 5b415437
      Sergei Golubchik authored
      and then only into the default name, so that the joiner could find it
      5b415437
    • Sergei Golubchik's avatar
      5197519f
    • Marko Mäkelä's avatar
      MDEV-28974: mariadb-backup --prepare fails · 212994f7
      Marko Mäkelä authored
      fil_name_process(): Upon processing a new file name for FILE_RENAME, rename
      the tablespace in deferred_spaces.
      
      recv_sys_t::parse(): Rearrange some code to slightly improve the locality
      of reference. Invoke fil_name_process() with FILE_MODIFY, FILE_DELETE
      or the new case FILE_RENAME, for the new file name of the file.
      
      This should be a regression due to
      commit 86dc7b4d (MDEV-24626)
      and it might also affect the crash recovery of DDL operations.
      212994f7
    • Marko Mäkelä's avatar
      MDEV-13542 fixup: Improve page reorganize · 34cdc006
      Marko Mäkelä authored
      btr_page_reorganize_low(): Restore mtr->set_log_mode() before returning.
      
      innobase_instant_try(): Do not invoke rec_get_offsets() if
      btr_cur_pessimistic_update() failed. The cursor position may be
      invalid.
      34cdc006
    • Marko Mäkelä's avatar
      MDEV-14804 innodb.update_time occasionally fails · 6a3fbfdb
      Marko Mäkelä authored
      Let simplify the test.
      The update_time is stored in the table metadata (dict_table_t);
      it has nothing to do with buffer pool page eviction or replacement.
      6a3fbfdb
    • Sergei Petrunia's avatar
      MDEV-25020: Range optimizer regression for key IN (const, ....) · 90ba999e
      Sergei Petrunia authored
      (addressed review input)
      The issue was introduced by @@optimizer_max_sel_arg_weight code.
      key_or() calls SEL_ARG::update_weight_locally().  That function
      takes O(tree->elements) time.
      Without that call, key_or(big_tree, one_element_tree) would take
      O(log(big_tree)) when one_element_tree doesn't overlap with elements
      of big_tree.
      This means, update_weight_locally() can cause a big slowdown.
      
      The fix:
      1. key_or() actually doesn't need to call update_weight_locally().
        It calls SEL_ARG::tree_delete() and SEL_ARG::insert(). These functions
        update SEL_ARG::weight.
        It also manipulates the SEL_ARG objects directly, but these
        modifications do not change the weight of the tree.
        I've just removed the update_weight_locally() call.
      2. and_all_keys() also calls update_weight_locally(). It manipulates the
        SEL_ARG graph directly.
        Removed that call and added the code to update the SEL_ARG graph weight.
      
      Tests main.range and main.range_not_embedded already contain the queries
      that have test coverage for the affected code.
      90ba999e
    • Norio Akagi's avatar
      MDEV-28315 Fix ASAN stack-buffer-overflow in String::copy_aligned · 84d26f98
      Norio Akagi authored
      Starting since this commit 36cdd5c3
      there is an ASAN stack-buffer-overflow error because we append a NULL
      terminator beyond the length of memory allocated.
      
      Reviewed by: Monty and Nayuta Yanagisawa
      84d26f98
    • Sergei Golubchik's avatar
      in INFORMATION_SCHEMA.ALL_PLUGINS match installed plugins better · 40c2460d
      Sergei Golubchik authored
      look for an installed plugin with the same name _and the same type_
      (in case there are many plugins with the same name and different type,
      which is, technically, possible for built-in plugins).
      40c2460d
    • Marko Mäkelä's avatar
      MDEV-21098: Assertion failure in rec_get_offsets_func() · 63478e72
      Marko Mäkelä authored
      The function rec_get_offsets_func() used to hit ut_error
      due to an invalid rec_get_status() value of a
      ROW_FORMAT!=REDUNDANT record. This fix is twofold:
      We will not only avoid a crash on corruption in this case,
      but we will also make more effort to validate each record
      every time we are iterating over index page records.
      
      rec_get_offsets_func(): Do not crash on a corrupted record.
      
      page_rec_get_nth(): Return nullptr on error.
      
      page_dir_slot_get_rec_validate(): Like page_dir_slot_get_rec(),
      but validate the pointer and return nullptr on error.
      
      page_cur_search_with_match(), page_cur_search_with_match_bytes(),
      page_dir_split_slot(), page_cur_move_to_next():
      Indicate failure in a return value.
      
      page_cur_search(): Replaced with page_cur_search_with_match().
      
      rec_get_next_ptr_const(), rec_get_next_ptr(): Replaced with
      page_rec_get_next_low().
      
      TODO: rtr_page_split_initialize_nodes(), rtr_update_mbr_field(),
      and possibly other SPATIAL INDEX functions fail to properly handle
      errors.
      
      Reviewed by: Thirunarayanan Balathandayuthapani
      Tested by: Matthias Leich
      Performance tested by: Axel Schwenke
      63478e72
  5. 29 Jul, 2022 7 commits
  6. 28 Jul, 2022 4 commits
  7. 27 Jul, 2022 2 commits