summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVlad Lesin <vlad_lesin@mail.ru>2022-04-01 15:58:31 +0300
committerVlad Lesin <vlad_lesin@mail.ru>2022-04-04 12:19:09 +0300
commit6a3545dd1e3a7fdf63ac22ad049fd7763f35a13e (patch)
treed9b627cec68b572a09c1c71982e4f2be5f33770b
parent7f5a3cd2532716a7c8d8308d8afc2dcb3a856ba3 (diff)
downloadmariadb-git-6a3545dd1e3a7fdf63ac22ad049fd7763f35a13e.tar.gz
MDEV-26322 Last binlog file and position are "empty" in mariabackup --prepare output
The issue is caused by 59a0236da4810a5ae243e77cb7a9c6262639a6e4 commit. The initial intention of the commit was to speed up "mariabackup --prepare". The call stack of binlog position reading is the following: ▾ trx_rseg_mem_restore ▾ trx_rseg_array_init ▾ trx_lists_init_at_db_start ▸ srv_start Both trx_lists_init_at_db_start() and trx_rseg_mem_restore() contain special cases for srv_operation == SRV_OPERATION_RESTORE condition, and on this condition only rseg headers are read to parse binlog position. Performance impact is not so big. The solution is to revert 59a0236da4810a5ae243e77cb7a9c6262639a6e4.
-rw-r--r--mysql-test/suite/mariabackup/binlog.result2
-rw-r--r--mysql-test/suite/mariabackup/binlog.test2
-rw-r--r--storage/innobase/srv/srv0start.cc3
3 files changed, 2 insertions, 5 deletions
diff --git a/mysql-test/suite/mariabackup/binlog.result b/mysql-test/suite/mariabackup/binlog.result
index 4f8ed4185ce..7851c2ba069 100644
--- a/mysql-test/suite/mariabackup/binlog.result
+++ b/mysql-test/suite/mariabackup/binlog.result
@@ -3,6 +3,6 @@ INSERT INTO t VALUES(1);
SHOW VARIABLES like 'log_bin';
Variable_name Value
log_bin ON
-FOUND 1 /Last binlog file .*, position .*/ in current_test
+FOUND 1 /Last binlog file .+, position \d+/ in current_test
# expect FOUND
DROP TABLE t;
diff --git a/mysql-test/suite/mariabackup/binlog.test b/mysql-test/suite/mariabackup/binlog.test
index b2f08c2d7bb..9d62e5f8d6b 100644
--- a/mysql-test/suite/mariabackup/binlog.test
+++ b/mysql-test/suite/mariabackup/binlog.test
@@ -15,7 +15,7 @@ exec $XTRABACKUP --defaults-file=$MYSQLTEST_VARDIR/my.cnf --backup --target-dir
exec $XTRABACKUP --prepare --binlog-info=1 --target-dir=$basedir ;
let SEARCH_FILE=$MYSQLTEST_VARDIR/log/current_test;
---let SEARCH_PATTERN= Last binlog file .*, position .*
+--let SEARCH_PATTERN= Last binlog file .+, position \d+
--source include/search_pattern_in_file.inc
--echo # expect FOUND
diff --git a/storage/innobase/srv/srv0start.cc b/storage/innobase/srv/srv0start.cc
index 82153d4cb3b..f3213f891eb 100644
--- a/storage/innobase/srv/srv0start.cc
+++ b/storage/innobase/srv/srv0start.cc
@@ -1479,9 +1479,6 @@ file_checked:
if (err != DB_SUCCESS) {
return srv_init_abort(err);
}
- if (srv_operation == SRV_OPERATION_RESTORE) {
- break;
- }
err = trx_lists_init_at_db_start();
if (err != DB_SUCCESS) {
return srv_init_abort(err);