Skip to content

Commit 39f45f6

Browse files
committed
MDEV-28950 Assertion `*err == DB_SUCCESS' failed in btr_page_split_and_insert
btr_root_raise_and_insert(), btr_lift_page_up(), rtr_page_split_and_insert(): Reset DB_FAIL from a failure to copy records on a ROW_FORMAT=COMPRESSED page to DB_SUCCESS before retrying. This fixes a regression that was introduced by commit 0b47c12 (MDEV-13542). btr_root_raise_and_insert(): Remove a redundant condition. btr_page_split_and_insert() will invoke btr_page_split_and_insert() if needed.
1 parent 7d92c9d commit 39f45f6

File tree

2 files changed

+18
-10
lines changed

2 files changed

+18
-10
lines changed

storage/innobase/btr/btr0btr.cc

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1829,7 +1829,13 @@ btr_root_raise_and_insert(
18291829
|| !page_copy_rec_list_end(new_block, root,
18301830
page_get_infimum_rec(root->page.frame),
18311831
index, mtr, err)) {
1832-
if (*err != DB_SUCCESS && *err != DB_FAIL) {
1832+
switch (*err) {
1833+
case DB_SUCCESS:
1834+
break;
1835+
case DB_FAIL:
1836+
*err = DB_SUCCESS;
1837+
break;
1838+
default:
18331839
return nullptr;
18341840
}
18351841

@@ -1964,14 +1970,8 @@ btr_root_raise_and_insert(
19641970
}
19651971

19661972
/* Split the child and insert tuple */
1967-
if (dict_index_is_spatial(index)) {
1968-
/* Split rtree page and insert tuple */
1969-
return(rtr_page_split_and_insert(flags, cursor, offsets, heap,
1970-
tuple, n_ext, mtr, err));
1971-
} else {
1972-
return(btr_page_split_and_insert(flags, cursor, offsets, heap,
1973-
tuple, n_ext, mtr, err));
1974-
}
1973+
return btr_page_split_and_insert(flags, cursor, offsets, heap,
1974+
tuple, n_ext, mtr, err);
19751975
}
19761976

19771977
/** Decide if the page should be split at the convergence point of inserts
@@ -3348,7 +3348,13 @@ btr_lift_page_up(
33483348
|| !page_copy_rec_list_end(father_block, block,
33493349
page_get_infimum_rec(page),
33503350
index, mtr, err)) {
3351-
if (*err != DB_SUCCESS && *err != DB_FAIL) {
3351+
switch (*err) {
3352+
case DB_SUCCESS:
3353+
break;
3354+
case DB_FAIL:
3355+
*err = DB_SUCCESS;
3356+
break;
3357+
default:
33523358
return nullptr;
33533359
}
33543360

storage/innobase/gis/gis0rtree.cc

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -986,6 +986,8 @@ rtr_page_split_and_insert(
986986
return nullptr;
987987
}
988988

989+
*err = DB_SUCCESS;
990+
989991
ulint n = 0;
990992
rec_t* rec;
991993
ulint moved = 0;

0 commit comments

Comments
 (0)