summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarko Mäkelä <marko.makela@mariadb.com>2021-07-22 18:07:37 +0300
committerMarko Mäkelä <marko.makela@mariadb.com>2021-07-22 18:07:37 +0300
commit742b3a0d39875584f994f4bd01d57cc31d1dddca (patch)
treeb8d05a89e4782c5a10cc2cc205dd0af62a9b7bcb
parentefae374efa88ba7c1b2e970e4ef025272b09f2dd (diff)
parent236f825ebf97636aacee482a4c183196c41239ac (diff)
downloadmariadb-git-742b3a0d39875584f994f4bd01d57cc31d1dddca.tar.gz
MDEV-26205 Merge new release of InnoDB 5.7.35 to 10.2
-rw-r--r--storage/innobase/buf/buf0buf.cc21
-rw-r--r--storage/innobase/fts/fts0fts.cc14
-rw-r--r--storage/innobase/include/buf0buf.h6
-rw-r--r--storage/innobase/include/univ.i2
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;