Skip to content

Commit 39edbba

Browse files
committed
MDEV-39303: Skip ibuf_upgrade() if innodb_force_recovery=6
ibuf_upgrade_needed(): Pretend that no upgrade is needed when innodb_force_recovery=6. srv_load_tables(): Test the least likely condition first. srv_start(): Remove a message that is duplicating one at the start of recv_recovery_from_checkpoint_start(). This was tested by starting up a server on an empty data directory that had been created by MariaDB Server 10.6. Reviewed by: Thirunarayanan Balathandayuthapani
1 parent b7038e3 commit 39edbba

File tree

2 files changed

+7
-9
lines changed

2 files changed

+7
-9
lines changed

storage/innobase/ibuf/ibuf0ibuf.cc

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1025,6 +1025,9 @@ ATTRIBUTE_COLD dberr_t ibuf_upgrade()
10251025

10261026
dberr_t ibuf_upgrade_needed()
10271027
{
1028+
if (srv_force_recovery == SRV_FORCE_NO_LOG_REDO)
1029+
return DB_SUCCESS;
1030+
10281031
mtr_t mtr{nullptr};
10291032
mtr.start();
10301033
mtr.x_lock_space(fil_system.sys_space);
@@ -1035,8 +1038,6 @@ dberr_t ibuf_upgrade_needed()
10351038
{
10361039
err_exit:
10371040
sql_print_error("InnoDB: The change buffer is corrupted");
1038-
if (srv_force_recovery == SRV_FORCE_NO_LOG_REDO)
1039-
err= DB_SUCCESS;
10401041
func_exit:
10411042
mtr.commit();
10421043
return err;
@@ -1067,7 +1068,7 @@ dberr_t ibuf_upgrade_needed()
10671068
" of the change buffer");
10681069
err= DB_READ_ONLY;
10691070
}
1070-
else if (srv_force_recovery != SRV_FORCE_NO_LOG_REDO)
1071+
else
10711072
err= DB_FAIL;
10721073

10731074
goto func_exit;

storage/innobase/srv/srv0start.cc

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1217,8 +1217,8 @@ static dberr_t srv_load_tables(bool must_upgrade_ibuf) noexcept
12171217
dberr_t err = dict_load_indexes(&mtr, dict_sys.sys_tables, false, heap,
12181218
DICT_ERR_IGNORE_NONE);
12191219
mem_heap_empty(heap);
1220-
if ((err == DB_SUCCESS || srv_force_recovery >= SRV_FORCE_NO_DDL_UNDO) &&
1221-
UNIV_UNLIKELY(must_upgrade_ibuf))
1220+
if (UNIV_UNLIKELY(must_upgrade_ibuf) &&
1221+
(err == DB_SUCCESS || srv_force_recovery >= SRV_FORCE_NO_DDL_UNDO))
12221222
{
12231223
dict_sys.unlock();
12241224
dict_load_tablespaces(nullptr, true);
@@ -1412,10 +1412,7 @@ dberr_t srv_start(bool create_new_db)
14121412
|| srv_operation == SRV_OPERATION_RESTORE_EXPORT);
14131413
ut_ad(!recv_sys.recovery_on);
14141414

1415-
if (srv_force_recovery >= SRV_FORCE_NO_LOG_REDO) {
1416-
sql_print_information("InnoDB: innodb_force_recovery=6"
1417-
" skips redo log apply");
1418-
} else {
1415+
if (srv_force_recovery < SRV_FORCE_NO_LOG_REDO) {
14191416
log_sys.latch.wr_lock();
14201417
err = recv_sys.find_checkpoint();
14211418
log_sys.latch.wr_unlock();

0 commit comments

Comments
 (0)