summaryrefslogtreecommitdiff
path: root/storage
diff options
context:
space:
mode:
authorjonas@perch.ndb.mysql.com <>2007-12-03 14:31:17 +0100
committerjonas@perch.ndb.mysql.com <>2007-12-03 14:31:17 +0100
commit42cfaa616aec9269ad681b231904882db33c32aa (patch)
tree05a0a2584ccd16617dcadd895e5fe0f808fbb39c /storage
parent6d56f4b95b446dd3da359dd94deec3f01b0595b2 (diff)
downloadmariadb-git-42cfaa616aec9269ad681b231904882db33c32aa.tar.gz
ndb - testNodeRestart -n Bug27466 T1
make local INCL_NODEREQ/CONF more robust (to remove testprg introduced race, error insert causes 5s delay)
Diffstat (limited to 'storage')
-rw-r--r--storage/ndb/src/kernel/blocks/backup/Backup.cpp5
-rw-r--r--storage/ndb/src/kernel/blocks/dbdict/Dbdict.cpp5
-rw-r--r--storage/ndb/src/kernel/blocks/dbdih/DbdihMain.cpp37
-rw-r--r--storage/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp5
-rw-r--r--storage/ndb/src/kernel/blocks/dbtc/DbtcMain.cpp8
-rw-r--r--storage/ndb/src/kernel/blocks/suma/Suma.cpp5
-rw-r--r--storage/ndb/test/ndbapi/testNodeRestart.cpp2
7 files changed, 48 insertions, 19 deletions
diff --git a/storage/ndb/src/kernel/blocks/backup/Backup.cpp b/storage/ndb/src/kernel/blocks/backup/Backup.cpp
index 64e2c41aa69..45501bf50d5 100644
--- a/storage/ndb/src/kernel/blocks/backup/Backup.cpp
+++ b/storage/ndb/src/kernel/blocks/backup/Backup.cpp
@@ -1026,8 +1026,9 @@ Backup::execINCL_NODEREQ(Signal* signal)
break;
}//if
}//for
- signal->theData[0] = reference();
- sendSignal(senderRef, GSN_INCL_NODECONF, signal, 1, JBB);
+ signal->theData[0] = inclNode;
+ signal->theData[1] = reference();
+ sendSignal(senderRef, GSN_INCL_NODECONF, signal, 2, JBB);
}
/*****************************************************************************
diff --git a/storage/ndb/src/kernel/blocks/dbdict/Dbdict.cpp b/storage/ndb/src/kernel/blocks/dbdict/Dbdict.cpp
index 569958a6aa9..7ced078144a 100644
--- a/storage/ndb/src/kernel/blocks/dbdict/Dbdict.cpp
+++ b/storage/ndb/src/kernel/blocks/dbdict/Dbdict.cpp
@@ -3825,8 +3825,9 @@ void Dbdict::execINCL_NODEREQ(Signal* signal)
c_nodes.getPtr(nodePtr);
ndbrequire(nodePtr.p->nodeState == NodeRecord::NDB_NODE_DEAD);
nodePtr.p->nodeState = NodeRecord::NDB_NODE_ALIVE;
- signal->theData[0] = reference();
- sendSignal(retRef, GSN_INCL_NODECONF, signal, 1, JBB);
+ signal->theData[0] = nodePtr.i;
+ signal->theData[1] = reference();
+ sendSignal(retRef, GSN_INCL_NODECONF, signal, 2, JBB);
c_aliveNodes.set(nodePtr.i);
}//execINCL_NODEREQ()
diff --git a/storage/ndb/src/kernel/blocks/dbdih/DbdihMain.cpp b/storage/ndb/src/kernel/blocks/dbdih/DbdihMain.cpp
index a081166f2e3..bbacb300089 100644
--- a/storage/ndb/src/kernel/blocks/dbdih/DbdihMain.cpp
+++ b/storage/ndb/src/kernel/blocks/dbdih/DbdihMain.cpp
@@ -2135,12 +2135,9 @@ void Dbdih::gcpBlockedLab(Signal* signal)
/*---------------------------------------------------------------------------*/
void Dbdih::execINCL_NODECONF(Signal* signal)
{
- Uint32 TsendNodeId;
- Uint32 TstartNode_or_blockref;
-
jamEntry();
- TstartNode_or_blockref = signal->theData[0];
- TsendNodeId = signal->theData[1];
+ Uint32 TstartNode = signal->theData[0];
+ Uint32 TsendNodeId_or_blockref = signal->theData[1];
Uint32 blocklist[6];
blocklist[0] = clocallqhblockref;
@@ -2152,9 +2149,21 @@ void Dbdih::execINCL_NODECONF(Signal* signal)
for (Uint32 i = 0; blocklist[i] != 0; i++)
{
- if (TstartNode_or_blockref == blocklist[i])
+ if (TsendNodeId_or_blockref == blocklist[i])
{
jam();
+
+ if (TstartNode != c_nodeStartSlave.nodeId)
+ {
+ jam();
+ warningEvent("Recevied INCL_NODECONF for %u from %s"
+ " while %u is starting",
+ TstartNode,
+ getBlockName(refToBlock(TsendNodeId_or_blockref)),
+ c_nodeStartSlave.nodeId);
+ return;
+ }
+
if (getNodeStatus(c_nodeStartSlave.nodeId) == NodeRecord::ALIVE &&
blocklist[i+1] != 0)
{
@@ -2182,10 +2191,21 @@ void Dbdih::execINCL_NODECONF(Signal* signal)
}
}
}
+
+ if (c_nodeStartMaster.startNode != TstartNode)
+ {
+ jam();
+ warningEvent("Recevied INCL_NODECONF for %u from %u"
+ " while %u is starting",
+ TstartNode,
+ TsendNodeId_or_blockref,
+ c_nodeStartMaster.startNode);
+ return;
+ }
ndbrequire(cmasterdihref = reference());
- receiveLoopMacro(INCL_NODEREQ, TsendNodeId);
-
+ receiveLoopMacro(INCL_NODEREQ, TsendNodeId_or_blockref);
+
CRASH_INSERTION(7128);
/*-------------------------------------------------------------------------*/
// Now that we have included the starting node in the node lists in the
@@ -13006,6 +13026,7 @@ void Dbdih::newCrashedReplica(Uint32 nodeId, ReplicaRecordPtr ncrReplicaPtr)
void Dbdih::nodeResetStart()
{
jam();
+ c_nodeStartSlave.nodeId = 0;
c_nodeStartMaster.startNode = RNIL;
c_nodeStartMaster.failNr = cfailurenr;
c_nodeStartMaster.activeState = false;
diff --git a/storage/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp b/storage/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp
index 6efa1b1b116..83d38595c1f 100644
--- a/storage/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp
+++ b/storage/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp
@@ -494,8 +494,9 @@ void Dblqh::execINCL_NODEREQ(Signal* signal)
cnodeStatus[i] = ZNODE_UP;
}//if
}//for
- signal->theData[0] = cownref;
- sendSignal(retRef, GSN_INCL_NODECONF, signal, 1, JBB);
+ signal->theData[0] = nodeId;
+ signal->theData[1] = cownref;
+ sendSignal(retRef, GSN_INCL_NODECONF, signal, 2, JBB);
return;
}//Dblqh::execINCL_NODEREQ()
diff --git a/storage/ndb/src/kernel/blocks/dbtc/DbtcMain.cpp b/storage/ndb/src/kernel/blocks/dbtc/DbtcMain.cpp
index ce20059e663..cffb4b22e4d 100644
--- a/storage/ndb/src/kernel/blocks/dbtc/DbtcMain.cpp
+++ b/storage/ndb/src/kernel/blocks/dbtc/DbtcMain.cpp
@@ -310,9 +310,11 @@ void Dbtc::execINCL_NODEREQ(Signal* signal)
hostptr.i = signal->theData[1];
ptrCheckGuard(hostptr, chostFilesize, hostRecord);
hostptr.p->hostStatus = HS_ALIVE;
- signal->theData[0] = cownref;
c_alive_nodes.set(hostptr.i);
+ signal->theData[0] = hostptr.i;
+ signal->theData[1] = cownref;
+
if (ERROR_INSERTED(8039))
{
CLEAR_ERROR_INSERT_VALUE;
@@ -321,11 +323,11 @@ void Dbtc::execINCL_NODEREQ(Signal* signal)
sendSignal(numberToRef(CMVMI, hostptr.i),
GSN_NDB_TAMPER, signal, 1, JBB);
signal->theData[0] = save;
- sendSignalWithDelay(tblockref, GSN_INCL_NODECONF, signal, 5000, 1);
+ sendSignalWithDelay(tblockref, GSN_INCL_NODECONF, signal, 5000, 2);
return;
}
- sendSignal(tblockref, GSN_INCL_NODECONF, signal, 1, JBB);
+ sendSignal(tblockref, GSN_INCL_NODECONF, signal, 2, JBB);
}
void Dbtc::execREAD_NODESREF(Signal* signal)
diff --git a/storage/ndb/src/kernel/blocks/suma/Suma.cpp b/storage/ndb/src/kernel/blocks/suma/Suma.cpp
index af1334c57fc..113b63a19d3 100644
--- a/storage/ndb/src/kernel/blocks/suma/Suma.cpp
+++ b/storage/ndb/src/kernel/blocks/suma/Suma.cpp
@@ -821,8 +821,9 @@ Suma::execINCL_NODEREQ(Signal* signal){
ndbrequire(!c_alive_nodes.get(nodeId));
c_alive_nodes.set(nodeId);
- signal->theData[0] = reference();
- sendSignal(senderRef, GSN_INCL_NODECONF, signal, 1, JBB);
+ signal->theData[0] = nodeId;
+ signal->theData[1] = reference();
+ sendSignal(senderRef, GSN_INCL_NODECONF, signal, 2, JBB);
}
void
diff --git a/storage/ndb/test/ndbapi/testNodeRestart.cpp b/storage/ndb/test/ndbapi/testNodeRestart.cpp
index 2a5febb7ae9..751134c43c5 100644
--- a/storage/ndb/test/ndbapi/testNodeRestart.cpp
+++ b/storage/ndb/test/ndbapi/testNodeRestart.cpp
@@ -1590,6 +1590,8 @@ runBug27466(NDBT_Context* ctx, NDBT_Step* step)
node2 = res.getDbNodeId(rand() % res.getNumDbNodes());
}
+ ndbout_c("nodes %u %u", node1, node2);
+
if (res.restartOneDbNode(node1, false, true, true))
return NDBT_FAILED;