diff options
Diffstat (limited to 'innobase/log/log0recv.c')
-rw-r--r-- | innobase/log/log0recv.c | 20 |
1 files changed, 19 insertions, 1 deletions
diff --git a/innobase/log/log0recv.c b/innobase/log/log0recv.c index 1223f9b6041..0fcf32ad99e 100644 --- a/innobase/log/log0recv.c +++ b/innobase/log/log0recv.c @@ -69,6 +69,8 @@ ulint recv_previous_parsed_rec_type = 999999; ulint recv_previous_parsed_rec_offset = 0; ulint recv_previous_parsed_rec_is_multi = 0; +ulint recv_max_parsed_page_no = 0; + /************************************************************ Creates the recovery system. */ @@ -141,7 +143,13 @@ recv_sys_empty_hash(void) /*=====================*/ { ut_ad(mutex_own(&(recv_sys->mutex))); - ut_a(recv_sys->n_addrs == 0); + if (recv_sys->n_addrs != 0) { + fprintf(stderr, +"InnoDB: Error: %lu pages with log records were left unprocessed!\n" +"InnoDB: Maximum page number with log records on it %lu\n", + recv_sys->n_addrs, recv_max_parsed_page_no); + ut_a(0); + } hash_table_free(recv_sys->addr_hash); mem_heap_empty(recv_sys->heap); @@ -1361,6 +1369,12 @@ recv_apply_log_recs_for_backup( n_pages_total += file_sizes[i]; } + if (recv_max_parsed_page_no >= n_pages_total) { + printf( +"InnoDB: Error: tablespace size %lu pages, but a log record on page %lu!\n", + n_pages_total, recv_max_parsed_page_no); + } + printf( "InnoDB: Starting an apply batch of log records to the database...\n" "InnoDB: Progress in percents: "); @@ -1701,6 +1715,10 @@ recv_parse_log_rec( return(0); } + if (*page_no > recv_max_parsed_page_no) { + recv_max_parsed_page_no = *page_no; + } + return(new_ptr - ptr); } |