#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#58277 | Pekka Nousiainen | 2 Dec |