Rafal,
The 'goto error' code was already in my patch. Perhaps you were looking at
an earlier patch...I have recommitted the patch for you. See this one:
http://lists.mysql.com/commits/41711
Chuck
> -----Original Message-----
> From: Rafal Somla [mailto:rsomla@stripped]
> Sent: Tuesday, February 05, 2008 6:09 AM
> To: cbell@stripped
> Cc: commits@stripped
> Subject: Re: bk commit into 6.0 tree (cbell:1.2784) BUG#33355
>
> Chuck,
>
> I had a quick look at your preliminary patch. All looks ok
> except for one small thing - see below.
>
> cbell@stripped wrote:
> > Below is the list of changes that have just been committed into a
> > local 6.0 repository of cbell. When cbell 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-01-23 17:51:19-05:00,
> cbell@mysql_cab_desk. +4 -0
> > BUG#33355 : Backup: hang if database is mysql
> >
> > Code now warns user if mysql or information_schema is found in
> > the database list. Code throws error if database list is empty.
> >
> > mysql-test/r/backup_errors.result@stripped, 2008-01-23
> 17:51:11-05:00, cbell@mysql_cab_desk. +21 -0
> > BUG#33355 : Backup: hang if database is mysql
> >
> > New result file.
> >
> > mysql-test/t/backup_errors.test@stripped, 2008-01-23
> 17:51:12-05:00, cbell@mysql_cab_desk. +66 -0
> > BUG#33355 : Backup: hang if database is mysql
> >
> > Updated test.
> >
> > sql/backup/kernel.cc@stripped, 2008-01-23 17:51:12-05:00,
> cbell@mysql_cab_desk. +19 -2
> > BUG#33355 : Backup: hang if database is mysql
> >
> > Added code to send error if no databases to backup.
> > Added code to capture and warn if mysql or information_schema
> > included in database list.
> >
> > sql/share/errmsg.txt@stripped, 2008-01-23 17:51:12-05:00,
> cbell@mysql_cab_desk. +4 -0
> > BUG#33355 : Backup: hang if database is mysql
> >
> > New error/warning messages.
> >
> > diff -Nrup a/mysql-test/r/backup_errors.result
> b/mysql-test/r/backup_errors.result
> > --- a/mysql-test/r/backup_errors.result 2007-12-13
> 11:52:49 -05:00
> > +++ b/mysql-test/r/backup_errors.result 2008-01-23
> 17:51:11 -05:00
> > @@ -22,3 +22,24 @@ BACKUP DATABASE test,foo,bdb,bar TO 'tes ERROR
> > 42000: Unknown database 'foo,bar'
> > DROP DATABASE adb;
> > DROP DATABASE bdb;
> > +Backup of mysql, information_schema scenario 1 BACKUP
> DATABASE mysql
> > +TO 't.bak'; ERROR HY000: Nothing to backup Backup of mysql,
> > +information_schema scenario 2 BACKUP DATABASE
> information_schema TO
> > +'t.bak'; ERROR HY000: Nothing to backup Backup of mysql,
> > +information_schema scenario 3 BACKUP DATABASE mysql,
> > +information_schema TO 't.bak'; ERROR HY000: Nothing to
> backup Backup
> > +of mysql, information_schema scenario 4 BACKUP DATABASE
> mysql, test
> > +TO 't.bak'; backup_id # Backup of mysql,
> information_schema scenario
> > +5 BACKUP DATABASE information_schema, test TO 't.bak'; backup_id #
> > +Backup of mysql, information_schema scenario 6 BACKUP
> DATABASE mysql,
> > +information_schema, test TO 't.bak'; backup_id #
> > diff -Nrup a/mysql-test/t/backup_errors.test
> b/mysql-test/t/backup_errors.test
> > --- a/mysql-test/t/backup_errors.test 2007-12-13
> 11:58:31 -05:00
> > +++ b/mysql-test/t/backup_errors.test 2008-01-23
> 17:51:12 -05:00
> > @@ -57,3 +57,69 @@ DROP DATABASE bdb;
> > # will fail and we will be warned that something is wrong with the
> > test --error 1 --remove_file
> $MYSQLTEST_VARDIR/master-data/test.bak
> > +
> > +# Check error conditions for including mysql and
> information_schema
> > +in # the list of databases.
> > +#
> > +# There are several scenarios:
> > +# 1) BACKUP DATABASE mysql TO 't.bak'
> > +# Error: Nothing to backup
> > +# 2) BACKUP DATABASE information_schema TO 't.bak'
> > +# Error: Nothing to backup
> > +# 3) BACKUP DATABASE mysql, information_schema TO 't.bak'
> > +# Error: Nothing to backup
> > +# 4) BACKUP DATABASE mysql, test TO 't.bak'
> > +# Warning: Backup cannot include database 'mysql'
> > +# 5) BACKUP DATABASE information_schema, test TO 't.bak'
> > +# Warning: Backup cannot include database 'information_schema'
> > +# 6) BACKUP DATABASE mysql, information_schema, test TO 't.bak'
> > +# Warning: Backup cannot include database 'mysql'
> > +# Warning: Backup cannot include database 'mysql'
> > +
> > +# Scenario 1
> > +--echo Backup of mysql, information_schema scenario 1 --error
> > +ER_BACKUP_NOTHING_TO_BACKUP BACKUP DATABASE mysql TO 't.bak';
> > +
> > +--error 0, 1
> > +--remove_file $MYSQLTEST_VARDIR/master-data/t.bak
> > +
> > +# Scenario 2
> > +--echo Backup of mysql, information_schema scenario 2 --error
> > +ER_BACKUP_NOTHING_TO_BACKUP BACKUP DATABASE information_schema TO
> > +'t.bak';
> > +
> > +--error 0, 1
> > +--remove_file $MYSQLTEST_VARDIR/master-data/t.bak
> > +
> > +# Scenario 3
> > +--echo Backup of mysql, information_schema scenario 3 --error
> > +ER_BACKUP_NOTHING_TO_BACKUP BACKUP DATABASE mysql,
> information_schema
> > +TO 't.bak';
> > +
> > +--error 0, 1
> > +--remove_file $MYSQLTEST_VARDIR/master-data/t.bak
> > +
> > +# Scenario 4
> > +--echo Backup of mysql, information_schema scenario 4
> > +--replace_column 1 # BACKUP DATABASE mysql, test TO 't.bak';
> > +
> > +--error 0, 1
> > +--remove_file $MYSQLTEST_VARDIR/master-data/t.bak
> > +
> > +# Scenario 5
> > +--echo Backup of mysql, information_schema scenario 5
> > +--replace_column 1 # BACKUP DATABASE information_schema, test TO
> > +'t.bak';
> > +
> > +--error 0, 1
> > +--remove_file $MYSQLTEST_VARDIR/master-data/t.bak
> > +
> > +# Scenario 6
> > +--echo Backup of mysql, information_schema scenario 6
> > +--replace_column 1 # BACKUP DATABASE mysql,
> information_schema, test
> > +TO 't.bak';
> > +
> > +--error 0, 1
> > +--remove_file $MYSQLTEST_VARDIR/master-data/t.bak
> > diff -Nrup a/sql/backup/kernel.cc b/sql/backup/kernel.cc
> > --- a/sql/backup/kernel.cc 2007-12-14 02:51:28 -05:00
> > +++ b/sql/backup/kernel.cc 2008-01-23 17:51:12 -05:00
> > @@ -295,7 +295,16 @@ execute_backup_command(THD *thd, LEX *le
> > else
> > {
> > info.write_message(log_level::INFO,"Backing up
> selected databases");
> > - info.add_dbs(lex->db_list); // backup databases
> specified by user
> > + res= info.add_dbs(lex->db_list); // backup
> databases specified by user
> > + }
> > + if ((info.db_count() == 0) && (res != ERROR))
> > + {
> > + res= ERROR;
> > + info.report_error(log_level::ERROR,
> ER_BACKUP_NOTHING_TO_BACKUP, MYF(0));
> > + stop= my_time(0);
> > + info.save_end_time(stop);
> > + report_errors(thd, info, ER_BACKUP_BACKUP);
> > + goto backup_error;
> > }
> >
> > report_ob_num_objects(backup_prog_id, info.table_count); @@
> > -697,7 +706,15 @@ int Backup_info::add_dbs(List< ::LEX_STR
> > String db_name(*s);
> > Db_ref db(db_name);
> >
> > - if (db_exists(db))
> > + if (((my_strcasecmp(system_charset_info,
> > + db_name.c_ptr(), "information_schema") == 0)) ||
> > + (my_strcasecmp(system_charset_info,
> > + db_name.c_ptr(), "mysql") == 0))
> > + {
> > + report_error(log_level::WARNING, ER_BACKUP_CANNOT_INCLUDE_DB,
> > + db_name.c_ptr());
> > + }
>
> I think the loop should be broken with "goto error" here.
>
> > + else if (db_exists(db))
> > {
> > if (!unknown_dbs.is_empty()) // we just compose
> unknown_dbs list
> > continue;
> > diff -Nrup a/sql/share/errmsg.txt b/sql/share/errmsg.txt
> > --- a/sql/share/errmsg.txt 2007-12-13 11:49:58 -05:00
> > +++ b/sql/share/errmsg.txt 2008-01-23 17:51:12 -05:00
> > @@ -6114,6 +6114,10 @@ ER_BACKUP_RESTORE_START
> ER_BACKUP_RESTORE_DONE
> > eng "Restore completed"
> >
> > +ER_BACKUP_NOTHING_TO_BACKUP
> > + eng "Nothing to backup"
> > +ER_BACKUP_CANNOT_INCLUDE_DB
> > + eng "Database '%-.64s' cannot be included in a
> backup and will be skipped"
> > ER_BACKUP_BACKUP
> > eng "Error during backup operation - server's
> error log contains more information about the error"
> > ER_BACKUP_RESTORE
> >
> >
>
> Rafal