Commit 39f45f6f authored by Marko Mäkelä's avatar Marko Mäkelä

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 0b47c126 (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.
parent 7d92c9d2
...@@ -1829,7 +1829,13 @@ btr_root_raise_and_insert( ...@@ -1829,7 +1829,13 @@ btr_root_raise_and_insert(
|| !page_copy_rec_list_end(new_block, root, || !page_copy_rec_list_end(new_block, root,
page_get_infimum_rec(root->page.frame), page_get_infimum_rec(root->page.frame),
index, mtr, err)) { index, mtr, err)) {
if (*err != DB_SUCCESS && *err != DB_FAIL) { switch (*err) {
case DB_SUCCESS:
break;
case DB_FAIL:
*err = DB_SUCCESS;
break;
default:
return nullptr; return nullptr;
} }
...@@ -1964,14 +1970,8 @@ btr_root_raise_and_insert( ...@@ -1964,14 +1970,8 @@ btr_root_raise_and_insert(
} }
/* Split the child and insert tuple */ /* Split the child and insert tuple */
if (dict_index_is_spatial(index)) { return btr_page_split_and_insert(flags, cursor, offsets, heap,
/* Split rtree page and insert tuple */ tuple, n_ext, mtr, err);
return(rtr_page_split_and_insert(flags, cursor, offsets, heap,
tuple, n_ext, mtr, err));
} else {
return(btr_page_split_and_insert(flags, cursor, offsets, heap,
tuple, n_ext, mtr, err));
}
} }
/** Decide if the page should be split at the convergence point of inserts /** Decide if the page should be split at the convergence point of inserts
...@@ -3348,7 +3348,13 @@ btr_lift_page_up( ...@@ -3348,7 +3348,13 @@ btr_lift_page_up(
|| !page_copy_rec_list_end(father_block, block, || !page_copy_rec_list_end(father_block, block,
page_get_infimum_rec(page), page_get_infimum_rec(page),
index, mtr, err)) { index, mtr, err)) {
if (*err != DB_SUCCESS && *err != DB_FAIL) { switch (*err) {
case DB_SUCCESS:
break;
case DB_FAIL:
*err = DB_SUCCESS;
break;
default:
return nullptr; return nullptr;
} }
......
...@@ -986,6 +986,8 @@ rtr_page_split_and_insert( ...@@ -986,6 +986,8 @@ rtr_page_split_and_insert(
return nullptr; return nullptr;
} }
*err = DB_SUCCESS;
ulint n = 0; ulint n = 0;
rec_t* rec; rec_t* rec;
ulint moved = 0; ulint moved = 0;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment