diff options
author | Marko Mäkelä <marko.makela@mariadb.com> | 2021-01-15 13:36:32 +0200 |
---|---|---|
committer | Marko Mäkelä <marko.makela@mariadb.com> | 2021-01-15 13:43:05 +0200 |
commit | 76b58c2af78cb25212309f5f00554750cbdb5372 (patch) | |
tree | 89d9bff835ead9e563bca38cd3a1bd96dbb51baa /storage | |
parent | d79141d641a6590c84d9360feaa8714ee0e570fe (diff) | |
download | mariadb-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.cc | 19 |
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 |