diff options
author | Marko Mäkelä <marko.makela@mariadb.com> | 2021-07-22 18:07:37 +0300 |
---|---|---|
committer | Marko Mäkelä <marko.makela@mariadb.com> | 2021-07-22 18:07:37 +0300 |
commit | 742b3a0d39875584f994f4bd01d57cc31d1dddca (patch) | |
tree | b8d05a89e4782c5a10cc2cc205dd0af62a9b7bcb | |
parent | efae374efa88ba7c1b2e970e4ef025272b09f2dd (diff) | |
parent | 236f825ebf97636aacee482a4c183196c41239ac (diff) | |
download | mariadb-git-742b3a0d39875584f994f4bd01d57cc31d1dddca.tar.gz |
MDEV-26205 Merge new release of InnoDB 5.7.35 to 10.2
-rw-r--r-- | storage/innobase/buf/buf0buf.cc | 21 | ||||
-rw-r--r-- | storage/innobase/fts/fts0fts.cc | 14 | ||||
-rw-r--r-- | storage/innobase/include/buf0buf.h | 6 | ||||
-rw-r--r-- | storage/innobase/include/univ.i | 2 |
4 files changed, 20 insertions, 23 deletions
diff --git a/storage/innobase/buf/buf0buf.cc b/storage/innobase/buf/buf0buf.cc index fdd78d19b55..3f399024b13 100644 --- a/storage/innobase/buf/buf0buf.cc +++ b/storage/innobase/buf/buf0buf.cc @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1995, 2018, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1995, 2021, Oracle and/or its affiliates. Copyright (c) 2008, Google Inc. Copyright (c) 2013, 2021, MariaDB Corporation. @@ -1896,8 +1896,6 @@ buf_pool_init_instance( LATCH_ID_HASH_TABLE_RW_LOCK, srv_n_page_hash_locks, MEM_HEAP_FOR_PAGE_HASH); - buf_pool->page_hash_old = NULL; - buf_pool->zip_hash = hash_create(2 * buf_pool->curr_size); buf_pool->last_printout_time = time(NULL); @@ -2556,8 +2554,6 @@ buf_pool_resize_hash( { hash_table_t* new_hash_table; - ut_ad(buf_pool->page_hash_old == NULL); - /* recreate page_hash */ new_hash_table = ib_recreate( buf_pool->page_hash, 2 * buf_pool->curr_size); @@ -2589,8 +2585,14 @@ buf_pool_resize_hash( } } - buf_pool->page_hash_old = buf_pool->page_hash; - buf_pool->page_hash = new_hash_table; + /* Concurrent threads may be accessing + buf_pool->page_hash->n_cells, n_sync_obj and try to latch + sync_obj[i] while we are resizing. Therefore we never + deallocate page_hash, instead we overwrite n_cells (and other + fields) with the new values. The n_sync_obj and sync_obj are + actually same in both. */ + std::swap(*buf_pool->page_hash, *new_hash_table); + hash_table_free(new_hash_table); /* recreate zip_hash */ new_hash_table = hash_create(2 * buf_pool->curr_size); @@ -3031,11 +3033,6 @@ calc_buf_pool_size: hash_unlock_x_all(buf_pool->page_hash); buf_pool_mutex_exit(buf_pool); - - if (buf_pool->page_hash_old != NULL) { - hash_table_free(buf_pool->page_hash_old); - buf_pool->page_hash_old = NULL; - } } UT_DELETE(chunk_map_old); diff --git a/storage/innobase/fts/fts0fts.cc b/storage/innobase/fts/fts0fts.cc index 53928cac5dd..b423db71c7d 100644 --- a/storage/innobase/fts/fts0fts.cc +++ b/storage/innobase/fts/fts0fts.cc @@ -1,7 +1,7 @@ /***************************************************************************** -Copyright (c) 2011, 2018, Oracle and/or its affiliates. All Rights Reserved. -Copyright (c) 2016, 2020, MariaDB Corporation. +Copyright (c) 2011, 2021, Oracle and/or its affiliates. +Copyright (c) 2016, 2021, MariaDB Corporation. 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 @@ -1299,6 +1299,9 @@ fts_cache_node_add_positions( ptr = ilist + node->ilist_size; node->ilist_size_alloc = new_size; + if (cache) { + cache->total_size += new_size; + } } ptr_start = ptr; @@ -1325,6 +1328,9 @@ fts_cache_node_add_positions( if (node->ilist_size > 0) { memcpy(ilist, node->ilist, node->ilist_size); ut_free(node->ilist); + if (cache) { + cache->total_size -= node->ilist_size; + } } node->ilist = ilist; @@ -1332,10 +1338,6 @@ fts_cache_node_add_positions( node->ilist_size += enc_len; - if (cache) { - cache->total_size += enc_len; - } - if (node->first_doc_id == FTS_NULL_DOC_ID) { node->first_doc_id = doc_id; } diff --git a/storage/innobase/include/buf0buf.h b/storage/innobase/include/buf0buf.h index 40d2e6b2023..468e6be4def 100644 --- a/storage/innobase/include/buf0buf.h +++ b/storage/innobase/include/buf0buf.h @@ -1,7 +1,7 @@ /***************************************************************************** -Copyright (c) 1995, 2016, Oracle and/or its affiliates. All Rights Reserved. -Copyright (c) 2013, 2020, MariaDB Corporation. +Copyright (c) 1995, 2021, Oracle and/or its affiliates. +Copyright (c) 2013, 2021, MariaDB Corporation. 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 @@ -2037,8 +2037,6 @@ struct buf_pool_t{ page_hash mutex. Lookups can happen while holding the buf_pool->mutex or the relevant page_hash mutex. */ - hash_table_t* page_hash_old; /*!< old pointer to page_hash to be - freed after resizing buffer pool */ hash_table_t* zip_hash; /*!< hash table of buf_block_t blocks whose frames are allocated to the zip buddy system, diff --git a/storage/innobase/include/univ.i b/storage/innobase/include/univ.i index 9d0527ff49b..a97b6758441 100644 --- a/storage/innobase/include/univ.i +++ b/storage/innobase/include/univ.i @@ -41,7 +41,7 @@ Created 1/20/1994 Heikki Tuuri #define INNODB_VERSION_MAJOR 5 #define INNODB_VERSION_MINOR 7 -#define INNODB_VERSION_BUGFIX 34 +#define INNODB_VERSION_BUGFIX 35 /* The following is the InnoDB version as shown in SELECT plugin_version FROM information_schema.plugins; |