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-03-14 08:51:11-04:00, cbell@mysql_cab_desk. +3 -0
BUG#34858 Server crashes by backup tests
Patch fixes problems encountered when merging runtime code changes
into main for online backup.
mysql-test/t/disabled.def@stripped, 2008-03-14 08:51:06-04:00, cbell@mysql_cab_desk. +0 -5
BUG#34858 Server crashes by backup tests
Reenabled disabled tests.
sql/backup/backup_progress.cc@stripped, 2008-03-14 08:51:07-04:00, cbell@mysql_cab_desk. +37 -5
BUG#34858 Server crashes by backup tests
Patch adds code to turn off binlogging for progress table writes.
Patch fixes bug caused by changes to handler.cc WRT current thread
access for writes.
sql/backup/be_snapshot.cc@stripped, 2008-03-14 08:51:08-04:00, cbell@mysql_cab_desk. +1 -0
BUG#34858 Server crashes by backup tests
Added code to perform commit of consistent read to avoid another
problem introduced from changes to handler.cc.
diff -Nrup a/mysql-test/t/disabled.def b/mysql-test/t/disabled.def
--- a/mysql-test/t/disabled.def 2008-03-10 08:58:17 -04:00
+++ b/mysql-test/t/disabled.def 2008-03-14 08:51:06 -04:00
@@ -35,8 +35,3 @@ backup_snapshot :BUG#34235 pending
csv_alter_table : Bug#33696 2008-01-21 pcrews no .result file - bug allows NULL columns in CSV tables
ctype_latin2_ch : BUG #33791 2008-01-18 mats Wrong ORDER BY with latin2_czech_cs
-backup_errors : Bug#34858 2008-Feb-28 Server crashes by backup tests
-backup_fkey : Bug#34858 2008-Feb-28 Server crashes by backup tests
-backup_no_data : Bug#34858 2008-Feb-28 Server crashes by backup tests
-backup_no_engine : Bug#34858 2008-Feb-28 Server crashes by backup tests
-backup_objects : Bug#34858 2008-Feb-28 Server crashes by backup tests
diff -Nrup a/sql/backup/backup_progress.cc b/sql/backup/backup_progress.cc
--- a/sql/backup/backup_progress.cc 2008-02-26 15:18:12 -05:00
+++ b/sql/backup/backup_progress.cc 2008-03-14 08:51:07 -04:00
@@ -276,6 +276,9 @@ int update_online_backup_int_field(ulong
table= locking_thd->tables_in_backup->table;
table->use_all_columns();
+ THD *t= table->in_use;
+ table->in_use= current_thd;
+
if (find_online_backup_row(table, backup_id))
{
ret= close_backup_progress_table(locking_thd);
@@ -290,12 +293,17 @@ int update_online_backup_int_field(ulong
table->field[fld]->store(value, TRUE);
table->field[fld]->set_notnull();
+ tmp_disable_binlog(current_thd);
+
/*
Update the row.
*/
if ((ret= table->file->ha_update_row(table->record[1], table->record[0])))
table->file->print_error(ret, MYF(0));
+ reenable_binlog(current_thd);
+
+ table->in_use= t;
ret= close_backup_progress_table(locking_thd);
DBUG_RETURN(ret);
}
@@ -336,6 +344,9 @@ int update_online_backup_datetime_field(
table= locking_thd->tables_in_backup->table;
table->use_all_columns();
+ THD *t= table->in_use;
+ table->in_use= current_thd;
+
if (find_online_backup_row(table, backup_id))
{
ret= close_backup_progress_table(locking_thd);
@@ -356,12 +367,17 @@ int update_online_backup_datetime_field(
table->field[fld]->store_time(&time, MYSQL_TIMESTAMP_DATETIME);
}
+ tmp_disable_binlog(current_thd);
+
/*
Update the row.
*/
if ((ret= table->file->ha_update_row(table->record[1], table->record[0])))
table->file->print_error(ret, MYF(0));
+ reenable_binlog(current_thd);
+
+ table->in_use= t;
ret= close_backup_progress_table(locking_thd);
DBUG_RETURN(ret);
}
@@ -470,16 +486,19 @@ ulonglong report_ob_init(int process_id,
goto end;
table->field[ET_FIELD_COMMAND]->set_notnull();
}
- table->in_use= t;
table->next_number_field=table->found_next_number_field;
+ tmp_disable_binlog(current_thd);
+
/*
Write the row.
*/
if ((ret= table->file->ha_write_row(table->record[0])))
table->file->print_error(ret, MYF(0));
+ reenable_binlog(current_thd);
+
/*
Get last insert id for row.
*/
@@ -488,6 +507,7 @@ ulonglong report_ob_init(int process_id,
end:
+ table->in_use= t;
ret= close_backup_progress_table(locking_thd);
/*
Record progress update.
@@ -557,7 +577,8 @@ int report_ob_binlog_info(ulonglong back
goto end;
table->field[ET_FIELD_BINLOG_FILE]->set_notnull();
}
- table->in_use= t;
+
+ tmp_disable_binlog(current_thd);
/*
Update the row.
@@ -565,8 +586,11 @@ int report_ob_binlog_info(ulonglong back
if ((ret= table->file->ha_update_row(table->record[1], table->record[0])))
table->file->print_error(ret, MYF(0));
+ reenable_binlog(current_thd);
+
end:
+ table->in_use= t;
ret= close_backup_progress_table(locking_thd);
DBUG_RETURN(ret);
}
@@ -753,7 +777,8 @@ int report_ob_engines(ulonglong backup_i
goto end;
table->field[ET_FIELD_ENGINES]->set_notnull();
}
- table->in_use= t;
+
+ tmp_disable_binlog(current_thd);
/*
Update the row.
@@ -761,8 +786,11 @@ int report_ob_engines(ulonglong backup_i
if ((ret= table->file->ha_update_row(table->record[1], table->record[0])))
table->file->print_error(ret, MYF(0));
+ reenable_binlog(current_thd);
+
end:
+ table->in_use= t;
ret= close_backup_progress_table(locking_thd);
DBUG_RETURN(ret);
}
@@ -872,7 +900,6 @@ int report_ob_progress(ulonglong backup_
goto end;
table->field[ET_FIELD_PROG_NOTES]->set_notnull();
}
- table->in_use= t;
if (start)
{
@@ -899,14 +926,19 @@ int report_ob_progress(ulonglong backup_
table->field[ET_FIELD_PROG_ERROR_NUM]->store(error_num, TRUE);
table->field[ET_FIELD_PROG_ERROR_NUM]->set_notnull();
+ tmp_disable_binlog(current_thd);
+
/*
Write the row.
*/
if ((ret= table->file->ha_write_row(table->record[0])))
table->file->print_error(ret, MYF(0));
+ reenable_binlog(current_thd);
+
end:
+ table->in_use= t;
ret= close_backup_progress_table(locking_thd);
DBUG_RETURN(ret);
}
@@ -951,10 +983,10 @@ ulonglong sum_progress_rows(ulonglong ba
(table->field[ET_FIELD_PROG_ERROR_NUM]->val_int() == 0) &&
((ulonglong)table->field[ET_FIELD_BACKUP_ID_FK]->val_int() == backup_id))
size+= table->field[ET_FIELD_PROG_SIZE]->val_int();
- table->in_use= t;
hdl->ha_rnd_end();
+ table->in_use= t;
close_backup_progress_table(locking_thd);
DBUG_RETURN(size);
}
diff -Nrup a/sql/backup/be_snapshot.cc b/sql/backup/be_snapshot.cc
--- a/sql/backup/be_snapshot.cc 2007-11-29 23:22:05 -05:00
+++ b/sql/backup/be_snapshot.cc 2008-03-14 08:51:08 -04:00
@@ -121,6 +121,7 @@ result_t Backup::get_data(Buffer &buf)
if (locking_thd->lock_state == LOCK_SIGNAL)
{
locking_thd->lock_state= LOCK_DONE; // set lock done so destructor won't wait
+ ha_autocommit_or_rollback(locking_thd->m_thd, 0);
end_active_trans(locking_thd->m_thd);
close_thread_tables(locking_thd->m_thd);
}