diff options
author | Marko Mäkelä <marko.makela@mariadb.com> | 2018-01-22 16:50:20 +0200 |
---|---|---|
committer | Marko Mäkelä <marko.makela@mariadb.com> | 2018-01-22 16:58:13 +0200 |
commit | 431607237d0d1438cdc69f5bf5a188253d7549cf (patch) | |
tree | 22ef1b0b6d0f67642c6fa09de323a67453acaae5 | |
parent | 5e87f49a9927bf3fd0bd9af789bbdd329e4b4416 (diff) | |
download | mariadb-git-431607237d0d1438cdc69f5bf5a188253d7549cf.tar.gz |
MDEV-12173 "Error: trying to do an operation on a dropped tablespace"
InnoDB is issuing a 'noise' message that is not a sign of abnormal
operation. The only issuers of it are the debug function
lock_rec_block_validate() and the change buffer merge.
While the error should ideally never occur in transactional locking,
we happen to know that DISCARD TABLESPACE and TRUNCATE TABLE and
possibly DROP TABLE are breaking InnoDB table locks.
When it comes to the change buffer merge, the message simply is useless
noise. We know perfectly well that a tablespace can be dropped while a
change buffer merge is pending. And the code is prepared to handle that,
which is demonstrated by the fact that whenever the message was issued,
InnoDB did not crash.
fil_inc_pending_ops(): Remove the parameter print_err.
-rw-r--r-- | storage/innobase/fil/fil0fil.cc | 12 | ||||
-rw-r--r-- | storage/innobase/ibuf/ibuf0ibuf.cc | 4 | ||||
-rw-r--r-- | storage/innobase/include/fil0fil.h | 5 | ||||
-rw-r--r-- | storage/innobase/lock/lock0lock.cc | 9 | ||||
-rw-r--r-- | storage/xtradb/fil/fil0fil.cc | 12 | ||||
-rw-r--r-- | storage/xtradb/ibuf/ibuf0ibuf.cc | 4 | ||||
-rw-r--r-- | storage/xtradb/include/fil0fil.h | 5 | ||||
-rw-r--r-- | storage/xtradb/lock/lock0lock.cc | 10 |
8 files changed, 16 insertions, 45 deletions
diff --git a/storage/innobase/fil/fil0fil.cc b/storage/innobase/fil/fil0fil.cc index 3395d0431d4..7167b99a750 100644 --- a/storage/innobase/fil/fil0fil.cc +++ b/storage/innobase/fil/fil0fil.cc @@ -1965,8 +1965,7 @@ UNIV_INTERN ibool fil_inc_pending_ops( /*================*/ - ulint id, /*!< in: space id */ - ibool print_err) /*!< in: need to print error or not */ + ulint id) /*!< in: space id */ { fil_space_t* space; @@ -1974,15 +1973,6 @@ fil_inc_pending_ops( space = fil_space_get_by_id(id); - if (space == NULL) { - if (print_err) { - fprintf(stderr, - "InnoDB: Error: trying to do an operation on a" - " dropped tablespace %lu\n", - (ulong) id); - } - } - if (space == NULL || space->stop_new_ops) { mutex_exit(&fil_system->mutex); diff --git a/storage/innobase/ibuf/ibuf0ibuf.cc b/storage/innobase/ibuf/ibuf0ibuf.cc index f0b02d863d3..40a94301962 100644 --- a/storage/innobase/ibuf/ibuf0ibuf.cc +++ b/storage/innobase/ibuf/ibuf0ibuf.cc @@ -1,7 +1,7 @@ /***************************************************************************** Copyright (c) 1997, 2016, Oracle and/or its affiliates. All Rights Reserved. -Copyright (c) 2017, MariaDB Corporation. +Copyright (c) 2017, 2018, 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 @@ -4575,7 +4575,7 @@ ibuf_merge_or_delete_for_page( function. When the counter is > 0, that prevents tablespace from being dropped. */ - tablespace_being_deleted = fil_inc_pending_ops(space, true); + tablespace_being_deleted = fil_inc_pending_ops(space); if (UNIV_UNLIKELY(tablespace_being_deleted)) { /* Do not try to read the bitmap page from space; diff --git a/storage/innobase/include/fil0fil.h b/storage/innobase/include/fil0fil.h index 099b28dc5e1..9374bb88bb7 100644 --- a/storage/innobase/include/fil0fil.h +++ b/storage/innobase/include/fil0fil.h @@ -1,7 +1,7 @@ /***************************************************************************** Copyright (c) 1995, 2017, Oracle and/or its affiliates. All Rights Reserved. -Copyright (c) 2017, MariaDB Corporation. All Rights Reserved. +Copyright (c) 2017, 2018, 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 @@ -593,8 +593,7 @@ UNIV_INTERN ibool fil_inc_pending_ops( /*================*/ - ulint id, /*!< in: space id */ - ibool print_err); /*!< in: need to print error or not */ + ulint id); /*!< in: space id */ /*******************************************************************//** Decrements the count of pending operations. */ UNIV_INTERN diff --git a/storage/innobase/lock/lock0lock.cc b/storage/innobase/lock/lock0lock.cc index f5b7b35d749..aa232f89b60 100644 --- a/storage/innobase/lock/lock0lock.cc +++ b/storage/innobase/lock/lock0lock.cc @@ -1,7 +1,7 @@ /***************************************************************************** Copyright (c) 1996, 2016, Oracle and/or its affiliates. All Rights Reserved. -Copyright (c) 2014, 2016, MariaDB Corporation +Copyright (c) 2014, 2018, 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 @@ -5544,7 +5544,6 @@ loop: ulint space = lock->un_member.rec_lock.space; ulint zip_size= fil_space_get_zip_size(space); ulint page_no = lock->un_member.rec_lock.page_no; - ibool tablespace_being_deleted = FALSE; if (UNIV_UNLIKELY(zip_size == ULINT_UNDEFINED)) { @@ -5567,9 +5566,7 @@ loop: /* Check if the space is exists or not. only when the space is valid, try to get the page. */ - tablespace_being_deleted = fil_inc_pending_ops(space, false); - - if (!tablespace_being_deleted) { + if (!fil_inc_pending_ops(space)) { mtr_start(&mtr); buf_page_get_gen(space, zip_size, page_no, @@ -6007,7 +6004,7 @@ lock_rec_block_validate( /* Make sure that the tablespace is not deleted while we are trying to access the page. */ - if (!fil_inc_pending_ops(space, true)) { + if (!fil_inc_pending_ops(space)) { mtr_start(&mtr); block = buf_page_get_gen( space, fil_space_get_zip_size(space), diff --git a/storage/xtradb/fil/fil0fil.cc b/storage/xtradb/fil/fil0fil.cc index 1a0105aaf0b..d459a5f7e9b 100644 --- a/storage/xtradb/fil/fil0fil.cc +++ b/storage/xtradb/fil/fil0fil.cc @@ -2012,8 +2012,7 @@ UNIV_INTERN ibool fil_inc_pending_ops( /*================*/ - ulint id, /*!< in: space id */ - ibool print_err) /*!< in: need to print error or not */ + ulint id) /*!< in: space id */ { fil_space_t* space; @@ -2021,15 +2020,6 @@ fil_inc_pending_ops( space = fil_space_get_by_id(id); - if (space == NULL) { - if (print_err) { - fprintf(stderr, - "InnoDB: Error: trying to do an operation on a" - " dropped tablespace %lu\n", - (ulong) id); - } - } - if (space == NULL || space->stop_new_ops) { mutex_exit(&fil_system->mutex); diff --git a/storage/xtradb/ibuf/ibuf0ibuf.cc b/storage/xtradb/ibuf/ibuf0ibuf.cc index fabe468fb0c..877e477f8d7 100644 --- a/storage/xtradb/ibuf/ibuf0ibuf.cc +++ b/storage/xtradb/ibuf/ibuf0ibuf.cc @@ -1,7 +1,7 @@ /***************************************************************************** Copyright (c) 1997, 2016, Oracle and/or its affiliates. All Rights Reserved. -Copyright (c) 2017, MariaDB Corporation. +Copyright (c) 2017, 2018, 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 @@ -4617,7 +4617,7 @@ ibuf_merge_or_delete_for_page( function. When the counter is > 0, that prevents tablespace from being dropped. */ - tablespace_being_deleted = fil_inc_pending_ops(space, true); + tablespace_being_deleted = fil_inc_pending_ops(space); if (UNIV_UNLIKELY(tablespace_being_deleted)) { /* Do not try to read the bitmap page from space; diff --git a/storage/xtradb/include/fil0fil.h b/storage/xtradb/include/fil0fil.h index 9bba03f5200..db1578aee69 100644 --- a/storage/xtradb/include/fil0fil.h +++ b/storage/xtradb/include/fil0fil.h @@ -1,7 +1,7 @@ /***************************************************************************** Copyright (c) 1995, 2017, Oracle and/or its affiliates. All Rights Reserved. -Copyright (c) 2017, MariaDB Corporation. All Rights Reserved. +Copyright (c) 2017, 2018, 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 @@ -589,8 +589,7 @@ UNIV_INTERN ibool fil_inc_pending_ops( /*================*/ - ulint id, /*!< in: space id */ - ibool print_err); /*!< in: need to print error or not */ + ulint id); /*!< in: space id */ /*******************************************************************//** Decrements the count of pending operations. */ UNIV_INTERN diff --git a/storage/xtradb/lock/lock0lock.cc b/storage/xtradb/lock/lock0lock.cc index 1a2b15422bb..2a918158612 100644 --- a/storage/xtradb/lock/lock0lock.cc +++ b/storage/xtradb/lock/lock0lock.cc @@ -1,7 +1,7 @@ /***************************************************************************** Copyright (c) 1996, 2016, Oracle and/or its affiliates. All Rights Reserved. -Copyright (c) 2014, 2015, MariaDB Corporation +Copyright (c) 2014, 2018, 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 @@ -5592,7 +5592,6 @@ loop: ulint space = lock->un_member.rec_lock.space; ulint zip_size= fil_space_get_zip_size(space); ulint page_no = lock->un_member.rec_lock.page_no; - ibool tablespace_being_deleted = FALSE; if (UNIV_UNLIKELY(zip_size == ULINT_UNDEFINED)) { @@ -5617,10 +5616,7 @@ loop: /* Check if the space is exists or not. only when the space is valid, try to get the page. */ - tablespace_being_deleted - = fil_inc_pending_ops(space, false); - - if (!tablespace_being_deleted) { + if (!fil_inc_pending_ops(space)) { mtr_start(&mtr); buf_page_get_gen(space, zip_size, @@ -6065,7 +6061,7 @@ lock_rec_block_validate( /* Make sure that the tablespace is not deleted while we are trying to access the page. */ - if (!fil_inc_pending_ops(space, true)) { + if (!fil_inc_pending_ops(space)) { mtr_start(&mtr); block = buf_page_get_gen( space, fil_space_get_zip_size(space), |