From: Andrei Elkin Date: May 19 2011 9:36am Subject: bzr commit into mysql-next-mr-wl5569 branch (andrei.elkin:3278) WL#5569 List-Archive: http://lists.mysql.com/commits/137674 Message-Id: <201105190936.p4J9acUo002037@mysql1000.dsl.inet.fi> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============0796019037==" --===============0796019037== MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline #At file:///home/andrei/MySQL/BZR/2a-23May/WL/mysql-next-mr-wl5569/ based on revid:andrei.elkin@stripped 3278 Andrei Elkin 2011-05-19 wl#5569 MTS Support for ROWS_QUERY_LOG_EVENT is added. It required refactoring of its handling in the canonical sequential mode. The event life suggests its behavior similar to objects associated with Table_map, in particural, its destoying to occur at the end-of-statement time. Tested against existing ROWS_QUERY_LOG_EVENT feature tests incl rpl_row_ignorable_event in both sequential and parallel mode. @ sql/log_event.cc cleanup of MTS code; relocating handle_rows_query_log_event() logics into a. do_apply_event() and b. rli->cleanup_context(). @ sql/log_event.h cleanup of MTS code; @ sql/rpl_rli.cc Deploying ROWS_QUERY_LOG_EVENT destruction in context_cleanup(). @ sql/rpl_rli.h cleanup of MTS code; @ sql/rpl_slave.cc cleanup of MTS code; @ sql/sql_binlog.cc Simplifying ROWS_QUERY_LOG_EVENT handling in the case of BINLOG pseudo-query. modified: sql/log_event.cc sql/log_event.h sql/rpl_rli.cc sql/rpl_rli.h sql/rpl_slave.cc sql/sql_binlog.cc === modified file 'sql/log_event.cc' --- a/sql/log_event.cc 2011-05-16 19:43:58 +0000 +++ b/sql/log_event.cc 2011-05-19 09:36:28 +0000 @@ -161,38 +161,6 @@ static const char *HA_ERR(int i) } /** - Delay to delete the Rows_query log event until all its rows event are applied - - @param ev log event should be deleted - @param rli Relay_log_info structure for the slave IO thread. -*/ -void handle_rows_query_log_event(Log_event *ev, Relay_log_info *rli) -{ - DBUG_ENTER("handle_rows_query_log_event"); - Log_event_type ev_type= ev->get_type_code(); - - /* Delete the Rows_query log event after its last rows event are applied */ - if ((ev_type == WRITE_ROWS_EVENT || ev_type == DELETE_ROWS_EVENT || - ev_type == UPDATE_ROWS_EVENT) && rli->rows_query_ev != NULL && - ((Rows_log_event*) ev)->get_flags(Rows_log_event::STMT_END_F)) - { - if (rli->rows_query_ev) - delete rli->rows_query_ev; - rli->rows_query_ev= NULL; - rli->info_thd->set_query(NULL, 0); - } - - /* Record the Rows_query log event until all its rows event are applied */ - if (ev_type == ROWS_QUERY_LOG_EVENT) - { - DBUG_ASSERT(rli->rows_query_ev == NULL); - rli->rows_query_ev= (Rows_query_log_event*) ev; - } - - DBUG_VOID_RETURN; -} - -/** Error reporting facility for Rows_log_event::do_apply_event @param level error, warning or info @@ -2872,26 +2840,13 @@ int Log_event::apply_event(Relay_log_inf DBUG_ASSERT(!(rli->curr_group_seen_begin && ends_group()) || rli->last_assigned_worker); - /* - Todo: disassociate Rows_* events from the central rli. - */ if (seq_event) { // rli->last_assigned_worker != NULL if BTQ but not BQT DBUG_ASSERT(rli->curr_group_seen_begin || ends_group()); if (!c_rli->curr_group_isolated) (void) wait_for_workers_to_finish(rli, rli->last_assigned_worker); c_rli->curr_group_isolated= TRUE; - - if (get_type_code() == ROWS_QUERY_LOG_EVENT) - { - while (c_rli->rows_query_ev != NULL) - { - my_sleep(10); - } - c_rli->rows_query_ev= (Rows_query_log_event*) this; - } } - // getting Worker's id if ((!(w= get_slave_worker_id(rli)) || DBUG_EVALUATE_IF("fault_injection_get_slave_worker", 1, 0))) @@ -11393,16 +11348,21 @@ Rows_query_log_event::write_data_body(IO DBUG_RETURN(write_str(file, m_rows_query, (uint) strlen(m_rows_query))); } -#ifndef MYSQL_CLIENT +#if defined(MYSQL_SERVER) && defined(HAVE_REPLICATION) int Rows_query_log_event::do_apply_event(Relay_log_info const *rli) { DBUG_ENTER("Rows_query_log_event::do_apply_event"); - DBUG_ASSERT(rli->info_thd == thd || rli->is_parallel_exec()); + DBUG_ASSERT(rli->info_thd == thd); /* Set query for writing Rows_query log event into binlog later.*/ thd->set_query(m_rows_query, (uint32) strlen(m_rows_query)); + + DBUG_ASSERT(rli->rows_query_ev == NULL); + + const_cast(rli)->rows_query_ev= this; + DBUG_RETURN(0); } -#endif /* !MYSQL_CLIENT */ +#endif #ifdef MYSQL_CLIENT === modified file 'sql/log_event.h' --- a/sql/log_event.h 2011-05-16 19:43:58 +0000 +++ b/sql/log_event.h 2011-05-19 09:36:28 +0000 @@ -1264,8 +1264,6 @@ public: get_type_code() == PRE_GA_UPDATE_ROWS_EVENT|| get_type_code() == PRE_GA_DELETE_ROWS_EVENT|| - get_type_code() == ROWS_QUERY_LOG_EVENT || /* TODO: make parallel */ - get_type_code() == INCIDENT_EVENT; } @@ -4308,11 +4306,11 @@ public: { return IGNORABLE_HEADER_LEN + 1 + (uint) strlen(m_rows_query); } +#if defined(MYSQL_SERVER) && defined(HAVE_REPLICATION) + virtual int do_apply_event(Relay_log_info const *rli); +#endif private: -#if !defined(MYSQL_CLIENT) - virtual int do_apply_event(Relay_log_info const* rli); -#endif char * m_rows_query; }; === modified file 'sql/rpl_rli.cc' --- a/sql/rpl_rli.cc 2011-05-16 19:43:58 +0000 +++ b/sql/rpl_rli.cc 2011-05-19 09:36:28 +0000 @@ -1056,23 +1056,13 @@ void Relay_log_info::cleanup_context(THD trans_rollback_stmt(thd); // if a "statement transaction" trans_rollback(thd); // if a "real transaction" } - /* - MTS W/a for Rows_query_log_event. - Cleanup of rows_query_ev at the end of the current statement. - - TODO: move handle_rows_query_log_event() cleanup logics into this method - inconditionally. - */ - if (error || is_parallel_exec()) - if (rows_query_ev) - { - delete rows_query_ev; - rows_query_ev= NULL; - info_thd->set_query(NULL, 0); - } - + if (rows_query_ev) + { + delete rows_query_ev; + rows_query_ev= NULL; + info_thd->set_query(NULL, 0); + } m_table_map.clear_tables(); - slave_close_thread_tables(thd); if (error) thd->mdl_context.release_transactional_locks(); === modified file 'sql/rpl_rli.h' --- a/sql/rpl_rli.h 2011-05-16 19:43:58 +0000 +++ b/sql/rpl_rli.h 2011-05-19 09:36:28 +0000 @@ -388,7 +388,7 @@ public: uint tables_to_lock_count; /* RBR: Count of tables to lock */ table_mapping m_table_map; /* RBR: Mapping table-id to table */ /* RBR: Record Rows_query log event */ - volatile Rows_query_log_event* rows_query_ev; // mts w/a makes it volatile + Rows_query_log_event* rows_query_ev; bool get_table_data(TABLE *table_arg, table_def **tabledef_var, TABLE **conv_table_var) const { === modified file 'sql/rpl_slave.cc' --- a/sql/rpl_slave.cc 2011-05-16 19:43:58 +0000 +++ b/sql/rpl_slave.cc 2011-05-19 09:36:28 +0000 @@ -3038,47 +3038,33 @@ static int exec_relay_log_event(THD* thd exec_res= apply_event_and_update_pos(ev, thd, rli); - /* - Format_description_log_event should not be deleted because it will be - used to read info about the relay log's format; it will be deleted when - the SQL thread does not need it, i.e. when this thread terminates. - */ - // if (ev->get_type_code() != FORMAT_DESCRIPTION_EVENT) + if ((!rli->is_parallel_exec() || !rli->curr_group_is_parallel)) { - if ((!rli->is_parallel_exec() || !rli->curr_group_is_parallel)) + DBUG_ASSERT(!rli->is_parallel_exec() || !rli->curr_group_is_parallel || + ev->shall_skip(rli) != Log_event::EVENT_SKIP_NOT); + + if (rli->curr_group_split) { - DBUG_ASSERT(!rli->is_parallel_exec() || !rli->curr_group_is_parallel || - ev->shall_skip(rli) != Log_event::EVENT_SKIP_NOT); - - if (rli->curr_group_split) - { - // the current group split status is reset - rli->curr_group_is_parallel= TRUE; - rli->curr_group_split= FALSE; - } - if (ev->get_type_code() != FORMAT_DESCRIPTION_EVENT) - { - /* MTS/ TODO. - - ROWS_QUERY_LOG_EVENT could be supported easier if - destructing part of handle_rows_query_log_event would be merged - with rli->cleanup_context() and the rest move into - ROWS...::do_apply_event - */ - if (!rli->is_parallel_exec()) - if (thd->variables.binlog_rows_query_log_events) - handle_rows_query_log_event(ev, rli); - - if (ev->get_type_code() != ROWS_QUERY_LOG_EVENT) - { - DBUG_PRINT("info", ("Deleting the event after it has been executed")); - delete ev; - ev= NULL; - } - } + // the current group split status is reset + rli->curr_group_is_parallel= TRUE; + rli->curr_group_split= FALSE; + } + /* + Format_description_log_event should not be deleted because it will be + used to read info about the relay log's format; it will be deleted when + the SQL thread does not need it, i.e. when this thread terminates. + ROWS_QUERY_LOG_EVENT is destroyed at the end of the current statement + clean-up routine. + */ + if (ev->get_type_code() != FORMAT_DESCRIPTION_EVENT && + ev->get_type_code() != ROWS_QUERY_LOG_EVENT) + { + DBUG_PRINT("info", ("Deleting the event after it has been executed")); + delete ev; + ev= NULL; } } - + /* update_log_pos failed: this should not happen, so we don't retry. === modified file 'sql/sql_binlog.cc' --- a/sql/sql_binlog.cc 2010-12-02 13:44:21 +0000 +++ b/sql/sql_binlog.cc 2011-05-19 09:36:28 +0000 @@ -284,16 +284,14 @@ void mysql_client_binlog_statement(THD* will be used to read info about the relay log's format; it will be deleted when the SQL thread does not need it, i.e. when this thread terminates. + ROWS_QUERY_LOG_EVENT if present in rli is deleted at the end + of the event. */ - if (ev->get_type_code() != FORMAT_DESCRIPTION_EVENT) + if (ev->get_type_code() != FORMAT_DESCRIPTION_EVENT && + ev->get_type_code() != ROWS_QUERY_LOG_EVENT) { - if (thd->variables.binlog_rows_query_log_events) - handle_rows_query_log_event(ev, rli); - if (ev->get_type_code() != ROWS_QUERY_LOG_EVENT) - { - delete ev; - ev= NULL; - } + delete ev; + ev= NULL; } if (err) { --===============0796019037== MIME-Version: 1.0 Content-Type: text/bzr-bundle; charset="us-ascii"; name="bzr/andrei.elkin@stripped" Content-Transfer-Encoding: 7bit Content-Disposition: inline # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: andrei.elkin@stripped # target_branch: file:///home/andrei/MySQL/BZR/2a-23May/WL/mysql-next-\ # mr-wl5569/ # testament_sha1: 3dbb1eef462464a1ccbecc586b35f815f2c8a434 # timestamp: 2011-05-19 12:36:38 +0300 # source_branch: file:///home/andrei/MySQL/BZR/2a-23May/mysql-trunk/ # base_revision_id: andrei.elkin@stripped\ # bebbn66gdh75adif # # Begin bundle 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 GwqAv/F3JFOFCQUtJMbg --===============0796019037==--