From: Andrei Elkin Date: December 22 2010 6:31pm Subject: bzr commit into mysql-next-mr-wl5569 branch (andrei.elkin:3258) WL#5569 List-Archive: http://lists.mysql.com/commits/127525 Message-Id: <201012221831.oBMIVMO3019885@mysql1000.dsl.inet.fi> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============0134245595==" --===============0134245595== 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 3258 Andrei Elkin 2010-12-22 wl#5569 MTS fixing tests failure when mtr runs --mts_slave_parallel_workers != 0. rpl000010 is a representative. Fixed with identifying, marking, running carefully ev->update_pos() and destroying an event that can split a group of events to force part to be in different relay logs. @ sql/log_event.cc Identifying and marking an event that can split a group of events to force part to be in different relay logs. @ sql/log_event.h FD and Rotate both can be the group splitter but only if they are "artificial". @ sql/rpl_rli.h a marker flag to be set when the group splitter such as FD is spotted. @ sql/rpl_slave.cc identifying, marking, running carefully ev->update_pos() and destroying an event that can split a group of events. modified: sql/log_event.cc sql/log_event.h sql/rpl_rli.h sql/rpl_slave.cc === modified file 'sql/log_event.cc' --- a/sql/log_event.cc 2010-12-22 11:57:18 +0000 +++ b/sql/log_event.cc 2010-12-22 18:31:13 +0000 @@ -2772,18 +2772,26 @@ int Log_event::apply_event(Relay_log_inf only_sequential_exec(rli->run_query_in_parallel, rli->curr_group_seen_begin /* todo: obs 2nd arg */)) // rli->curr_group_seen_begin && ends_group() => rli->last_assigned_worker - && !rli->curr_group_seen_begin)) + && (!rli->curr_group_seen_begin || parallel_exec_by_coordinator(::server_id)))) { if (parallel) { // This `only-sequential' case relates to a DDL Query case - - DBUG_ASSERT(rli->curr_group_da.elements == 0); - DBUG_ASSERT(!rli->curr_group_seen_begin); + // or a group split apart by FD event + DBUG_ASSERT(seq_event && + (rli->curr_group_da.elements == 0 || rli->curr_group_seen_begin)); - c_rli->curr_group_is_parallel= FALSE; // Coord will destruct events if (!parallel_exec_by_coordinator(::server_id)) + { + DBUG_ASSERT(!rli->curr_group_seen_begin); + + c_rli->curr_group_is_parallel= FALSE; // Coord will destruct events (void) wait_for_workers_to_finish(rli); + } + else + { + c_rli->curr_event_is_not_in_group= TRUE; + } } else if (rli->is_mts_recovery()) { === modified file 'sql/log_event.h' --- a/sql/log_event.h 2010-12-21 19:31:29 +0000 +++ b/sql/log_event.h 2010-12-22 18:31:13 +0000 @@ -1246,8 +1246,9 @@ public: bool parallel_exec_by_coordinator(ulong slave_server_id) { return - get_type_code() == FORMAT_DESCRIPTION_EVENT && - (server_id == (uint32) ::server_id); + (get_type_code() == FORMAT_DESCRIPTION_EVENT || + get_type_code() == ROTATE_EVENT) && + ((server_id == (uint32) ::server_id) || (log_pos == 0)); } /** === modified file 'sql/rpl_rli.h' --- a/sql/rpl_rli.h 2010-12-22 11:57:18 +0000 +++ b/sql/rpl_rli.h 2010-12-22 18:31:13 +0000 @@ -474,6 +474,7 @@ public: MY_BITMAP recovery_groups; // bitmap used during recovery. ulong mts_recovery_group_cnt; // number of groups to execute at recovery ulong mts_recovery_index; // running index of recoverable groups + bool curr_event_is_not_in_group; // a special case of group split apart by FD /* most of allocation in the coordinator rli is there */ void init_workers(ulong); === modified file 'sql/rpl_slave.cc' --- a/sql/rpl_slave.cc 2010-12-22 11:57:18 +0000 +++ b/sql/rpl_slave.cc 2010-12-22 18:31:13 +0000 @@ -2827,10 +2827,11 @@ int apply_event_and_update_pos(Log_event int error= 0; if (skip_event || (!rli->is_parallel_exec() || - !rli->curr_group_is_parallel)) + (!rli->curr_group_is_parallel || rli->curr_event_is_not_in_group))) { DBUG_ASSERT(skip_event || !rli->is_parallel_exec() || - !rli->curr_group_is_parallel || + (!rli->curr_group_is_parallel || + rli->curr_event_is_not_in_group) || (ev->only_sequential_exec(rli->run_query_in_parallel, (rli->curr_group_seen_begin || rli->last_assigned_worker != NULL)) @@ -3034,7 +3035,7 @@ static int exec_relay_log_event(THD* thd // if (ev->get_type_code() != FORMAT_DESCRIPTION_EVENT) { if ((!rli->is_parallel_exec() || - !rli->curr_group_is_parallel) + !rli->curr_group_is_parallel || rli->curr_event_is_not_in_group) && ev->get_type_code() != FORMAT_DESCRIPTION_EVENT) { DBUG_ASSERT(!rli->is_parallel_exec() || @@ -3042,7 +3043,8 @@ static int exec_relay_log_event(THD* thd // rli->curr_group_is_parallel (rli->curr_group_seen_begin || rli->last_assigned_worker != NULL)) - && !rli->curr_group_seen_begin)); + && (!rli->curr_group_seen_begin || + ev->parallel_exec_by_coordinator(::server_id)))); /* MTS: Observation/todo. ROWS_QUERY_LOG_EVENT could be supported easier if @@ -3062,6 +3064,8 @@ static int exec_relay_log_event(THD* thd ev= NULL; } } + if (rli->curr_event_is_not_in_group) + rli->curr_event_is_not_in_group= FALSE; } /* @@ -4327,6 +4331,7 @@ int slave_start_workers(Relay_log_info * rli->curr_group_isolated= FALSE; rli->run_query_in_parallel= opt_mts_slave_run_query_in_parallel; rli->checkpoint_seqno= 0; + rli->curr_event_is_not_in_group= FALSE; //rli->worker_bitmap_buf= my_malloc(n/8 + 1,MYF(MY_WME)); // end recovery right now if mts_recovery_groups() did not find any gaps --===============0134245595== 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: 010fb7ffd68c8776f873c8b80da77e5f7398d499 # timestamp: 2010-12-22 20:31:21 +0200 # base_revision_id: andrei.elkin@stripped\ # onsqbpgn73na6oky # # Begin bundle IyBCYXphYXIgcmV2aXNpb24gYnVuZGxlIHY0CiMKQlpoOTFBWSZTWcD5DlMABLv/gF6RogB5Z/// f6ffAL////5gCY+7y1DQAAGN9doAUvo1KXala8RFAAGIaA0YjQPKMhoNGQYgAZDQZVAGgB6jQGgA ANBk0AAAAAJRJNpp6po1MEAyBpoGgNAAAAGmagEiQmhKP1E8yU/VDQ0A0eo00ADQAGgAAioQRk1P Rok9Jso2jRNojQ0yPUMQAAANBJITQGgIyAJppqZU/Qmo9T2immhptQAMj1HqGnjanAIATtIV0FIs ofeCXAOILFHF26tg2HFohb6hwejSH1Ti1M/qd+yBTKLmeWj9HrfVhxqfR/QsAoZIH5A7Cl/uo11Z HuqLSgxYlaVy6AggKiIWXOLj8jKtDWvTBBqd8LYZg220NibCxfXiAy1Zbdu01LXUNc3IcGd0Saly YC+pFXS6K0nLNls531ilXa418fdxJHe0chf0o6dZFrpijhcvUxzxrt5KudoTSD1SBhJxYDEzkfcS emFcj8af8qdolsJPzlAjN8i3uD8lTfrv6xCYmKnoga2YkkeyMFiO0wFNISV4iOQjiqmT75UsSuLN bmwKEV27d7fY3BMdAnuDV2ohb0AiyLmQn+QPPj7/T0gafDcbzkPmU8dj965nsm3xCGMUOcZcSBzC rct6ZMuCQaBwAPovNYJlX005idBfc3QFVZSKdeTLIN2p2+TP8HV2zAwMhHbEEPZkwN5LM5MGq6gM QtC3wqkb+EJNpHVbLYVhbviN1WOaBpBCErMqTggmoRS5QTycZZu+ycmJkDxOeuJabikhfZchSb8v lZuopBL9rIMDIt26rTVL8NYJ+sUhmpqsxTCDEKLn533PqsZCwt5cBah6L9hieFOV07xXVpx6ZipB bjLuznq6IHUNo0sgywDI3OBViuxNtclJkgjFRPe5KsYFiyC5gTIRo08BxuHwfHbBANEYlVKc1ZOS +igbyk1Lqskv+Ki0uChpVWxBUQJythwyoQOBPbwpw3QfTY+wtJK+NjkNVkOjjzJ6iVQV11wwtJBa tAgLYtis1QbVIhJ5bcKZTuMmRQZFBFXEX8zbtIUKmE6GcUjI+XJmoRUy4L4/QM12BStrpw1XuvT2 isZ4vXMMvw8ANfctCVSVJX1gbUHEnAwowwH4E5sLBjuOpmvWrF4qAK6uqT8L5NdkM4pVEzF8YsYj uvXdRUTVl5pULMtmUim82nBOIi0DGy6nKFbCGlqwKBbOVa5BG3cKzFjXIuTllNvTxUjYppi54XYB D1aO9cBTYlBrL7pjYZQeYDzM5raoqrKqd2uuCYTnkmnJGpzGBOC0eOK5jXBypOkYEKivKbXUblQW 3G57mnaqdA6BrLFYYk1FRNFAxxspIxGQXlZOixrYtcUFNBlKEkY+0vruLgGi8tC6LUkYIeiI4UAd BuKeihq5p4YuglTU03tXn/MPK/xR6L5wNjx3XosGY8A3ueDgKkdvcF8AvKkAQ9EoMHzbmLAqioqr 1FrvnYPDjmjMatQOGjKrIVFSpKUqI/hHPnMf3WjdhpPeSuV2JJxjGwsIqJcmJ/AMUEzRZgb5lnQa nL0iHaBrkAHIJIDtYIBgFQhL1gnVkXlqPRYFQJFIIxDcZqpE5iAPcfJsDAmn5+vmLS24ExazDcky +mp6WStoMdGreIVJBkl2zgQwj9zPPpSi0hI7oMLZzhuTWaE4PfaZCvTHfSayRtD7lvJTET7R8D0w CjlCYzntB9zoaTSht7zLqYFRv7GhEhHEBunUYTJffWUUeA7I/Wd+F6XiSP3gbGKVhu8TA+cHDch/ f34NBmBG5biwEYOO5VLqq/xDUwLwLLVa17oIguoPeGBz85cyhTGzmbCCN1ouclKQoTk6DW7xLej1 ZinncYTLvX8C37ZHParUMWHDBCI05bMJ+Eg8yE2ocRwI+ImAXAzNfqPbscxcVwC5djmTnG85HkHr CwsqcnbzACpLGJnI+pPJ00w+ljV0e/yybaHrDcaAyEccVvq2tHs6YJzyQj734EwZkRkzCGBgJVpw bWUEoarmjudENxGOxwd1NQqlTNvOa/71XiyYQMFKTjZQgxrs6g1/IFt6PtOxoHM4ngUHkOMqSohA el2HEktoN7g9fYGCoHN3LyChbCYKNDUxuK2hccAzOVTrZgfh9bwVDjCxe2gUnmtoSXLfzHeID3g9 3URyBQRriZD81wWi3gGqYN4A4EMhxMn+cjdJNnhrC1e5yFpi+X5ocKyDU/NrQKtycpoyR4gkCWAV EVnwXEoWmeIaBWdRQkoS+D0AyiZJCGQrI1JpANoBhpmkZZtuzcMwWPADMG4bzYiY1k3njpGyFGll k5UNUwSyLRJ+MGdYdicYklM0LUuBIA3lnqbUShcGucEpzzLuPPvuuMWO9ulYNrXc4bIHBwOVUvhc 4Qp1IpN/sVgUuCeKKA0WIVsQqIsMq2TOCkmB43UMgmBJwgBGsb4SLyQXpiCT35ka068hocwLA+Cv CEwrRBUyQMyQywDoibIH5lGAZoWYL3is/QTpAzFiVtGItPnEsJrz6gkFtMDpi55mDhcoHosvT1iO yps9kA4mSNu2DfqdzeDC4jhwTFCPYU2eoM1cK0DiCilkCwuT7LA5W1L4LWFako0ictE5BSrAviZa OeTOWJAgElGdbIt9gStgciJslJJSNeLhkmJo1Vvap1P9Hmdk+JQyThFVcHAGM8OsApGGzprZDxQG OIM0qLlAHp+lznx8Xsw8kO7lAE43op40YhLLNtYaYRQL0mF4uVFEzcWhYhi7oiIiIiL0GIqAvgFq MUzkmCLsF5AqDHBGocuWcyIFTu5kjWvgqHhaAwEwESyEPzqPRTuKQvQa6LqBMWwIngaFpJ9JVRBg lRZuExtVlAttXaFvLce1aw5LjZZy7Jy9LAF5Ec+CA3VhgvBY6xPSRkYBYGdvMlzO0WMDb0bVbSYM bDkb4OFsBoEkNiXNUOOb1MOFwzNFasjspquCwRmrYr4n0QbEDj/F3JFOFCQwPkOUwA== --===============0134245595==--