3032 Jonas Oreland 2008-10-30
ndb - allow reorg wo/ adding partitions
(to make testing in mtr easier)
modified:
storage/ndb/src/kernel/blocks/dbdict/Dbdict.cpp
3031 Jonas Oreland 2008-10-30
ndbmtd - micro optimization: lookup look-stat prior to owning lock
modified:
storage/ndb/src/kernel/vm/mt.cpp
3030 Jonas Oreland 2008-10-30
ndb(mt)d - Fix TC sending to LQH incase of timeout or node-fail
- Add sending fragment in LQH_TRANSCONF so that
take-over TC can address correct LQH-instances
modified:
storage/ndb/include/kernel/signaldata/LqhTransConf.hpp
storage/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp
storage/ndb/src/kernel/blocks/dbtc/Dbtc.hpp
storage/ndb/src/kernel/blocks/dbtc/DbtcMain.cpp
3029 Jonas Oreland 2008-10-29
ndbmtd - add config parameters controlling #threads
modified:
storage/ndb/include/kernel/kernel_config_parameters.h
storage/ndb/include/mgmapi/mgmapi_config_parameters.h
storage/ndb/src/kernel/main.cpp
storage/ndb/src/kernel/vm/Configuration.cpp
storage/ndb/src/mgmsrv/ConfigInfo.cpp
=== modified file 'storage/ndb/include/kernel/signaldata/LqhTransConf.hpp'
--- a/storage/ndb/include/kernel/signaldata/LqhTransConf.hpp 2008-08-23 06:32:32 +0000
+++ b/storage/ndb/include/kernel/signaldata/LqhTransConf.hpp 2008-10-30 09:43:50 +0000
@@ -36,7 +36,13 @@ class LqhTransConf {
friend bool printLQH_TRANSCONF(FILE *, const Uint32 *, Uint32, Uint16);
public:
- STATIC_CONST( SignalLength = 16 );
+ STATIC_CONST( SignalLength = 17 );
+
+ /**
+ * Upgrade
+ */
+ STATIC_CONST( SignalLength_GCI_LO = 16 );
+ STATIC_CONST( SignalLength_FRAG_ID = 17 );
private:
/**
@@ -76,6 +82,7 @@ private:
Uint32 nextNodeId3;
Uint32 tableId;
Uint32 gci_lo;
+ Uint32 fragId;
/**
* Getters
=== modified file 'storage/ndb/src/kernel/blocks/dbdict/Dbdict.cpp'
--- a/storage/ndb/src/kernel/blocks/dbdict/Dbdict.cpp 2008-10-29 14:25:59 +0000
+++ b/storage/ndb/src/kernel/blocks/dbdict/Dbdict.cpp 2008-10-30 09:54:42 +0000
@@ -7534,7 +7534,7 @@ Dbdict::check_supported_add_fragment(Uin
}
Uint32 fragments = newdata[1];
- if (fragments <= olddata[1])
+ if (fragments < olddata[1])
{
jam();
return AlterTableRef::UnsupportedChange;
=== modified file 'storage/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp'
--- a/storage/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp 2008-10-09 19:17:11 +0000
+++ b/storage/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp 2008-10-30 09:43:50 +0000
@@ -18859,9 +18859,6 @@ void Dblqh::sendAborted(Signal* signal)
* ------------------------------------------------------------------------- */
void Dblqh::sendLqhTransconf(Signal* signal, LqhTransConf::OperationStatus stat)
{
- /**
- * wl4391_todo need to send instance key to take-over TC
- */
tcNodeFailptr.i = tcConnectptr.p->tcNodeFailrec;
ptrCheckGuard(tcNodeFailptr, ctcNodeFailrecFileSize, tcNodeFailRecord);
@@ -18890,6 +18887,7 @@ void Dblqh::sendLqhTransconf(Signal* sig
lqhTransConf->apiOpRec = tcConnectptr.p->applOprec;
lqhTransConf->tableId = tcConnectptr.p->tableref;
lqhTransConf->gci_lo = tcConnectptr.p->gci_lo;
+ lqhTransConf->fragId = tcConnectptr.p->fragmentid;
sendSignal(tcNodeFailptr.p->newTcBlockref, GSN_LQH_TRANSCONF,
signal, LqhTransConf::SignalLength, JBB);
tcNodeFailptr.p->tcRecNow = tcConnectptr.i + 1;
=== modified file 'storage/ndb/src/kernel/blocks/dbtc/Dbtc.hpp'
--- a/storage/ndb/src/kernel/blocks/dbtc/Dbtc.hpp 2008-10-05 07:14:21 +0000
+++ b/storage/ndb/src/kernel/blocks/dbtc/Dbtc.hpp 2008-10-30 09:43:50 +0000
@@ -1396,14 +1396,14 @@ private:
void timeOutLoopStartFragLab(Signal* signal, Uint32 TscanConPtr);
int releaseAndAbort(Signal* signal);
void findApiConnectFail(Signal* signal);
- void findTcConnectFail(Signal* signal);
+ void findTcConnectFail(Signal* signal, Uint32 instanceKey);
void initApiConnectFail(Signal* signal);
- void initTcConnectFail(Signal* signal);
+ void initTcConnectFail(Signal* signal, Uint32 instanceKey);
void initTcFail(Signal* signal);
void releaseTakeOver(Signal* signal);
void setupFailData(Signal* signal);
void updateApiStateFail(Signal* signal);
- void updateTcStateFail(Signal* signal);
+ void updateTcStateFail(Signal* signal, Uint32 instanceKey);
void handleApiFailState(Signal* signal, UintR anApiConnectptr);
void handleFailedApiNode(Signal* signal,
UintR aFailedNode,
=== modified file 'storage/ndb/src/kernel/blocks/dbtc/DbtcMain.cpp'
--- a/storage/ndb/src/kernel/blocks/dbtc/DbtcMain.cpp 2008-10-08 06:18:28 +0000
+++ b/storage/ndb/src/kernel/blocks/dbtc/DbtcMain.cpp 2008-10-30 09:43:50 +0000
@@ -7150,7 +7150,8 @@ void Dbtc::sendAbortedAfterTimeout(Signa
* We also update the timer to ensure we don't get time-out
* too early.
*--------------------------------------------------------------*/
- BlockReference TBRef = calcLqhBlockRef(hostptr.i);
+ Uint32 instanceKey = tcConnectptr.p->lqhInstanceKey;
+ BlockReference TBRef = numberToRef(DBLQH, instanceKey, hostptr.i);
signal->theData[0] = tcConnectptr.i;
signal->theData[1] = cownref;
signal->theData[2] = apiConnectptr.p->transid[0];
@@ -7981,8 +7982,9 @@ void Dbtc::execLQH_TRANSCONF(Signal* sig
tapplOprec = lqhTransConf->apiOpRec;
const Uint32 tableId = lqhTransConf->tableId;
Uint32 gci_lo = lqhTransConf->gci_lo;
+ Uint32 fragId = lqhTransConf->fragId;
if (ttransStatus == LqhTransConf::Committed &&
- unlikely(signal->getLength() < LqhTransConf::SignalLength))
+ unlikely(signal->getLength() < LqhTransConf::SignalLength_GCI_LO))
{
jam();
gci_lo = 0;
@@ -8023,9 +8025,23 @@ void Dbtc::execLQH_TRANSCONF(Signal* sig
apiConnectptr.p->ndbapiConnect = tapplOprec;
}
- if (ttransStatus != LqhTransConf::Marker){
+ if (ttransStatus != LqhTransConf::Marker)
+ {
jam();
- findTcConnectFail(signal);
+
+ Uint32 instanceKey;
+
+ if (unlikely(signal->getLength() < LqhTransConf::SignalLength_FRAG_ID))
+ {
+ jam();
+ instanceKey = 0;
+ }
+ else
+ {
+ jam();
+ instanceKey = getInstanceKey(tableId, fragId);
+ }
+ findTcConnectFail(signal, instanceKey);
}
}//Dbtc::execLQH_TRANSCONF()
@@ -8478,7 +8494,8 @@ void Dbtc::toAbortHandlingLab(Signal* si
ptrCheckGuard(hostptr, chostFilesize, hostRecord);
if (hostptr.p->hostStatus == HS_ALIVE) {
jam();
- tblockref = calcLqhBlockRef(hostptr.i);
+ Uint32 instanceKey = tcConnectptr.p->lqhInstanceKey;
+ tblockref = numberToRef(DBLQH, instanceKey, hostptr.i);
setApiConTimer(apiConnectptr.i, ctcTimer, __LINE__);
tcConnectptr.p->tcConnectstate = OS_WAIT_ABORT_CONF;
apiConnectptr.p->apiConnectstate = CS_WAIT_ABORT_CONF;
@@ -8897,7 +8914,7 @@ FAF_LOOP:
/*----------------------------------------------------------*/
/* FIND THE TC CONNECT AND IF NOT FOUND ALLOCATE A NEW */
/*----------------------------------------------------------*/
-void Dbtc::findTcConnectFail(Signal* signal)
+void Dbtc::findTcConnectFail(Signal* signal, Uint32 instanceKey)
{
UintR tftfHashNumber;
@@ -8915,7 +8932,7 @@ void Dbtc::findTcConnectFail(Signal* sig
linkTcInConnectionlist(signal);
tcConnectptr.p->nextTcFailHash = ctcConnectFailHash[tftfHashNumber];
ctcConnectFailHash[tftfHashNumber] = tcConnectptr.i;
- initTcConnectFail(signal);
+ initTcConnectFail(signal, instanceKey);
return;
} else {
ptrCheckGuard(tcConnectptr, ctcConnectFilesize, tcConnectRecord);
@@ -8923,7 +8940,7 @@ void Dbtc::findTcConnectFail(Signal* sig
jam(); /* FRAGMENTID = TC_OPREC HERE, LOOP ANOTHER TURN */
tcConnectptr.i = tcConnectptr.p->nextTcFailHash;
} else {
- updateTcStateFail(signal);
+ updateTcStateFail(signal, instanceKey);
return;
}//if
}//if
@@ -9001,7 +9018,7 @@ void Dbtc::initApiConnectFail(Signal* si
/* INITIALISE AT TC CONNECT AT TAKE OVER WHEN ALLOCATING*/
/* THE TC CONNECT RECORD. */
/*------------------------------------------------------------*/
-void Dbtc::initTcConnectFail(Signal* signal)
+void Dbtc::initTcConnectFail(Signal* signal, Uint32 instanceKey)
{
tcConnectptr.p->apiConnect = apiConnectptr.i;
tcConnectptr.p->tcOprec = ttcOprec;
@@ -9013,7 +9030,8 @@ void Dbtc::initTcConnectFail(Signal* sig
tcConnectptr.p->failData[treplicaNo] = ttransStatus;
tcConnectptr.p->lastReplicaNo = LqhTransConf::getLastReplicaNo(treqinfo);
tcConnectptr.p->dirtyOp = LqhTransConf::getDirtyFlag(treqinfo);
-
+ tcConnectptr.p->lqhInstanceKey = instanceKey;
+
}//Dbtc::initTcConnectFail()
/*----------------------------------------------------------*/
@@ -9252,7 +9270,7 @@ void Dbtc::updateApiStateFail(Signal* si
/* WE ALSO NEED TO CHECK THAT THERE IS CONSISTENCY */
/* BETWEEN THE DIFFERENT REPLICAS. */
/*------------------------------------------------------------*/
-void Dbtc::updateTcStateFail(Signal* signal)
+void Dbtc::updateTcStateFail(Signal* signal, Uint32 instanceKey)
{
const Uint8 treplicaNo = LqhTransConf::getReplicaNo(treqinfo);
const Uint8 tlastReplicaNo = LqhTransConf::getLastReplicaNo(treqinfo);
@@ -9267,6 +9285,7 @@ void Dbtc::updateTcStateFail(Signal* sig
regTcPtr->tcNodedata[treplicaNo] = tnodeid;
regTcPtr->failData[treplicaNo] = ttransStatus;
+ ndbrequire(regTcPtr->lqhInstanceKey == instanceKey)
}//Dbtc::updateTcStateFail()
void Dbtc::execTCGETOPSIZEREQ(Signal* signal)
=== modified file 'storage/ndb/src/kernel/vm/mt.cpp'
--- a/storage/ndb/src/kernel/vm/mt.cpp 2008-10-28 11:12:13 +0000
+++ b/storage/ndb/src/kernel/vm/mt.cpp 2008-10-30 09:47:57 +0000
@@ -260,6 +260,7 @@ void
lock_slow(struct thr_spin_lock* sl)
{
volatile unsigned* val = &sl->m_lock;
+ mt_lock_stat* s = lookup_lock(sl); // lookup before owning lock
loop:
Uint32 spins = 0;
@@ -271,7 +272,6 @@ loop:
if (unlikely(xcng(val, 1) != 0))
goto loop;
- mt_lock_stat* s = lookup_lock(sl);
if (s)
{
s->m_spin_count += spins;
| Thread |
|---|
| • bzr push into mysql-5.1 branch (jonas:3029 to 3032) | Jonas Oreland | 30 Oct |