From: Andrei Elkin Date: June 14 2011 10:35am Subject: bzr push into mysql-next-mr-wl5569 branch (andrei.elkin:3288) List-Archive: http://lists.mysql.com/commits/139190 Message-Id: <201106141035.p5EAZq5M000598@mysql1000.dsl.inet.fi> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============0209829194==" --===============0209829194== MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline 3288 Andrei Elkin 2011-06-14 [merge] merge from trunk modified: mysql-test/suite/funcs_1/r/is_columns_mysql_embedded.result mysql-test/suite/funcs_1/r/is_statistics_mysql_embedded.result mysql-test/suite/funcs_1/r/is_table_constraints_mysql_embedded.result mysql-test/suite/funcs_1/r/is_tables_mysql_embedded.result sql/rpl_info.cc sql/rpl_info.h sql/rpl_mi.cc sql/rpl_mi.h sql/rpl_rli.cc sql/rpl_rli.h sql/rpl_rli_pdb.cc sql/rpl_rli_pdb.h sql/rpl_slave.cc === modified file 'sql/log_event.cc' --- a/sql/log_event.cc 2011-06-12 19:05:05 +0000 +++ b/sql/log_event.cc 2011-06-14 09:27:38 +0000 @@ -673,7 +673,7 @@ Log_event::Log_event(enum_event_cache_ty event_logging_type(logging_type_arg), crc(0), thd(0), checksum_alg(BINLOG_CHECKSUM_ALG_UNDEF) #if defined(MYSQL_SERVER) && defined(HAVE_REPLICATION) - , m_mts_event_ends_group(FALSE) + , m_mts_event_isolated_group(FALSE) #endif { server_id= ::server_id; @@ -698,7 +698,7 @@ Log_event::Log_event(const char* buf, event_logging_type(EVENT_INVALID_LOGGING), crc(0), checksum_alg(BINLOG_CHECKSUM_ALG_UNDEF) #if defined(MYSQL_SERVER) && defined(HAVE_REPLICATION) - , m_mts_event_ends_group(FALSE) + , m_mts_event_isolated_group(FALSE) #endif { #ifndef MYSQL_CLIENT @@ -2428,6 +2428,7 @@ Slave_worker *Log_event::get_slave_worke ulong gaq_idx; rli->mts_total_groups++; + rli->curr_group_isolated= FALSE; g.master_log_pos= log_pos; g.group_master_log_pos= g.group_relay_log_pos= 0; g.group_master_log_name= NULL; // todo: remove @@ -2483,6 +2484,8 @@ Slave_worker *Log_event::get_slave_worke if (!ret_worker) ret_worker= *(Slave_worker**) dynamic_array_ptr(&rli->workers, 0); (void) wait_for_workers_to_finish(rli, ret_worker); + + rli->curr_group_isolated= TRUE; } do @@ -2492,8 +2495,7 @@ Slave_worker *Log_event::get_slave_worke if (!(ret_worker= get_slave_worker(*ref_cur_db, rli, &mts_assigned_partitions[i], - get_type_code() == QUERY_EVENT, - ret_worker))) + TRUE, ret_worker))) { rli->report(ERROR_LEVEL, ER_MTS_CANT_PARALLEL, ER(ER_MTS_CANT_PARALLEL), @@ -2501,7 +2503,8 @@ Slave_worker *Log_event::get_slave_worke rli->get_event_relay_log_pos()); return ret_worker; } - + // all temporary tables are transferred from Coordinator in over-max case + DBUG_ASSERT(num_dbs != OVER_MAX_DBS_IN_EVENT_MTS || !thd->temporary_tables); DBUG_ASSERT(!strcmp(mts_assigned_partitions[i]->db, *ref_cur_db)); DBUG_ASSERT(ret_worker == mts_assigned_partitions[i]->worker); DBUG_ASSERT(mts_assigned_partitions[i]->usage > 0); @@ -2589,10 +2592,12 @@ Slave_worker *Log_event::get_slave_worke { // index of GAQ that this terminal event belongs to mts_group_cnt= rli->gaq->assigned_group_index; - - // special marking for T event of {p,g} B-less group - if (num_dbs == OVER_MAX_DBS_IN_EVENT_MTS) - mts_do_isolate_event(); + /* + special marking for T event of a group containing over-max db:s event + including {p,g} B-less group. + */ + if (rli->curr_group_isolated) + mts_do_isolate_group(); rli->mts_group_status= Relay_log_info::MTS_END_GROUP; ptr_g= (Slave_job_group *) === modified file 'sql/log_event.h' --- a/sql/log_event.h 2011-06-12 19:05:05 +0000 +++ b/sql/log_event.h 2011-06-14 09:27:38 +0000 @@ -1350,26 +1350,23 @@ public: virtual uint8 mts_number_dbs() { return 1; } /* - Event can be exceptionally marked to force its execution. + Group of events can be marked to force its execution in isolation from any other Workers. - Other than Query-log-event class should not have any implementation - of this method. + Typically that is done for a transaction that contains + a query accessing more than OVER_MAX_DBS_IN_EVENT_MTS db:s */ - /* - Event can be indentified as a group terminator and such fact - is memoried by the function. - */ - virtual void mts_do_isolate_event() + virtual void mts_do_isolate_group() { - DBUG_ASSERT(get_type_code() == QUERY_EVENT || + DBUG_ASSERT(ends_group() || + get_type_code() == QUERY_EVENT || get_type_code() == EXEC_LOAD_EVENT || get_type_code() == EXECUTE_LOAD_QUERY_EVENT); - m_mts_event_ends_group= TRUE; + m_mts_event_isolated_group= TRUE; } /* Verifying whether event is marked to execute in isolation. */ - virtual bool mts_is_event_isolated() { return m_mts_event_ends_group; } + virtual bool mts_is_group_isolated() { return m_mts_event_isolated_group; } /** Apply the event to the database. @@ -1505,7 +1502,7 @@ protected: */ virtual enum_skip_reason do_shall_skip(Relay_log_info *rli); - bool m_mts_event_ends_group; + bool m_mts_event_isolated_group; #endif }; === modified file 'sql/rpl_rli.h' --- a/sql/rpl_rli.h 2011-06-13 00:07:26 +0000 +++ b/sql/rpl_rli.h 2011-06-14 10:35:20 +0000 @@ -448,6 +448,7 @@ public: DYNAMIC_ARRAY curr_group_assigned_parts; // CGAP DYNAMIC_ARRAY curr_group_da; // deferred array to hold partition-info-free events bool curr_group_seen_begin; // current group started with B-event or not + bool curr_group_isolated; // current group requires execution in isolation volatile ulong mts_wqs_underrun_w_id; // Id of a Worker whose queue is getting empty volatile long mts_wqs_overrun; // W to incr and decr ulong mts_wqs_underrun_cnt; // Coord goes to sleep when senses Workers are content === modified file 'sql/rpl_rli_pdb.cc' --- a/sql/rpl_rli_pdb.cc 2011-06-13 00:07:26 +0000 +++ b/sql/rpl_rli_pdb.cc 2011-06-14 10:35:20 +0000 @@ -283,6 +283,7 @@ static void free_entry(db_worker_hash_en DBUG_ASSERT(c_thd->system_thread == SYSTEM_THREAD_SLAVE_SQL); DBUG_ASSERT(entry->usage == 0 || + !entry->worker || // the last entry owner could have errored out entry->worker->running_status != Slave_worker::RUNNING); mts_move_temp_tables_to_thd(c_thd, entry->temporary_tables); @@ -834,12 +835,14 @@ void Slave_worker::slave_worker_ends_gro if (error) { - mysql_mutex_lock(&slave_worker_hash_lock); + // Killing Coordinator to indicate eventual consistency error mysql_mutex_lock(&c_rli->info_thd->LOCK_thd_data); - - c_rli->info_thd->awake(THD::KILL_QUERY); // notify Crdn - + c_rli->info_thd->awake(THD::KILL_QUERY); mysql_mutex_unlock(&c_rli->info_thd->LOCK_thd_data); + + // Awakening Coordinator that could be waiting for entry release + mysql_mutex_lock(&slave_worker_hash_lock); + mysql_cond_signal(&slave_worker_hash_cond); mysql_mutex_unlock(&slave_worker_hash_lock); } @@ -1147,8 +1150,8 @@ int wait_for_workers_to_finish(Relay_log if (entry->usage > 0 && !thd->killed) { - long w_id= entry->worker->id; - sprintf(wait_info, info_format, entry->worker->id, entry->db); + Slave_worker * w_entry= entry->worker; + sprintf(wait_info, info_format, w_entry->id, entry->db); entry->worker= NULL; // mark Worker to signal when usage drops to 0 do { @@ -1159,8 +1162,9 @@ int wait_for_workers_to_finish(Relay_log DBUG_PRINT("info", ("Either got awakened of notified: " "entry %p, usage %lu, worker %lu", - entry, entry->usage, w_id)); + entry, entry->usage, w_entry->id)); } while (entry->usage != 0 && !thd->killed); + entry->worker= w_entry; // restoring last association, needed only for assert thd->exit_cond(proc_info); ret++; } === modified file 'sql/rpl_slave.cc' --- a/sql/rpl_slave.cc 2011-06-13 00:07:26 +0000 +++ b/sql/rpl_slave.cc 2011-06-14 10:35:20 +0000 @@ -2742,8 +2742,8 @@ int apply_event_and_update_pos(Log_event { Slave_job_item item= {ev}, *job_item= &item; Slave_worker *w= (Slave_worker *) ev->worker; - // specially marked end of B-less group event requires sync with worker - bool need_sync= ev->mts_is_event_isolated(); + // specially marked group typically with OVER_MAX_DBS_IN_EVENT_MTS db:s + bool need_sync= ev->mts_is_group_isolated(); // all events except BEGIN-query must be marked with a non-NULL Worker DBUG_ASSERT(((Slave_worker*) ev->worker) == rli->last_assigned_worker); @@ -4170,6 +4170,7 @@ int slave_start_workers(Relay_log_info * rli->mts_worker_underrun_level= ::opt_mts_worker_underrun_level; rli->mts_total_groups= 0; rli->curr_group_seen_begin= FALSE; + rli->curr_group_isolated= FALSE; rli->checkpoint_seqno= 0; rli->mts_group_status= Relay_log_info::MTS_NOT_IN_GROUP; /* --===============0209829194== 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/MERGE/mysql-\ # next-mr-wl5569/ # testament_sha1: b341d1159d2bef1574e7dd7eb21e770bb987a79c # timestamp: 2011-06-14 13:35:52 +0300 # source_branch: file:///home/andrei/MySQL/BZR/2a-23May/mysql-trunk/ # base_revision_id: alfranio.correia@stripped\ # j0irr1fc6ezc1qyo # # Begin bundle IyBCYXphYXIgcmV2aXNpb24gYnVuZGxlIHY0CiMKQlpoOTFBWSZTWSYxli4ACVf/gHQUQCB59/// f++/4P////5gEKfeB72jx5wh1TSjRQoJPuOzbtA7Y6LYcKqUMZqZKlVMBpqCTTTU8owGTKNNqepp 6mQAAAADQ0ANBKRMaAgJqnhTIEbUPSYRgBoTCAAZNoQiobU09NQDQG1HpB6gABoAAaAABo0BIUTE U9KaZT9AjU8miGBANB5IZABoGmjQBFISNDKM0RpT/VPT0inkZTT9KbakGgaYnlD1AAABJEEAAQE0 noT0RoxUxkhoAYjTQAA9R0IOkoAI4rO6YrrRdnmHtiufzMhRZRpasOAe7Bo1IWjHPj7xi9ApTKwr msH1mRr5sWlUHMiU4oqs2Kd+k58UoyIA//fhOQr5WUbytmJhAf00i+vGPnm1dVjoRsY9KHqZM0cT E43soJYzRdUddj1kvSulJDIsUmweViFNM7b2Cuuz9mJLf/Wc3BEAGBLPiiSOKpBjbMU3f2vZXfhA 5kbbsYyA2kMY2NjGNpHR+6QcPrcRtxw82YU0gQZxXryMvTSlHWsOR0ddJeZ6gOa5LJx5ulCZMu8X ijdLZVs5ngmZKVHWCd3lSzrXLOVejUybkwOXIFtIWph02BGfGOU6qoJhcAYyQHB0EUmoimdCDqUy RGSCG0IDLdy/eohOK81kWer/e9nJdqXK5hK93Io8ZNxC3KRkkUjHwnQzm+lrefaZ3gzZY20A4pNy cH80M9lldtSnHnDbaZf5w9epnBxDbBsn7YOztXJjn0M25PurRfGphMe1fsAZST4TneGb2MZSFovo BTSZKhGkd9vnQQ0tfOmU8qOtbGVQCdDLFsXWWM3Us+LpzVGkHwa/JcOPCGji2hv7cr6aqr1qGNUm GDVNF6fDfwYFakRDBEigSSKAA6NckEEOuNsVJ24biAB2mpEAEvEDejVRLlGZqiSQuS2TC9J1B22x Ax5i/tkCx8tgvv7hZNgWJ4atFfIglQXUKFAUGeAkcANwIv7QwTfKEA7USQy6AYl5g3Rdgj1r9vYL sXSgsWRqY0IxGQ4FoVG6/Dc7lvZCns7aPLUzzvwy+Y2iKCcSSPXFyAIoxpifhO0l2l1dXb8jQdbj 1RJF2F39+EUbPhOno5el+2OaoE2CvSA2No9hpU7ljMMJGUVsNqyRDkCyGGFhKGVnnLIskWSICRSO PudnIy5WhELsw9VabkWBFFFYVlSJIkSvcqJBapAkNHuIqmFUyZZcV0oYERSGAkwWDouHHJFxaRLR yJIvqKiQ53LJfsM0gpZFzCmyrzjDNpSZ3ZOw9A0IfSQRIZI+vF0i8RP2Wgkdo24NFArEEQ3MWIkB TECyHWjHJu7l4ZD9uSlANDf5NTMFbtu8bi2wEcgTCHp0RjtFHwNpMsRFSazMk6Nzi2cK4tW8OEjS 41zZslbi20CwxHlUQYlXZAy0DHGqijaQ47QIETcdUQCCKcFNbK2S1eqGsMJEC2JudToETzEhYbg1 R5mJeUWW007AKkMh8g2bLs2jFEPNNXOsXBFC3GQI79ciWDcbwuLiEzPO5C2keVD4kT5IsOYdZEwM CteKdFYIdGYQApR2IwRgUC2KauwHbYS0oTORziosiRum0zxh3L1wGZkU4Kp0V+K/UIrDYi+mZUuE MqZxIWMtlj60D4o0qKo2LKwEYxNw2DUgWmZAjgBojiBMOSJCPQEZI5Ixet9ch9hDCcNo7jbXpACQ wi4ptZUGzlCe1MlWV28wRES+gwepurgQQhLCTqiTTiHoUHqXwrv6SkEK40hDOBnkRGWIdh8RqhEa rbWaKNDM6jq7VoVmwpxagyY0gfID1gj51zVNizpswjGRjCEU4OzBPbPbILgjCcUnRQVJFI0Gijjk dAJUEakSHqWpoezMA4HRxO2ltL0xNox2bMdmBx6zRDZ0BJVAKTpYWnjPU2GQ5UUjEj2qhH1Igvcv AEW58cbNMmqm9xODj4o0UdXgSW4m4ERgQPAnvg3wRqjeiUi+A9571TUZG8nHDEINmsbYZyUmdxiX UU0MIYrYcwCFKIF465q5ZCMAMlXrhrbZZkPGumckgo3EwLLEzjSa8IJoOoYocAFJGhC8EHXjRy8q xjkZNAe/KRiMTZWEGKSvkjOjKwUCpyJgi6v2bfDMeYKqkuC+ofYUw1GWAagjsRvXWsa0dwdyqt0f WcTg0rzMy2zqcEaIprAkHVONISVQ7pxqmoqrmVvOg48SRU11h30lkme03NA3ksDgOcDv78yBoWHQ RBQwtfKhxotbsgkZwC6NGKImJIuBBRHI5oo8jFUQfshsIlCaCTUsXLqUHDxbiNRNBWGmlCCKQKjh suLW31hgkWGYHMdRTLbiTtuFIAheQHTaIkUlD2FMoMkwigHBRQ5SUXhCIihrp0xsphJCewYh8D44 sOmZeWvtqvPdEod/yVTxba9Zy6SFhNyY4YlMZEEC2cvwg2Hti9oaDAHOJgB+Qf6ehbdOgkNhE2MY MTafbRx1Q/1MLp6fKepNvT+P7ChUiuGh5hmzI0+k9JdW64Pc9J6AlNLKNbwWVEUdDMGjA0FC8kfc mUT3843L+2ptB6ZwDnJGAc6RKpA5z5P35nO1Nzdf7D5ejufAPYpJO/GSjyp2TIQmnUQdgEDFDE9o E0oj4W2Jb3AZN8wCqsC2AKJk0+Ca11Gw7CDnfd8vyGoLzHSVKAbp8Z1G4SHewPKcx4UOAhIvMwQj uEpJ566n4HpkGsxRpv6QkjlGOh+sqLtDCkCpC33LtLUMfaaNs+IoYm2uVaEQZnJSxChYoFbgfOfQ JoiTIDU9RYCas2iNzeuLiR0CZwtvU1QTZoCZeqRFIKUUkiARYZso4tkiqQkzf4milfCz1sB1nWa9 fIyBpw5uMcz7AKUTkVFA59qkQLoh0KygrOCJEjhwDug/3ImHRHyiv4tH71sLPajJE4ehvQCdztR7 GQmx2mhivcOMcTcQNpMzDxUdxdfGdp3e/EuM+wZMH3iCsZXjrYVlB32Gw9lp5MtYSLpKJ53MUJzF S9xevOKmwk3DMYNTa+VzGYzWY+uIYKhq++wjUZJeUTGlGOPwFO8A68sOaHRumpCpbes6g6iKViR4 B2FwY3ApG0jIwxNkQrEDIoYoIa+IGWJeMbAsOHNVnqTrosPq6g4hXlRrRgT6GqzEXIp7cVargoEI ubYQjFHI8Z1+rx7DTjAhyQTHc2FHDZyllc5m+H70WtSwFwiCOF6OfVHTOPD8Hf4IuKCkboNlq2jj 3tfBFu9jtMDvMjGJJczxA5AXFY1jDMh+yC3IWSFvFUdd0qu01rMdT6AuObVR9T8Y0Sf1TjMiEmzM KWacUEQiov4c/ZXoWhBd5pxNJxAv77BBCR9QNE1z7UrHH2Gl9uUuSadgBGnCt1+be5rttDGCYDR2 mLvnqfiH539dDK4JmrqW9u/mOTXZ4UERX9269Ouh57DD0TjDvSl3DELKVioeKaxBoAMOJTcNBxBJ UlnrS7JeAB7juPI3E/I9/cBGAUoibE8yqRIgUmM10oJFQxwEbnjuyEcALQQ58QPPyAZF4GY2a0Ar TkTXUN8FZtaxtaND0NYhsTc7FPQk9SJtuyf1xc+QkXgRwCXDBCnanYBnf26jpNsZ5nYpQolgJTa0 gEo5mBsIXRWYmZenH1vjaed0peJyCvOVAYJIBIAgk42QTAgbOTHzo5nebSXA3nLd8xqn0GEipy9Y n0xEOWcT17k86VZwMIFOngKfZCcxWQEAJYnmkjMr8WecdNNrc+ld2y/ZScqqG2zx1vYYr+j3nQ1L hYIWAxo0ga+rc6ixMkHGTFh+OEZ2QZLOG8iVDSfhvcYG3ghaLzRWj0URRQm9iK0VI9iNyKdxhMCE AXii4QjRCgVIgSO8dnYcnDTm/iknAvBFDSLjKD5IxHWoaNbY1EIlYH0QnPtO7ZoErEkMhFUleW+8 OPUsVqLahE1QV1S+wsARFQO0ZPIdcD8ly/Q7p92S1Vw/W65rggF8QQ2rF9QdTI2CuW3PMDXeBAJU S5nwRoBcOBIT9syusRW5aB1q1FR5cEP5P3IrMy8tC5nTsw72sjKDEfF2kQCoCGeQR8BsA3skd3MJ T5qBgqhNkoMBFaqtvAyh3tpkkjgUL0MCduy8GoHjRvAWLloYBBzgiilM4LnVIIXuweUdgsSGPfdo Et7F3QSo+PANHtPEuMT1EdulMwDdWxlBSIDqzqsnhdZw20DBP9TKFxqgm5Wy/8JIZC9CWKLFSS+X MZgJiuApkLkr8ujvzVkCvDzY5BghwwB/cEjWA7kJqTq9QjeIwDID2h7gJCOyoyPQDFRMUgnsTDeC vaAFV1xkui2AdyuFwXoHvXUIsQFqwQXiL/b5VwQGDaY6uDTRYwp6yaGJhVISy3jYKxUzPBamSaUf shmoWoIRQUTKiRO4w4D6BxGxFxxusyKxwTHv9KvmpQExVgdXmBZmp2mS5apfcwkfA70fBxhja7jb leLE2sJxwHgbtKEOFgQGTBv8lb35JSkUs6cvPXFlayMuhd5GikBXQOqb7EuvqVpgSleylJqJqRoy TNvQSosEr1A3EtWhwwhn/Yc513FpoIP0Yx8YHG+tJIQkITn3HqBwlUM30G/43H2EyG01pphCkQe9 Zde2qb0TjFPGBGUlxiEWgxXxHmwjevzoewwLNFgC4QEbDUi1B9SwvCuZGZRbo0sGQVV/isMCFDAH EuwNK0SQV/W6IDeYDktRmNbcAaa4BtbrF0IsJdFAs8CWYvEIasm2BSaLt2CLogt6kQg0PmRnT5ow A70bVl3/l3vltZhw8THG6QktLLAOMpKBqxeB7ka5IdG1JQAbRgrdrglWYqFiXEJ0BalA3RV0aEnc wGFZbpvYIDIBgJwJ60wzgnxOkE1s0xAm94r78JEQwQDDDlcyasHj8I8z4g5U6XmeO5Lm1DyPMkzK 4H/BBvg5P/F3JFOFCQJjGWLg --===============0209829194==--