mirror of
https://github.com/MariaDB/server.git
synced 2025-08-01 03:47:19 +03:00
MDEV-17923 Assertion failed in trx_undo_page_report_modify after CREATE FULLTEXT INDEX
row_fts_merge_insert(): Correctly initialize DB_ROLL_PTR to a safe value that will not be dereferenced by MVCC.
This commit is contained in:
@ -166,3 +166,19 @@ SELECT len,COUNT(*) FROM INFORMATION_SCHEMA.INNODB_SYS_COLUMNS where name='word'
|
|||||||
len COUNT(*)
|
len COUNT(*)
|
||||||
84 6
|
84 6
|
||||||
DROP TABLE t;
|
DROP TABLE t;
|
||||||
|
#
|
||||||
|
# MDEV-17923 Assertion memcmp(field, field_ref_zero, 7) failed in
|
||||||
|
# trx_undo_page_report_modify upon optimizing table
|
||||||
|
# under innodb_optimize_fulltext_only
|
||||||
|
#
|
||||||
|
CREATE TABLE t1 (f1 TEXT, f2 TEXT, FULLTEXT KEY (f2)) ENGINE=InnoDB;
|
||||||
|
INSERT INTO t1 (f1) VALUES ('foo'),('bar');
|
||||||
|
DELETE FROM t1 LIMIT 1;
|
||||||
|
ALTER TABLE t1 ADD FULLTEXT KEY (f1);
|
||||||
|
SET @optimize_fulltext.save= @@innodb_optimize_fulltext_only;
|
||||||
|
SET GLOBAL innodb_optimize_fulltext_only= 1;
|
||||||
|
OPTIMIZE TABLE t1;
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.t1 optimize status OK
|
||||||
|
DROP TABLE t1;
|
||||||
|
SET GLOBAL innodb_optimize_fulltext_only= @optimize_fulltext.save;
|
||||||
|
@ -90,3 +90,19 @@ ENGINE=InnoDB;
|
|||||||
# The column length should be 84 bytes (84 characters * 1 byte/character).
|
# The column length should be 84 bytes (84 characters * 1 byte/character).
|
||||||
SELECT len,COUNT(*) FROM INFORMATION_SCHEMA.INNODB_SYS_COLUMNS where name='word' GROUP BY len;
|
SELECT len,COUNT(*) FROM INFORMATION_SCHEMA.INNODB_SYS_COLUMNS where name='word' GROUP BY len;
|
||||||
DROP TABLE t;
|
DROP TABLE t;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # MDEV-17923 Assertion memcmp(field, field_ref_zero, 7) failed in
|
||||||
|
--echo # trx_undo_page_report_modify upon optimizing table
|
||||||
|
--echo # under innodb_optimize_fulltext_only
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
CREATE TABLE t1 (f1 TEXT, f2 TEXT, FULLTEXT KEY (f2)) ENGINE=InnoDB;
|
||||||
|
INSERT INTO t1 (f1) VALUES ('foo'),('bar');
|
||||||
|
DELETE FROM t1 LIMIT 1;
|
||||||
|
ALTER TABLE t1 ADD FULLTEXT KEY (f1);
|
||||||
|
SET @optimize_fulltext.save= @@innodb_optimize_fulltext_only;
|
||||||
|
SET GLOBAL innodb_optimize_fulltext_only= 1;
|
||||||
|
OPTIMIZE TABLE t1;
|
||||||
|
DROP TABLE t1;
|
||||||
|
SET GLOBAL innodb_optimize_fulltext_only= @optimize_fulltext.save;
|
||||||
|
@ -1581,9 +1581,7 @@ row_fts_merge_insert(
|
|||||||
dict_table_t* aux_table;
|
dict_table_t* aux_table;
|
||||||
dict_index_t* aux_index;
|
dict_index_t* aux_index;
|
||||||
trx_t* trx;
|
trx_t* trx;
|
||||||
byte trx_id_buf[6];
|
byte sys_buf[DATA_TRX_ID_LEN + DATA_ROLL_PTR_LEN];
|
||||||
roll_ptr_t roll_ptr = 0;
|
|
||||||
dfield_t* field;
|
|
||||||
|
|
||||||
ut_ad(index);
|
ut_ad(index);
|
||||||
ut_ad(table);
|
ut_ad(table);
|
||||||
@ -1689,16 +1687,16 @@ row_fts_merge_insert(
|
|||||||
dict_index_get_n_fields(aux_index));
|
dict_index_get_n_fields(aux_index));
|
||||||
|
|
||||||
/* Set TRX_ID and ROLL_PTR */
|
/* Set TRX_ID and ROLL_PTR */
|
||||||
trx_write_trx_id(trx_id_buf, trx->id);
|
trx_write_trx_id(sys_buf, trx->id);
|
||||||
field = dtuple_get_nth_field(ins_ctx.tuple, 2);
|
trx_write_roll_ptr(sys_buf + DATA_TRX_ID_LEN,
|
||||||
dfield_set_data(field, &trx_id_buf, 6);
|
1ULL << ROLL_PTR_INSERT_FLAG_POS);
|
||||||
|
dfield_set_data(dtuple_get_nth_field(ins_ctx.tuple, 2),
|
||||||
|
&sys_buf, DATA_TRX_ID_LEN);
|
||||||
|
dfield_set_data(dtuple_get_nth_field(ins_ctx.tuple, 3),
|
||||||
|
&sys_buf + DATA_TRX_ID_LEN, DATA_ROLL_PTR_LEN);
|
||||||
|
|
||||||
field = dtuple_get_nth_field(ins_ctx.tuple, 3);
|
ut_d(ins_ctx.aux_index_id = id);
|
||||||
dfield_set_data(field, &roll_ptr, 7);
|
|
||||||
|
|
||||||
#ifdef UNIV_DEBUG
|
|
||||||
ins_ctx.aux_index_id = id;
|
|
||||||
#endif
|
|
||||||
const ulint space = table->space;
|
const ulint space = table->space;
|
||||||
|
|
||||||
for (i = 0; i < fts_sort_pll_degree; i++) {
|
for (i = 0; i < fts_sort_pll_degree; i++) {
|
||||||
|
Reference in New Issue
Block a user