Skip to content

Commit

Permalink
Merge pull request percona#4284 from nitendra-bhosle/5.7-PS-7657
Browse files Browse the repository at this point in the history
PS-7657 crash seen with update query on a partition table having comp…
  • Loading branch information
nitendra-bhosle authored May 17, 2021
2 parents ade7df4 + 59cb3d5 commit a943a8f
Show file tree
Hide file tree
Showing 6 changed files with 62 additions and 4 deletions.
9 changes: 9 additions & 0 deletions mysql-test/suite/innodb/r/xtradb_compressed_columns.result
Original file line number Diff line number Diff line change
Expand Up @@ -319,3 +319,12 @@ CREATE TABLE t1 (c1 VARBINARY(5) COLUMN_FORMAT COMPRESSED) ENGINE=InnoDB;
ALTER TABLE t1 ADD c2 CHAR(10) FIRST;
INSERT INTO t1 VALUES(0,11111);
DROP TABLE t1;
#
# Bug PS-7657 crash seen with update query on a partition table having compressed column
#
CREATE TABLE t1 (ip_col INT, i0 INT, v1 VARCHAR(29), v2 VARCHAR(23), lt3 LONGTEXT COLUMN_FORMAT COMPRESSED, b4 BLOB , v5 VARCHAR(10), g6 CHAR(9) AS (CONCAT(SUBSTRING(ip_col,1,1),SUBSTRING(i0,1,3),SUBSTRING(lt3,1,3),SUBSTRING(v1,1,2))), INDEX tt_47_pi1(i0, v2 ASC, ip_col, v5 DESC, g6, v1) ) ENGINE=INNODB PARTITION BY KEY (ip_col) PARTITIONS 13;
INSERT INTO t1 ( ip_col ,i0 ,v1 ,v2 ,lt3 ,b4 ,v5 ,g6 ) VALUES( 23486, 49601, 'OQ7LVj1N0RhGn2EUxVHO9qD', 'oCwtfvdUs3', 'S6GaiUP5cMt7uS38D6B31KSJW0mkt7EQBu7sbK7G7LgYcQ3p6EE9HbTSGI9bMU4vQ8bJABIUbsjp0hIDtwgZOpSkc9xHvYPCx99DK6IDkEqioZu4808QqFCrtcGJWFceOMVyfG8f2NOQT58WAYPKBq5jkuHOtHBSIXyA1DFvWhifC0u0xXCULBrd9EF0Te0l5NcaQZTvJeKjoDjpRA4zfR7Z0t04QOhwVcad2ZbBWOfFiKiEz5DzOKzImrRLmcOtmgbPpTdBU8lND8r2FKSn0VwT7aYyyJHHJwvTlo8qepdbi4zdN1GPUAKeRtPLECGUkqQwLHacNWB2ZNlSDg788CXMsUgYpzB7TNqCB897PmOOPse0N', 'YAEFg2tZrqDiCF6CDpnZsIAf1VVnb0OSNToflk0970II8D04zLbXuL9w0l5eWvzXzaOlgqQwnWQHP547QM2cQuP2DTMkoEAWhghCXAgTTDrKcCspo0MrJ3L3BXmqvkdOXzVnro0I385cegV1U1sRuqp8lbtjoEtRmhZP3AzYIwJHR42Hny4KCmoPr6opoUtGoCrJxKCOyRKaWkEEinXAdEEkUpF9WhpasEc50fKENiHhXzidUm0vBLLurLsAcIkkf74YSIvQl30sM2a6eHK8x1dZUHvm50KvKBem21QkwKHlseYAqnaXoyckMN4PnAyRarRoFdVEA88Gwahc2wqRwC7Y2DFOijSvuwbbCVJhpO6G5DDLJotJpwdgyOotKyxWJmhWJFrRTOerNuNhK6kbaEmZAYXpHvi64JM0CK3slKNZ8CH1WgpRKcU3GSYRNulxECpei76HhY3jcBCG3diORUhjuWwLAc40jSmxVYlLCCaKOJJRukalTZ35XhSPRTqS8E8xuTzf5JUQDQLAJQW95GkOns2xbhctxuNv0nU1f6CvnPtMvbcY9DDaRW62uqzkMZP1rfsKc8J7cT6C4M0WxjHc1RkFmzAEexW1QYj2agnzb4UjEvUwWUWU6Z6gnqHr3Npo2EeEZVHsphaTMzM6pk09g9rBrV0ss8FJ1BZWnLopnsXDulc9a51cn51QNkkExx61PxEla6o2J9wzObCvAXfqAbcV8ovqt1SHXixvIUxN8dkTN6Em2idc5s1QJooc9TXAnPQlpGh3Vnc1EYLp05Hnl6phiIZuYtbY9qSsAd5bAojNhX70v7RjPDn5KAk3qgypDw9qXyJjKD3ICsr1IcOK3xiXlFe1dzs7d1ObjSBtGn0qUSyRBJKG86ZoNWRF4RC9juaQuHO14ha6dQFZ2c56LER60ptaYBhOMKBpfICkoHWZJWEmFxua36s2SYWdUVd3Z8JbtGuhv77h4TqP', 'x966Fv9V', default );
UPDATE t1 SET ip_col=2680 WHERE ip_col = 23486;
UPDATE t1 SET ip_col=23486 WHERE ip_col = 2680;
include/assert.inc ['value inside lt3 compressed column should be valid']
DROP TABLE t1;
17 changes: 17 additions & 0 deletions mysql-test/suite/innodb/t/xtradb_compressed_columns.test
Original file line number Diff line number Diff line change
Expand Up @@ -220,3 +220,20 @@ CREATE TABLE t1 (c1 VARBINARY(5) COLUMN_FORMAT COMPRESSED) ENGINE=InnoDB;
ALTER TABLE t1 ADD c2 CHAR(10) FIRST;
INSERT INTO t1 VALUES(0,11111);
DROP TABLE t1;

--echo #
--echo # Bug PS-7657 crash seen with update query on a partition table having compressed column
--echo #
CREATE TABLE t1 (ip_col INT, i0 INT, v1 VARCHAR(29), v2 VARCHAR(23), lt3 LONGTEXT COLUMN_FORMAT COMPRESSED, b4 BLOB , v5 VARCHAR(10), g6 CHAR(9) AS (CONCAT(SUBSTRING(ip_col,1,1),SUBSTRING(i0,1,3),SUBSTRING(lt3,1,3),SUBSTRING(v1,1,2))), INDEX tt_47_pi1(i0, v2 ASC, ip_col, v5 DESC, g6, v1) ) ENGINE=INNODB PARTITION BY KEY (ip_col) PARTITIONS 13;

INSERT INTO t1 ( ip_col ,i0 ,v1 ,v2 ,lt3 ,b4 ,v5 ,g6 ) VALUES( 23486, 49601, 'OQ7LVj1N0RhGn2EUxVHO9qD', 'oCwtfvdUs3', 'S6GaiUP5cMt7uS38D6B31KSJW0mkt7EQBu7sbK7G7LgYcQ3p6EE9HbTSGI9bMU4vQ8bJABIUbsjp0hIDtwgZOpSkc9xHvYPCx99DK6IDkEqioZu4808QqFCrtcGJWFceOMVyfG8f2NOQT58WAYPKBq5jkuHOtHBSIXyA1DFvWhifC0u0xXCULBrd9EF0Te0l5NcaQZTvJeKjoDjpRA4zfR7Z0t04QOhwVcad2ZbBWOfFiKiEz5DzOKzImrRLmcOtmgbPpTdBU8lND8r2FKSn0VwT7aYyyJHHJwvTlo8qepdbi4zdN1GPUAKeRtPLECGUkqQwLHacNWB2ZNlSDg788CXMsUgYpzB7TNqCB897PmOOPse0N', 'YAEFg2tZrqDiCF6CDpnZsIAf1VVnb0OSNToflk0970II8D04zLbXuL9w0l5eWvzXzaOlgqQwnWQHP547QM2cQuP2DTMkoEAWhghCXAgTTDrKcCspo0MrJ3L3BXmqvkdOXzVnro0I385cegV1U1sRuqp8lbtjoEtRmhZP3AzYIwJHR42Hny4KCmoPr6opoUtGoCrJxKCOyRKaWkEEinXAdEEkUpF9WhpasEc50fKENiHhXzidUm0vBLLurLsAcIkkf74YSIvQl30sM2a6eHK8x1dZUHvm50KvKBem21QkwKHlseYAqnaXoyckMN4PnAyRarRoFdVEA88Gwahc2wqRwC7Y2DFOijSvuwbbCVJhpO6G5DDLJotJpwdgyOotKyxWJmhWJFrRTOerNuNhK6kbaEmZAYXpHvi64JM0CK3slKNZ8CH1WgpRKcU3GSYRNulxECpei76HhY3jcBCG3diORUhjuWwLAc40jSmxVYlLCCaKOJJRukalTZ35XhSPRTqS8E8xuTzf5JUQDQLAJQW95GkOns2xbhctxuNv0nU1f6CvnPtMvbcY9DDaRW62uqzkMZP1rfsKc8J7cT6C4M0WxjHc1RkFmzAEexW1QYj2agnzb4UjEvUwWUWU6Z6gnqHr3Npo2EeEZVHsphaTMzM6pk09g9rBrV0ss8FJ1BZWnLopnsXDulc9a51cn51QNkkExx61PxEla6o2J9wzObCvAXfqAbcV8ovqt1SHXixvIUxN8dkTN6Em2idc5s1QJooc9TXAnPQlpGh3Vnc1EYLp05Hnl6phiIZuYtbY9qSsAd5bAojNhX70v7RjPDn5KAk3qgypDw9qXyJjKD3ICsr1IcOK3xiXlFe1dzs7d1ObjSBtGn0qUSyRBJKG86ZoNWRF4RC9juaQuHO14ha6dQFZ2c56LER60ptaYBhOMKBpfICkoHWZJWEmFxua36s2SYWdUVd3Z8JbtGuhv77h4TqP', 'x966Fv9V', default );

UPDATE t1 SET ip_col=2680 WHERE ip_col = 23486;
UPDATE t1 SET ip_col=23486 WHERE ip_col = 2680;

--let $query_out=`SELECT COUNT(*) FROM t1 WHERE lt3='S6GaiUP5cMt7uS38D6B31KSJW0mkt7EQBu7sbK7G7LgYcQ3p6EE9HbTSGI9bMU4vQ8bJABIUbsjp0hIDtwgZOpSkc9xHvYPCx99DK6IDkEqioZu4808QqFCrtcGJWFceOMVyfG8f2NOQT58WAYPKBq5jkuHOtHBSIXyA1DFvWhifC0u0xXCULBrd9EF0Te0l5NcaQZTvJeKjoDjpRA4zfR7Z0t04QOhwVcad2ZbBWOfFiKiEz5DzOKzImrRLmcOtmgbPpTdBU8lND8r2FKSn0VwT7aYyyJHHJwvTlo8qepdbi4zdN1GPUAKeRtPLECGUkqQwLHacNWB2ZNlSDg788CXMsUgYpzB7TNqCB897PmOOPse0N'`
--let $assert_text= 'value inside lt3 compressed column should be valid'
--let $assert_cond= "$query_out" = 1
--source include/assert.inc

DROP TABLE t1;
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
include/master-slave.inc
Warnings:
Note #### Sending passwords in plain text without SSL/TLS is extremely insecure.
Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information.
[connection master]
CREATE TABLE t1 (f1 INT, f2 BLOB COLUMN_FORMAT COMPRESSED) ENGINE=INNODB PARTITION BY HASH (f1) PARTITIONS 2;
REPLACE INTO t1 (f1,f2)VALUES(0,'123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456');
UPDATE t1 SET f1=1 WHERE f1 = 0;
include/sync_slave_sql_with_master.inc
include/diff_tables.inc [master:t1,slave:t1]
[connection master]
DROP TABLE t1;
include/rpl_end.inc
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
#
# PS-7599 : Node inconsistency seen in PS during update on compressed column table
#
--source include/have_binlog_format_row.inc
--source include/master-slave.inc

CREATE TABLE t1 (f1 INT, f2 BLOB COLUMN_FORMAT COMPRESSED) ENGINE=INNODB PARTITION BY HASH (f1) PARTITIONS 2;

REPLACE INTO t1 (f1,f2)VALUES(0,'123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456');

UPDATE t1 SET f1=1 WHERE f1 = 0;

--source include/sync_slave_sql_with_master.inc

--let $diff_tables= master:t1,slave:t1
--source include/diff_tables.inc

--source include/rpl_connection_master.inc

DROP TABLE t1;

--source include/rpl_end.inc
3 changes: 0 additions & 3 deletions storage/innobase/row/row0mysql.cc
Original file line number Diff line number Diff line change
Expand Up @@ -2299,9 +2299,6 @@ row_insert_for_mysql_using_ins_graph(
return(DB_TABLE_CORRUPT);
}

if (UNIV_LIKELY_NULL(prebuilt->compress_heap))
mem_heap_empty(prebuilt->compress_heap);

trx->op_info = "inserting";

row_mysql_delay_if_needed();
Expand Down
2 changes: 1 addition & 1 deletion storage/innobase/row/row0sel.cc
Original file line number Diff line number Diff line change
Expand Up @@ -3319,7 +3319,7 @@ row_sel_store_mysql_rec(
}

if (UNIV_LIKELY_NULL(prebuilt->compress_heap))
mem_heap_empty(prebuilt->compress_heap);
row_mysql_prebuilt_free_compress_heap(prebuilt);

if (clust_templ_for_sec) {
/* Store all clustered index column of
Expand Down

0 comments on commit a943a8f

Please sign in to comment.