MDEV-29507 InnoDB: Failing assertion: table->n_rec_locks == 0

lock_place_prdt_page_lock(): Do not place locks on temporary tables.
Temporary tables can only be accessed from one connection, so
it does not make any sense to acquire any transactional locks on them.
This commit is contained in:
Marko Mäkelä 2022-09-12 09:27:46 +03:00
parent 43745b7e17
commit 667df98c3e
3 changed files with 26 additions and 0 deletions

View file

@ -12,3 +12,13 @@ CREATE TEMPORARY TABLE t1 (c POINT NOT NULL,SPATIAL (c)) ENGINE=InnoDB;
INSERT INTO t1 SELECT POINT(0,0) FROM seq_1_to_366;
INSERT INTO t1 VALUES (POINT(1e-270,1e-130));
DROP TABLE t1;
#
# MDEV-29507 InnoDB: Failing assertion: table->n_rec_locks == 0
#
connect con1,localhost,root,,;
CREATE TEMPORARY TABLE t (c POINT NOT NULL,SPATIAL (c)) ENGINE=InnoDB;
INSERT INTO t SELECT POINTFROMTEXT ('POINT(0 0)') FROM seq_1_to_500;
XA BEGIN 'a';
DELETE FROM t ORDER BY c;
disconnect con1;
# End of 10.3 tests

View file

@ -16,3 +16,16 @@ CREATE TEMPORARY TABLE t1 (c POINT NOT NULL,SPATIAL (c)) ENGINE=InnoDB;
INSERT INTO t1 SELECT POINT(0,0) FROM seq_1_to_366;
INSERT INTO t1 VALUES (POINT(1e-270,1e-130));
DROP TABLE t1;
--echo #
--echo # MDEV-29507 InnoDB: Failing assertion: table->n_rec_locks == 0
--echo #
connect con1,localhost,root,,;
CREATE TEMPORARY TABLE t (c POINT NOT NULL,SPATIAL (c)) ENGINE=InnoDB;
INSERT INTO t SELECT POINTFROMTEXT ('POINT(0 0)') FROM seq_1_to_500;
XA BEGIN 'a';
DELETE FROM t ORDER BY c;
disconnect con1;
--echo # End of 10.3 tests

View file

@ -916,6 +916,9 @@ lock_place_prdt_page_lock(
ut_ad(!dict_index_is_clust(index));
ut_ad(!dict_index_is_online_ddl(index));
if (index->table->is_temporary()) {
return DB_SUCCESS;
}
/* Another transaction cannot have an implicit lock on the record,
because when we come here, we already have modified the clustered