mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
MDEV-14058 InnoDB Assertion failure !leaf on rem0rec.cc line 566 on test innodb_gis.rtree_recovery
The function rtr_update_mbr_field_in_place() is generating MLOG_REC_UPDATE_IN_PLACE or MLOG_COMP_REC_UPDATE_IN_PLACE records on non-leaf pages, even though MLOG_WRITE_STRING would perfectly suffice for updating a fixed-length data field. btr_cur_parse_update_in_place(): If flags==7, the record may be from rtr_update_mbr_field_in_place(), and we must check if the page is a leaf page. Otherwise, assume that it is. btr_cur_update_in_place(): Assert that the page is a leaf page.
This commit is contained in:
@ -14,7 +14,6 @@ gis_split_inf : MDEV-14057 InnoDB GIS tests fail
|
|||||||
row_format : MDEV-14057 InnoDB GIS tests fail
|
row_format : MDEV-14057 InnoDB GIS tests fail
|
||||||
rtree_estimate : MDEV-14057 InnoDB GIS tests fail
|
rtree_estimate : MDEV-14057 InnoDB GIS tests fail
|
||||||
rtree_multi_pk : MDEV-14057 InnoDB GIS tests fail
|
rtree_multi_pk : MDEV-14057 InnoDB GIS tests fail
|
||||||
rtree_recovery : MDEV-14058 InnoDB Assertion failure !leaf on rem0rec.cc line 566 on test innodb_gis.rtree_recovery
|
|
||||||
tree_search : MDEV-14057 InnoDB GIS tests fail
|
tree_search : MDEV-14057 InnoDB GIS tests fail
|
||||||
rtree_concurrent_srch: MDEV-14059 InnoDB assertion failure offset >= ((38U + 36 + 2 * 10) + 5) at page0page.h line 318
|
rtree_concurrent_srch: MDEV-14059 InnoDB assertion failure offset >= ((38U + 36 + 2 * 10) + 5) at page0page.h line 318
|
||||||
point_big : MDEV-14057 InnoDB GIS tests fail
|
point_big : MDEV-14057 InnoDB GIS tests fail
|
||||||
|
@ -1,4 +1,3 @@
|
|||||||
# restart
|
|
||||||
create table t1 (c1 int, c2 geometry not null, spatial index (c2))engine=innodb;
|
create table t1 (c1 int, c2 geometry not null, spatial index (c2))engine=innodb;
|
||||||
create procedure insert_t1(IN total int)
|
create procedure insert_t1(IN total int)
|
||||||
begin
|
begin
|
||||||
@ -33,10 +32,9 @@ Table Op Msg_type Msg_text
|
|||||||
test.t1 check status OK
|
test.t1 check status OK
|
||||||
select count(*) from t1;
|
select count(*) from t1;
|
||||||
count(*)
|
count(*)
|
||||||
18
|
17
|
||||||
select c1, ST_astext(c2) from t1;
|
select c1, ST_astext(c2) from t1;
|
||||||
c1 ST_astext(c2)
|
c1 ST_astext(c2)
|
||||||
350 POINT(10350 10350)
|
|
||||||
351 POINT(10351 10351)
|
351 POINT(10351 10351)
|
||||||
352 POINT(10352 10352)
|
352 POINT(10352 10352)
|
||||||
353 POINT(10353 10353)
|
353 POINT(10353 10353)
|
||||||
|
@ -3485,7 +3485,15 @@ btr_cur_parse_update_in_place(
|
|||||||
/* We do not need to reserve search latch, as the page is only
|
/* We do not need to reserve search latch, as the page is only
|
||||||
being recovered, and there cannot be a hash index to it. */
|
being recovered, and there cannot be a hash index to it. */
|
||||||
|
|
||||||
offsets = rec_get_offsets(rec, index, NULL, true,
|
/* The function rtr_update_mbr_field_in_place() is generating
|
||||||
|
these records on node pointer pages; therefore we have to
|
||||||
|
check if this is a leaf page. */
|
||||||
|
|
||||||
|
offsets = rec_get_offsets(rec, index, NULL,
|
||||||
|
flags != (BTR_NO_UNDO_LOG_FLAG
|
||||||
|
| BTR_NO_LOCKING_FLAG
|
||||||
|
| BTR_KEEP_SYS_FLAG)
|
||||||
|
|| page_is_leaf(page),
|
||||||
ULINT_UNDEFINED, &heap);
|
ULINT_UNDEFINED, &heap);
|
||||||
|
|
||||||
if (!(flags & BTR_KEEP_SYS_FLAG)) {
|
if (!(flags & BTR_KEEP_SYS_FLAG)) {
|
||||||
@ -3620,6 +3628,7 @@ btr_cur_update_in_place(
|
|||||||
roll_ptr_t roll_ptr = 0;
|
roll_ptr_t roll_ptr = 0;
|
||||||
ulint was_delete_marked;
|
ulint was_delete_marked;
|
||||||
|
|
||||||
|
ut_ad(page_is_leaf(cursor->page_cur.block->frame));
|
||||||
rec = btr_cur_get_rec(cursor);
|
rec = btr_cur_get_rec(cursor);
|
||||||
index = cursor->index;
|
index = cursor->index;
|
||||||
ut_ad(rec_offs_validate(rec, index, offsets));
|
ut_ad(rec_offs_validate(rec, index, offsets));
|
||||||
|
Reference in New Issue
Block a user