summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrandon Nesterenko <brandon.nesterenko@mariadb.com>2022-12-08 15:04:09 -0700
committerBrandon Nesterenko <brandon.nesterenko@mariadb.com>2022-12-08 15:05:57 -0700
commitb2e79866a85ff4ead2ce65e2d2c6626cbcac888c (patch)
tree42f645ceb5308e8ff5ea77e40b392b3c9b4d2609
parent181780f78c287822c88a59169d19caa48492ba1f (diff)
downloadmariadb-git-bb-10.5-MDEV-21469-2022.tar.gz
MDEV-21469 Test and error message fixupsbb-10.5-MDEV-21469-2022
-rw-r--r--mysql-test/suite/rpl/r/rpl_xa_commit_crash_safe.result2
-rw-r--r--mysql-test/suite/rpl/r/rpl_xa_event_apply_failure.result3
-rw-r--r--mysql-test/suite/rpl/r/rpl_xa_prepare_commit_prepare.result2
-rw-r--r--mysql-test/suite/rpl/r/rpl_xa_prepare_crash_safe.result2
-rw-r--r--mysql-test/suite/rpl/r/rpl_xa_rollback_commit_crash_safe.result2
-rw-r--r--mysql-test/suite/rpl/t/rpl_xa_commit_crash_safe.test21
-rw-r--r--mysql-test/suite/rpl/t/rpl_xa_event_apply_failure.test18
-rw-r--r--mysql-test/suite/rpl/t/rpl_xa_prepare_commit_prepare.test19
-rw-r--r--mysql-test/suite/rpl/t/rpl_xa_prepare_crash_safe.test20
-rw-r--r--mysql-test/suite/rpl/t/rpl_xa_rollback_commit_crash_safe.test22
-rw-r--r--sql/log.cc20
11 files changed, 118 insertions, 13 deletions
diff --git a/mysql-test/suite/rpl/r/rpl_xa_commit_crash_safe.result b/mysql-test/suite/rpl/r/rpl_xa_commit_crash_safe.result
index ce7d257690a..8587c33fdf8 100644
--- a/mysql-test/suite/rpl/r/rpl_xa_commit_crash_safe.result
+++ b/mysql-test/suite/rpl/r/rpl_xa_commit_crash_safe.result
@@ -24,6 +24,8 @@ connection master;
connection default;
connection server_1;
connection master;
+include/assert_grep.inc [Binlog XA COMMIT event should be successfully recovered]
+include/assert_grep.inc [Binlog XA crash recovery should successfully finish]
connection slave;
include/start_slave.inc
connection master;
diff --git a/mysql-test/suite/rpl/r/rpl_xa_event_apply_failure.result b/mysql-test/suite/rpl/r/rpl_xa_event_apply_failure.result
index dc9930b77b1..05cc6af963e 100644
--- a/mysql-test/suite/rpl/r/rpl_xa_event_apply_failure.result
+++ b/mysql-test/suite/rpl/r/rpl_xa_event_apply_failure.result
@@ -3,7 +3,7 @@ include/master-slave.inc
connect master2,localhost,root,,;
connection master;
CALL mtr.add_suppression("Found 1 prepared XA transactions");
-CALL mtr.add_suppression("Failed to execute binlog query event");
+CALL mtr.add_suppression("Failed to execute recovered binlog query event");
CALL mtr.add_suppression("Recovery: Error .Out of memory..");
CALL mtr.add_suppression("Crash recovery failed.");
CALL mtr.add_suppression("Can.t init tc log");
@@ -28,6 +28,7 @@ connection master1;
connection master;
connection default;
connection default;
+include/assert_grep.inc [Binlog event recovery should fail]
connection master;
*** must be no 'xa2' commit seen, as it's still prepared:
SELECT * FROM t;
diff --git a/mysql-test/suite/rpl/r/rpl_xa_prepare_commit_prepare.result b/mysql-test/suite/rpl/r/rpl_xa_prepare_commit_prepare.result
index 9ba24716639..59b4f7177a3 100644
--- a/mysql-test/suite/rpl/r/rpl_xa_prepare_commit_prepare.result
+++ b/mysql-test/suite/rpl/r/rpl_xa_prepare_commit_prepare.result
@@ -23,6 +23,8 @@ connection master;
connection default;
connection server_1;
connection master;
+include/assert_grep.inc [Binlog XA PREPARE event should be successfully recovered]
+include/assert_grep.inc [Binlog XA crash recovery should successfully finish]
connection slave;
include/start_slave.inc
connection master;
diff --git a/mysql-test/suite/rpl/r/rpl_xa_prepare_crash_safe.result b/mysql-test/suite/rpl/r/rpl_xa_prepare_crash_safe.result
index 99baf59a3c1..83a49d77ebf 100644
--- a/mysql-test/suite/rpl/r/rpl_xa_prepare_crash_safe.result
+++ b/mysql-test/suite/rpl/r/rpl_xa_prepare_crash_safe.result
@@ -32,6 +32,8 @@ connection master;
connection default;
connection server_1;
connection master;
+include/assert_grep.inc [Binlog XA PREPARE event should be successfully recovered]
+include/assert_grep.inc [Binlog XA crash recovery should successfully finish]
connection slave;
include/start_slave.inc
connection master;
diff --git a/mysql-test/suite/rpl/r/rpl_xa_rollback_commit_crash_safe.result b/mysql-test/suite/rpl/r/rpl_xa_rollback_commit_crash_safe.result
index dc26c224ea9..2520287acc7 100644
--- a/mysql-test/suite/rpl/r/rpl_xa_rollback_commit_crash_safe.result
+++ b/mysql-test/suite/rpl/r/rpl_xa_rollback_commit_crash_safe.result
@@ -24,6 +24,8 @@ connection master;
connection default;
connection server_1;
connection master;
+include/assert_grep.inc [Binlog XA ROLLBACK event should be successfully recovered]
+include/assert_grep.inc [Binlog XA crash recovery should successfully finish]
connection slave;
include/start_slave.inc
connection master;
diff --git a/mysql-test/suite/rpl/t/rpl_xa_commit_crash_safe.test b/mysql-test/suite/rpl/t/rpl_xa_commit_crash_safe.test
index e972e3f09de..959f108e32b 100644
--- a/mysql-test/suite/rpl/t/rpl_xa_commit_crash_safe.test
+++ b/mysql-test/suite/rpl/t/rpl_xa_commit_crash_safe.test
@@ -78,6 +78,27 @@ connection server_1;
--enable_reconnect
--source include/wait_until_connected_again.inc
+let $log_error_= `SELECT @@GLOBAL.log_error`;
+if(!$log_error_)
+{
+ # MySQL Server on windows is started with --console and thus
+ # does not know the location of its .err log, use default location
+ let $log_error_ = $MYSQLTEST_VARDIR/log/mysqld.1.err;
+}
+--let $assert_file= $log_error_
+--let $assert_only_after = CURRENT_TEST: rpl.rpl_xa_commit_crash_safe
+
+--let $assert_text= Binlog XA COMMIT event should be successfully recovered
+--let $assert_select=Recovered binlog event XA COMMIT.*successfully applied\$
+--let $assert_count= 1
+--source include/assert_grep.inc
+
+--let $assert_text= Binlog XA crash recovery should successfully finish
+--let $assert_select=Binlog XA crash recovery finished
+--let $assert_count= 1
+--source include/assert_grep.inc
+
+
--connection slave
--source include/start_slave.inc
--sync_with_master
diff --git a/mysql-test/suite/rpl/t/rpl_xa_event_apply_failure.test b/mysql-test/suite/rpl/t/rpl_xa_event_apply_failure.test
index 14cebbd9b13..0b333295628 100644
--- a/mysql-test/suite/rpl/t/rpl_xa_event_apply_failure.test
+++ b/mysql-test/suite/rpl/t/rpl_xa_event_apply_failure.test
@@ -29,7 +29,7 @@
connect (master2,localhost,root,,);
--connection master
CALL mtr.add_suppression("Found 1 prepared XA transactions");
-CALL mtr.add_suppression("Failed to execute binlog query event");
+CALL mtr.add_suppression("Failed to execute recovered binlog query event");
CALL mtr.add_suppression("Recovery: Error .Out of memory..");
CALL mtr.add_suppression("Crash recovery failed.");
CALL mtr.add_suppression("Can.t init tc log");
@@ -79,6 +79,22 @@ connection default;
--enable_reconnect
--source include/wait_until_connected_again.inc
+let $log_error_= `SELECT @@GLOBAL.log_error`;
+if(!$log_error_)
+{
+ # MySQL Server on windows is started with --console and thus
+ # does not know the location of its .err log, use default location
+ let $log_error_ = $MYSQLTEST_VARDIR/log/mysqld.1.err;
+}
+--let $assert_file= $log_error_
+--let $assert_only_after = CURRENT_TEST: rpl.rpl_xa_event_apply_failure
+
+--let $assert_text= Binlog event recovery should fail
+--let $assert_select= Failed to execute recovered binlog query
+--let $assert_count= 1
+--source include/assert_grep.inc
+
+
--connection master
--enable_reconnect
--echo *** must be no 'xa2' commit seen, as it's still prepared:
diff --git a/mysql-test/suite/rpl/t/rpl_xa_prepare_commit_prepare.test b/mysql-test/suite/rpl/t/rpl_xa_prepare_commit_prepare.test
index 7b987c7f29b..b9be3c3bac4 100644
--- a/mysql-test/suite/rpl/t/rpl_xa_prepare_commit_prepare.test
+++ b/mysql-test/suite/rpl/t/rpl_xa_prepare_commit_prepare.test
@@ -75,6 +75,25 @@ connection server_1;
--connection master
--enable_reconnect
--source include/wait_until_connected_again.inc
+let $log_error_= `SELECT @@GLOBAL.log_error`;
+if(!$log_error_)
+{
+ # MySQL Server on windows is started with --console and thus
+ # does not know the location of its .err log, use default location
+ let $log_error_ = $MYSQLTEST_VARDIR/log/mysqld.1.err;
+}
+--let $assert_file= $log_error_
+--let $assert_only_after = CURRENT_TEST: rpl.rpl_xa_prepare_commit_prepare
+
+--let $assert_text= Binlog XA PREPARE event should be successfully recovered
+--let $assert_select=Recovered binlog event XA PREPARE.*successfully applied\$
+--let $assert_count= 1
+--source include/assert_grep.inc
+
+--let $assert_text= Binlog XA crash recovery should successfully finish
+--let $assert_select=Binlog XA crash recovery finished
+--let $assert_count= 1
+--source include/assert_grep.inc
--connection slave
--source include/start_slave.inc
diff --git a/mysql-test/suite/rpl/t/rpl_xa_prepare_crash_safe.test b/mysql-test/suite/rpl/t/rpl_xa_prepare_crash_safe.test
index 9d2c5cce528..3c3777dd024 100644
--- a/mysql-test/suite/rpl/t/rpl_xa_prepare_crash_safe.test
+++ b/mysql-test/suite/rpl/t/rpl_xa_prepare_crash_safe.test
@@ -6,6 +6,7 @@
#
# Steps:
# 0 - Generate 3 explicit XA transactions. 'xa1', 'xa2' and 'xa3'.
+# 'xa1' is prepared.
# Using debug simulation hold the execution of second XA PREPARE
# statement after the XA PREPARE is written to the binary log.
# With this the prepare will not be done in engine.
@@ -95,6 +96,25 @@ connection server_1;
--enable_reconnect
--source include/wait_until_connected_again.inc
+let $log_error_= `SELECT @@GLOBAL.log_error`;
+if(!$log_error_)
+{
+ # MySQL Server on windows is started with --console and thus
+ # does not know the location of its .err log, use default location
+ let $log_error_ = $MYSQLTEST_VARDIR/log/mysqld.1.err;
+}
+--let $assert_file= $log_error_
+--let $assert_only_after = CURRENT_TEST: rpl.rpl_xa_prepare_crash_safe
+
+--let $assert_text= Binlog XA PREPARE event should be successfully recovered
+--let $assert_select=Recovered binlog event XA PREPARE.*successfully applied\$
+--let $assert_count= 2
+--source include/assert_grep.inc
+
+--let $assert_text= Binlog XA crash recovery should successfully finish
+--let $assert_select=Binlog XA crash recovery finished
+--let $assert_count= 1
+--source include/assert_grep.inc
--connection slave
--source include/start_slave.inc
diff --git a/mysql-test/suite/rpl/t/rpl_xa_rollback_commit_crash_safe.test b/mysql-test/suite/rpl/t/rpl_xa_rollback_commit_crash_safe.test
index 1d19f96116e..fbfe98e9e11 100644
--- a/mysql-test/suite/rpl/t/rpl_xa_rollback_commit_crash_safe.test
+++ b/mysql-test/suite/rpl/t/rpl_xa_rollback_commit_crash_safe.test
@@ -1,6 +1,6 @@
# ==== Purpose ====
#
-# Test verifies that XA COMMIT statements are crash safe.
+# Test verifies that XA ROLLBACK statements are crash safe.
#
# ==== Implementation ====
#
@@ -77,6 +77,26 @@ connection server_1;
--enable_reconnect
--source include/wait_until_connected_again.inc
+let $log_error_= `SELECT @@GLOBAL.log_error`;
+if(!$log_error_)
+{
+ # MySQL Server on windows is started with --console and thus
+ # does not know the location of its .err log, use default location
+ let $log_error_ = $MYSQLTEST_VARDIR/log/mysqld.1.err;
+}
+--let $assert_file= $log_error_
+--let $assert_only_after = CURRENT_TEST: rpl.rpl_xa_rollback_commit_crash_safe
+
+--let $assert_text= Binlog XA ROLLBACK event should be successfully recovered
+--let $assert_select=Recovered binlog event XA ROLLBACK.*successfully applied\$
+--let $assert_count= 1
+--source include/assert_grep.inc
+
+--let $assert_text= Binlog XA crash recovery should successfully finish
+--let $assert_select=Binlog XA crash recovery finished
+--let $assert_count= 1
+--source include/assert_grep.inc
+
--connection slave
--source include/start_slave.inc
--sync_with_master
diff --git a/sql/log.cc b/sql/log.cc
index a59fc9467aa..1febec22170 100644
--- a/sql/log.cc
+++ b/sql/log.cc
@@ -11082,14 +11082,14 @@ bool MYSQL_BIN_LOG::recover_explicit_xa_prepare()
{
if ((err= ev->apply_event(rgi)))
{
- sql_print_error("Failed to execute binlog query event of type: %s,"
- " at %s:%llu; error %d %s", ev->get_type_str(),
- linfo.log_file_name,
- (ev->log_pos - ev->data_written),
- thd->get_stmt_da()->sql_errno(),
- thd->get_stmt_da()->message());
- delete ev;
- goto err1;
+ sql_print_error(
+ "Failed to execute recovered binlog query event of type: %s,"
+ " at %s:%llu; error %d %s",
+ ev->get_type_str(), linfo.log_file_name,
+ (ev->log_pos - ev->data_written),
+ thd->get_stmt_da()->sql_errno(), thd->get_stmt_da()->message());
+ delete ev;
+ goto err1;
}
else if (typ == FORMAT_DESCRIPTION_EVENT)
enable_apply_event=false;
@@ -11100,7 +11100,7 @@ bool MYSQL_BIN_LOG::recover_explicit_xa_prepare()
--recover_xa_count;
enable_apply_event=false;
- sql_print_information("Binlog event %s at %s:%llu"
+ sql_print_information("Recovered binlog event %s at %s:%llu"
" successfully applied",
typ == XA_PREPARE_LOG_EVENT ?
static_cast<XA_prepare_log_event *>(ev)->get_query() :
@@ -11130,7 +11130,7 @@ err1:
*/
if (recover_xa_count > 0)
goto err2;
- sql_print_information("Crash recovery finished.");
+ sql_print_information("Binlog XA crash recovery finished.");
err= false;
err2:
if (file >= 0)