1. 12 Sep, 2022 1 commit
    • Daniel Black's avatar
      MDEV-25341: innodb buffer pool soft decommit of memory · 16c97187
      Daniel Black authored
      When InnoDB isn't using memory its polite to other system
      processes to allow that memory to be used.
      
      Create buf_page_t::set_os_unused, to madvise(MADV_FREE)/
      DiscardVirtualMemory innodb buffer pool pages to keep
      virtual mapping but allow kernel to reclaim memory.
      
      set_os_unused is called by buf_LRU_block_free_non_file_page
      for flushing deallocations to free up memory.
      
      set_os_used is called by buf_block_t::initialise (used by
      buf_page_create_low and buf_LRU_get_free_only.
      
      Move MSan (memory sanitizer) directive to be associated with
      set_os_{un,}used so that the correctness can be determined by
      instrumentation and test cases rather than relying on OS behaviour
      at specific times.
      
      Remove existing page information poisoning in
      buf_LRU_block_free_non_file_page.
      
      Tested by: Matthias Leich
      Reviewer: Marko Mäkelä
      Windows Review: Vladislav Vaintroub
      16c97187
  2. 07 Sep, 2022 8 commits
  3. 06 Sep, 2022 9 commits
  4. 05 Sep, 2022 7 commits
    • Daniel Black's avatar
      MDEV-29443: prevent uring access to galera sst /notify scripts · fd8dbe0d
      Daniel Black authored
      The resources like uring in MariaDB aren't intended for spawned
      processes so we restrict access using the io_uring_ring_dontfork
      liburing library call.
      fd8dbe0d
    • Jan Lindström's avatar
      Merge 10.7 into 10.8 · dee24f31
      Jan Lindström authored
      dee24f31
    • Jan Lindström's avatar
      Merge 10.6 into 10.7 · 5fdbb3a7
      Jan Lindström authored
      5fdbb3a7
    • Jan Lindström's avatar
      Merge 10.5 into 10.6 · 9fefd440
      Jan Lindström authored
      9fefd440
    • Jan Lindström's avatar
      Merge 10.4 into 10.5 · ba987a46
      Jan Lindström authored
      ba987a46
    • Marko Mäkelä's avatar
      Merge 10.5 into 10.6 · 3c7887a8
      Marko Mäkelä authored
      3c7887a8
    • Marko Mäkelä's avatar
      MDEV-29438 Recovery or backup of instant ALTER TABLE is incorrect · 244fdc43
      Marko Mäkelä authored
      This bug was found in MariaDB Server 10.6 thanks to the
      OPT_PAGE_CHECKSUM record that was implemented
      in commit 4179f93d for catching
      this type of recovery failures.
      
      page_cur_insert_rec_low(): If the previous record is the page infimum,
      correctly limit the end of the record. We do not want to copy data from
      the header of the page supremum. This omission caused the incorrect
      recovery of DB_TRX_ID in an instant ALTER TABLE metadata record, because
      part of the DB_TRX_ID was incorrectly copied from the n_owned of the
      page supremum, which in recovery would be updated after the copying,
      but in normal operation would already have been updated at the time the
      common prefix was being determined.
      
      log_phys_t::apply(): If a data page is found to be corrupted, do not
      flag the log corrupted but instead return a new status APPLIED_CORRUPTED
      so that the caller may discard all log for this page. We do not want
      the recovery of unrelated pages to fail in recv_recover_page().
      
      No test case is included, because the known test case would only work
      in 10.6, and even after this fix, it would trigger another bug in
      instant ALTER TABLE crash recovery.
      244fdc43
  5. 03 Sep, 2022 2 commits
    • Andrei's avatar
      MDEV-28827 Minor unsafe statement warning message improvement · f501f815
      Andrei authored
      The replication unsafe warning's pattern gets corrected in the
      punctuation part.
      f501f815
    • Brandon Nesterenko's avatar
      MDEV-28530: Revoking privileges from a non-existing user on a master breaks... · 47812017
      Brandon Nesterenko authored
      MDEV-28530: Revoking privileges from a non-existing user on a master breaks replication on the slave in the presence of replication filters
      
      Problem:
      ========
      Replication can break while applying a query log event if its
      respective command errors on the primary, but is ignored by the
      replication filter within Grant_tables on the replica. The bug
      reported by MDEV-28530 shows this with REVOKE ALL PRIVILEGES using a
      non-existent user. The primary will binlog the REVOKE command with
      an error code, and the replica will think the command executed with
      success because the replication filter will ignore the command while
      accessing the Grant_tables classes. When the replica performs an
      error check, it sees the difference between the error codes, and
      replication breaks.
      
      Solution:
      ========
      If the replication filter check done by Grant_tables logic ignores
      the tables, reset thd->slave_expected_error to 0 so that
      Query_log_event::do_apply_event() can be made aware that the
      underlying query was ignored when it compares errors.
      
      Note that this bug also effects DROP USER if not all users exist
      in the provided list, and the patch fixes and tests this case.
      
      Reviewed By:
      ============
      andrei.elkin@mariadb.com
      47812017
  6. 02 Sep, 2022 2 commits
    • anson1014's avatar
      Remove unused French translations in Connect engine (#2252) · 84813c39
      anson1014 authored
      These files are currently not being used nor compiled in MariaDB. The
      use of large lists of 'case' statements in these source files are also
      not a great way to represent translated strings. This git history can
      be referred to when a better translation interface can be implemented
      in the future.
      
      Therefore, these files can be removed to cleanup the MariaDB codebase.
      
      All new code of the whole pull request, including one or several files
      that are either new files or modified ones, are contributed under the
      BSD-new license. I am contributing on behalf of my employer
      Amazon Web Services, Inc.
      84813c39
    • Alexander Barkov's avatar
      A follow-up patch MDEV-27266 Improve UCA collation performance for utf8mb3 and utf8mb4 · f6118acd
      Alexander Barkov authored
      Moving these members:
      
         CHARSET_INFO *cs;
         const MY_UCA_WEIGHT_LEVEL *level;
      
      from my_uca_scanner to a new separate structure my_uca_scanner_param.
      
      Rationale:
      
      During a comparison of two strings these members were initialized two times
      (one time for every string).
      
      After the change these members initialized only one time inside
      a shared instance of my_uca_scanner_param, and the instance is
      shared between two scanners (its const address is passed as new a parameter
      to the underlying scanner functions).
      
      This change gives a slight performance improvement (~5%).
      f6118acd
  7. 01 Sep, 2022 3 commits
  8. 31 Aug, 2022 8 commits
    • Marko Mäkelä's avatar
      MDEV-27983: InnoDB hangs after loading a ROW_FORMAT=COMPRESSED page · 92032499
      Marko Mäkelä authored
      If multiple threads invoke buf_page_get_low() on a ROW_FORMAT=COMPRESSED
      page that does not reside in the buffer pool, then one of the threads
      will end up acquiring an exclusive page latch (the "if" statement
      right before the new wait_for_unzip: label) and other threads will
      end up waiting for a shared latch while holding a buffer-fix.
      The exclusive latch holder would then wait for the buffer-fixes to
      be released while the buffer-fix holders are waiting for the shared latch.
      
      buf_page_get_low(): Prevent the hang that was introduced
      in commit 9436c778 (MDEV-27058),
      by releasing the buffer-fix, sleeping some time, and retrying the
      page lookup.
      92032499
    • Marko Mäkelä's avatar
      MDEV-29374 InnoDB recovery fails with "Data structure corruption" · bdf62ece
      Marko Mäkelä authored
      recv_sys_t::free_corrupted_page(): Identify the corrupted page in
      an error or warning message.
      
      buf_page_free(): Just in case, register the page as modified.
      This should already have been done in mtr_t::free() as part of
      fseg_free_page_low().
      
      mtr_t::memo_push(): Simplify a condition, so that when invoked
      with MTR_MEMO_PAGE_X_MODIFY, we will do the right thing.
      
      fseg_free_page_low(): Remove an accidentally added return statement
      that prevented mtr_t::free() from being called. This fixes a regression
      that was introduced in
      commit 0b47c126 (MDEV-13542).
      bdf62ece
    • sawasa's avatar
      MDEV-28890 Spider: remove #ifdef SPIDER_XID_USES_xid_cache_iterate · 12c23641
      sawasa authored
      Reviewed by: Nayuta Yanagisawa
      12c23641
    • Marko Mäkelä's avatar
      4f2dc716
    • Aleksey Midenkov's avatar
      MDEV-28933 CREATE OR REPLACE fails to recreate same constraint name · cf6c5176
      Aleksey Midenkov authored
      Use temporary constraint names for temporary tables. The constraints
      are not added to cache (skipped in dict_table_rename_in_cache()).
      
      The scheme for temporary constraint names is as follows:
      
          for old table: db_name/\xFFconstraint_name
          for new table: db_name/\xFF\xFFconstraint_name
      
      normalize_table_name_c_low(): wrong comparison "less than FN_REFLEN -
      1". Somewhere array of FN_REFLEN includes the trailing 0, somewhere
      array of FN_REFLEN + 1 includes trailing 0, but nowhere array of
      FN_REFLEN - 1 must include trailing 0.
      cf6c5176
    • Aleksey Midenkov's avatar
      MDEV-28933 Moved RENAME_CONSTRAINT_IDS to include/sql_funcs.h · f1e1c133
      Aleksey Midenkov authored
      All InnoDB internal SQL functions should be moved to sql_funcs.h
      f1e1c133
    • Aleksey Midenkov's avatar
      MDEV-28956 Locking is broken if CREATE OR REPLACE fails under LOCK TABLES · a228ec80
      Aleksey Midenkov authored
      add_back_last_deleted_lock() was called when the lock was never
      removed. Lock is removed in finalize_atomic_replace() in
      close_all_tables_for_name(). finalize_atomic_replace() is done only
      for successful operation.
      
      In non-atomic codepath it drops the table first, if anything fails
      later we don't need to return back the lock since there is no table
      now. So the fix is required as well.
      a228ec80
    • Aleksey Midenkov's avatar
      MDEV-25292 gcol.gcol_bugfixes --ps fix · 24fff826
      Aleksey Midenkov authored
      Related to MDEV-24176.
      
      1. vcol_fix_expr() generates new tree changes:
      Type_std_attributes::agg_item_set_converter() does change_item_tree().
      
      The changes are allocated on expr_arena (via Vcol_expr_context as per
      MDEV-24176).
      
      2. vcol_cleanup_expr() doesn't remove these changes (can be a bug of
      Type_std_attributes or per design).
      
      3. Atomic CREATE OR REPLACE renames old table to backup
      (finalize_atomic_replace()). It does that via
      rename_table_and_triggers() and that closes table share and releases
      expr_arena root. Hence now we have Item corpses in thd->change_list.
      
      4. PS cleanup phase tries to rollback thd->change_list and accesses
      already freed item corpses.
      
      The fix saves and restores change_list on
      vcol_fix_expr()/vcol_cleanup_expr().
      24fff826