mirror of
https://github.com/MariaDB/server.git
synced 2025-01-16 20:12:31 +01:00
Merge perch.ndb.mysql.com:/home/jonas/src/50-work
into perch.ndb.mysql.com:/home/jonas/src/51-telco-gca storage/ndb/src/common/transporter/Packer.cpp: Auto merged storage/ndb/src/common/transporter/TCP_Transporter.hpp: Auto merged storage/ndb/src/common/transporter/TransporterRegistry.cpp: Auto merged storage/ndb/src/kernel/blocks/cmvmi/Cmvmi.cpp: Auto merged storage/ndb/test/ndbapi/testNdbApi.cpp: merge storage/ndb/test/run-test/daily-basic-tests.txt: merge
This commit is contained in:
commit
746ee8f83f
6 changed files with 85 additions and 19 deletions
|
@ -20,7 +20,12 @@
|
|||
#include <TransporterCallback.hpp>
|
||||
#include <RefConvert.hpp>
|
||||
|
||||
#ifdef ERROR_INSERT
|
||||
Uint32 MAX_RECEIVED_SIGNALS = 1024;
|
||||
#else
|
||||
#define MAX_RECEIVED_SIGNALS 1024
|
||||
#endif
|
||||
|
||||
Uint32
|
||||
TransporterRegistry::unpack(Uint32 * readPtr,
|
||||
Uint32 sizeOfData,
|
||||
|
|
|
@ -101,6 +101,10 @@ private:
|
|||
virtual void updateReceiveDataPtr(Uint32 bytesRead);
|
||||
|
||||
virtual Uint32 get_free_buffer() const;
|
||||
|
||||
inline bool hasReceiveData () const {
|
||||
return receiveBuffer.sizeOfData > 0;
|
||||
}
|
||||
protected:
|
||||
/**
|
||||
* Setup client/server and perform connect/accept
|
||||
|
|
|
@ -738,6 +738,7 @@ TransporterRegistry::poll_SHM(Uint32 timeOutMillis)
|
|||
Uint32
|
||||
TransporterRegistry::poll_TCP(Uint32 timeOutMillis)
|
||||
{
|
||||
bool hasdata = false;
|
||||
if (false && nTCPTransporters == 0)
|
||||
{
|
||||
tcpReadSelectReply = 0;
|
||||
|
@ -770,6 +771,7 @@ TransporterRegistry::poll_TCP(Uint32 timeOutMillis)
|
|||
// Put the connected transporters in the socket read-set
|
||||
FD_SET(socket, &tcpReadset);
|
||||
}
|
||||
hasdata |= t->hasReceiveData();
|
||||
}
|
||||
|
||||
// The highest socket value plus one
|
||||
|
@ -786,7 +788,7 @@ TransporterRegistry::poll_TCP(Uint32 timeOutMillis)
|
|||
}
|
||||
#endif
|
||||
|
||||
return tcpReadSelectReply;
|
||||
return tcpReadSelectReply || hasdata;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@ -795,26 +797,26 @@ void
|
|||
TransporterRegistry::performReceive()
|
||||
{
|
||||
#ifdef NDB_TCP_TRANSPORTER
|
||||
if(tcpReadSelectReply > 0)
|
||||
for (int i=0; i<nTCPTransporters; i++)
|
||||
{
|
||||
for (int i=0; i<nTCPTransporters; i++)
|
||||
{
|
||||
checkJobBuffer();
|
||||
TCP_Transporter *t = theTCPTransporters[i];
|
||||
const NodeId nodeId = t->getRemoteNodeId();
|
||||
const NDB_SOCKET_TYPE socket = t->getSocket();
|
||||
if(is_connected(nodeId)){
|
||||
if(t->isConnected() && FD_ISSET(socket, &tcpReadset))
|
||||
checkJobBuffer();
|
||||
TCP_Transporter *t = theTCPTransporters[i];
|
||||
const NodeId nodeId = t->getRemoteNodeId();
|
||||
const NDB_SOCKET_TYPE socket = t->getSocket();
|
||||
if(is_connected(nodeId)){
|
||||
if(t->isConnected())
|
||||
{
|
||||
if (FD_ISSET(socket, &tcpReadset))
|
||||
{
|
||||
const int receiveSize = t->doReceive();
|
||||
if(receiveSize > 0)
|
||||
{
|
||||
Uint32 * ptr;
|
||||
Uint32 sz = t->getReceiveData(&ptr);
|
||||
transporter_recv_from(callbackObj, nodeId);
|
||||
Uint32 szUsed = unpack(ptr, sz, nodeId, ioStates[nodeId]);
|
||||
t->updateReceiveDataPtr(szUsed);
|
||||
}
|
||||
t->doReceive();
|
||||
}
|
||||
|
||||
if (t->hasReceiveData())
|
||||
{
|
||||
Uint32 * ptr;
|
||||
Uint32 sz = t->getReceiveData(&ptr);
|
||||
Uint32 szUsed = unpack(ptr, sz, nodeId, ioStates[nodeId]);
|
||||
t->updateReceiveDataPtr(szUsed);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -137,6 +137,7 @@ Cmvmi::~Cmvmi()
|
|||
|
||||
#ifdef ERROR_INSERT
|
||||
NodeBitmask c_error_9000_nodes_mask;
|
||||
extern Uint32 MAX_RECEIVED_SIGNALS;
|
||||
#endif
|
||||
|
||||
void Cmvmi::execNDB_TAMPER(Signal* signal)
|
||||
|
@ -166,6 +167,22 @@ void Cmvmi::execNDB_TAMPER(Signal* signal)
|
|||
kill(getpid(), SIGABRT);
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef ERROR_INSERT
|
||||
if (signal->theData[0] == 9003)
|
||||
{
|
||||
if (MAX_RECEIVED_SIGNALS < 1024)
|
||||
{
|
||||
MAX_RECEIVED_SIGNALS = 1024;
|
||||
}
|
||||
else
|
||||
{
|
||||
MAX_RECEIVED_SIGNALS = rand() % 128;
|
||||
}
|
||||
ndbout_c("MAX_RECEIVED_SIGNALS: %d", MAX_RECEIVED_SIGNALS);
|
||||
CLEAR_ERROR_INSERT_VALUE;
|
||||
}
|
||||
#endif
|
||||
}//execNDB_TAMPER()
|
||||
|
||||
void Cmvmi::execSET_LOGLEVELORD(Signal* signal)
|
||||
|
|
|
@ -1321,6 +1321,36 @@ int runTestExecuteAsynch(NDBT_Context* ctx, NDBT_Step* step){
|
|||
|
||||
template class Vector<NdbScanOperation*>;
|
||||
|
||||
int
|
||||
runBug28443(NDBT_Context* ctx, NDBT_Step* step)
|
||||
{
|
||||
int result = NDBT_OK;
|
||||
int records = ctx->getNumRecords();
|
||||
|
||||
NdbRestarter restarter;
|
||||
|
||||
restarter.insertErrorInAllNodes(9003);
|
||||
|
||||
for (Uint32 i = 0; i<ctx->getNumLoops(); i++)
|
||||
{
|
||||
HugoTransactions hugoTrans(*ctx->getTab());
|
||||
if (hugoTrans.loadTable(GETNDB(step), records, 2048) != 0)
|
||||
{
|
||||
result = NDBT_FAILED;
|
||||
goto done;
|
||||
}
|
||||
if (runClearTable(ctx, step) != 0)
|
||||
{
|
||||
result = NDBT_FAILED;
|
||||
goto done;
|
||||
}
|
||||
}
|
||||
|
||||
done:
|
||||
restarter.insertErrorInAllNodes(9003);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
NDBT_TESTSUITE(testNdbApi);
|
||||
TESTCASE("MaxNdb",
|
||||
|
@ -1416,6 +1446,10 @@ TESTCASE("ExecuteAsynch",
|
|||
"Check that executeAsync() works (BUG#27495)\n"){
|
||||
INITIALIZER(runTestExecuteAsynch);
|
||||
}
|
||||
TESTCASE("Bug28443",
|
||||
""){
|
||||
INITIALIZER(runBug28443);
|
||||
}
|
||||
NDBT_TESTSUITE_END(testNdbApi);
|
||||
|
||||
int main(int argc, const char** argv){
|
||||
|
|
|
@ -684,6 +684,10 @@ max-time: 500
|
|||
cmd: testNdbApi
|
||||
args: -n ExecuteAsynch T1
|
||||
|
||||
max-time: 1000
|
||||
cmd: testNdbApi
|
||||
args: -n BugBug28443
|
||||
|
||||
#max-time: 500
|
||||
#cmd: testInterpreter
|
||||
#args: T1
|
||||
|
|
Loading…
Reference in a new issue