mirror of
https://github.com/MariaDB/server.git
synced 2025-01-15 19:42:28 +01:00
231900e5bb
Applied SR transaction on the child table was not BF aborted by TOI running on the parent table for several reasons: Although SR correctly collected FK-referenced keys to parent, TOI in Galera disregards common certification index and simply sets itself to depend on the latest certified write set seqno. Since this write set was the fragment of SR transaction, TOI was allowed to run in parallel with SR presuming it would BF abort the latter. At the same time, DML transactions in the server don't grab MDL locks on FK-referenced tables, thus parent table wasn't protected by an MDL lock from SR and it couldn't provoke MDL lock conflict for TOI to BF abort SR transaction. In InnoDB, DDL transactions grab shared MDL locks on child tables, which is not enough to trigger MDL conflict in Galera. InnoDB-level Wsrep patch didn't contain correct conflict resolution logic due to the fact that it was believed MDL locking should always produce conflicts correctly. The fix brings conflict resolution rules similar to MDL-level checks to InnoDB, thus accounting for the problematic case. Apart from that, wsrep_thd_is_SR() is patched to return true only for executing SR transactions. It should be safe as any other SR state is either the same as for any single write set (thus making the two logically equivalent), or it reflects an SR transaction as being aborting or prepared, which is handled separately in BF-aborting logic, and for regular execution path it should not matter at all. Signed-off-by: Julius Goryavsky <julius.goryavsky@mariadb.com> |
||
---|---|---|
.. | ||
psi | ||
auth_dialog_client.h | ||
client_plugin.h | ||
client_plugin.h.pp | ||
plugin.h | ||
plugin_audit.h | ||
plugin_audit.h.pp | ||
plugin_auth.h | ||
plugin_auth.h.pp | ||
plugin_auth_common.h | ||
plugin_data_type.h | ||
plugin_data_type.h.pp | ||
plugin_encryption.h | ||
plugin_encryption.h.pp | ||
plugin_ftparser.h | ||
plugin_ftparser.h.pp | ||
plugin_function.h | ||
plugin_function.h.pp | ||
plugin_password_validation.h | ||
plugin_password_validation.h.pp | ||
service_base64.h | ||
service_debug_sync.h | ||
service_encryption.h | ||
service_encryption_scheme.h | ||
service_json.h | ||
service_kill_statement.h | ||
service_logger.h | ||
service_md5.h | ||
service_my_crypt.h | ||
service_my_print_error.h | ||
service_my_snprintf.h | ||
service_print_check_msg.h | ||
service_progress_report.h | ||
service_sha1.h | ||
service_sha2.h | ||
service_sql.h | ||
service_thd_alloc.h | ||
service_thd_autoinc.h | ||
service_thd_error_context.h | ||
service_thd_mdl.h | ||
service_thd_rnd.h | ||
service_thd_specifics.h | ||
service_thd_timezone.h | ||
service_thd_wait.h | ||
service_wsrep.h | ||
services.h |