@@ -659,6 +659,7 @@ recv_check_cp_is_consistent(
659
659
}
660
660
661
661
#ifndef UNIV_HOTBACKUP
662
+
662
663
/********************************************************/ /**
663
664
Looks for the maximum consistent checkpoint from the log groups.
664
665
@return error code or DB_SUCCESS */
@@ -685,8 +686,37 @@ recv_find_max_checkpoint(
685
686
buf = log_sys -> checkpoint_buf ;
686
687
687
688
while (group ) {
689
+
690
+ ulint log_hdr_log_block_size ;
691
+
688
692
group -> state = LOG_GROUP_CORRUPTED ;
689
693
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
+
690
720
for (field = LOG_CHECKPOINT_1 ; field <= LOG_CHECKPOINT_2 ;
691
721
field += LOG_CHECKPOINT_2 - LOG_CHECKPOINT_1 ) {
692
722
@@ -2982,7 +3012,6 @@ recv_recovery_from_checkpoint_start_func(
2982
3012
log_group_t * max_cp_group ;
2983
3013
log_group_t * up_to_date_group ;
2984
3014
ulint max_cp_field ;
2985
- ulint log_hdr_log_block_size ;
2986
3015
ib_uint64_t checkpoint_lsn ;
2987
3016
ib_uint64_t checkpoint_no ;
2988
3017
ib_uint64_t old_scanned_lsn ;
@@ -3085,21 +3114,6 @@ recv_recovery_from_checkpoint_start_func(
3085
3114
log_hdr_buf , max_cp_group );
3086
3115
}
3087
3116
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
-
3103
3117
#ifdef UNIV_LOG_ARCHIVE
3104
3118
group = UT_LIST_GET_FIRST (log_sys -> log_groups );
3105
3119
0 commit comments