summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarko Mäkelä <marko.makela@mariadb.com>2018-01-22 16:50:20 +0200
committerMarko Mäkelä <marko.makela@mariadb.com>2018-01-22 16:58:13 +0200
commit431607237d0d1438cdc69f5bf5a188253d7549cf (patch)
tree22ef1b0b6d0f67642c6fa09de323a67453acaae5
parent5e87f49a9927bf3fd0bd9af789bbdd329e4b4416 (diff)
downloadmariadb-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.cc12
-rw-r--r--storage/innobase/ibuf/ibuf0ibuf.cc4
-rw-r--r--storage/innobase/include/fil0fil.h5
-rw-r--r--storage/innobase/lock/lock0lock.cc9
-rw-r--r--storage/xtradb/fil/fil0fil.cc12
-rw-r--r--storage/xtradb/ibuf/ibuf0ibuf.cc4
-rw-r--r--storage/xtradb/include/fil0fil.h5
-rw-r--r--storage/xtradb/lock/lock0lock.cc10
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),