List:Commits« Previous MessageNext Message »
From:Jonas Oreland Date:October 2 2008 5:51pm
Subject:bzr push into mysql-5.1 branch (jonas:2873)
View as plain text  
 2873 Jonas Oreland	2008-10-02
      ndbmtd - fix backup 1) dropTrigger 2) backup fire-trigger-ord
modified:
  storage/ndb/include/kernel/signaldata/DropTrigImpl.hpp
  storage/ndb/src/kernel/blocks/backup/Backup.cpp
  storage/ndb/src/kernel/blocks/dbdict/Dbdict.cpp
  storage/ndb/src/kernel/blocks/dbtup/DbtupTrigger.cpp
  storage/ndb/src/kernel/blocks/suma/Suma.cpp

=== modified file 'storage/ndb/include/kernel/signaldata/DropTrigImpl.hpp'
--- a/storage/ndb/include/kernel/signaldata/DropTrigImpl.hpp	2008-09-19 22:10:17 +0000
+++ b/storage/ndb/include/kernel/signaldata/DropTrigImpl.hpp	2008-10-02 17:51:17 +0000
@@ -19,7 +19,7 @@
 #include "SignalData.hpp"
 
 struct DropTrigImplReq {
-  STATIC_CONST( SignalLength = 10 );
+  STATIC_CONST( SignalLength = 11 );
   SECTION( TRIGGER_NAME_SECTION = 0 ); // optional
 
   Uint32 senderRef;
@@ -32,6 +32,7 @@ struct DropTrigImplReq {
   Uint32 triggerNo;
   Uint32 triggerId;
   Uint32 triggerInfo;
+  Uint32 receiverRef;
 };
 
 struct DropTrigImplConf {

=== modified file 'storage/ndb/src/kernel/blocks/backup/Backup.cpp'
--- a/storage/ndb/src/kernel/blocks/backup/Backup.cpp	2008-10-01 04:35:20 +0000
+++ b/storage/ndb/src/kernel/blocks/backup/Backup.cpp	2008-10-02 17:51:17 +0000
@@ -2296,6 +2296,7 @@ Backup::sendDropTrig(Signal* signal, Bac
   req->tableVersion = 0;
   req->indexId = RNIL;
   req->indexVersion = 0;
+  req->receiverRef = reference();
 
   // TUP needs some triggerInfo to find right list
   Uint32 ti = 0;
@@ -4613,6 +4614,21 @@ Backup::execFIRE_TRIG_ORD(Signal* signal
     return;
   }//if
 
+  if (isNdbMtLqh())
+  {
+    jam();
+    TablePtr tabPtr;
+    c_tablePool.getPtr(tabPtr, trigPtr.p->tab_ptr_i);
+    FragmentPtr fragPtr;
+    tabPtr.p->fragments.getPtr(fragPtr, fragId);
+    if (fragPtr.p->node != getOwnNodeId()) 
+    {
+      jam();
+      trigPtr.p->logEntry = 0;      
+      return;
+    }
+  }
+
   ndbrequire(trigPtr.p->logEntry != 0);
   Uint32 len = trigPtr.p->logEntry->Length;
   trigPtr.p->logEntry->FragId = htonl(fragId);

=== modified file 'storage/ndb/src/kernel/blocks/dbdict/Dbdict.cpp'
--- a/storage/ndb/src/kernel/blocks/dbdict/Dbdict.cpp	2008-09-17 13:23:21 +0000
+++ b/storage/ndb/src/kernel/blocks/dbdict/Dbdict.cpp	2008-10-02 17:51:17 +0000
@@ -15975,6 +15975,7 @@ Dbdict::createTrigger_abortPrepare(Signa
   req->triggerNo = 0;
   req->triggerId = impl_req->triggerId;
   req->triggerInfo = impl_req->triggerInfo;
+  req->receiverRef = impl_req->receiverRef;
 
   BlockReference ref = createTriggerPtr.p->m_block_list[0];
   sendSignal(ref, GSN_DROP_TRIG_IMPL_REQ, signal,
@@ -16601,6 +16602,7 @@ Dbdict::send_drop_trig_req(Signal* signa
   req->triggerNo = 0;
   req->triggerId = impl_req->triggerId;
   req->triggerInfo = impl_req->triggerInfo;
+  req->receiverRef = impl_req->receiverRef;
 
   BlockReference ref = dropTriggerPtr.p->m_block_list[0];
   sendSignal(ref, GSN_DROP_TRIG_IMPL_REQ, signal,

=== modified file 'storage/ndb/src/kernel/blocks/dbtup/DbtupTrigger.cpp'
--- a/storage/ndb/src/kernel/blocks/dbtup/DbtupTrigger.cpp	2008-09-30 15:10:29 +0000
+++ b/storage/ndb/src/kernel/blocks/dbtup/DbtupTrigger.cpp	2008-10-02 17:51:17 +0000
@@ -185,6 +185,7 @@ Dbtup::execDROP_TRIG_IMPL_REQ(Signal* si
   const Uint32 senderData = req->senderData;
   const Uint32 tableId = req->tableId;
   const Uint32 triggerId = req->triggerId;
+  const Uint32 receiverRef = req->receiverRef;
 
   // Find table
   TablerecPtr tabPtr;
@@ -192,7 +193,7 @@ Dbtup::execDROP_TRIG_IMPL_REQ(Signal* si
   ptrCheckGuard(tabPtr, cnoOfTablerec, tablerec);
 
   // Drop trigger
-  Uint32 r = dropTrigger(tabPtr.p, req, refToBlock(senderRef));
+  Uint32 r = dropTrigger(tabPtr.p, req, refToBlock(receiverRef));
   if (r == 0){
     // Send conf
     DropTrigImplConf* conf = (DropTrigImplConf*)signal->getDataPtrSend();
@@ -368,7 +369,7 @@ Dbtup::primaryKey(Tablerec* const regTab
 /*                                                                  */
 /* ---------------------------------------------------------------- */
 Uint32
-Dbtup::dropTrigger(Tablerec* table, const DropTrigImplReq* req, BlockNumber sender)
+Dbtup::dropTrigger(Tablerec* table, const DropTrigImplReq* req, BlockNumber receiver)
 {
   if (ERROR_INSERTED(4004)) {
     CLEAR_ERROR_INSERT_VALUE;
@@ -420,7 +421,7 @@ Dbtup::dropTrigger(Tablerec* table, cons
       if (ptr.p->triggerId == triggerId)
       {
 	if(ttype==TriggerType::SUBSCRIPTION &&
-	   sender != refToBlock(ptr.p->m_receiverRef))
+	   receiver != refToBlock(ptr.p->m_receiverRef))
 	{
 	  /**
 	   * You can only drop your own triggers for subscription triggers.
@@ -886,8 +887,14 @@ void Dbtup::executeTrigger(KeyReqStruct 
   ptrCheckGuard(regFragPtr, cnoOfFragrec, fragrecord);
   Fragrecord::FragState fragstatus = regFragPtr.p->fragStatus;
 
-  if (refToMain(ref) == BACKUP) {
+  if (refToMain(ref) == BACKUP)
+  {
     jam();
+    if (isNdbMtLqh())
+    {
+      goto out;
+    }
+
     /*
     In order for the implementation of BACKUP to work even when changing
     primaries in the middle of the backup we need to set the trigger on
@@ -905,6 +912,8 @@ void Dbtup::executeTrigger(KeyReqStruct 
       jam();
       return;
     }
+out:
+    (void)1;
   }
   else if (unlikely(triggerType == TriggerType::REORG_TRIGGER))
   {
@@ -1294,10 +1303,15 @@ void Dbtup::sendFireTrigOrd(Signal* sign
     // Since only backup uses subscription triggers we 
     // send to backup directly for now
     fireTrigOrd->setGCI(req_struct->gci_hi);
-    EXECUTE_DIRECT(refToMain(trigPtr->m_receiverRef),
-                   GSN_FIRE_TRIG_ORD,
-                   signal,
-		   FireTrigOrd::SignalWithGCILength);
+
+    if (refToInstance(trigPtr->m_receiverRef) == instance())
+      EXECUTE_DIRECT(refToMain(trigPtr->m_receiverRef),
+                     GSN_FIRE_TRIG_ORD,
+                     signal,
+                     FireTrigOrd::SignalWithGCILength);
+    else
+      sendSignal(trigPtr->m_receiverRef, GSN_FIRE_TRIG_ORD,
+                 signal, FireTrigOrd::SignalWithGCILength, JBB);
     break;
   default:
     ndbrequire(false);

=== modified file 'storage/ndb/src/kernel/blocks/suma/Suma.cpp'
--- a/storage/ndb/src/kernel/blocks/suma/Suma.cpp	2008-09-17 13:23:21 +0000
+++ b/storage/ndb/src/kernel/blocks/suma/Suma.cpp	2008-10-02 17:51:17 +0000
@@ -2892,7 +2892,8 @@ Suma::drop_triggers(Signal* signal, Subs
         req->indexId = RNIL;
         req->indexVersion = 0;
         req->triggerId = triggerId;
-        
+        req->receiverRef = SUMA_REF;
+
         sendSignal(DBTUP_REF, GSN_DROP_TRIG_IMPL_REQ,
                    signal, DropTrigImplReq::SignalLength, JBB);
       }

Thread
bzr push into mysql-5.1 branch (jonas:2873) Jonas Oreland2 Oct