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 Oreland | 2 Oct |