Commit 485dcb07 authored by Marko Mäkelä's avatar Marko Mäkelä

MDEV-18637 Assertion `cache' failed in fts_init_recover_doc

I know no test case for this bug in 10.1. So a test case will be
committed separately in 10.2

fts_reset_get_doc(): properly initialize fts_get_doc_t::cache
parent 4b5dc47f
/***************************************************************************** /*****************************************************************************
Copyright (c) 2011, 2018, Oracle and/or its affiliates. All Rights Reserved. Copyright (c) 2011, 2018, Oracle and/or its affiliates. All Rights Reserved.
Copyright (c) 2016, 2018, MariaDB Corporation. Copyright (c) 2016, 2019, MariaDB Corporation.
This program is free software; you can redistribute it and/or modify it under This program is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software the terms of the GNU General Public License as published by the Free Software
...@@ -736,6 +736,7 @@ fts_reset_get_doc( ...@@ -736,6 +736,7 @@ fts_reset_get_doc(
memset(get_doc, 0x0, sizeof(*get_doc)); memset(get_doc, 0x0, sizeof(*get_doc));
get_doc->index_cache = ind_cache; get_doc->index_cache = ind_cache;
get_doc->cache = cache;
} }
ut_ad(ib_vector_size(cache->get_docs) ut_ad(ib_vector_size(cache->get_docs)
...@@ -4801,8 +4802,9 @@ fts_tokenize_document( ...@@ -4801,8 +4802,9 @@ fts_tokenize_document(
ut_a(!doc->tokens); ut_a(!doc->tokens);
ut_a(doc->charset); ut_a(doc->charset);
doc->tokens = rbt_create_arg_cmp( doc->tokens = rbt_create_arg_cmp(sizeof(fts_token_t),
sizeof(fts_token_t), innobase_fts_text_cmp, (void*) doc->charset); innobase_fts_text_cmp,
(void*) doc->charset);
for (ulint i = 0; i < doc->text.f_len; i += inc) { for (ulint i = 0; i < doc->text.f_len; i += inc) {
inc = fts_process_token(doc, result, i, 0); inc = fts_process_token(doc, result, i, 0);
......
/***************************************************************************** /*****************************************************************************
Copyright (c) 2011, 2018, Oracle and/or its affiliates. All Rights Reserved. Copyright (c) 2011, 2018, Oracle and/or its affiliates. All Rights Reserved.
Copyright (c) 2016, 2018, MariaDB Corporation. Copyright (c) 2016, 2019, MariaDB Corporation.
This program is free software; you can redistribute it and/or modify it under This program is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software the terms of the GNU General Public License as published by the Free Software
...@@ -567,7 +567,7 @@ fts_index_cache_init( ...@@ -567,7 +567,7 @@ fts_index_cache_init(
index_cache->words = rbt_create_arg_cmp( index_cache->words = rbt_create_arg_cmp(
sizeof(fts_tokenizer_word_t), innobase_fts_text_cmp, sizeof(fts_tokenizer_word_t), innobase_fts_text_cmp,
(void*)index_cache->charset); (void*) index_cache->charset);
ut_a(index_cache->doc_stats == NULL); ut_a(index_cache->doc_stats == NULL);
...@@ -736,6 +736,7 @@ fts_reset_get_doc( ...@@ -736,6 +736,7 @@ fts_reset_get_doc(
memset(get_doc, 0x0, sizeof(*get_doc)); memset(get_doc, 0x0, sizeof(*get_doc));
get_doc->index_cache = ind_cache; get_doc->index_cache = ind_cache;
get_doc->cache = cache;
} }
ut_ad(ib_vector_size(cache->get_docs) ut_ad(ib_vector_size(cache->get_docs)
...@@ -2004,7 +2005,8 @@ fts_create_one_index_table( ...@@ -2004,7 +2005,8 @@ fts_create_one_index_table(
dict_mem_table_add_col(new_table, heap, "ilist", DATA_BLOB, dict_mem_table_add_col(new_table, heap, "ilist", DATA_BLOB,
4130048, 0); 4130048, 0);
error = row_create_table_for_mysql(new_table, trx, false, FIL_ENCRYPTION_DEFAULT, FIL_DEFAULT_ENCRYPTION_KEY); error = row_create_table_for_mysql(new_table, trx, false,
FIL_ENCRYPTION_DEFAULT, FIL_DEFAULT_ENCRYPTION_KEY);
if (error != DB_SUCCESS) { if (error != DB_SUCCESS) {
trx->error_state = error; trx->error_state = error;
...@@ -4800,8 +4802,9 @@ fts_tokenize_document( ...@@ -4800,8 +4802,9 @@ fts_tokenize_document(
ut_a(!doc->tokens); ut_a(!doc->tokens);
ut_a(doc->charset); ut_a(doc->charset);
doc->tokens = rbt_create_arg_cmp( doc->tokens = rbt_create_arg_cmp(sizeof(fts_token_t),
sizeof(fts_token_t), innobase_fts_text_cmp, (void*) doc->charset); innobase_fts_text_cmp,
(void*) doc->charset);
for (ulint i = 0; i < doc->text.f_len; i += inc) { for (ulint i = 0; i < doc->text.f_len; i += inc) {
inc = fts_process_token(doc, result, i, 0); inc = fts_process_token(doc, result, i, 0);
......
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