summaryrefslogtreecommitdiff
path: root/storage
diff options
context:
space:
mode:
authorMarko Mäkelä <marko.makela@mariadb.com>2021-01-15 13:36:32 +0200
committerMarko Mäkelä <marko.makela@mariadb.com>2021-01-15 13:43:05 +0200
commit76b58c2af78cb25212309f5f00554750cbdb5372 (patch)
tree89d9bff835ead9e563bca38cd3a1bd96dbb51baa /storage
parentd79141d641a6590c84d9360feaa8714ee0e570fe (diff)
downloadmariadb-git-76b58c2af78cb25212309f5f00554750cbdb5372.tar.gz
MDEV-24600 performance_schema.events_transactions_history_long.trx_id reports garbage
The table performance_schema.events_transactions_history_long that was imported from MySQL 5.7.28 in commit 0ea717f51a152afdb3791195c4a25ee0baa2faac may report bogus trx_id values for InnoDB transactions. innobase_register_trx(): Pass trx->id to trans_register_ha(), even if it is 0. It is more appropriate to report NULL than some arbitrary value that has been constructed from the address of a transaction identifier.
Diffstat (limited to 'storage')
-rw-r--r--storage/innobase/handler/ha_innodb.cc19
1 files changed, 9 insertions, 10 deletions
diff --git a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc
index 2694dbb2841..dd52fee3f9b 100644
--- a/storage/innobase/handler/ha_innodb.cc
+++ b/storage/innobase/handler/ha_innodb.cc
@@ -2575,18 +2575,17 @@ innobase_register_trx(
THD* thd, /* in: MySQL thd (connection) object */
trx_t* trx) /* in: transaction to register */
{
- const ulonglong trx_id = static_cast<ulonglong>(
- trx_get_id_for_print(trx));
+ ut_ad(!trx->active_commit_ordered);
+ const trx_id_t trx_id= trx->id;
- trans_register_ha(thd, FALSE, hton, trx_id);
+ trans_register_ha(thd, false, hton, trx_id);
- if (!trx_is_registered_for_2pc(trx)
- && thd_test_options(thd, OPTION_NOT_AUTOCOMMIT | OPTION_BEGIN)) {
-
- trans_register_ha(thd, TRUE, hton, trx_id);
- }
-
- trx_register_for_2pc(trx);
+ if (!trx->is_registered)
+ {
+ trx->is_registered= true;
+ if (thd_test_options(thd, OPTION_NOT_AUTOCOMMIT | OPTION_BEGIN))
+ trans_register_ha(thd, true, hton, trx_id);
+ }
}
/* BACKGROUND INFO: HOW THE MYSQL QUERY CACHE WORKS WITH INNODB