From 7f5a3cd2532716a7c8d8308d8afc2dcb3a856ba3 Mon Sep 17 00:00:00 2001 From: Daniel Black Date: Mon, 4 Apr 2022 17:13:33 +1000 Subject: [PATCH 1/2] MDEV-28231: innodb: format string warning on aix UINT64PFx (ib_id_t) ib_id_t is a uint64. On AIX this isn't a long long unsigned and to prevent the compile warnings and potential wrong type, the UINT64PFx defination is corrected. As INT64PF is unused (last use, xtradb in 10.2), it is removed to remove the confusion that INT64PF and UINT64PFx would be different types otherwise. --- storage/innobase/include/univ.i | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/storage/innobase/include/univ.i b/storage/innobase/include/univ.i index cb18caa0f28..3c8dfb2ddf6 100644 --- a/storage/innobase/include/univ.i +++ b/storage/innobase/include/univ.i @@ -400,22 +400,19 @@ typedef ssize_t lint; #ifdef _WIN32 /* Use the integer types and formatting strings defined in Visual Studio. */ # define UINT32PF "%u" -# define INT64PF "%lld" # define UINT64scan "llu" # define UINT64PFx "%016llx" #elif defined __APPLE__ /* Apple prefers to call the 64-bit types 'long long' in both 32-bit and 64-bit environments. */ # define UINT32PF "%" PRIu32 -# define INT64PF "%lld" # define UINT64scan "llu" # define UINT64PFx "%016llx" #elif defined _AIX /* Workaround for macros expension trouble */ # define UINT32PF "%u" -# define INT64PF "%lld" # define UINT64scan "lu" -# define UINT64PFx "%016llx" +# define UINT64PFx "%016lx" #else /* Use the integer types and formatting strings defined in the C99 standard. */ # define UINT32PF "%" PRIu32 From 6a3545dd1e3a7fdf63ac22ad049fd7763f35a13e Mon Sep 17 00:00:00 2001 From: Vlad Lesin Date: Fri, 1 Apr 2022 15:58:31 +0300 Subject: [PATCH 2/2] MDEV-26322 Last binlog file and position are "empty" in mariabackup --prepare output MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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. --- mysql-test/suite/mariabackup/binlog.result | 2 +- mysql-test/suite/mariabackup/binlog.test | 2 +- storage/innobase/srv/srv0start.cc | 3 --- 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);