| Bug #32702 | Backup: DDL blocker does not block all it should | ||
|---|---|---|---|
| Submitted: | 25 Nov 2007 18:53 | Modified: | 26 Mar 2009 23:15 |
| Reporter: | Chuck Bell | Email Updates: | |
| Status: | Closed | Impact on me: | |
| Category: | MySQL Server: Backup | Severity: | S3 (Non-critical) |
| Version: | 6.0 | OS: | Any |
| Assigned to: | Rafal Somla | CPU Architecture: | Any |
[25 Nov 2007 18:53]
Chuck Bell
[18 Dec 2007 0:29]
Peter Gulutzan
It's safest to go, not with "DDL", but with
"schema change", that is, anything that might
change metadata.
So we have this list:
Statement 32702 Manual Manual
List "DDL"? "Implicit
Commit"?
--------- ------- ------ ---------
ALTER DATABASE Y Y
ALTER EVENT Y
ALTER FUNCTION Y
ALTER LOGFILE GROUP Y
ALTER PROCEDURE Y
ALTER SERVER Y
ALTER TABLE Y Y Y
ALTER TABLESPACE Y
ALTER VIEW Y
CREATE DATABASE Y Y Y
CREATE EVENT Y
CREATE FUNCTION Y
CREATE INDEX ? Y Y
CREATE LOGFILE GROUP Y
CREATE PROCEDURE Y
CREATE SERVER Y
CREATE TABLE Y Y Y
CREATE TABLESPACE Y
CREATE TRIGGER Y
CREATE USER Y
CREATE VIEW Y
DROP DATABASE Y Y
DROP EVENT Y
DROP FUNCTION Y
DROP INDEX ? Y Y
DROP LOGFILE GROUP Y
DROP PROCEDURE Y
DROP SERVER Y
DROP TABLE Y Y Y
DROP TABLESPACE Y
DROP TRIGGER Y
DROP USER Y
DROP VIEW Y
GRANT Y
INSTALL PLUGIN
OPTIMIZE TABLE Y
RENAME TABLE Y Y
RENAME USER Y
REPAIR TABLE Y
RESTORE
REVOKE Y
SET PASSWORD Y
TRUNCATE TABLE Y Y
UNINSTALL PLUGIN
Notes:
"32702 List" column is 'Y' if the statement is in the list
in the original Bug#32702 bug description, or '?' if the
statement was noted as a possible addition for the list.
"Manual DDL" column is 'Y' is the statment is in the
manual's list of Data Definition Language statements
http://dev.mysql.com/doc/refman/6.0/en/data-definition.html
"Manual Implicit Commit" column is 'Y' if the statement is in
the manual's list of statements that cause an implicit commit
http://dev.mysql.com/doc/refman/6.0/en/implicit-commit.html
Although the 32702 List included one Table Maintenance
Statement (OPTIMIZE TABLE), I did not include the other
Table Maintenance Statements (ANALYZE, BACKUP, CHECK,
CHECKSUM, REPAIR, RESTORE).
CREATE TABLE includes CREATE TEMPORARY TABLE.
[11 Sep 2008 20:38]
Chuck Bell
Clarification needed for several items on the list.
Statement 32702 Manual Manual
List "DDL"? "Implicit Status of
Commit"? DDL_blocker
--------- ------- ------ --------- --------------
ALTER DATABASE Y Y Y
ALTER EVENT Y will be added
ALTER FUNCTION Y will be added
ALTER LOGFILE GROUP Y will be added
ALTER PROCEDURE Y will be added
ALTER SERVER Y will be added
ALTER TABLE Y Y Y Y
ALTER TABLESPACE Y will be added
ALTER VIEW Y Y
CREATE DATABASE Y Y Y Y
CREATE EVENT Y will be added
CREATE FUNCTION Y will be added
CREATE INDEX ? Y Y Y
CREATE LOGFILE GROUP Y will be added
CREATE PROCEDURE Y will be added
CREATE SERVER Y will be added
CREATE TABLE Y Y Y Y
CREATE TABLESPACE Y will be added
CREATE TRIGGER Y will be added
CREATE USER Y will be added
CREATE VIEW Y Y
DROP DATABASE Y Y Y
DROP EVENT Y will be added
DROP FUNCTION Y will be added
DROP INDEX ? Y Y Y
DROP LOGFILE GROUP Y will be added
DROP PROCEDURE Y will be added
DROP SERVER Y will be added
DROP TABLE Y Y Y Y
DROP TABLESPACE Y will be added
DROP TRIGGER Y will be added
DROP USER Y will be added
DROP VIEW Y will be added
GRANT Y will be added
INSTALL PLUGIN *** why is this on the list? ***
OPTIMIZE TABLE Y Y
RENAME TABLE Y Y Y
RENAME USER Y will be added
REPAIR TABLE Y Y
RESTORE will be added (but not
needed IMHO)
REVOKE Y will be added
SET PASSWORD Y *** why is this on the list? ***
TRUNCATE TABLE Y Y Y
UNINSTALL PLUGIN *** why is this on the list?***
Notes:
* Status of DDL Blocker = 'Y' means it is currently being blocked.
[11 Sep 2008 20:41]
Chuck Bell
Correction: ALTER VIEW and CREATE VIEW should read "will be added".
[26 Nov 2008 9:51]
Rafal Somla
This bug will be fixed by WL#4644.
[17 Dec 2008 14:34]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/commits/61867 2741 Rafal Somla 2008-12-17 BUG#32702 - Backup: DDL blocker does not block all it should WL#4644 - Online Backup: Fix the DDL blocker After this patch, the DDL blocker will be renamed to Backup Metadata Lock and will block all the statements listed in WL#4644. Test backup_ddl_blocker will be renamed to backup_bml and extended to test all these statements. This patch implements an alternative, simpler and I believe better solution than the one currently described in LLD. Namely, it marks all statements which need to be blocked by BML with special CF_BLOCKED_BY_BML flag. Then registering and unregistering marked statements with BML is done globally in mysql_execute_command(). This makes changes in the parser code minimal, makes it easy to trace the list of statements which ale blocked and easily ensures that each bml_enter() call is matched with bml_leave().
[11 Feb 2009 13:12]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/commits/65903 2765 Rafal Somla 2009-02-11 BUG#32702 - Backup: DDL blocker does not block all it should After this patch, the DDL blocker will be renamed to Backup Metadata Lock and will block all the statements listed in WL#4644. Test backup_ddl_blocker will be renamed to backup_bml and extended to test all these statements. This patch implements desing described in WL#4644. It marks all statements which need to be blocked by BML with special CF_BLOCKED_BY_BML flag. Then registering and unregistering marked statements with BML is done globally in mysql_execute_command(). This makes changes in the parser code minimal, makes it easy to trace the list of statements which ale blocked and easily ensures that each bml_enter() call is matched with bml_leave().
[11 Feb 2009 18:06]
Chuck Bell
Review of revised patch begun using provided tree. Thanks, Rafal.
[12 Feb 2009 14:51]
Chuck Bell
Patch approved.
[13 Feb 2009 11:58]
Jørgen Løland
Patch approved.
[13 Feb 2009 13:27]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/commits/66200 2771 Rafal Somla 2009-02-13 BUG#32702 - Backup: DDL blocker does not block all it should After this patch, the DDL blocker will be renamed to Backup Metadata Lock and will block all the statements listed in WL#4644. Test backup_ddl_blocker will be renamed to backup_bml and extended to test all these statements. This patch implements desing described in WL#4644. It marks all statements which need to be blocked by BML with special CF_BLOCKED_BY_BML flag. Then registering and unregistering marked statements with BML is done globally in mysql_execute_command(). This makes changes in the parser code minimal, makes it easy to trace the list of statements which ale blocked and easily ensures that each bml_enter() call is matched with bml_leave().
[16 Feb 2009 10:09]
Rafal Somla
Pushed into team tree on 13 Feb 2009 (mysql 6.0.8)
[26 Mar 2009 12:33]
Bugs System
Pushed into 6.0.11-alpha (revid:alik@sun.com-20090326121822-pt84kzxxayzho4mn) (version source revid:rafal.somla@sun.com-20090302164601-znhm4tadplfi2iqu) (merge vers: 6.0.11-alpha) (pib:6)
[26 Mar 2009 23:15]
Paul DuBois
Noted in 6.0.11 changelog. The DDL blocker for BACKUP DATABASE did not block all statements that it should. The blocker is now called the Backup Metadata Lock and blocks statements that change database metadata.
[14 Dec 2009 22:39]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/commits/94011 3005 Chuck Bell 2009-12-14 BUG#32702 - Backup: DDL blocker does not block all it should After this patch, the DDL blocker will be renamed to Backup Metadata Lock and will block all the statements listed in WL#4644. Test backup_ddl_blocker will be renamed to backup_bml and extended to test all these statements. This patch implements desing described in WL#4644. It marks all statements which need to be blocked by BML with special CF_BLOCKED_BY_BML flag. Then registering and unregistering marked statements with BML is done globally in mysql_execute_command(). This makes changes in the parser code minimal, makes it easy to trace the list of statements which ale blocked and easily ensures that each bml_enter() call is matched with bml_leave(). original changeset: 2599.121.10 @ libmysqld/CMakeLists.txt Rename ddl_blocker.{h,cc} -> bml.{h,cc}. @ libmysqld/Makefile.am Rename ddl_blocker.{h,cc} -> bml.{h,cc}. @ sql/CMakeLists.txt Rename ddl_blocker.{h,cc} -> bml.{h,cc}. @ sql/Makefile.am Rename ddl_blocker.{h,cc} -> bml.{h,cc}. @ sql/bml.cc Rename "DDL blocker" -> "Backup Metadata Lock": - change class and member names. - update documentation. @ sql/bml.h Rename "DDL blocker" -> "Backup Metadata Lock": - change class and member names. - update documentation.
