1
0
mirror of https://github.com/MariaDB/server.git synced 2025-12-01 17:39:21 +03:00

Bug #14676111 WRONG PAGE_LEVEL WRITTEN FOR UPPER THAN FATHER PAGE AT BTR_LIFT_PAGE_UP()

btr_lift_page_up() writes wrong page number (different by -1) for upper than father page.
But in almost all of the cases, the father page should be root page, no upper
pages. It is very rare path.

In addition the leaf page should not be lifted unless the father page is root.
Because the branch pages should not become the leaf pages.

rb://1336 approved by Marko Makela.
This commit is contained in:
Yasufumi Kinoshita
2012-11-12 22:31:30 +09:00
parent 2ad007dfd6
commit 5a7553f36a
22 changed files with 575 additions and 7 deletions

View File

@@ -1964,6 +1964,15 @@ srv_export_innodb_status(void)
export_vars.innodb_rows_updated = srv_n_rows_updated;
export_vars.innodb_rows_deleted = srv_n_rows_deleted;
#ifdef UNIV_DEBUG
if (ut_dulint_cmp(trx_sys->max_trx_id, purge_sys->done_trx_no) < 0) {
export_vars.innodb_purge_trx_id_age = 0;
} else {
export_vars.innodb_purge_trx_id_age =
ut_dulint_minus(trx_sys->max_trx_id, purge_sys->done_trx_no);
}
#endif /* UNIV_DEBUG */
mutex_exit(&srv_innodb_monitor_mutex);
}
@@ -2468,6 +2477,30 @@ loop:
srv_main_thread_op_info = "sleeping";
srv_main_1_second_loops++;
#ifdef UNIV_DEBUG
if (btr_cur_limit_optimistic_insert_debug) {
/* If btr_cur_limit_optimistic_insert_debug is enabled
and no purge_threads, purge opportunity is increased
by x100 (1purge/100msec), to speed up debug scripts
which should wait for purged. */
if (!skip_sleep) {
os_thread_sleep(100000);
srv_main_sleeps++;
}
do {
if (srv_fast_shutdown
&& srv_shutdown_state > 0) {
goto background_loop;
}
srv_main_thread_op_info = "purging";
n_pages_purged = trx_purge();
} while (n_pages_purged);
} else
#endif /* UNIV_DEBUG */
if (!skip_sleep) {
os_thread_sleep(1000000);