Loading storage/ndb/src/kernel/blocks/dbtc/DbtcMain.cpp +23 −0 Original line number Diff line number Diff line Loading @@ -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); Loading Loading @@ -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(); Loading storage/ndb/test/ndbapi/testTimeout.cpp +49 −1 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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); Loading @@ -503,7 +551,7 @@ TESTCASE("Error4012", ""){ STEPS(runError4012, 2); FINALIZER(runClearTable); } #endif NDBT_TESTSUITE_END(testTimeout); int main(int argc, const char** argv){ Loading Loading
storage/ndb/src/kernel/blocks/dbtc/DbtcMain.cpp +23 −0 Original line number Diff line number Diff line Loading @@ -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); Loading Loading @@ -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(); Loading
storage/ndb/test/ndbapi/testTimeout.cpp +49 −1 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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); Loading @@ -503,7 +551,7 @@ TESTCASE("Error4012", ""){ STEPS(runError4012, 2); FINALIZER(runClearTable); } #endif NDBT_TESTSUITE_END(testTimeout); int main(int argc, const char** argv){ Loading