@@ -3053,7 +3053,7 @@ btr_page_redistribute_before_split(
30533053 }
30543054 n_uniq = dict_index_get_n_unique_in_tree (cursor->index );
30553055
3056- // btr_page_redistribute_before_split: 0. get ready
3056+ // 0. get cur page, neigbor page info
30573057 block = btr_cur_get_block (cursor);
30583058 page = btr_cur_get_page (cursor);
30593059 index = btr_cur_get_index (cursor);
@@ -3121,7 +3121,7 @@ btr_page_redistribute_before_split(
31213121
31223122 ulint* offsets1;
31233123
3124- // choose the merge page
3124+ // 1. choose the merge page
31253125
31263126 if ((page_get_data_size (page)<=page_get_data_size (left_page)) && (page_get_data_size (page)<= page_get_data_size (right_page))){
31273127 // neighbor page has more data than cur page
@@ -3158,8 +3158,7 @@ btr_page_redistribute_before_split(
31583158
31593159 btr_page_reorganize (&next_page_cursor, cursor->index , mtr);
31603160 btr_page_reorganize (&page_cursor, cursor->index , mtr);
3161- // ib_logf(IB_LOG_LEVEL_INFO, "first rec: %lu, last rec: %lu, last rec of right page: %lu, first rec of right page: %lu", page_rec_get_next(page_get_infimum_rec(page)), page_rec_get_prev(page_get_supremum_rec(page)), page_rec_get_prev(page_get_supremum_rec(right_page)), page_rec_get_next(page_get_infimum_rec(right_page)));
3162-
3161+
31633162 is_left = FALSE ;
31643163 max_data_size_to_move = dict_index_zip_pad_optimal_page_size (index) - page_get_data_size (right_page);
31653164 n_moving_recs = page_get_n_recs (page) - (page_get_n_recs (right_page)+ page_get_n_recs (page))/2 ;
@@ -3400,7 +3399,6 @@ btr_page_redistribute_before_split(
34003399
34013400 }
34023401
3403- // btr_page_redistribute_before_split:
34043402 // 2. move records to the merge page.
34053403 if (is_left) {
34063404 // move record list to left page
@@ -3410,6 +3408,7 @@ btr_page_redistribute_before_split(
34103408 index, mtr);
34113409
34123410 if (!orig_pred) {
3411+ // if this happens, mysql crash might occur
34133412 if (zip_size && page_is_leaf (page) && !dict_index_is_clust (cursor->index )) {
34143413 ibuf_reset_free_bits (merge_block);
34153414 ibuf_reset_free_bits (block);
@@ -3441,7 +3440,8 @@ btr_page_redistribute_before_split(
34413440 if (!orig_succ) {
34423441 ut_a (merge_page_zip);
34433442
3444- // ib_logf(IB_LOG_LEVEL_INFO, "redistribute : move record list to right page failed");
3443+ // redistribute : move record list to right page failed
3444+ // if this happens, mysql crash might occur
34453445 if (zip_size&& page_is_leaf (page) && !dict_index_is_clust (cursor->index )) {
34463446 ibuf_reset_free_bits (merge_block);
34473447 ibuf_reset_free_bits (block);
@@ -3465,6 +3465,8 @@ btr_page_redistribute_before_split(
34653465 ut_a (!merge_page_zip || page_zip_validate (merge_page_zip, merge_page,
34663466 index));
34673467 #endif /* UNIV_ZIP_DEBUG */
3468+
3469+ // 5. insert cur record to redistributed page
34683470
34693471 if (insert_to_cur_page){
34703472 ut_a (insert_block == block);
@@ -3540,13 +3542,13 @@ btr_page_redistribute_before_split(
35403542 ut_ad (btr_check_node_ptr (index, right_page_block, mtr));
35413543 ut_ad (btr_check_node_ptr (index, block, mtr));
35423544
3543- // 5. insert cur record to redistributed page
3545+
35443546
35453547
35463548
3547- // 7. update insert buffer bitmap
3549+ // 7. update insert buffer bitmap
35483550
3549- if (!dict_index_is_clust (cursor->index ) && page_is_leaf (merge_page)) {
3551+ if (!dict_index_is_clust (cursor->index ) && page_is_leaf (merge_page)) {
35503552 /* Update the free bits of the B-tree page in the
35513553 insert buffer bitmap. This has to be done in a
35523554 separate mini-transaction that is committed before the
@@ -3586,28 +3588,26 @@ btr_page_redistribute_before_split(
35863588
35873589 }
35883590
3589- }
3591+ }
35903592
3591- ut_a (page_validate (merge_page, index));
3592- ut_a (page_validate (page, index));
3593-
3594- btr_assert_not_corrupted (block, index);
3595- btr_assert_not_corrupted (left_page_block, index);
3596- btr_assert_not_corrupted (right_page_block, index);
3593+ ut_a (page_validate (merge_page, index));
3594+ ut_a (page_validate (page, index));
35973595
3598- if (rec != NULL ) {
3599- ut_ad (rec_offs_validate (rec, cursor->index , *rec_offsets));
3600- return (rec);
3601- }
3602- else {
3596+ btr_assert_not_corrupted (block, index);
3597+ btr_assert_not_corrupted (left_page_block, index);
3598+ btr_assert_not_corrupted (right_page_block, index);
36033599
3600+ if (rec != NULL ) {
3601+ ut_ad (rec_offs_validate (rec, cursor->index , *rec_offsets));
3602+ return (rec);
3603+ }else {
36043604 if (zip_size&& page_is_leaf (page) && !dict_index_is_clust (cursor->index )) {
36053605 ibuf_reset_free_bits (merge_block);
36063606 ibuf_reset_free_bits (block);
36073607 }
36083608 // data redistribution failed
36093609 goto err_exit;
3610- }
3610+ }
36113611
36123612err_exit:
36133613 btr_cur_position (
0 commit comments