Skip to content

Commit bacaf2d

Browse files
committed
MDEV-29342 Assertion failure in file que0que.cc line 728
Additional fixes for 10.6: fts_sync_commit(): Release cache->lock also on rollback. fts_sync_write_words(): Avoid a crash if an error occurs, by stopping at the first error. fts_add_doc_by_id(): Sync the doc id only after adding the doc id to the cache.
1 parent 1872a14 commit bacaf2d

File tree

3 files changed

+16
-14
lines changed

3 files changed

+16
-14
lines changed

mysql-test/suite/innodb_fts/r/misc_debug2.result

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,12 @@ DROP TABLE mdev21563;
1111
#
1212
CREATE TABLE t1(f1 CHAR(100), FULLTEXT idx(f1))ENGINE=InnoDB;
1313
INSERT INTO t1 VALUES('mysql'), ('innodb');
14-
set debug_dbug="+d,fts_instrument_sync_debug";
14+
set debug_dbug="+d,fts_instrument_sync_request";
1515
INSERT INTO t1 VALUES('test');
16-
set debug_dbug="-d,fts_instrument_sync_debug";
16+
set debug_dbug="-d,fts_instrument_sync_request";
1717
INSERT INTO t1 VALUES('This is a fts issue');
1818
# restart
19-
set debug_dbug="+d,fts_instrument_sync_debug";
19+
set debug_dbug="+d,fts_instrument_sync_request";
2020
UPDATE t1 SET f1="mariadb";
21-
set debug_dbug="-d,fts_instrument_sync_debug";
21+
set debug_dbug="-d,fts_instrument_sync_request";
2222
DROP TABLE t1;

mysql-test/suite/innodb_fts/t/misc_debug2.test

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,12 @@ DROP TABLE mdev21563;
1616
--echo #
1717
CREATE TABLE t1(f1 CHAR(100), FULLTEXT idx(f1))ENGINE=InnoDB;
1818
INSERT INTO t1 VALUES('mysql'), ('innodb');
19-
set debug_dbug="+d,fts_instrument_sync_debug";
19+
set debug_dbug="+d,fts_instrument_sync_request";
2020
INSERT INTO t1 VALUES('test');
21-
set debug_dbug="-d,fts_instrument_sync_debug";
21+
set debug_dbug="-d,fts_instrument_sync_request";
2222
INSERT INTO t1 VALUES('This is a fts issue');
2323
--source include/restart_mysqld.inc
24-
set debug_dbug="+d,fts_instrument_sync_debug";
24+
set debug_dbug="+d,fts_instrument_sync_request";
2525
UPDATE t1 SET f1="mariadb";
26-
set debug_dbug="-d,fts_instrument_sync_debug";
26+
set debug_dbug="-d,fts_instrument_sync_request";
2727
DROP TABLE t1;

storage/innobase/fts/fts0fts.cc

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3314,7 +3314,7 @@ fts_add_doc_by_id(
33143314
dict_index_t* fts_id_index;
33153315
ibool is_id_cluster;
33163316
fts_cache_t* cache = ftt->table->fts->cache;
3317-
3317+
boolneed_sync= false;
33183318
ut_ad(cache->get_docs);
33193319

33203320
/* If Doc ID has been supplied by the user, then the table
@@ -3443,7 +3443,7 @@ fts_add_doc_by_id(
34433443
shouldn't hold the cache lock for
34443444
longer time. So cache should sync
34453445
whenever cache size exceeds 512 KB */
3446-
boolneed_sync =
3446+
need_sync =
34473447
cache->total_size > 512*1024;
34483448

34493449
mysql_mutex_unlock(&table->fts->cache->lock);
@@ -3464,10 +3464,6 @@ fts_add_doc_by_id(
34643464
need_sync= true;
34653465
);
34663466

3467-
if (need_sync) {
3468-
fts_sync_table(table);
3469-
}
3470-
34713467
mtr_start(&mtr);
34723468

34733469
if (i < num_idx - 1) {
@@ -3493,6 +3489,10 @@ fts_add_doc_by_id(
34933489
ut_free(pcur.old_rec_buf);
34943490

34953491
mem_heap_free(heap);
3492+
3493+
if (need_sync) {
3494+
fts_sync_table(table);
3495+
}
34963496
}
34973497

34983498

@@ -3898,6 +3898,7 @@ fts_sync_write_words(
38983898
ib::error() << "(" << error << ") writing"
38993899
" word node to FTS auxiliary index table "
39003900
<< table->name;
3901+
break;
39013902
}
39023903
}
39033904

@@ -3999,6 +4000,7 @@ fts_sync_commit(
39994000
mysql_mutex_unlock(&cache->lock);
40004001
fts_sql_commit(trx);
40014002
} else {
4003+
mysql_mutex_unlock(&cache->lock);
40024004
fts_sql_rollback(trx);
40034005
ib::error() << "(" << error << ") during SYNC of "
40044006
"table " << sync->table->name;

0 commit comments

Comments
 (0)