summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarko Mäkelä <marko.makela@mariadb.com>2021-04-27 08:44:28 +0300
committerMarko Mäkelä <marko.makela@mariadb.com>2021-04-27 08:44:28 +0300
commit29b2f3dbb543130a7ba71635216a8d7d34cac46e (patch)
tree208e03e23fd11e7a768130ce43ae18c19b6f2df5
parent0785771e571c8e32f29143d1e1e77f46918b2ef1 (diff)
downloadmariadb-git-st-10.3.tar.gz
MDEV-24545 Sequence created by one connection remains invisible to anotherst-10.3
row_merge_is_index_usable(): Allow access to any SEQUENCE, even if it was created after the read view. SQL sequences are no-rollback tables with no history at all.
-rw-r--r--mysql-test/suite/sql_sequence/concurrent_create.result13
-rw-r--r--mysql-test/suite/sql_sequence/concurrent_create.test19
-rw-r--r--storage/innobase/row/row0merge.cc2
3 files changed, 33 insertions, 1 deletions
diff --git a/mysql-test/suite/sql_sequence/concurrent_create.result b/mysql-test/suite/sql_sequence/concurrent_create.result
index 7e68195f7e0..2473abef37d 100644
--- a/mysql-test/suite/sql_sequence/concurrent_create.result
+++ b/mysql-test/suite/sql_sequence/concurrent_create.result
@@ -31,3 +31,16 @@ connection con1;
disconnect con1;
connection default;
DROP TABLE s1,s2;
+CREATE TABLE t1 (a INT) ENGINE=InnoDB;
+START TRANSACTION WITH CONSISTENT SNAPSHOT;
+connect con1,localhost,root,,test;
+CREATE SEQUENCE s1 ENGINE=InnoDB;
+FLUSH TABLES;
+disconnect con1;
+connection default;
+SELECT NEXTVAL(s1);
+NEXTVAL(s1)
+1
+COMMIT;
+DROP TABLE t1;
+DROP SEQUENCE s1;
diff --git a/mysql-test/suite/sql_sequence/concurrent_create.test b/mysql-test/suite/sql_sequence/concurrent_create.test
index d6a57ff7d50..b27a6d3bdb9 100644
--- a/mysql-test/suite/sql_sequence/concurrent_create.test
+++ b/mysql-test/suite/sql_sequence/concurrent_create.test
@@ -56,3 +56,22 @@ FLUSH TABLES;
--connection default
DROP TABLE s1,s2;
+
+#
+# MDEV-24545 Sequence created by one connection remains invisible to another
+#
+CREATE TABLE t1 (a INT) ENGINE=InnoDB;
+START TRANSACTION WITH CONSISTENT SNAPSHOT;
+
+--connect (con1,localhost,root,,test)
+CREATE SEQUENCE s1 ENGINE=InnoDB;
+FLUSH TABLES;
+--disconnect con1
+
+--connection default
+SELECT NEXTVAL(s1);
+COMMIT;
+
+# Cleanup
+DROP TABLE t1;
+DROP SEQUENCE s1;
diff --git a/storage/innobase/row/row0merge.cc b/storage/innobase/row/row0merge.cc
index f77eae9a76d..9e84f9db033 100644
--- a/storage/innobase/row/row0merge.cc
+++ b/storage/innobase/row/row0merge.cc
@@ -4478,7 +4478,7 @@ row_merge_is_index_usable(
}
return(!index->is_corrupted()
- && (index->table->is_temporary()
+ && (index->table->is_temporary() || index->table->no_rollback()
|| index->trx_id == 0
|| !trx->read_view.is_open()
|| trx->read_view.changes_visible(