MySQL Lists are EOL. Please join:

List:Commits« Previous MessageNext Message »
From:Andrei Elkin Date:December 17 2008 4:23pm
Subject:bzr commit into mysql-5.1-bugteam branch (aelkin:2737) Bug#41183
View as plain text  
#At file:///home/andrei/MySQL/BZR/FIXES/5.1-bt-bug41183-circular_rpl_cluster/ based on revid:zhou.li@stripped

 2737 Andrei Elkin	2008-12-17
      Bug #41183  rpl_ndb_circular, rpl_ndb_circular_simplex need maintenance, crash
      
      The bug happened because filtering-out a STMT_END_F-flagged event so that
      COMMIT operations find traces of not-complete statement commit.
      
      Fixed with deploying an additional call cleanup_context() at executing of 
      COMMIT event.
      The not-committed statement can happen only with NDB and that one can be only for the
      first query of the transaction. Moreover, in the case of filtering out per SERVER_ID all
      following group of events will be filtered-out without creating a statement to execute 
      on the slave.
      Hence, the commit time clean-up can deal only with one non-committed statement to prove
      safety.
modified:
  mysql-test/suite/rpl_ndb/t/disabled.def
  sql/log_event.cc

per-file messages:
  mysql-test/suite/rpl_ndb/t/disabled.def
    re-enabling the tests to prove the bug is getting fixed.
  sql/log_event.cc
    Adding the statement cleanup to execute at the transaction commit time.
    The statement might not be ended with execution of STMT_END_F-flagged event because of the event
    was filtered out by SERVER_ID rules.
=== modified file 'mysql-test/suite/rpl_ndb/t/disabled.def'
--- a/mysql-test/suite/rpl_ndb/t/disabled.def	2008-12-08 14:36:42 +0000
+++ b/mysql-test/suite/rpl_ndb/t/disabled.def	2008-12-17 16:23:16 +0000
@@ -10,7 +10,4 @@
 #
 ##############################################################################
 
-rpl_ndb_circular         : Bug#41183 rpl_ndb_circular, rpl_ndb_circular_simplex need maintenance, crash
-rpl_ndb_circular_simplex : Bug#41183 rpl_ndb_circular, rpl_ndb_circular_simplex need maintenance, crash
-
 # the below testcase have been reworked to avoid the bug, test contains comment, keep bug open

=== modified file 'sql/log_event.cc'
--- a/sql/log_event.cc	2008-10-20 18:50:08 +0000
+++ b/sql/log_event.cc	2008-12-17 16:23:16 +0000
@@ -2893,7 +2893,19 @@ int Query_log_event::do_apply_event(Rela
   DBUG_PRINT("info", ("log_pos: %lu", (ulong) log_pos));
 
   clear_all_errors(thd, const_cast<Relay_log_info*>(rli));
-  const_cast<Relay_log_info*>(rli)->clear_tables_to_lock();
+  if (strcmp("COMMIT", query) == 0 && rli->tables_to_lock)
+  {
+    /*
+      Cleaning-up the last statement context:
+      the last statement was not completed. That can happen if 
+      a previous STMT_END_F event got filtered out.
+    */
+    const_cast<Relay_log_info*>(rli)->cleanup_context(thd, 0);
+  }
+  else
+  {
+    const_cast<Relay_log_info*>(rli)->clear_tables_to_lock();
+  }
 
   /*
     Note:   We do not need to execute reset_one_shot_variables() if this
@@ -2905,6 +2917,7 @@ int Query_log_event::do_apply_event(Rela
             ::do_apply_event(), then the companion SET also have so
             we don't need to reset_one_shot_variables().
   */
+
   if (rpl_filter->db_ok(thd->db))
   {
     thd->set_time((time_t)when);

Thread
bzr commit into mysql-5.1-bugteam branch (aelkin:2737) Bug#41183Andrei Elkin17 Dec