summaryrefslogtreecommitdiff
path: root/mysql-test/suite/innodb/t/innodb-index.test
diff options
context:
space:
mode:
authorMarko Mäkelä <marko.makela@mariadb.com>2017-10-24 15:20:54 +0300
committerMarko Mäkelä <marko.makela@mariadb.com>2017-10-24 17:00:04 +0300
commit439a7c994a6f01de1a3980c0405fb9e24ae3bd1a (patch)
tree96a4c9908914624b29c37e4b76651e4e69fcf7c4 /mysql-test/suite/innodb/t/innodb-index.test
parentfb5fe497e526f0677a7e2f86f34237e7efd4b806 (diff)
downloadmariadb-git-bb-5.5-marko.tar.gz
MDEV-14051 'Undo log record is too big.' error occurring in very narrow range of string lengthsbb-5.5-marko
InnoDB was writing unnecessary information to the update undo log records. Most notably, if an indexed column is updated, the old value of the column would be logged twice: first as part of the update vector, and then another time because it is an indexed column. Because the InnoDB undo log record must fit in a single page, this would cause unnecessary failure of certain updates. Even after this fix, InnoDB still seems to be unnecessarily logging indexed column values for non-updated columns. It seems that non-updated secondary index columns only need to be logged when a PRIMARY KEY column is updated. To reduce risk, we are not fixing this remaining flaw in GA versions. trx_undo_page_report_modify(): Log updated indexed columns only once.
Diffstat (limited to 'mysql-test/suite/innodb/t/innodb-index.test')
-rw-r--r--mysql-test/suite/innodb/t/innodb-index.test3
1 files changed, 2 insertions, 1 deletions
diff --git a/mysql-test/suite/innodb/t/innodb-index.test b/mysql-test/suite/innodb/t/innodb-index.test
index cea9055b873..a9829b4f500 100644
--- a/mysql-test/suite/innodb/t/innodb-index.test
+++ b/mysql-test/suite/innodb/t/innodb-index.test
@@ -532,9 +532,10 @@ PRIMARY KEY (b(10), a), INDEX (c(767)), INDEX(b(767))
INSERT INTO bug12547647 VALUES (5,repeat('khdfo5AlOq',1900),repeat('g',7751));
COMMIT;
+BEGIN;
# The following used to cause infinite undo log allocation.
---error ER_UNDO_RECORD_TOO_BIG
UPDATE bug12547647 SET c = REPEAT('b',16928);
+ROLLBACK;
DROP TABLE bug12547647;
eval set global innodb_file_per_table=$per_table;