Below is the list of changes that have just been committed into a local
6.0 repository of rafal. When rafal does a push these changes
will be propagated to the main repository and, within 24 hours after the
push, to the public repository.
For information on how to access the public repository
see http://dev.mysql.com/doc/mysql/en/installing-source-tree.html
ChangeSet@stripped, 2008-03-25 15:22:11+01:00, rafal@quant.(none) +2 -0
BUG#34721 (Backup driver can't refuse to provide driver):
This patch modifies backup kernel so that it falls back to built in backup
engines in case a native backup engine can not be created.
This is for the special case when storage engine defines a get_backup_engine()
factory function (inside the handlerton), but that function fails to create a
backup engine instance. Previous code haven't dealt correctly with that case.
Now it puts a warning and tries the built-in engines.
sql/backup/backup_info.cc@stripped, 2008-03-25 15:22:04+01:00, rafal@quant.(none) +10 -9
In case a native backup engine has been selected for a given table, check if
created Native_snapshot object is valid (in particular, has successfully created
the engine). Only then use it for that table, otherwise try other backup engines
including the built-in ones.
sql/backup/be_native.h@stripped, 2008-03-25 15:22:05+01:00, rafal@quant.(none) +1 -1
If the get_backup_engine() factory function defined by a storage engine failes
to create a native backup engine don't treat it as a (fatal) error. In that case
we will try to use default, built-in backup engines. Thus only warning is printed.
diff -Nrup a/sql/backup/backup_info.cc b/sql/backup/backup_info.cc
--- a/sql/backup/backup_info.cc 2008-03-21 09:43:43 +01:00
+++ b/sql/backup/backup_info.cc 2008-03-25 15:22:04 +01:00
@@ -83,16 +83,17 @@ Backup_info::find_backup_engine(const ba
{
Native_snapshot *nsnap= new Native_snapshot(m_ctx, se);
DBUG_ASSERT(nsnap);
- snapshots.push_front(nsnap);
- native_snapshots.insert(se, nsnap);
- /*
- Question: Can native snapshot for a given storage engine not accept
- a table using that engine? If yes, then what to do in that case - error
- or try other (default) snapshots?
- */
- DBUG_ASSERT(nsnap->accept(tbl, se));
- snap= nsnap;
+ if (nsnap->is_valid())
+ {
+ snapshots.push_front(nsnap);
+ native_snapshots.insert(se, nsnap);
+
+ if (nsnap->accept(tbl, se))
+ snap= nsnap;
+ }
+ else
+ delete nsnap;
}
/*
diff -Nrup a/sql/backup/be_native.h b/sql/backup/be_native.h
--- a/sql/backup/be_native.h 2008-03-04 17:06:22 +01:00
+++ b/sql/backup/be_native.h 2008-03-25 15:22:05 +01:00
@@ -97,7 +97,7 @@ int Native_snapshot::init(Logger &log, c
if (m_be)
m_be->free();
m_be= NULL;
- log.report_error(ER_BACKUP_CREATE_BE, m_name);
+ log.report_error(log_level::WARNING, ER_BACKUP_CREATE_BE, m_name);
return 1;
}