Hi Daniel! On Tue, Jan 24, 2017 at 2:32 AM, Daniel Black <daniel.bl...@au1.ibm.com> wrote:
> > > On 24/01/17 04:30, SachinSetiya wrote: > > revision-id: ef590faa0e21d25a2dc5153f938135612b17ecbc > (mariadb-10.1.20-31-gef590fa) > > > > thd_proc_info(thd, message); > > + DBUG_EXECUTE_IF("should_sleep_for_mdev7409",{ > > + my_sleep(500000); > > + };); > > Shouldn't these be DEBUG_SYNC_C("do_exec_row"); > > and then use debug_sync to generate test synchronisation. > > I tried using DEBUG_SYNC and DEBUG_SYNC_C int Write_rows_log_event::do_exec_row(rpl_group_info *rgi) { DBUG_ASSERT(m_table != NULL); const char *tmp= thd->get_proc_info(); char *tmp_db= thd->db; char *message, msg[128]; my_snprintf(msg, sizeof(msg),"Write_rows_log_event::write_row() on table %s", m_table->s->table_name.str); thd->db= m_table->s->db.str; message= msg; #ifdef WSREP_PROC_INFO my_snprintf(thd->wsrep_info, sizeof(thd->wsrep_info) - 1, "Write_rows_log_event::write_row(%lld) on table %s", (long long) wsrep_thd_trx_seqno(thd), m_table->s->table_name.str); message= thd->wsrep_info; #endif /* WSREP_PROC_INFO */ thd_proc_info(thd, message); DEBUG_SYNC_C("write_row_log_event__do_exec_row"); and in mtr test --connection slave SET DEBUG_SYNC= 'write_row_log_event__do_exec_row SIGNAL fdfdffd WAIT_FOR fsdfsdfsdf'; But mtr test is not waiting, this is because ::do_exec_row is called by SQL thread is there a way to stop SQL thread and add sync points ? > > int error= write_row(rgi, slave_exec_mode == > SLAVE_EXEC_MODE_IDEMPOTENT); > > thd_proc_info(thd, tmp); > > + thd->db= tmp_db; > > > > if (error && !thd->is_error()) > > { > > @@ -12371,32 +12380,45 @@ int > > Delete_rows_log_event::do_exec_row(rpl_group_info > *rgi) > > { > > int error; > > const char *tmp= thd->get_proc_info(); > > - const char *message= "Delete_rows_log_event::find_row()"; > > + char *tmp_db= thd->db; > > + char *message, msg[128]; > > + my_snprintf(msg, sizeof(msg),"Delete_rows_log_event::find_row() on > table %s", > > + m_table->s->table_name.str); > > + thd->db= m_table->s->db.str; > > + message= msg; > > Why assign a pointer? Isn't defining message as a char[128] sufficient? Because, I do not have any better option char *message, msg[128]; my_snprintf(msg, sizeof(msg),"Write_rows_log_event::write_row() on table %s", m_table->s->table_name.str); thd->db= m_table->s->db.str; message= msg; #ifdef WSREP_PROC_INFO my_snprintf(thd->wsrep_info, sizeof(thd->wsrep_info) - 1, "Write_rows_log_event::write_row(%lld) on table %s", (long long) wsrep_thd_trx_seqno(thd), m_table->s->table_name.str); message= thd->wsrep_info; #endif /* WSREP_PROC_INFO */ thd_proc_info(thd, message); If i take message as array then I have to memcpy thd->wsrep_info into message. Because I do not want to call thd_proc_info 2 times. that is why I defined a pointer and a array. > > Thanks for writing this feature. > > -- Regards Sachin Setiya
_______________________________________________ Mailing list: https://launchpad.net/~maria-developers Post to : maria-developers@lists.launchpad.net Unsubscribe : https://launchpad.net/~maria-developers More help : https://help.launchpad.net/ListHelp