summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarko Mäkelä <marko.makela@mariadb.com>2020-03-31 14:42:07 +0300
committerMarko Mäkelä <marko.makela@mariadb.com>2020-03-31 14:42:07 +0300
commit63f922dae192dd4579c39dbf097c6dadcb275273 (patch)
tree926362a11ad4aef4d4244bdacefa7680d852e13d
parent14c72bd3e0140aa352d0f0cd2ca46069bfecdd81 (diff)
downloadmariadb-git-63f922dae192dd4579c39dbf097c6dadcb275273.tar.gz
MDEV-22090 Change buffer is not freed after dropping or rebuilding table
When MDEV-19514 removed the change buffer merges in the background, it introduced a minor regression: After a DDL operation that drops or rebuilds a table or partition, any entries in the change buffer could survive until a slow shutdown (innodb_fast_shutdown=0) is executed. fil_delete_tablespace(). Before returning, invoke ibuf_delete_for_discarded_space(). With this, the only way to have change buffer ‘leaks’ is to kill and restart the server at an appropriate moment and never initiate a slow shutdown.
-rw-r--r--storage/innobase/fil/fil0fil.cc5
1 files changed, 3 insertions, 2 deletions
diff --git a/storage/innobase/fil/fil0fil.cc b/storage/innobase/fil/fil0fil.cc
index fd0a94b4c64..78805b0547b 100644
--- a/storage/innobase/fil/fil0fil.cc
+++ b/storage/innobase/fil/fil0fil.cc
@@ -2272,7 +2272,7 @@ dberr_t fil_delete_tablespace(ulint id, bool if_exists)
" in the tablespace memory cache.";
}
- return(err);
+ goto func_exit;
}
ut_a(space);
@@ -2367,8 +2367,9 @@ dberr_t fil_delete_tablespace(ulint id, bool if_exists)
err = DB_TABLESPACE_NOT_FOUND;
}
+func_exit:
ut_free(path);
-
+ ibuf_delete_for_discarded_space(id);
return(err);
}