List:Commits« Previous MessageNext Message »
From:tomas Date:August 23 2007 4:13pm
Subject:bk commit into 5.1 tree (tomas:1.2570) BUG#30017
View as plain text  
Below is the list of changes that have just been committed into a local
5.1 repository of tomas. When tomas does a push these changes will
be propagated to the main repository and, within 24 hours after the
push, to the public repository.
For information on how to access the public repository
see http://dev.mysql.com/doc/mysql/en/installing-source-tree.html

ChangeSet@stripped, 2007-08-23 16:13:21+02:00, tomas@stripped +2 -0
  BUG#30017 log-slave-updates incorrect behavior for cluster
  - let the receiving injector thread decide what to do
  (recommit for 5.1.22 target)

  sql/ha_ndbcluster.cc@stripped, 2007-08-23 16:13:12+02:00, tomas@stripped +37
-13
    BUG#30017 log-slave-updates incorrect behavior for cluster
    - let the receiving injector thread decide what to do

  sql/ha_ndbcluster_binlog.cc@stripped, 2007-08-23 16:13:13+02:00,
tomas@stripped +13 -0
    BUG#30017 log-slave-updates incorrect behavior for cluster
    - let the receiving injector thread decide what to do

diff -Nrup a/sql/ha_ndbcluster.cc b/sql/ha_ndbcluster.cc
--- a/sql/ha_ndbcluster.cc	2007-08-03 00:14:02 +02:00
+++ b/sql/ha_ndbcluster.cc	2007-08-23 16:13:12 +02:00
@@ -2812,11 +2812,17 @@ int ha_ndbcluster::write_row(uchar *reco
 
   if (unlikely(m_slow_path))
   {
+    /*
+      ignore TNTO_NO_LOGGING for slave thd.  It is used to indicate
+      log-slave-updates option.  This is instead handled in the
+      injector thread, by looking explicitly at the
+      opt_log_slave_updates flag.
+    */
     Thd_ndb *thd_ndb= get_thd_ndb(thd);
-    if (thd_ndb->trans_options & TNTO_NO_LOGGING)
-      op->setAnyValue(NDB_ANYVALUE_FOR_NOLOGGING);
-    else if (thd->slave_thread)
+    if (thd->slave_thread)
       op->setAnyValue(thd->server_id);
+    else if (thd_ndb->trans_options & TNTO_NO_LOGGING)
+      op->setAnyValue(NDB_ANYVALUE_FOR_NOLOGGING);
   }
   m_rows_changed++;
 
@@ -3102,11 +3108,17 @@ int ha_ndbcluster::update_row(const ucha
 
   if (unlikely(m_slow_path))
   {
+    /*
+      ignore TNTO_NO_LOGGING for slave thd.  It is used to indicate
+      log-slave-updates option.  This is instead handled in the
+      injector thread, by looking explicitly at the
+      opt_log_slave_updates flag.
+    */
     Thd_ndb *thd_ndb= get_thd_ndb(thd);
-    if (thd_ndb->trans_options & TNTO_NO_LOGGING)
-      op->setAnyValue(NDB_ANYVALUE_FOR_NOLOGGING);
-    else if (thd->slave_thread)
+    if (thd->slave_thread)
       op->setAnyValue(thd->server_id);
+    else if (thd_ndb->trans_options & TNTO_NO_LOGGING)
+      op->setAnyValue(NDB_ANYVALUE_FOR_NOLOGGING);
   }
   /*
     Execute update operation if we are not doing a scan for update
@@ -3170,13 +3182,19 @@ int ha_ndbcluster::delete_row(const ucha
 
     if (unlikely(m_slow_path))
     {
+      /*
+        ignore TNTO_NO_LOGGING for slave thd.  It is used to indicate
+        log-slave-updates option.  This is instead handled in the
+        injector thread, by looking explicitly at the
+        opt_log_slave_updates flag.
+      */
       Thd_ndb *thd_ndb= get_thd_ndb(thd);
-      if (thd_ndb->trans_options & TNTO_NO_LOGGING)
-        ((NdbOperation *)trans->getLastDefinedOperation())->
-          setAnyValue(NDB_ANYVALUE_FOR_NOLOGGING);
-      else if (thd->slave_thread)
+      if (thd->slave_thread)
         ((NdbOperation *)trans->getLastDefinedOperation())->
           setAnyValue(thd->server_id);
+      else if (thd_ndb->trans_options & TNTO_NO_LOGGING)
+        ((NdbOperation *)trans->getLastDefinedOperation())->
+          setAnyValue(NDB_ANYVALUE_FOR_NOLOGGING);
     }
     if (!(m_primary_key_update || m_delete_cannot_batch))
       // If deleting from cursor, NoCommit will be handled in next_result
@@ -3210,11 +3228,17 @@ int ha_ndbcluster::delete_row(const ucha
 
     if (unlikely(m_slow_path))
     {
+      /*
+        ignore TNTO_NO_LOGGING for slave thd.  It is used to indicate
+        log-slave-updates option.  This is instead handled in the
+        injector thread, by looking explicitly at the
+        opt_log_slave_updates flag.
+      */
       Thd_ndb *thd_ndb= get_thd_ndb(thd);
-      if (thd_ndb->trans_options & TNTO_NO_LOGGING)
-        op->setAnyValue(NDB_ANYVALUE_FOR_NOLOGGING);
-      else if (thd->slave_thread)
+      if (thd->slave_thread)
         op->setAnyValue(thd->server_id);
+      else if (thd_ndb->trans_options & TNTO_NO_LOGGING)
+        op->setAnyValue(NDB_ANYVALUE_FOR_NOLOGGING);
     }
   }
 
diff -Nrup a/sql/ha_ndbcluster_binlog.cc b/sql/ha_ndbcluster_binlog.cc
--- a/sql/ha_ndbcluster_binlog.cc	2007-08-03 16:54:34 +02:00
+++ b/sql/ha_ndbcluster_binlog.cc	2007-08-23 16:13:13 +02:00
@@ -114,6 +114,9 @@ NDB_SHARE *ndb_apply_status_share= 0;
 NDB_SHARE *ndb_schema_share= 0;
 pthread_mutex_t ndb_schema_share_mutex;
 
+extern my_bool opt_log_slave_updates;
+static my_bool g_ndb_log_slave_updates;
+
 /* Schema object distribution handling */
 HASH ndb_schema_objects;
 typedef struct st_ndb_schema_object {
@@ -3296,6 +3299,14 @@ ndb_binlog_thread_handle_data_event(Ndb 
                         originating_server_id);
     return 0;
   }
+  else if (!g_ndb_log_slave_updates)
+  {
+    /*
+      This event comes from a slave applier since it has an originating
+      server id set. Since option to log slave updates is not set, skip it.
+    */
+    return 0;
+  }
 
   TABLE *table= share->table;
   DBUG_ASSERT(trans.good());
@@ -3942,6 +3953,8 @@ restart:
                     !
IS_NDB_BLOB_PREFIX(pOp->getEvent()->getTable()->getName()));
         DBUG_ASSERT(gci <= ndb_latest_received_binlog_epoch);
 
+        /* initialize some variables for this epoch */
+        g_ndb_log_slave_updates= opt_log_slave_updates;
         i_ndb->
           setReportThreshEventGCISlip(ndb_report_thresh_binlog_epoch_slip);
         i_ndb->setReportThreshEventFreeMem(ndb_report_thresh_binlog_mem_usage);
Thread
bk commit into 5.1 tree (tomas:1.2570) BUG#30017tomas23 Aug