List:Commits« Previous MessageNext Message »
From:Pekka Nousiainen Date:December 2 2010 6:08pm
Subject:bzr commit into mysql-5.1-telco-6.3 branch (pekka:3360) Bug#58277
View as plain text  
#At file:///export/space/pekka/ms/ms-bug58277-63/ based on revid:pekka@stripped

 3360 Pekka Nousiainen	2010-12-02
      bug#58277 a02_meta.diff
      drop trigger in TUP sets index to Dropping

    modified:
      storage/ndb/src/kernel/blocks/dbtup/DbtupTrigger.cpp
      storage/ndb/src/kernel/blocks/dbtux/DbtuxMeta.cpp
=== modified file 'storage/ndb/src/kernel/blocks/dbtup/DbtupTrigger.cpp'
--- a/storage/ndb/src/kernel/blocks/dbtup/DbtupTrigger.cpp	2010-09-03 05:30:17 +0000
+++ b/storage/ndb/src/kernel/blocks/dbtup/DbtupTrigger.cpp	2010-12-02 18:08:13 +0000
@@ -29,6 +29,7 @@
 #include <signaldata/FireTrigOrd.hpp>
 #include <signaldata/CreateTrig.hpp>
 #include <signaldata/TuxMaint.hpp>
+#include <signaldata/AlterIndx.hpp>
 
 /* **************************************************************** */
 /* ---------------------------------------------------------------- */
@@ -198,6 +199,23 @@ Dbtup::execDROP_TRIG_REQ(Signal* signal)
     conf->setTriggerId(req->getTriggerId());
     sendSignal(senderRef, GSN_DROP_TRIG_CONF, 
 	       signal, DropTrigConf::SignalLength, JBB);
+
+    // Set ordered index to Dropping in same timeslice
+    TriggerType::Value ttype = req->getTriggerType();
+    if (ttype == TriggerType::ORDERED_INDEX)
+    {
+      jam();
+      AlterIndxReq* areq = (AlterIndxReq*)signal->getDataPtrSend();
+      areq->setUserRef(0); // no CONF
+      areq->setConnectionPtr(0);
+      areq->setRequestType(AlterIndxReq::RT_UNDEFINED);
+      areq->setTableId(req->getTableId());
+      areq->setIndexId(req->getIndexId()); // index id
+      areq->setIndexVersion(0);
+      areq->setOnline(0); // set to Dropping
+      EXECUTE_DIRECT(DBTUX, GSN_ALTER_INDX_REQ,
+                     signal, AlterIndxReq::SignalLength);
+    }
   } else {
     // Send ref
     DropTrigRef* const ref = (DropTrigRef*)signal->getDataPtrSend();

=== modified file 'storage/ndb/src/kernel/blocks/dbtux/DbtuxMeta.cpp'
--- a/storage/ndb/src/kernel/blocks/dbtux/DbtuxMeta.cpp	2010-06-10 07:00:44 +0000
+++ b/storage/ndb/src/kernel/blocks/dbtux/DbtuxMeta.cpp	2010-12-02 18:08:13 +0000
@@ -351,6 +351,10 @@ Dbtux::execALTER_INDX_REQ(Signal* signal
     switch(req->getOnline()){
     case 0:
       jam();
+      /*
+       * This happens at failed index build, and before dropping an
+       * Online index.  It causes scans to terminate.
+       */
       indexPtr.p->m_state = Index::Dropping;
       break;
     case 2:
@@ -435,13 +439,20 @@ void
 Dbtux::dropIndex(Signal* signal, IndexPtr indexPtr, Uint32 senderRef, Uint32 senderData)
 {
   jam();
-  indexPtr.p->m_state = Index::Dropping;
+  ndbrequire(indexPtr.p->m_state == Index::Dropping);
   // drop fragments
   while (indexPtr.p->m_numFrags > 0) {
     jam();
     Uint32 i = --indexPtr.p->m_numFrags;
     FragPtr fragPtr;
     c_fragPool.getPtr(fragPtr, indexPtr.p->m_fragPtrI[i]);
+    /*
+     * Verify that LQH has terminated scans.  (If not, then drop order
+     * must change from TUP,TUX to TUX,TUP and we must wait for scans).
+     */
+    ScanOpPtr scanPtr;
+    bool b = fragPtr.p->m_scanList.first(scanPtr);
+    ndbrequire(!b);
     c_fragPool.release(fragPtr);
   }
   // drop attributes


Attachment: [text/bzr-bundle] bzr/pekka@mysql.com-20101202180813-xeyd9y7y7nnca81x.bundle
Thread
bzr commit into mysql-5.1-telco-6.3 branch (pekka:3360) Bug#58277Pekka Nousiainen2 Dec