summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThirunarayanan Balathandayuthapani <thiru@mariadb.com>2022-01-18 13:38:08 +0530
committerMarko Mäkelä <marko.makela@mariadb.com>2022-01-20 12:50:47 +0200
commit474c6df804e74949a573d1d80013ae98378df479 (patch)
treef3f86366e8b8c4f183690be3bbe7e7dab26231a0
parent7dcef6504620114f503dea92eadbb0e0fe95eb17 (diff)
downloadmariadb-git-474c6df804e74949a573d1d80013ae98378df479.tar.gz
MDEV-27417 InnoDB spatial index updates change buffer bitmap page
- InnoDB change buffer doesn't support spatial index. Spatial index should avoid change the buffer bitmap page when the page split happens.
-rw-r--r--mysql-test/suite/innodb_gis/r/rtree_split.result7
-rw-r--r--mysql-test/suite/innodb_gis/t/rtree_split.test8
-rw-r--r--storage/innobase/gis/gis0rtree.cc9
3 files changed, 15 insertions, 9 deletions
diff --git a/mysql-test/suite/innodb_gis/r/rtree_split.result b/mysql-test/suite/innodb_gis/r/rtree_split.result
index df88960ba3d..2d6e8a1dfbe 100644
--- a/mysql-test/suite/innodb_gis/r/rtree_split.result
+++ b/mysql-test/suite/innodb_gis/r/rtree_split.result
@@ -61,3 +61,10 @@ select count(*) from t1 where MBRWithin(t1.c2, @g1);
count(*)
57344
drop table t1;
+#
+# MDEV-27417 Spatial index tries to update
+# change buffer bookkeeping page
+#
+CREATE TEMPORARY TABLE t1 (c POINT NOT NULL, SPATIAL(c)) ENGINE=InnoDB;
+INSERT INTO t1 SELECT PointFromText('POINT(0 0)') FROM seq_1_to_366;
+DROP TABLE t1;
diff --git a/mysql-test/suite/innodb_gis/t/rtree_split.test b/mysql-test/suite/innodb_gis/t/rtree_split.test
index af626dba6b7..dd46d1ecc4d 100644
--- a/mysql-test/suite/innodb_gis/t/rtree_split.test
+++ b/mysql-test/suite/innodb_gis/t/rtree_split.test
@@ -72,3 +72,11 @@ select count(*) from t1 where MBRWithin(t1.c2, @g1);
# Clean up.
drop table t1;
+
+--echo #
+--echo # MDEV-27417 Spatial index tries to update
+--echo # change buffer bookkeeping page
+--echo #
+CREATE TEMPORARY TABLE t1 (c POINT NOT NULL, SPATIAL(c)) ENGINE=InnoDB;
+INSERT INTO t1 SELECT PointFromText('POINT(0 0)') FROM seq_1_to_366;
+DROP TABLE t1;
diff --git a/storage/innobase/gis/gis0rtree.cc b/storage/innobase/gis/gis0rtree.cc
index e3d5a09f736..50071bcfae4 100644
--- a/storage/innobase/gis/gis0rtree.cc
+++ b/storage/innobase/gis/gis0rtree.cc
@@ -1262,15 +1262,6 @@ after_insert:
page_zip = buf_block_get_page_zip(root_block);
page_set_ssn_id(root_block, page_zip, next_ssn, mtr);
- /* Insert fit on the page: update the free bits for the
- left and right pages in the same mtr */
-
- if (page_is_leaf(page)) {
- ibuf_update_free_bits_for_two_pages_low(
- block, new_block, mtr);
- }
-
-
/* If the new res insert fail, we need to do another split
again. */
if (!rec) {