From: Andrei Elkin Date: December 5 2010 8:04pm Subject: bzr commit into mysql-next-mr-wl5569 branch (andrei.elkin:3230) WL#5569 WL#5599 List-Archive: http://lists.mysql.com/commits/126073 Message-Id: <201012052004.oB5K4VCn021780@mysql1000.dsl.inet.fi> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============0244866104==" --===============0244866104== 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 3230 Andrei Elkin 2010-12-05 wl#5569 WL#5599 MTS & recovery Refining and correcting two wl:s integration. The main achievement is events execution status is consistently recorded into the Worker and the central RL recovery tables. That was tested manually in rather agressive env where IO was used to reconnect randomly and load from Master contained Rotate events. TODO: to fix: rpl.rpl_parallel_conf_limits may not pass to address: Multi-stmt Query-log-event transaction case (see todo in sources). to destruct by Workers their executed events (was deferred until ev->update_pos started working). (Alfranio) to deploy mts_checkpoint_routine() call inside the successful event read branch of next_event(). Otherwise no calling happens when Coord is constanly busy with read/distribute. modified: sql/log_event.cc sql/rpl_slave.cc === modified file 'sql/log_event.cc' --- a/sql/log_event.cc 2010-12-04 17:14:50 +0000 +++ b/sql/log_event.cc 2010-12-05 20:04:17 +0000 @@ -2234,7 +2234,7 @@ Slave_worker *Log_event::get_slave_worke DBUG_ASSERT(rli->curr_group_da.elements == 1); // mark the current grup as started with B-event - const_cast(rli)->curr_group_seen_begin= is_b_event; + const_cast(rli)->curr_group_seen_begin= TRUE; return NULL; } else @@ -2333,7 +2333,6 @@ Slave_worker *Log_event::get_slave_worke // reset the B-group marker const_cast(rli)->curr_group_seen_begin= FALSE; - const_cast(rli)->curr_group_is_parallel= TRUE; // mark for Coord's T-event delete } @@ -2540,6 +2539,9 @@ int Log_event::apply_event(Relay_log_inf DBUG_ASSERT(rli->curr_group_da.elements == 0); DBUG_ASSERT(rli->curr_group_seen_begin); + // TODO: rollback + // c_rli->gaq->assigned_group_index= rli->gaq->en_queue((void *) &g); + res= ev_begin->do_apply_event(rli); delete ev_begin; /* B appears to be serial, reset parallel status of group === modified file 'sql/rpl_slave.cc' --- a/sql/rpl_slave.cc 2010-12-04 17:14:50 +0000 +++ b/sql/rpl_slave.cc 2010-12-05 20:04:17 +0000 @@ -2669,10 +2669,25 @@ int apply_event_and_update_pos(Log_event See sql/rpl_rli.h for further details. */ int error= 0; - if ((rli->curr_group_is_parallel == FALSE && - !(ev->get_type_code() == XID_EVENT && rli->is_transactional())) || - skip_event) + if (!rli->is_parallel_exec() || + ev->only_sequential_exec(rli->run_query_in_parallel, + ev->ends_group() ? + rli->curr_group_is_parallel : + rli->curr_group_seen_begin)) + { error= ev->update_pos(rli); + } + else + { + DBUG_ASSERT(rli->is_parallel_exec()); + /* + event_relay_log_pos is an anchor to possible reading restart. + It may become lt than group_* value. + However event_relay_log_pos does not affect group_relay_log_pos + othen that through the sequentially executed events or via checkpoint. + */ + rli->inc_event_relay_log_pos(); + } #ifndef DBUG_OFF DBUG_PRINT("info", ("update_pos error = %d", error)); @@ -3610,7 +3625,7 @@ bool mts_checkpoint_routine(Relay_log_in DBUG_ENTER("checkpoint_routine"); if (!(cnt= rli->gaq->move_queue_head(&rli->workers))) - DBUG_RETURN(error); + goto end; /* TODO: to turn the least occupied selection in terms of jobs pieces @@ -3623,25 +3638,30 @@ bool mts_checkpoint_routine(Relay_log_in }; sort_dynamic(&rli->least_occupied_workers, (qsort_cmp) ulong_cmp); + mysql_mutex_lock(&rli->data_lock); + // Coordinator::commit_positions() { - // Alfranio, rli->gaq->lwm contains all but rli->group_master_log_name + // rli->gaq->lwm contains all but rli->group_master_log_name // group_master_log_name is updated only by Coordinator and it can't change // within checkpoint interval because Coordinator flushes the updated value // at once. - mysql_mutex_lock(&rli->data_lock); - rli->set_group_master_log_pos(rli->gaq->lwm.group_master_log_pos); rli->set_group_relay_log_pos(rli->gaq->lwm.group_relay_log_pos); + if (rli->gaq->lwm.group_relay_log_name[0] != 0) rli->set_group_relay_log_name(rli->gaq->lwm.group_relay_log_name); error= rli->flush_info(TRUE); + // end of commit_positions + mysql_mutex_unlock(&rli->data_lock); +end: + // ANDREI NOTIFICATIONS? DBUG_RETURN(error); } @@ -5356,6 +5376,10 @@ static Log_event* next_event(Relay_log_i } else { + thd->enter_cond(log_cond, log_lock, + "Slave has read all relay log; " + "waiting for the slave I/O " + "thread to update it"); rli->relay_log.wait_for_update_relay_log(thd, NULL); } --===============0244866104== 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: ddd1db11274d526606675cb1ac745385307aec73 # timestamp: 2010-12-05 22:04:31 +0200 # base_revision_id: andrei.elkin@stripped\ # bvuh8o3qb4h1lkt7 # # Begin bundle IyBCYXphYXIgcmV2aXNpb24gYnVuZGxlIHY0CiMKQlpoOTFBWSZTWbUhdskAA2R/gHcQAQJ5d/// /ua+gL////5gCG+9vemeAOj3vLZzXXqjrRi9D3Sy+GKaQQwqeKeGino2phTynlPUHqG1PU9I9IA2 po8U0GpoBNMhpMmoNG0gaAAANDQABoAaEwhAJQ8o/VHqGmjxTTQAZBoABoABKaJTyJptI0U9Rmoy AMjCAGjIAAAA40ZMjCMQDCaDAJoNAyZNGTIYQGEkgQAmJpNkRpPKbKZlNU9Ggm1MgBoDJpioCRhF zuDW+KfTkim5+DNvQqtCO6kb/r1Y88k/lpnlyz1rL7FHPV9/6TFG2/pyG9deqxps8anEQ7Q7oERg gwurJD57xcHQeanliCWeT0n+YxYZsF8OHcgGaiGAQMHLs+Xjjl6Lf3qi8KRQEkUgD+/0TRagrPv3 XF9CvIR0OD0XZHMZmUjE0nEQsRCxQ1KJpLlt5pz5g2fbX09FNO/xTprPtkyXnEr3YolE9j4ukl9r 8A+mCGgnHa8MWskoglAXNuaLsGhWitFMHDo+2QkrNvbwdV4Ile4nZc0qLTi99+FS1aK9AWC7I0tv oBDY5ZTh6AK4ZbpZR2Yfcv7viefmlGTLmroUjFAO/PXvF+xxIQ8mCUTLDe/qnFa5qita+ET6yuXd XRAcKowzM6xS1XF/Jdk0d2zXAzEFhx8QkTscTEszlpHFGGvT1A59h8xZzjEsK/O7SnxZ77IPutlB MMJTiVm/QNvyNA/1ZhSX9D0+adDvRyXJkDNn8YofrCZBkDIURBwYKIAQR2pcgYsKw+IQnVBSn/OT FMq7GFJpmXSSA+DBmYaf2c+YihQk7DHxudi8svChOR765bMgLWRh9GXGs/mGsgPJjGwoyba8Paie xF7nULSGgDWoUkKXnpjuppkii1Ve4DTORuYLW3tExhtZEj8hjMsJE9ymsaCNoVRuMzdB+NDoUiKR gka4uaRqYc111lvefkZnZG8zu1XZZDwrQqiNzWRVD4YE4+KHxgTzkTUpDDPMSczNqNYF1JLnSd5I agwSsAPSwS5QmYO+0iMLIUiDyQ4CIoW4hYzGOo6nEwrxjY+573PCpt40WAuO9xciTWuwoDXIlgO2 MWjawKLgsJWxFqp9j9CJe3DzJ13MWY4hjJGhcSv1DrpiKw5Q7rNJMxIslbsK6rA7jackZSWgFTAg rmLYuDXEgmjOTqZXUAYT8fAv7XRUxsBJdklzG+SEoQA3wRioQiZz7Y5cULq56PGXBoXWJCOuGDgM +oejOR6kCZKgJ9evJWE6SSXCzHr6Byi7IG+zguXNjZ65BtDzK6bg9pO+7JFCOTg2l52caB06fhi0 PcdTGDfcogdEcdlTkQ49viZ6GBFq22SQSqZWMHQmu8MlFEC3y8ZMLhF5vHHZ3j/Pr8VdIzaMxyIm iY8sjD8Vh4axBYENpMQ5tu+6akVqMOAXpI0DGUHZnxKePAb1sAwixAhXf2uy1BCF1RoVmTdJDJIj H130PiRHuEg3bqm0lP4zGe2JQUu0+w4ZvmYf0OiHze8QNWYpgt6jO6ARtuwwO8DjYGM59p9wqeZL wtuPQYqNkq9sGPRRyIGa8ZnptWNEeZM6TVRTrs7WqC5x0YQ6FCHHLYQ063lBg2RQEgZPRTX3EuvD XtzO0hxyL69e81BTxxGBL2uk7gAWHVdmocN2YTdsCI6uyFXDXac6FABvOZ08OYxB6cO69DUUzWMN SSRDQwC9uPqnlaQKZTqMhow1HrWdSQl2lTcK+oW4w3eoD4GMaEahJXQRc3EFNSweYl/zfSTE/jkz uW+ZUsmGUOBe9ZsEQnquiF1rFZ6DKXeZMloeLYV4J4pOcoTtyd1Mhbe0AfEc4G/UimqKiuA9FgFw Daq28A3YDHkeh8CBaPK3nU3BPUn6HeB8TxMSZsC49xYQXr4En+yERffs0GBcleL2WmOs9rAPj32s TucdT3Fp5eO7s921GpDshSqFyJkm15B+shLaIOIg6IzanNgMnGZCm+2szl+lRz2Ik6bHTiow3CYt 1+e9xmPEq97kOmlrffCitzJWyxBDHgy4PcKCIArGgT0CuwwZFeFVCkAokLiQkaCYzIJKtDoHMgi2 Z3s8HFcfmXNwPsRF4PZTykS+TKIpqD9lYk4Hof4gUHyuBapWfuqEuyHrdwcLFjuoVjuH0vIQZGVW ZC2mnfp4RPDzH6t7CVJbknF0kV6e3vAKqW+YljOWUbKbhzm0X1m+Yqrbk48O7JCGZx31RSZKbElM hiBRsQzRGK7E834eQFST2EjK1DhM5Kd1HhoYdAJxO1U6BICScsFeWsHtZbIx9UbDMJWT6iCFz3kT 2pKTFQDCwsCZEc4RNok5gmYi3H2izGWnhKJpFoe7XVvzkDAqT89vfpIX0D0tfFHJwwNUBAmV9nUt Xj8CNQqeNNJXuIL9oGw6I0MQnKy0sGDhTgpQC9M9IN0Uep2rhjs1zlEDH3ORWeSSdqC1J9MNlrlk VW0WLt9Z9UJ19v5yJlSfWUzZUZ5XgPj8vn2qvA2DOr7PHsMNd3vGlrKFRefKkpm4zObsx0TOpI6t vzeunIsr6d5CUSsOxh6xIvCtsWm6VJYnKksh6jRi17u49YSsFhIjEhJWliNG6eFkhZ7pI+MSO1Bw npMtpFa5socwEAW+QYCpqKuiCVHQaUSbGBZVB/euhC2z46V9goz2iq1F9+kekZMFc1qYhiAd3SJI 1ZXCKT3y03SdG+jbd1P0Yu+pHkf1nuiA3Kt+tbo+9PNkXYGF6my2MDxEEyJj95STQR5PRudAkxaa nacXbcHXVgf7PsMCGbLhbiiE9U8VTOKGH1D0AuZAaRds9Z/M7lAu5IpwoSFqQu2S --===============0244866104==--