MDEV-21608 Assertion `n_ext == dtuple_get_n_ext(dtuple)' failed during updation of PK

- n_ext value may be less than dtuple_get_n_ext(dtuple) when PK is being
updated and new record inherits the externally stored fields from
delete mark old record.
parent ebbc572b
......@@ -153,3 +153,9 @@ a
SELECT * FROM t2;
a
DROP TABLE t1,t2,t3;
CREATE TABLE t1(f1 INT PRIMARY KEY, f2 TEXT)ENGINE=InnoDB
ROW_FORMAT=REDUNDANT;
SET @fill_amount = (@@innodb_page_size / 2 ) + 1 ;
INSERT INTO t1 VALUES(1, REPEAT(2, @fill_amount));
UPDATE t1 SET f1 = 2;
DROP TABLE t1;
......@@ -206,3 +206,10 @@ SELECT a FROM t3;
SELECT * FROM t2;
DROP TABLE t1,t2,t3;
CREATE TABLE t1(f1 INT PRIMARY KEY, f2 TEXT)ENGINE=InnoDB
ROW_FORMAT=REDUNDANT;
SET @fill_amount = (@@innodb_page_size / 2 ) + 1 ;
INSERT INTO t1 VALUES(1, REPEAT(2, @fill_amount));
UPDATE t1 SET f1 = 2;
DROP TABLE t1;
......@@ -1626,7 +1626,11 @@ rec_get_converted_size(
data_size = dtuple_get_data_size(dtuple, 0);
ut_ad(n_ext == dtuple_get_n_ext(dtuple));
/* If primary key is being updated then the new record inherits
externally stored fields from the delete-marked old record.
In that case, n_ext may be less value than
dtuple_get_n_ext(tuple). */
ut_ad(n_ext <= dtuple_get_n_ext(dtuple));
extra_size = rec_get_converted_extra_size(
data_size, dtuple_get_n_fields(dtuple), n_ext);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment