summaryrefslogtreecommitdiff
path: root/sql
diff options
context:
space:
mode:
Diffstat (limited to 'sql')
-rw-r--r--sql/rpl_mi.h4
-rw-r--r--sql/slave.cc12
-rw-r--r--sql/sql_table.cc28
3 files changed, 15 insertions, 29 deletions
diff --git a/sql/rpl_mi.h b/sql/rpl_mi.h
index 4c2ebb9207b..3ab167c16e8 100644
--- a/sql/rpl_mi.h
+++ b/sql/rpl_mi.h
@@ -151,9 +151,7 @@ enum start_alter_state
REGISTERED= 0, // Start Alter exist, Default state
COMMIT_ALTER, // COMMIT the alter
ROLLBACK_ALTER, // Rollback the alter
- COMMITTED, // COMMIT/ROLLBACK Alter written in binlog
- SHUTDOWN_RECIEVED, //Got shutdown in between
- SHUTDOWN_COMPLETED //Shutdown formalities done on spawned thd side
+ COMMITTED // COMMIT/ROLLBACK Alter written in binlog
};
struct start_alter_info
{
diff --git a/sql/slave.cc b/sql/slave.cc
index 73a793e463f..10e4189c3b3 100644
--- a/sql/slave.cc
+++ b/sql/slave.cc
@@ -5763,14 +5763,18 @@ err_during_init:
List_iterator<start_alter_info> info_iterator(mi->start_alter_list);
while ((info= info_iterator++))
{
- info->state= start_alter_state::SHUTDOWN_RECIEVED;
+ mysql_mutex_lock(&mi->start_alter_lock);
+ info->state= start_alter_state::ROLLBACK_ALTER;
mysql_cond_broadcast(&info->start_alter_cond);
+ mysql_mutex_unlock(&mi->start_alter_lock);
mysql_mutex_lock(&mi->start_alter_lock);
- while(info->state == start_alter_state::SHUTDOWN_RECIEVED)
+ while(info->state == start_alter_state::ROLLBACK_ALTER)
mysql_cond_wait(&info->start_alter_cond, &mi->start_alter_lock);
- DBUG_ASSERT(info->state == start_alter_state::SHUTDOWN_COMPLETED);
- info_iterator.remove();
mysql_mutex_unlock(&mi->start_alter_lock);
+ DBUG_ASSERT(info->state == start_alter_state::COMMITTED);
+ info_iterator.remove();
+ mysql_cond_destroy(&info->start_alter_cond);
+ my_free(info);
}
/* When master_pos_wait() wakes up it will check this and terminate */
rli->slave_running= MYSQL_SLAVE_NOT_RUN;
diff --git a/sql/sql_table.cc b/sql/sql_table.cc
index 5573057ca48..b1a3e5f2d89 100644
--- a/sql/sql_table.cc
+++ b/sql/sql_table.cc
@@ -84,7 +84,6 @@ static bool write_start_alter(THD *thd, bool* partial_alter, start_alter_info *i
static void wait_for_master(THD *thd, start_alter_info *info);
static int master_result(THD *thd, Master_info *mi, start_alter_info *info,
int alter_result);
-static void mark_shutdown(start_alter_info *info, Master_info *mi);
/**
@brief Helper function for explain_filename
@@ -9415,20 +9414,10 @@ static int master_result(THD *thd, Master_info *mi, start_alter_info *info,
thd->is_slave_error= 1;
return MASTER_RESULT_COMMIT_ERROR;
}
- else if (info->state == start_alter_state::SHUTDOWN_RECIEVED)
- return MASTER_RESULT_SHUTDOWN;
DBUG_ASSERT(info->state == start_alter_state::COMMIT_ALTER && !alter_result);
return 0;
}
-static void mark_shutdown(start_alter_info *info, Master_info *mi)
-{
- mysql_mutex_lock(&mi->start_alter_lock);
- info->state= start_alter_state::SHUTDOWN_COMPLETED;
- mysql_mutex_unlock(&mi->start_alter_lock);
- mysql_cond_broadcast(&info->start_alter_cond);
-}
-
static bool write_start_alter(THD *thd, bool* partial_alter, start_alter_info *info)
{
//No need to write start alter , It must be already written
@@ -9445,7 +9434,7 @@ static bool write_start_alter(THD *thd, bool* partial_alter, start_alter_info *i
mysql_mutex_unlock(&mi->start_alter_list_lock);
mysql_cond_broadcast(&mi->start_alter_list_cond);
DBUG_EXECUTE_IF("start_alter_delay_slave", {
- my_sleep(10000000);
+ my_sleep(5000000);
});
if (thd->slave_shutdown)
return true;
@@ -9460,7 +9449,7 @@ static bool write_start_alter(THD *thd, bool* partial_alter, start_alter_info *i
return true;
*partial_alter= true;
DBUG_EXECUTE_IF("start_alter_delay_master", {
- my_sleep(10000000);
+ my_sleep(5000000);
});
return false;
}
@@ -10402,8 +10391,7 @@ do_continue:;
{
DBUG_ASSERT(thd->slave_thread);
wait_for_master(thd, info);
- if (info->state == start_alter_state::ROLLBACK_ALTER ||
- info->state == start_alter_state::SHUTDOWN_RECIEVED)
+ if (info->state == start_alter_state::ROLLBACK_ALTER)
goto err_new_table_cleanup;
}
/* Close lock if this is a transactional table */
@@ -10470,8 +10458,7 @@ do_continue:;
{
DBUG_ASSERT(thd->slave_thread);
wait_for_master(thd, info);
- if (info->state == start_alter_state::ROLLBACK_ALTER ||
- info->state == start_alter_state::SHUTDOWN_RECIEVED)
+ if (info->state == start_alter_state::ROLLBACK_ALTER)
goto err_new_table_cleanup;
}
engine_changed= ((new_table->file->ht != table->file->ht) &&
@@ -10706,11 +10693,8 @@ err_new_table_cleanup:
alter_ctx.get_tmp_path());
//STODO
if (thd->start_alter_id && !thd->direct_commit_alter)
- {
- if (master_result(thd, mi, info, 1) == MASTER_RESULT_SHUTDOWN)
- mark_shutdown(info, mi);
- }
- else
+ master_result(thd, mi, info, 1);
+ else if (opt_binlog_split_alter)
{
thd->gtid_flags3|= Gtid_log_event::FL_ROLLBACK_ALTER_E1;
sprintf(send_query, "/*!100001 %s */", thd->query());