summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThirunarayanan Balathandayuthapani <thiru@mariadb.com>2022-01-18 13:38:08 +0530
committerThirunarayanan Balathandayuthapani <thiru@mariadb.com>2022-01-18 13:39:01 +0530
commitc5b88c464295191ae7fb5101bb278fda3a80d13e (patch)
treee43a61be1c223b816562d427f1e67edbf41a03d2
parent47e18af906f41c3b15796b8d4e6da9b744491b91 (diff)
downloadmariadb-git-bb-10.2-MDEV-27417.tar.gz
MDEV-27417 InnoDB spatial index updates change buffer bitmap pagebb-10.2-MDEV-27417
- 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) {