mirror of
https://github.com/MariaDB/server.git
synced 2026-01-06 05:22:24 +03:00
MDEV-13437 InnoDB fails to return error for XA COMMIT or XA ROLLBACK in read-only mode
Assertions failed due to incorrect handling of the --tc-heuristic-recover
option when InnoDB is in read-only mode either due to innodb_read_only=1
or innodb_force_recovery>3. InnoDB failed to refuse a XA COMMIT or
XA ROLLBACK operation, and there were errors in the error handling in
the upper layer.
This was fixed by making InnoDB XA operations respect the
high_level_read_only flag. The InnoDB part of the fix and
parts of the test main.tc_heuristic_recover were provided
by Marko Mäkelä.
LOCK_log mutex lock/unlock had to be added to fix MDEV-13438.
The measure is confirmed by mysql sources as well.
For testing of the conflicting option combination, mysql-test-run is
made to export a new $MYSQLD_LAST_CMD. It holds the very last value
generated by mtr.mysqld_start(). Even though the options have been
also always stored in $mysqld->{'started_opts'} there were no access
to them beyond the automatic server restart by mtr through the expect
file interface.
Effectively therefore $MYSQLD_LAST_CMD represents a more general
interface to $mysqld->{'started_opts'} which can be used in wider
scopes including server launch with incompatible options.
Notice another existing method to restart the server with incompatible
options relying on $MYSQLD_CMD is is aware of $mysqld->{'started_opts'}
(the actual options that the server is launched by mtr). In order to use
this method they would have to be provided manually.
NOTE: When merging to 10.2, the file search_pattern_in_file++.inc
should be replaced with the pre-existing search_pattern_in_file.inc.
This commit is contained in:
committed by
Marko Mäkelä
parent
05e7d35e89
commit
888a8b69bd
18
mysql-test/include/fail_start_mysqld.inc
Normal file
18
mysql-test/include/fail_start_mysqld.inc
Normal file
@@ -0,0 +1,18 @@
|
||||
# ==== Usage ====
|
||||
#
|
||||
# [--let $restart_parameters= --innodb-force-recovery=0 --innodb-read-only=1]
|
||||
# [--let $mysqld_stub_cmd= $MYSQLD_LAST_CMD]
|
||||
# [--let $error_log= $MYSQLTEST_VARDIR/log/mysqld.1.err]
|
||||
# --source include/fail_restart_mysqld.inc
|
||||
|
||||
# Evaluate the default of $error_log
|
||||
if (!$error_log)
|
||||
{
|
||||
--let $error_log= $MYSQLTEST_VARDIR/log/mysqld.1.err
|
||||
}
|
||||
|
||||
--error 1
|
||||
--exec $mysqld_stub_cmd $restart_parameters >> $error_log 2>&1
|
||||
|
||||
# As the server is stopped
|
||||
--disable_reconnect
|
||||
Reference in New Issue
Block a user