1
0
mirror of https://github.com/MariaDB/server.git synced 2025-12-24 11:21:21 +03:00

Bug#57778: failed primary key add to partitioned innodb table inconsistent and crashes

It was possible to issue an ALTER TABLE ADD PRIMARY KEY on
an partitioned InnoDB table that failed and crashed the server.

The problem was that it succeeded to create the PK on at least
one partition, and then failed on a subsequent partition, due to
duplicate key violation. Since the partitions that already had added
the PK was not reverted all partitions was not consistent with the
table definition, which caused the crash.

The solution was to add a revert step to ha_partition::add_index()
that dropped the index for the already succeeded partitions, on failure.

mysql-test/r/partition.result:
  updated result
mysql-test/t/partition.test:
  Added test
sql/ha_partition.cc:
  Only allow ADD/DROP flags in pairs, so that they can be reverted on failures.
  If add_index() fails for a partition, revert (drop the index) for the previous
  partitions.
sql/handler.h:
  Added some extra info in a comment.
This commit is contained in:
Mattias Jonsson
2010-11-05 12:01:10 +01:00
parent 9678beb630
commit c04318ed24
4 changed files with 111 additions and 4 deletions

View File

@@ -174,6 +174,8 @@
/*
These bits are set if different kinds of indexes can be created
off-line without re-create of the table (but with a table lock).
Partitioning needs both ADD and DROP to be supported by its underlying
handlers, due to error handling, see bug#57778.
*/
#define HA_ONLINE_ADD_INDEX_NO_WRITES (1L << 0) /*add index w/lock*/
#define HA_ONLINE_DROP_INDEX_NO_WRITES (1L << 1) /*drop index w/lock*/