mirror of
https://github.com/MariaDB/server.git
synced 2025-01-18 04:53:01 +01:00
Merge perch.ndb.mysql.com:/home/jonas/src/50-work
into perch.ndb.mysql.com:/home/jonas/src/51-work storage/ndb/src/kernel/blocks/dbtc/DbtcMain.cpp: Auto merged storage/ndb/test/ndbapi/testTimeout.cpp: Auto merged
This commit is contained in:
commit
7037b80970
2 changed files with 72 additions and 1 deletions
|
@ -6310,6 +6310,18 @@ void Dbtc::timeOutFoundLab(Signal* signal, Uint32 TapiConPtr, Uint32 errCode)
|
|||
break;
|
||||
case CS_START_SCAN:{
|
||||
jam();
|
||||
|
||||
/*
|
||||
We are waiting for application to continue the transaction. In this
|
||||
particular state we will use the application timeout parameter rather
|
||||
than the shorter Deadlock detection timeout.
|
||||
*/
|
||||
if (c_appl_timeout_value == 0 ||
|
||||
(ctcTimer - getApiConTimer(apiConnectptr.i)) <= c_appl_timeout_value) {
|
||||
jam();
|
||||
return;
|
||||
}//if
|
||||
|
||||
ScanRecordPtr scanPtr;
|
||||
scanPtr.i = apiConnectptr.p->apiScanRec;
|
||||
ptrCheckGuard(scanPtr, cscanrecFileSize, scanRecord);
|
||||
|
@ -9841,6 +9853,17 @@ void Dbtc::sendScanTabConf(Signal* signal, ScanRecordPtr scanPtr) {
|
|||
conf->requestInfo = op_count | ScanTabConf::EndOfData;
|
||||
releaseScanResources(scanPtr);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (scanPtr.p->m_running_scan_frags.isEmpty())
|
||||
{
|
||||
jam();
|
||||
/**
|
||||
* All scan frags delivered...waiting for API
|
||||
*/
|
||||
setApiConTimer(apiConnectptr.i, ctcTimer, __LINE__);
|
||||
}
|
||||
}
|
||||
|
||||
if(4 + 3 * op_count > 25){
|
||||
jam();
|
||||
|
|
|
@ -388,6 +388,45 @@ int runBuddyTransNoTimeout(NDBT_Context* ctx, NDBT_Step* step){
|
|||
return result;
|
||||
}
|
||||
|
||||
int runBuddyTransTimeout(NDBT_Context* ctx, NDBT_Step* step){
|
||||
int result = NDBT_OK;
|
||||
int loops = ctx->getNumLoops();
|
||||
int records = ctx->getNumRecords();
|
||||
int stepNo = step->getStepNo();
|
||||
ndbout << "TransactionInactiveTimeout="<< TIMEOUT <<endl;
|
||||
|
||||
HugoOperations hugoOps(*ctx->getTab());
|
||||
Ndb* pNdb = GETNDB(step);
|
||||
|
||||
for (int l = 1; l < loops && result == NDBT_OK; l++){
|
||||
|
||||
NdbTransaction* pTrans = 0;
|
||||
do{
|
||||
pTrans = pNdb->startTransaction();
|
||||
NdbScanOperation* pOp = pTrans->getNdbScanOperation(ctx->getTab());
|
||||
CHECK(pOp->readTuples(NdbOperation::LM_Read, 0, 0, 1) == 0);
|
||||
CHECK(pTrans->execute(NoCommit) == 0);
|
||||
|
||||
int sleep = 2 * TIMEOUT;
|
||||
ndbout << "Sleeping for " << sleep << " milliseconds" << endl;
|
||||
NdbSleep_MilliSleep(sleep);
|
||||
|
||||
int res = 0;
|
||||
while((res = pOp->nextResult()) == 0);
|
||||
ndbout_c("res: %d", res);
|
||||
CHECK(res == -1);
|
||||
|
||||
} while(false);
|
||||
|
||||
if (pTrans)
|
||||
{
|
||||
pTrans->close();
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
int
|
||||
runError4012(NDBT_Context* ctx, NDBT_Step* step){
|
||||
int result = NDBT_OK;
|
||||
|
@ -495,6 +534,15 @@ TESTCASE("BuddyTransNoTimeout5",
|
|||
FINALIZER(resetTransactionTimeout);
|
||||
FINALIZER(runClearTable);
|
||||
}
|
||||
TESTCASE("BuddyTransTimeout1",
|
||||
"Start a scan and check that it gets aborted"){
|
||||
INITIALIZER(runLoadTable);
|
||||
INITIALIZER(setTransactionTimeout);
|
||||
STEPS(runBuddyTransTimeout, 1);
|
||||
FINALIZER(resetTransactionTimeout);
|
||||
FINALIZER(runClearTable);
|
||||
}
|
||||
#if 0
|
||||
TESTCASE("Error4012", ""){
|
||||
TC_PROPERTY("TransactionDeadlockTimeout", 120000);
|
||||
INITIALIZER(runLoadTable);
|
||||
|
@ -503,7 +551,7 @@ TESTCASE("Error4012", ""){
|
|||
STEPS(runError4012, 2);
|
||||
FINALIZER(runClearTable);
|
||||
}
|
||||
|
||||
#endif
|
||||
NDBT_TESTSUITE_END(testTimeout);
|
||||
|
||||
int main(int argc, const char** argv){
|
||||
|
|
Loading…
Reference in a new issue