@@ -659,6 +659,7 @@ recv_check_cp_is_consistent(
659659}
660660
661661#ifndef UNIV_HOTBACKUP
662+
662663/********************************************************/ /**
663664Looks for the maximum consistent checkpoint from the log groups.
664665@return error code or DB_SUCCESS */
@@ -685,8 +686,37 @@ recv_find_max_checkpoint(
685686buf = log_sys -> checkpoint_buf ;
686687
687688while (group ) {
689+
690+ ulint log_hdr_log_block_size ;
691+
688692group -> state = LOG_GROUP_CORRUPTED ;
689693
694+ /* Assert that we can reuse log_sys->checkpoint_buf to read the
695+ part of the header that contains the log block size. */
696+ ut_ad (LOG_FILE_OS_FILE_LOG_BLOCK_SIZE + 4
697+ < OS_FILE_LOG_BLOCK_SIZE );
698+
699+ fil_io (OS_FILE_READ | OS_FILE_LOG , TRUE, group -> space_id , 0 ,
700+ 0 , 0 , OS_FILE_LOG_BLOCK_SIZE ,
701+ log_sys -> checkpoint_buf , NULL );
702+ log_hdr_log_block_size
703+ = mach_read_from_4 (log_sys -> checkpoint_buf
704+ + LOG_FILE_OS_FILE_LOG_BLOCK_SIZE );
705+ if (log_hdr_log_block_size == 0 ) {
706+ /* 0 means default value */
707+ log_hdr_log_block_size = 512 ;
708+ }
709+ if (log_hdr_log_block_size != srv_log_block_size ) {
710+ fprintf (stderr ,
711+ "InnoDB: Error: The block size of ib_logfile "
712+ "%lu is not equal to innodb_log_block_size "
713+ "%lu.\n"
714+ "InnoDB: Error: Suggestion - Recreate log "
715+ "files.\n" ,
716+ log_hdr_log_block_size , srv_log_block_size );
717+ return (DB_ERROR );
718+ }
719+
690720for (field = LOG_CHECKPOINT_1 ; field <= LOG_CHECKPOINT_2 ;
691721 field += LOG_CHECKPOINT_2 - LOG_CHECKPOINT_1 ) {
692722
@@ -2982,7 +3012,6 @@ recv_recovery_from_checkpoint_start_func(
29823012log_group_t * max_cp_group ;
29833013log_group_t * up_to_date_group ;
29843014ulint max_cp_field ;
2985- ulint log_hdr_log_block_size ;
29863015ib_uint64_t checkpoint_lsn ;
29873016ib_uint64_t checkpoint_no ;
29883017ib_uint64_t old_scanned_lsn ;
@@ -3085,21 +3114,6 @@ recv_recovery_from_checkpoint_start_func(
30853114 log_hdr_buf , max_cp_group );
30863115}
30873116
3088- log_hdr_log_block_size
3089- = mach_read_from_4 (log_hdr_buf + LOG_FILE_OS_FILE_LOG_BLOCK_SIZE );
3090- if (log_hdr_log_block_size == 0 ) {
3091- /* 0 means default value */
3092- log_hdr_log_block_size = 512 ;
3093- }
3094- if (log_hdr_log_block_size != srv_log_block_size ) {
3095- fprintf (stderr ,
3096- "InnoDB: Error: The block size of ib_logfile (%lu) "
3097- "is not equal to innodb_log_block_size.\n"
3098- "InnoDB: Error: Suggestion - Recreate log files.\n" ,
3099- log_hdr_log_block_size );
3100- return (DB_ERROR );
3101- }
3102-
31033117#ifdef UNIV_LOG_ARCHIVE
31043118group = UT_LIST_GET_FIRST (log_sys -> log_groups );
31053119
0 commit comments