MariaDB server is a community developed fork of MySQL server. Started by core members of the original MySQL team, MariaDB actively works with outside developers to deliver the most featureful, stable, and sanely licensed open SQL server in the industry.
  • MariaDB\ 71.8%
  • C++ 16.4%
  • C 10.4%
  • Shell 0.5%
  • Perl 0.4%
  • Other 0.3%
Find a file
Marko Mäkelä 0de3be8cfd MDEV-30671 InnoDB undo log truncation fails to wait for purge of history
It is not safe to invoke trx_purge_free_segment() or execute
innodb_undo_log_truncate=ON before all undo log records in
the rollback segment has been processed.

A prominent failure that would occur due to premature freeing of
undo log pages is that trx_undo_get_undo_rec() would crash when
trying to copy an undo log record to fetch the previous version
of a record.

If trx_undo_get_undo_rec() was not invoked in the unlucky time frame,
then the symptom would be that some committed transaction history is
never removed. This would be detected by CHECK TABLE...EXTENDED that
was impleented in commit ab0190101b.
Such a garbage collection leak should be possible even when using
innodb_undo_log_truncate=OFF, just involving trx_purge_free_segment().

trx_rseg_t::needs_purge: Change the type from Boolean to a transaction
identifier, noting the most recent non-purged transaction, or 0 if
everything has been purged. On transaction start, we initialize this
to 1 more than the transaction start ID. On recovery, the field may be
adjusted to the transaction end ID (TRX_UNDO_TRX_NO) if it is larger.

The field TRX_UNDO_NEEDS_PURGE becomes write-only; only some debug
assertions that would validate the value. The field reflects the old
inaccurate Boolean field trx_rseg_t::needs_purge.

trx_undo_mem_create_at_db_start(), trx_undo_lists_init(),
trx_rseg_mem_restore(): Remove the parameter max_trx_id.
Instead, store the maximum in trx_rseg_t::needs_purge,
where trx_rseg_array_init() will find it.

trx_purge_free_segment(): Contiguously hold a lock on
trx_rseg_t to prevent any concurrent allocation of undo log.

trx_purge_truncate_rseg_history(): Only invoke trx_purge_free_segment()
if the rollback segment is empty and there are no pending transactions
associated with it.

trx_purge_truncate_history(): Only proceed with innodb_undo_log_truncate=ON
if trx_rseg_t::needs_purge indicates that all history has been purged.

Tested by: Matthias Leich
2023-02-24 14:24:44 +02:00
.github Revert "Add Pull Request template file to the MariaDB/server repository" 2021-05-27 15:43:31 +03:00
BUILD Merge 10.4 into 10.5 2022-12-13 14:39:18 +02:00
client Merge 10.4 into 10.5 2023-02-10 12:02:11 +02:00
cmake Merge branch '10.3' into 10.4 2023-01-28 18:22:55 +01:00
dbug Merge branch '10.4' into 10.5 2023-01-27 13:54:14 +01:00
debian MDEV-30534: Remove EOL Debian version 9 (stretch) from autobake-deb.sh 2023-02-08 15:31:59 +11:00
Docs Merge 10.4 into 10.5 2022-09-26 13:34:38 +03:00
extra Merge 10.4 into 10.5 2023-02-10 12:02:11 +02:00
include Merge 10.4 into 10.5 2023-02-10 12:02:11 +02:00
libmariadb@d204e83104 MDEV-30423 Deadlock on Replica during BACKUP STAGE BLOCK_COMMIT on XA transactions 2023-01-23 19:01:48 +02:00
libmysqld Merge 10.4 into 10.5 2022-12-13 14:39:18 +02:00
libservices Add build on AIX 2020-12-16 08:07:04 +11:00
man MDEV-23230 wsrep files installed when built without WSREP (#2334) 2022-11-28 18:21:03 +00:00
mysql-test MDEV-30671 InnoDB undo log truncation fails to wait for purge of history 2023-02-24 14:24:44 +02:00
mysys Merge 10.4 into 10.5 2023-02-10 12:02:11 +02:00
mysys_ssl Merge 10.4 into 10.5 2023-02-10 12:02:11 +02:00
plugin Merge 10.4 into 10.5 2023-02-10 12:02:11 +02:00
randgen/conf Group commit for maria engine. 2010-02-12 15:12:28 +02:00
scripts Update 10.5 HELP tables 2023-01-24 11:28:37 +11:00
sql Fix clang -Winconsistent-missing-override 2023-02-16 10:09:19 +02:00
sql-bench Merge 10.4 into 10.5 2020-07-02 09:41:44 +03:00
sql-common Merge branch '10.4' into 10.5 2022-05-09 22:04:06 +02:00
storage MDEV-30671 InnoDB undo log truncation fails to wait for purge of history 2023-02-24 14:24:44 +02:00
strings Merge 10.4 into 10.5 2023-02-10 12:02:11 +02:00
support-files rpm: server-post - use mariadb-install-db 2022-12-14 20:52:06 +00:00
tests Merge 10.4 into 10.5 2022-10-25 11:26:37 +03:00
tpool Add missing include <cstdio> 2023-01-27 12:43:38 +11:00
unittest Merge 10.4 into 10.5 2022-11-30 13:10:52 +02:00
vio Merge branch '10.4' into 10.5 2022-10-26 15:26:06 +02:00
win Merge 10.4 into 10.5 2023-02-10 12:02:11 +02:00
wsrep-lib@275a0af8c5 MDEV-30419 Fix unhandled exception thrown from wsrep-lib 2023-01-19 14:55:50 +02:00
zlib zlib: remove redundant and generated files 2022-07-26 16:46:27 +02:00
.clang-format Merge 10.4 into 10.5 2019-12-27 21:17:16 +02:00
.gitattributes MDEV-27494 Rename .ic files to .inl 2022-01-17 16:41:51 +01:00
.gitignore Merge branch '10.4' into 10.5 2022-05-09 22:04:06 +02:00
.gitmodules Merge 10.4 into 10.5 2023-01-03 17:08:42 +02:00
appveyor.yml Fix typo in appveyor.yml 2022-07-04 19:24:58 +02:00
BUILD-CMAKE Minor spelling fixes in code comments, docs and output 2018-01-12 16:49:02 +02:00
CMakeLists.txt Fix a typo in CmakeLists.txt 2023-01-03 08:47:08 +11:00
config.h.cmake Merge 10.4 into 10.5 2022-10-12 11:29:32 +03:00
configure.cmake Merge 10.4 into 10.5 2022-10-06 08:29:56 +03:00
CONTRIBUTING.md Remove mention of Freenode 2021-09-22 07:15:08 +02:00
COPYING Update FSF Address 2019-05-11 21:29:06 +03:00
CREDITS CREDITS: re-instate Tencent Cloud 2023-01-25 16:44:26 +11:00
INSTALL-SOURCE Update AskMonty and Atlassian references to MariaDB 2016-03-08 15:24:01 +02:00
INSTALL-WIN-SOURCE Update AskMonty and Atlassian references to MariaDB 2016-03-08 15:24:01 +02:00
KNOWN_BUGS.txt Changed some MySQL names in messages to MariaDB 2018-12-09 20:49:05 +02:00
README.md Remove mention of Freenode 2021-09-22 07:15:08 +02:00
THIRDPARTY Merge 10.1 into 10.2 2019-05-13 17:54:04 +03:00
VERSION bump the VERSION 2023-02-06 09:59:18 -05:00

Code status:

  • Appveyor CI status ci.appveyor.com

MariaDB: The open source relational database

MariaDB was designed as a drop-in replacement of MySQL(R) with more features, new storage engines, fewer bugs, and better performance.

MariaDB is brought to you by the MariaDB Foundation and the MariaDB Corporation. Please read the CREDITS file for details about the MariaDB Foundation, and who is developing MariaDB.

MariaDB is developed by many of the original developers of MySQL who now work for the MariaDB Corporation, the MariaDB Foundation and by many people in the community.

MySQL, which is the base of MariaDB, is a product and trademark of Oracle Corporation, Inc. For a list of developers and other contributors, see the Credits appendix. You can also run 'SHOW authors' to get a list of active contributors.

A description of the MariaDB project and a manual can be found at:

https://mariadb.org

https://mariadb.com/kb/en/

https://mariadb.com/kb/en/mariadb-vs-mysql-features/

https://mariadb.com/kb/en/mariadb-versus-mysql-compatibility/

https://mariadb.com/kb/en/new-and-old-releases/

Help

More help is available from the Maria Discuss mailing list https://launchpad.net/~maria-discuss, MariaDB's Zulip instance, https://mariadb.zulipchat.com/

Live QA for beginner contributors

MariaDB has a dedicated time each week when we answer new contributor questions live on Zulip. From 8:00 to 10:00 UTC on Mondays, and 10:00 to 12:00 UTC on Thursdays, anyone can ask any questions theyd like, and a live developer will be available to assist.

New contributors can ask questions any time, but we will provide immediate feedback during that interval.

Licensing


NOTE:

MariaDB is specifically available only under version 2 of the GNU General Public License (GPLv2). (I.e. Without the "any later version" clause.) This is inherited from MySQL. Please see the README file in the MySQL distribution for more information.

License information can be found in the COPYING file. Third party license information can be found in the THIRDPARTY file.


Bug Reports

Bug and/or error reports regarding MariaDB should be submitted at: https://jira.mariadb.org

For reporting security vulnerabilities see: https://mariadb.org/about/security-policy/

The code for MariaDB, including all revision history, can be found at: https://github.com/MariaDB/server