1. 16 Jun, 2022 1 commit
    • Alexander Barkov's avatar
      MDEV-28769 Assertion `(m_ci->state & 32) || m_with_collate' failed in... · a923d6f4
      Alexander Barkov authored
      MDEV-28769 Assertion `(m_ci->state & 32) || m_with_collate' failed in Lex_exact_charset_opt_extended_collate::Lex_exact_charset_opt_extended_collate on SET NAMES
      
      These system variables:
        @@character_set_client
        @@character_set_connection
        @@character_set_database
        @@character_set_filesystem
        @@character_set_results
        @@character_set_server
      
      can now be set in numeric format only to IDs of default collations, e.g.:
      
      SET @@character_set_xxx=9;  -- OK    (latin2_general_ci  is default)
      SET @@character_set_xxx=2;  -- ERROR (latin2_czech_cs is not default)
      SET @@character_set_xxx=21; -- ERROR (latin2_hungarian_ci is not default)
      
      Before this change the server accepted IDs of non-default collations
      so all three examples above worked without errors,
      but this could lead to unexpected behavior in later statements.
      a923d6f4
  2. 15 Jun, 2022 1 commit
  3. 14 Jun, 2022 8 commits
    • Marko Mäkelä's avatar
      MDEV-28766: SET GLOBAL innodb_log_file_buffering · 4c0cd953
      Marko Mäkelä authored
      In commit c4c88307 (MDEV-28111) we disabled
      the file system cache on the InnoDB write-ahead log file (ib_logfile0)
      by default on Linux.
      
      It turns out that especially with innodb_flush_trx_log_at_commit=2,
      writing to the log via the file system cache typically improves throughput,
      especially on slow storage or at a small number of concurrent transactions.
      For other values of innodb_flush_log_at_trx_commit, direct writes were
      observed to be mostly but not always faster. Whether it pays off to
      disable the file system cache on the log may depend on the type of storage,
      the workload, and the operating system kernel version.
      
      On Linux and Microsoft Windows, we will introduce the settable Boolean
      global variable innodb_log_file_buffering that indicates whether the
      file system cache on the redo log file is enabled. The default value is
      innodb_log_file_buffering=OFF. If the server is started up with
      innodb_flush_log_at_trx_commit=2, the value will be changed to
      innodb_log_file_buffering=ON.
      
      When a persistent memory interface is being used for the log,
      the value cannot be changed from innodb_log_file_buffering=OFF.
      On Linux, when the physical block size cannot be determined
      to be a power of 2 between 64 and 4096 bytes, the file system cache
      cannot be disabled, and innodb_log_file_buffering=ON cannot be changed.
      
      Server log messages will indicate whether the file system cache is
      enabled for the redo log:
      
      [Note] InnoDB: Buffered log writes (block size=512 bytes)
      [Note] InnoDB: File system buffers for log disabled (block size=512 bytes)
      
      After this change, the startup parameter innodb_flush_method will no
      longer control whether O_DIRECT will be set on the redo log on Linux.
      
      On other operating systems that support O_DIRECT, no interface has been
      implemented for controlling the file system cache for the redo log.
      The innodb_flush_method values O_DIRECT, O_DIRECT_NO_FSYNC, O_DSYNC
      will enable O_DIRECT for data files, not the log.
      
      Tested by: Matthias Leich, Axel Schwenke
      4c0cd953
    • Marko Mäkelä's avatar
      Merge 10.7 into 10.8 · 813986a6
      Marko Mäkelä authored
      813986a6
    • Marko Mäkelä's avatar
      Merge 10.6 into 10.7 · 42d3a7b6
      Marko Mäkelä authored
      42d3a7b6
    • Marko Mäkelä's avatar
      MDEV-28840 innodb_undo_log_truncate is not crash-safe · 6c82ab4f
      Marko Mäkelä authored
      trx_purge_free_segment(): Do mark that the block will be modified.
      
      It seems possible that this regression was introduced by the
      changes to the page-freeing logic
      in commit 4179f93d (MDEV-18976).
      
      Tested by: Matthias Leich
      6c82ab4f
    • Thirunarayanan Balathandayuthapani's avatar
      MDEV-25581 Allow user thread to do InnoDB fts cache sync · 6c669b95
      Thirunarayanan Balathandayuthapani authored
      - innodb_fts.sync_block doesn't make sense after MDEV-25581's patch
      because fts cache syncing is done as a part of insert operation
      and it leads to completion of select over insert sometimes.
      This test case is not relevant any more
      6c669b95
    • Marko Mäkelä's avatar
      Merge 10.6 into 10.7 · ddf511c4
      Marko Mäkelä authored
      ddf511c4
    • Marko Mäkelä's avatar
      Merge 10.5 into 10.6 · 1f1fa7e0
      Marko Mäkelä authored
      1f1fa7e0
    • Marko Mäkelä's avatar
      MDEV-28828 SIGSEGV in buf_flush_LRU_list_batch · 4849d94f
      Marko Mäkelä authored
      In commit 73fee39e (MDEV-27985)
      a regression was introduced that would cause bpage=nullptr to
      be referenced.
      
      buf_flush_LRU_list_batch(): Always terminate the loop upon
      encountering a null pointer.
      4849d94f
  4. 13 Jun, 2022 6 commits
    • Nayuta Yanagisawa's avatar
      MDEV-26127 Assertion `err != DB_DUPLICATE_KEY' failed or InnoDB: Failing... · 06e9ce79
      Nayuta Yanagisawa authored
      MDEV-26127 Assertion `err != DB_DUPLICATE_KEY' failed or InnoDB: Failing assertion: id != 0 on ALTER ... REBUILD PARTITION
      
      During rebuild of partition, the partitioning engine calls
      alter_close_table(), which does not unlock and close some table
      instances of the target table.
      Then, the engine fails to rename partitions because there are table
      instances that are still locked.
      
      Closing all the table instance of the target table fixes the bug.
      06e9ce79
    • Marko Mäkelä's avatar
      MDEV-28802 DROP DATABASE in InnoDB still is case-insensitive · 1f3f4571
      Marko Mäkelä authored
      innodb_drop_database(): Use explicit TO_BINARY casts on
      SYS_TABLES.NAME, which for historical reasons uses the wrong collation
      latin1_swedish_ci instead of BINARY.
      1f3f4571
    • Monty's avatar
      65dd3108
    • Monty's avatar
      Fixed maria.maria-recover and maria.encrypt-no-key test files · 1bcd87cd
      Monty authored
      These had been damaged during some merge which caused --embedded
      test to fail
      1bcd87cd
    • Monty's avatar
      Make BUILD script compile hashicorp plugin dynamically · f929fa45
      Monty authored
      Compiling hashicorp plugin statically got many InnoDB
      encryption test to fail with errors like:
      Error: InnoDB: The page [page id: space=5, page number=3] in file './test/t1.ibd' cannot be decrypted.
      f929fa45
    • Tuukka Pasanen's avatar
      MDEV-28642: Suspend obvious false-positive Lintian warnings · d4760d8c
      Tuukka Pasanen authored
      MariaDB codebase is huge and Lintian has lots of test than
      can fire false-positive warnings which leads to situation
      where real problems can't be spotted.
      
      Suspend obvious false-positive Lintian warnings and
      let Lintian problems that needs some love shine
      out.
      
      Suspends in package mariadb-test-data
      
      Supporting BSD family needs to use '/usr/bin/env perl' and not '/usr/bin/perl'
      Perl script are for testing and not for production in mariadb-test-data
      package:
       * incorrect-path-for-interpreter
      
      There is several files with national-encoding which are test file so they
      can't be in unicode charset
       * national-encoding
      
      Serveral test paths are intentionally repeated:
       * repeated-path-segment
      
      Suspends in package mariadb-test
      
      Supporting BSD family needs to use '/usr/bin/env perl' and not '/usr/bin/perl'
      Perl script are for testing and not for production in mariadb-test-data
      package:
       * incorrect-path-for-interpreter
      
      Suspends in package source package
      
      Remade some 'version-substvar-for-external-package' to use
      regex.
      
      MGroonga is missing source file 'jquery-ui-1.8.18.custom.js' correct
      lintian suspend with regex:
       * source-is-missing
      
      There is several files with very long line lenghts. Add suspends
      for those that can't be corrected in several places. Most
      of them are test result files, SQL test files or intentional
      long lines that can't be splitted.
        * very-long-line-length-in-source-file
      
      There is several autogenerated C++ files which probably should not
      be there but they should not do any harm:
       * source-contains-autogenerated-visual-c++-file
      d4760d8c
  5. 10 Jun, 2022 2 commits
    • Thirunarayanan Balathandayuthapani's avatar
      MDEV-25581 Allow user thread to do InnoDB fts cache sync · 1fd7d3a9
      Thirunarayanan Balathandayuthapani authored
      Problem:
      ========
        InnoDB FTS requesting the fts sync of the table once the fts
      cache size reaches 1/10 of innodb_ft_cache_size. But fts_sync()
      releases cache lock when writing the word. By doing this, InnoDB
      insert thread increases the innodb fts cache memory and
      SYNC operation will take more time to complete.
      
      Solution:
      =========
        Remove the fts sync operation(FTS_MSG_SYNC_TABLE) from
      the fts optimize background thread. Instead of that,
      allow user thread to sync the InnoDB fts cache when
      the cache size exceeds 512 kb. User thread holds
      cache lock while doing cache syncing, it make sure that
      other threads doesn't add the docs into the cache.
      
      Removed FTS_MSG_SYNC_TABLE and its related function
      because we do remove the FTS_MSG_SYNC_TABLE message
      itself.
      
      Removed fts_sync_index_check() and all related
      function because other threads doesn't add while
      cache operation going on.
      1fd7d3a9
    • Marko Mäkelä's avatar
      Fix ./mtr --embedded · 51ca5d51
      Marko Mäkelä authored
      This fixes up commit 3d241eb9
      51ca5d51
  6. 09 Jun, 2022 12 commits
    • Marko Mäkelä's avatar
      Merge 10.8 into 10.9 · 6dea701e
      Marko Mäkelä authored
      6dea701e
    • Marko Mäkelä's avatar
    • Marko Mäkelä's avatar
      Merge 10.7 into 10.8 · 0af93460
      Marko Mäkelä authored
      0af93460
    • Marko Mäkelä's avatar
      MDEV-28708 Increased congestion on buf_pool.flush_list_mutex · d61839c7
      Marko Mäkelä authored
      In commit f80deb95 (MDEV-27868)
      a fix for a correctness regression caused a performance regression
      by increasing the amount of work that is executed while holding
      buf_pool.flush_list_mutex.
      
      buf_page_t::set_temp_modified(): Relax an assertion, to allow an
      already dirty block to be marked as dirty.
      
      buf_page_t::flush_list_requests: Note that the variable is not
      always protected by buf_pool.flush_list_mutex. Already dirty blocks
      that are being written to will increment the counter without
      holding buf_pool.flush_list_mutex.
      
      mtr_t::process_freed_pages(): Handle pages that were freed during
      the execution of the mini-transaction.
      
      ReleaseUnlogged, mtr_t::release_unlogged(): Release modified pages when
      no log was written. This is for pages of the temporary tablespace, or for
      IMPORT TABLESPACE.
      
      ReleaseModified: Renamed from ReleaseBlocks.
      Assume that buf_pool.flush_list_mutex was acquired by the caller.
      
      ReleaseSimple: A combination of ReleaseLatches and ReleaseModified,
      for the case that for any modified pages, some earlier modifications
      are already waiting to be written.
      
      mtr_t::commit(): Invoke one of release_unlogged(), ReleaseModified,
      ReleaseSimple, ReleaseAll. Acquire and release buf_pool.flush_list_mutex
      at most once.
      
      memo_slot_release(): Simplify the code.
      
      mtr_t::sx_latch_at_savepoint(), mtr_t::x_latch_at_savepoint():
      Reduce the size of the critical section.
      
      fil_space_t::update_last_freed_lsn(), fil_space_t::clear_freed_ranges(),
      fil_space_t::add_free_range(): Assume that freed_range_mutex is held
      by the caller.
      
      buf_pool_t::prepare_insert_into_flush_list(): Determine the insert
      position for buf_pool_t::insert_into_flush_list(). Remove any clean
      blocks from buf_pool.flush_list that were encountered while searching.
      
      buf_pool_t::insert_into_flush_list(): Insert the block at the
      predetermined position.
      d61839c7
    • Marko Mäkelä's avatar
      Merge 10.6 into 10.7 · fe75e5e5
      Marko Mäkelä authored
      fe75e5e5
    • Marko Mäkelä's avatar
      Merge 10.5 into 10.6 · e11b82f8
      Marko Mäkelä authored
      e11b82f8
    • Marko Mäkelä's avatar
      Merge 10.4 into 10.5 · a9d0bb12
      Marko Mäkelä authored
      a9d0bb12
    • Marko Mäkelä's avatar
      Merge 10.3 into 10.4 · c89e3b70
      Marko Mäkelä authored
      c89e3b70
    • Marko Mäkelä's avatar
      MDEV-28779: ALTER TABLE IMPORT TABLESPACE corrupts an encrypted table · 98293130
      Marko Mäkelä authored
      PageConverter::update_header(): Remove an unnecessary write.
      The field that was originally called FIL_PAGE_FILE_FLUSH_LSN only
      made sense for the first page of the system tablespace
      (initially, for the first page of each file of the system tablespace).
      It never had any meaning for .ibd files, and it lost its original
      meaning in MariaDB Server 10.8.1 when
      commit b07920b6 (MDEV-27199)
      removed the ability to start without ib_logfile0.
      
      If the most significant 32 bits of the LSN are nonzero, this
      unnecessary write would write the wrong encryption key identifier
      to the page. The first page of any file is never encrypted,
      so normally those bytes should be 0 for any .ibd file.
      98293130
    • Daniel Lewart's avatar
      MDEV-25577 mariadb-tzinfo-to-sql generates superfluous warnings · 2cd1edfc
      Daniel Lewart authored
      The zoneinfo directory is littered with non-timezone information files.
      
      These frequently contain extensions, not present in real timezone files.
      
      Alo leapseconds is frequently there and is not a timezone file.
      2cd1edfc
    • GuiXiaoDi's avatar
      mysql.server.sh fix for non-Red Hat platforms · 9c207c88
      GuiXiaoDi authored
      The else condition is meant to be here to define the functions
      if the Red Hat include file isn't there.
      
      Fixes: commit 467011bc / MDEV-26614
      
      RedHat -> Red Hat by Daniel Black
      9c207c88
    • Roman Nozdrin's avatar
  7. 08 Jun, 2022 9 commits
    • Tingyao Nian's avatar
      MDEV-22023 Update man page NAME section to say MariaDB instead of MySQL · 41456181
      Tingyao Nian authored
      Continue the effort of a previous commit (PR#2114) which changed the man
      pages titles from MariaDB to MySQL, to further update the man pages.
      
      Update the man page NAME sections to use mariadb-* instead of mysql* for
      MariaDB binaries that are drop-in replacements for MySQL equivalents,
      indicating that the commands are actually of the MariaDB version.
      
      Before:
          NAME
              mysql_upgrade - check tables for MariaDB upgrade
          ...
      
      After:
          NAME
              mariadb-upgrade - check tables for MariaDB upgrade (mysql_upgrade
              is now a symlink to mariadb-upgrade)
          ...
      
      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.
      41456181
    • Oleg Smirnov's avatar
      MDEV-28747 Index condition pushdown may be configured incorrectly · 5efadf8d
      Oleg Smirnov authored
      ha_innobase::build_template may initialize m_prebuilt->idx_cond
      even if there is no valid pushed_idx_cond_keyno.
      This potentially problematic piece of code was found while
      working on MDEV-27366
      5efadf8d
    • Marko Mäkelä's avatar
      MDEV-28457 Crash in page_dir_find_owner_slot() · 77b3959b
      Marko Mäkelä authored
      A prominent remaining source of crashes on corrupted index pages
      is page directory corruption.
      
      A frequent caller of page_dir_find_owner_slot() is page_rec_get_prev().
      Some of those calls can be replaced with simpler logic that is less
      prone to fail.
      
      page_dir_find_owner_slot(),
      page_rec_get_prev(), page_rec_get_prev_const(),
      btr_pcur_move_to_prev(), btr_pcur_move_to_prev_on_page(),
      btr_cur_upd_rec_sys(),
      page_delete_rec_list_end(),
      rtr_page_copy_rec_list_end_no_locks(),
      rtr_page_copy_rec_list_start_no_locks(): Return an error code on failure.
      
      fil_space_t::io(), buf_page_get_low(): Use DB_CORRUPTION for
      out-of-bounds page reads.
      
      PageBulk::getSplitRec(), PageBulk::copyOut(): Simplify the code.
      
      btr_validate_level(): Prevent some more CHECK TABLE crashes on
      corrupted pages.
      
      btr_block_get(), btr_pcur_move_to_next_page(): Implement some checks that
      were previously only part of IndexPurge::next().
      
      IndexPurge::next(): Use btr_pcur_move_to_next_page().
      77b3959b
    • Marko Mäkelä's avatar
      Cleanup: Remove unused error code DB_FORCED_ABORT · 44ab6cba
      Marko Mäkelä authored
      MariaDB never supported this form of preemption via high-priority
      transactions. This error code shold not have been added in the
      first place, in commit 2e814d47.
      44ab6cba
    • Daniel Black's avatar
      MDEV-28243: AIX missing my_gethwaddr implementation · e8b0894d
      Daniel Black authored
      and failing spider partition test.
      
      With some small datatype changes to the Linux/Solaris my_gethwaddr implementation
      the hardware address of AIX can be returned. This is an important aspect
      in Spider (and UUID).
      
      Spider test change reviewed by Nayuta Yanagisawa.
      
      my_gethwaddr review by Monty in #2081
      e8b0894d
    • Marko Mäkelä's avatar
      MDEV-13542: Do not crash on decryption failure · 892c4263
      Marko Mäkelä authored
      fil_page_type_validate(): Remove. This debug check was mostly redundant
      and added little value to the code paths that deal with page_compressed
      or encrypted pages.
      
      fil_get_page_type_name(): Remove; unused function.
      
      fil_space_decrypt(): Return an error if the page is not
      supposed to be encrypted. It is possible that an unencrypted page
      contains a nonzero key_version field even though it is not supposed
      to be encrypted. Previously we would crash in such a situation.
      
      buf_page_decrypt_after_read(): Simplify the code. Remove some
      unnecessary error message about temporary tablespace corruption.
      This is where we would usually invoke fil_space_decrypt().
      892c4263
    • Marko Mäkelä's avatar
      MDEV-18519: Assertion failure in btr_page_reorganize_low() · c9498f33
      Marko Mäkelä authored
      Even after commit 0b47c126
      there are a few ib::fatal() calls in non-debug code
      that can be replaced easily.
      
      btr_page_reorganize_low(): On size invariant violation, return
      an error code instead of crashing.
      
      btr_check_blob_fil_page_type(): On an invalid page type, report
      an error but do not crash.
      
      btr_copy_blob_prefix(): Truncate the output if a page type is invalid.
      
      dict_load_foreign_cols(): On an error, return DB_CORRUPTION instead
      of crashing.
      
      fil_space_decrypt_full_crc32(), fil_space_decrypt_for_non_full_checksum():
      On error, return DB_DECRYPTION_FAILED instead of crashing.
      
      fil_set_max_space_id_if_bigger(): Replace ib::fatal() with an
      equivalent ut_a() assertion.
      c9498f33
    • Nayuta Yanagisawa's avatar
      MDEV-26282 Make the version of Spider the same as the server version · 8c4a2c8a
      Nayuta Yanagisawa authored
      Spider is now a part of the server. So, it doesn't make sense for Spider
      to have its own version number apart from the server's one.
      8c4a2c8a
    • chansuke's avatar
      MDEV-25273: fix typo (s/strucures/structures/) · 960f0344
      chansuke authored
      960f0344
  8. 07 Jun, 2022 1 commit
    • Monty's avatar
      Improve error reporting in Aria · 3d241eb9
      Monty authored
      This patch fixes the following issues in Aria error reporting in case
      of read errors & crashed tables:
      - Added the table name to the most error messages, including in case of
        read errors or when encrypting/decrypting a table. The format for
        error messages was changed sligtly to accomodate logging of errors
        from lower level routines.
      - If we got an read error from storage (hard disk, ssd, S3 etc) we only
        reported 'table is crashed'. Now the error number from the storage
        is reported.
      - Added checking of read failure from records_in_range()
      - Calls to ma_set_fatal_error() did not inform the SQL level of
        errors (to not spam the user with multiple error messages).
        Now the first error message and any fatal error messages are reported
        to the user.
      3d241eb9