hi Kistian,
I afraid there are two palces need adjusted
in rpl_parallel.cc
First is in
rpl_parallel_thread::get_rgi()
adjusted like this
...
else
{
if(!(rgi= new
rpl_group_info(rli)))
{
my_error(ER_OUTOFMEMORY, MYF(0),
(int)sizeof(*rgi));
return
NULL;
}
rgi->is_parallel_exec =
true;
- if ((rgi->deferred_events_collecting=
rli->mi->rpl_filter->is_on()))
_
rgi->deferred_events= new Deferred_log_events(rli);
}
+ if ((rgi->deferred_events_collecting=
rli->mi->rpl_filter->is_on()))
+
rgi->deferred_events= new Deferred_log_events(rli);
because rgi->deferred_events was freed in
rpl_parallel_thread::free_rgi() if it wasn't NULL
Second is in rpl_parallel_change_thread_count()
I think it need add
mysql_cond_broadcast(&pool->COND_rpl_thread_pool) after all new
threads are ok, this is for
the case that skip_slave_start=OFF,then SQL thread would start
automaticlly, it could wait forever in
rpl_parallel_thread_pool::get_thread(), because SQL thread may reach
this function before another thread reach
the rpl_parallel_change_thread_count().
2014-03-04
nanyi607rao