summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNayuta Yanagisawa <nayuta.yanagisawa@hey.com>2021-10-29 19:04:53 +0900
committerNayuta Yanagisawa <nayuta.yanagisawa@hey.com>2021-10-29 19:04:53 +0900
commitd3cc7f5d09c8bf89cdd0f02fcf4bffcb66ef1a8f (patch)
treeb9048b0b5cd9e2d5ab246d5b7b15ae1aec15a2a9
parentd8c6c53a0658ea8315252997f65d796b13182387 (diff)
downloadmariadb-git-bb-10.6-mdev-26127.tar.gz
MDEV-26127 Assertion `err != DB_DUPLICATE_KEY' failed or InnoDB: Failing assertion: id != 0 on ALTER ... REBUILD PARTITIONbb-10.6-mdev-26127
-rw-r--r--mysql-test/suite/parts/r/mdev_26127.result7
-rw-r--r--mysql-test/suite/parts/t/mdev_26127.test12
-rw-r--r--sql/ha_partition.cc2
3 files changed, 21 insertions, 0 deletions
diff --git a/mysql-test/suite/parts/r/mdev_26127.result b/mysql-test/suite/parts/r/mdev_26127.result
new file mode 100644
index 00000000000..62fd8d0efd9
--- /dev/null
+++ b/mysql-test/suite/parts/r/mdev_26127.result
@@ -0,0 +1,7 @@
+CREATE TABLE t (
+c INT
+) ENGINE=InnoDB PARTITION BY LINEAR KEY(c) PARTITIONS 4;
+LOCK TABLES t WRITE, t AS a READ;
+ALTER TABLE t REBUILD PARTITION p0;
+ERROR HY000: Lock wait timeout exceeded; try restarting transaction
+DROP TABLE t;
diff --git a/mysql-test/suite/parts/t/mdev_26127.test b/mysql-test/suite/parts/t/mdev_26127.test
new file mode 100644
index 00000000000..f1f2b2d3e63
--- /dev/null
+++ b/mysql-test/suite/parts/t/mdev_26127.test
@@ -0,0 +1,12 @@
+--source include/have_innodb.inc
+--source include/have_partition.inc
+
+CREATE TABLE t (
+ c INT
+) ENGINE=InnoDB PARTITION BY LINEAR KEY(c) PARTITIONS 4;
+
+LOCK TABLES t WRITE, t AS a READ;
+--error ER_LOCK_WAIT_TIMEOUT
+ALTER TABLE t REBUILD PARTITION p0;
+
+DROP TABLE t;
diff --git a/sql/ha_partition.cc b/sql/ha_partition.cc
index 1aa917d525b..25eb9ee07a3 100644
--- a/sql/ha_partition.cc
+++ b/sql/ha_partition.cc
@@ -1164,6 +1164,8 @@ int ha_partition::rename_partitions(const char *path)
error= 1;
(void) ddl_log_sync();
}
+ if (error)
+ DBUG_RETURN(error);
file= m_new_file[i];
DBUG_PRINT("info", ("Rename partition from %s to %s",
part_name_buff, norm_name_buff));