mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
testTransaction -n FRead*
testTransaction -n *Scan* testTimeout -n * ndb/include/kernel/signaldata/DumpStateOrd.hpp: Added DUMP for tc appl timeout ndb/src/kernel/blocks/dbtc/DbtcMain.cpp: Send tckey conf if m_exec_flags is set Added dump for appl timeout ndb/test/include/HugoOperations.hpp: Add scanRead ndb/test/ndbapi/testTimeout.cpp: Reenable ndb/test/ndbapi/testTransactions.cpp: Fix scan test cases ndb/test/run-test/daily-basic-tests.txt: reenable timeout-tests added testTransaction -n Scan* testcases ndb/test/src/HugoOperations.cpp: Fix scan ndb/test/src/NDBT_Test.cpp: Drop table before test...(if createTable==true)
This commit is contained in:
@ -94,6 +94,7 @@ public:
|
||||
TcDumpOneApiConnectRec = 2505,
|
||||
TcDumpAllApiConnectRec = 2506,
|
||||
TcSetTransactionTimeout = 2507,
|
||||
TcSetApplTransactionTimeout = 2508,
|
||||
CmvmiDumpConnections = 2600,
|
||||
CmvmiDumpLongSignalMemory = 2601,
|
||||
CmvmiSetRestartOnErrorInsert = 2602,
|
||||
|
@ -5043,11 +5043,11 @@ void Dbtc::execLQHKEYREF(Signal* signal)
|
||||
jam();
|
||||
diverify010Lab(signal);
|
||||
return;
|
||||
} else if (regApiPtr->tckeyrec > 0) {
|
||||
} else if (regApiPtr->tckeyrec > 0 || regApiPtr->m_exec_flag) {
|
||||
jam();
|
||||
sendtckeyconf(signal, 2);
|
||||
return;
|
||||
}//if
|
||||
}
|
||||
}//if
|
||||
return;
|
||||
|
||||
@ -10533,6 +10533,13 @@ Dbtc::execDUMP_STATE_ORD(Signal* signal)
|
||||
set_timeout_value(signal->theData[1]);
|
||||
}
|
||||
}
|
||||
|
||||
if (dumpState->args[0] == DumpStateOrd::TcSetApplTransactionTimeout){
|
||||
jam();
|
||||
if(signal->getLength() > 1){
|
||||
set_appl_timeout_value(signal->theData[1]);
|
||||
}
|
||||
}
|
||||
}//Dbtc::execDUMP_STATE_ORD()
|
||||
|
||||
void Dbtc::execSET_VAR_REQ(Signal* signal)
|
||||
|
@ -58,9 +58,6 @@ public:
|
||||
int recordNo,
|
||||
int numRecords = 1);
|
||||
|
||||
NdbResultSet* scanReadRecords(Ndb* pNdb, ScanLock lock = SL_Read);
|
||||
int readTuples(NdbResultSet*);
|
||||
|
||||
int execute_Commit(Ndb*,
|
||||
AbortOption ao = AbortOnError);
|
||||
int execute_NoCommit(Ndb*,
|
||||
@ -93,6 +90,10 @@ public:
|
||||
int numRecords = 1,
|
||||
int updatesValue = 0);
|
||||
|
||||
int scanReadRecords(Ndb*, NdbScanOperation::LockMode =
|
||||
NdbScanOperation::LM_CommittedRead,
|
||||
int numRecords = 1);
|
||||
|
||||
protected:
|
||||
void allocRows(int rows);
|
||||
void deallocRows();
|
||||
@ -101,6 +102,10 @@ protected:
|
||||
HugoCalculator calc;
|
||||
|
||||
Vector<BaseString> savedRecords;
|
||||
|
||||
struct RsPair { NdbResultSet* m_result_set; int records; };
|
||||
Vector<RsPair> m_result_sets;
|
||||
Vector<RsPair> m_executed_result_sets;
|
||||
private:
|
||||
NdbConnection* pTrans;
|
||||
};
|
||||
|
@ -20,6 +20,44 @@
|
||||
#include <UtilTransactions.hpp>
|
||||
#include <random.h>
|
||||
#include <NdbConfig.hpp>
|
||||
#include <signaldata/DumpStateOrd.hpp>
|
||||
|
||||
#define TIMEOUT 3000
|
||||
|
||||
Uint32 g_org_timeout = 3000;
|
||||
|
||||
int
|
||||
setTransactionTimeout(NDBT_Context* ctx, NDBT_Step* step){
|
||||
NdbRestarter restarter;
|
||||
|
||||
NdbConfig conf(GETNDB(step)->getNodeId()+1);
|
||||
unsigned int nodeId = conf.getMasterNodeId();
|
||||
if (!conf.getProperty(nodeId,
|
||||
NODE_TYPE_DB,
|
||||
CFG_DB_TRANSACTION_INACTIVE_TIMEOUT,
|
||||
&g_org_timeout)){
|
||||
return NDBT_FAILED;
|
||||
}
|
||||
|
||||
int val[] = { DumpStateOrd::TcSetApplTransactionTimeout, TIMEOUT };
|
||||
if(restarter.dumpStateAllNodes(val, 2) != 0){
|
||||
return NDBT_FAILED;
|
||||
}
|
||||
|
||||
return NDBT_OK;
|
||||
}
|
||||
|
||||
int
|
||||
resetTransactionTimeout(NDBT_Context* ctx, NDBT_Step* step){
|
||||
NdbRestarter restarter;
|
||||
|
||||
int val[] = { DumpStateOrd::TcSetApplTransactionTimeout, g_org_timeout };
|
||||
if(restarter.dumpStateAllNodes(val, 2) != 0){
|
||||
return NDBT_FAILED;
|
||||
}
|
||||
|
||||
return NDBT_OK;
|
||||
}
|
||||
|
||||
|
||||
int runLoadTable(NDBT_Context* ctx, NDBT_Step* step){
|
||||
@ -55,16 +93,10 @@ int runTimeoutTrans(NDBT_Context* ctx, NDBT_Step* step){
|
||||
NdbConfig conf(GETNDB(step)->getNodeId()+1);
|
||||
unsigned int nodeId = conf.getMasterNodeId();
|
||||
int stepNo = step->getStepNo();
|
||||
Uint32 timeoutVal;
|
||||
if (!conf.getProperty(nodeId,
|
||||
NODE_TYPE_DB,
|
||||
CFG_DB_TRANSACTION_INACTIVE_TIMEOUT,
|
||||
&timeoutVal)){
|
||||
return NDBT_FAILED;
|
||||
}
|
||||
int minSleep = (int)(timeoutVal * 1.5);
|
||||
int maxSleep = timeoutVal * 2;
|
||||
ndbout << "TransactionInactiveTimeout="<<timeoutVal
|
||||
|
||||
int minSleep = (int)(TIMEOUT * 1.5);
|
||||
int maxSleep = TIMEOUT * 2;
|
||||
ndbout << "TransactionInactiveTimeout="<< TIMEOUT
|
||||
<< ", minSleep="<<minSleep
|
||||
<< ", maxSleep="<<maxSleep<<endl;
|
||||
|
||||
@ -89,7 +121,6 @@ int runTimeoutTrans(NDBT_Context* ctx, NDBT_Step* step){
|
||||
} while(false);
|
||||
|
||||
hugoOps.closeTransaction(pNdb);
|
||||
|
||||
}
|
||||
|
||||
return result;
|
||||
@ -98,28 +129,18 @@ int runTimeoutTrans(NDBT_Context* ctx, NDBT_Step* step){
|
||||
int runTimeoutTrans2(NDBT_Context* ctx, NDBT_Step* step){
|
||||
int result = NDBT_OK;
|
||||
int loops = ctx->getNumLoops();
|
||||
NdbConfig conf(GETNDB(step)->getNodeId()+1);
|
||||
unsigned int nodeId = conf.getMasterNodeId();
|
||||
int stepNo = step->getStepNo();
|
||||
int mul1 = ctx->getProperty("Op1", (Uint32)0);
|
||||
int mul2 = ctx->getProperty("Op2", (Uint32)0);
|
||||
int records = ctx->getNumRecords();
|
||||
|
||||
Uint32 timeoutVal;
|
||||
if (!conf.getProperty(nodeId,
|
||||
NODE_TYPE_DB,
|
||||
CFG_DB_TRANSACTION_INACTIVE_TIMEOUT,
|
||||
&timeoutVal)){
|
||||
return NDBT_FAILED;
|
||||
}
|
||||
|
||||
int minSleep = (int)(timeoutVal * 1.5);
|
||||
int maxSleep = timeoutVal * 2;
|
||||
int minSleep = (int)(TIMEOUT * 1.5);
|
||||
int maxSleep = TIMEOUT * 2;
|
||||
|
||||
HugoOperations hugoOps(*ctx->getTab());
|
||||
Ndb* pNdb = GETNDB(step);
|
||||
|
||||
for (int l = 0; l < loops && !ctx->isTestStopped(); l++){
|
||||
for (int l = 0; l<loops && !ctx->isTestStopped() && result == NDBT_OK; l++){
|
||||
|
||||
int op1 = 0 + (l + stepNo) * mul1;
|
||||
int op2 = 0 + (l + stepNo) * mul2;
|
||||
@ -127,7 +148,7 @@ int runTimeoutTrans2(NDBT_Context* ctx, NDBT_Step* step){
|
||||
op1 = (op1 % 5);
|
||||
op2 = (op2 % 5);
|
||||
|
||||
ndbout << stepNo << ": TransactionInactiveTimeout="<<timeoutVal
|
||||
ndbout << stepNo << ": TransactionInactiveTimeout="<< TIMEOUT
|
||||
<< ", minSleep="<<minSleep
|
||||
<< ", maxSleep="<<maxSleep
|
||||
<< ", op1=" << op1
|
||||
@ -143,32 +164,36 @@ int runTimeoutTrans2(NDBT_Context* ctx, NDBT_Step* step){
|
||||
case 1:
|
||||
if(hugoOps.pkReadRecord(pNdb, stepNo, true) != 0){
|
||||
g_err << stepNo << ": Fail" << __LINE__ << endl;
|
||||
return NDBT_FAILED;
|
||||
result = NDBT_FAILED; break;
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
if(hugoOps.pkUpdateRecord(pNdb, stepNo, true) != 0){
|
||||
g_err << stepNo << ": Fail" << __LINE__ << endl;
|
||||
return NDBT_FAILED;
|
||||
result = NDBT_FAILED; break;
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
if(hugoOps.pkDeleteRecord(pNdb, stepNo, true) != 0){
|
||||
g_err << stepNo << ": Fail" << __LINE__ << endl;
|
||||
return NDBT_FAILED;
|
||||
result = NDBT_FAILED; break;
|
||||
}
|
||||
break;
|
||||
case 4:
|
||||
if(hugoOps.pkInsertRecord(pNdb, stepNo+records+l, true) != 0){
|
||||
g_err << stepNo << ": Fail" << __LINE__ << endl;
|
||||
return NDBT_FAILED;
|
||||
result = NDBT_FAILED; break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
if(result != NDBT_OK)
|
||||
break;
|
||||
|
||||
int res = hugoOps.execute_NoCommit(pNdb);
|
||||
if(res != 0){
|
||||
g_err << stepNo << ": Fail" << __LINE__ << endl;
|
||||
return NDBT_FAILED;
|
||||
result = NDBT_FAILED; break;
|
||||
}
|
||||
|
||||
int sleep = minSleep + myRandom48(maxSleep-minSleep);
|
||||
@ -181,25 +206,25 @@ int runTimeoutTrans2(NDBT_Context* ctx, NDBT_Step* step){
|
||||
case 1:
|
||||
if(hugoOps.pkReadRecord(pNdb, stepNo, true) != 0){
|
||||
g_err << stepNo << ": Fail" << __LINE__ << endl;
|
||||
return NDBT_FAILED;
|
||||
result = NDBT_FAILED; break;
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
if(hugoOps.pkUpdateRecord(pNdb, stepNo, true) != 0){
|
||||
g_err << stepNo << ": Fail" << __LINE__ << endl;
|
||||
return NDBT_FAILED;
|
||||
result = NDBT_FAILED; break;
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
if(hugoOps.pkDeleteRecord(pNdb, stepNo, true) != 0){
|
||||
g_err << stepNo << ": Fail" << __LINE__ << endl;
|
||||
return NDBT_FAILED;
|
||||
result = NDBT_FAILED; break;
|
||||
}
|
||||
break;
|
||||
case 4:
|
||||
if(hugoOps.pkInsertRecord(pNdb, stepNo+2*records+l, true) != 0){
|
||||
g_err << stepNo << ": Fail" << __LINE__ << endl;
|
||||
return NDBT_FAILED;
|
||||
result = NDBT_FAILED; break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
@ -209,7 +234,7 @@ int runTimeoutTrans2(NDBT_Context* ctx, NDBT_Step* step){
|
||||
if(op1 != 0 && res != 266){
|
||||
g_err << stepNo << ": Fail: " << res << "!= 237, op1="
|
||||
<< op1 << ", op2=" << op2 << endl;
|
||||
return NDBT_FAILED;
|
||||
result = NDBT_FAILED; break;
|
||||
}
|
||||
|
||||
} while(false);
|
||||
@ -223,18 +248,10 @@ int runTimeoutTrans2(NDBT_Context* ctx, NDBT_Step* step){
|
||||
int runDontTimeoutTrans(NDBT_Context* ctx, NDBT_Step* step){
|
||||
int result = NDBT_OK;
|
||||
int loops = ctx->getNumLoops();
|
||||
NdbConfig conf(GETNDB(step)->getNodeId()+1);
|
||||
unsigned int nodeId = conf.getMasterNodeId();
|
||||
int stepNo = step->getStepNo();
|
||||
Uint32 timeoutVal;
|
||||
if (!conf.getProperty(nodeId,
|
||||
NODE_TYPE_DB,
|
||||
CFG_DB_TRANSACTION_INACTIVE_TIMEOUT,
|
||||
&timeoutVal)){
|
||||
return NDBT_FAILED;
|
||||
}
|
||||
int maxSleep = (int)(timeoutVal * 0.5);
|
||||
ndbout << "TransactionInactiveTimeout="<<timeoutVal
|
||||
|
||||
int maxSleep = (int)(TIMEOUT * 0.5);
|
||||
ndbout << "TransactionInactiveTimeout="<< TIMEOUT
|
||||
<< ", maxSleep="<<maxSleep<<endl;
|
||||
|
||||
|
||||
@ -259,11 +276,8 @@ int runDontTimeoutTrans(NDBT_Context* ctx, NDBT_Step* step){
|
||||
} while(false);
|
||||
|
||||
hugoOps.closeTransaction(pNdb);
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
@ -271,18 +285,9 @@ int runBuddyTransNoTimeout(NDBT_Context* ctx, NDBT_Step* step){
|
||||
int result = NDBT_OK;
|
||||
int loops = ctx->getNumLoops();
|
||||
int records = ctx->getNumRecords();
|
||||
NdbConfig conf(GETNDB(step)->getNodeId()+1);
|
||||
unsigned int nodeId = conf.getMasterNodeId();
|
||||
int stepNo = step->getStepNo();
|
||||
Uint32 timeoutVal;
|
||||
if (!conf.getProperty(nodeId,
|
||||
NODE_TYPE_DB,
|
||||
CFG_DB_TRANSACTION_INACTIVE_TIMEOUT,
|
||||
&timeoutVal)){
|
||||
return NDBT_FAILED;
|
||||
}
|
||||
int maxSleep = (int)(timeoutVal * 0.3);
|
||||
ndbout << "TransactionInactiveTimeout="<<timeoutVal
|
||||
int maxSleep = (int)(TIMEOUT * 0.3);
|
||||
ndbout << "TransactionInactiveTimeout="<< TIMEOUT
|
||||
<< ", maxSleep="<<maxSleep<<endl;
|
||||
|
||||
HugoOperations hugoOps(*ctx->getTab());
|
||||
@ -297,12 +302,10 @@ int runBuddyTransNoTimeout(NDBT_Context* ctx, NDBT_Step* step){
|
||||
CHECK(hugoOps.pkInsertRecord(pNdb, recordNo, true) == 0);
|
||||
CHECK(hugoOps.execute_NoCommit(pNdb) == 0);
|
||||
|
||||
for (int i = 0; i < 10; i++){
|
||||
for (int i = 0; i < 3; i++){
|
||||
// Perform buddy scan reads
|
||||
NdbResultSet* rs = 0;
|
||||
CHECK((rs = hugoOps.scanReadRecords(pNdb)) != 0);
|
||||
CHECK((hugoOps.scanReadRecords(pNdb)) == 0);
|
||||
CHECK(hugoOps.execute_NoCommit(pNdb) == 0);
|
||||
CHECK(hugoOps.readTuples(rs) == 0);
|
||||
|
||||
int sleep = myRandom48(maxSleep);
|
||||
ndbout << "Sleeping for " << sleep << " milliseconds" << endl;
|
||||
@ -315,11 +318,8 @@ int runBuddyTransNoTimeout(NDBT_Context* ctx, NDBT_Step* step){
|
||||
} while(false);
|
||||
|
||||
hugoOps.closeTransaction(pNdb);
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
@ -329,7 +329,9 @@ TESTCASE("DontTimeoutTransaction",
|
||||
"if we sleep during the transaction. Use a sleep "\
|
||||
"value which is smaller than TransactionInactiveTimeout"){
|
||||
INITIALIZER(runLoadTable);
|
||||
INITIALIZER(setTransactionTimeout);
|
||||
STEPS(runDontTimeoutTrans, 1);
|
||||
FINALIZER(resetTransactionTimeout);
|
||||
FINALIZER(runClearTable);
|
||||
}
|
||||
TESTCASE("DontTimeoutTransaction5",
|
||||
@ -338,7 +340,9 @@ TESTCASE("DontTimeoutTransaction5",
|
||||
"value which is smaller than TransactionInactiveTimeout" \
|
||||
"Five simultaneous threads"){
|
||||
INITIALIZER(runLoadTable);
|
||||
INITIALIZER(setTransactionTimeout);
|
||||
STEPS(runDontTimeoutTrans, 5);
|
||||
FINALIZER(resetTransactionTimeout);
|
||||
FINALIZER(runClearTable);
|
||||
}
|
||||
TESTCASE("TimeoutTransaction",
|
||||
@ -346,7 +350,9 @@ TESTCASE("TimeoutTransaction",
|
||||
"if we sleep during the transaction. Use a sleep "\
|
||||
"value which is larger than TransactionInactiveTimeout"){
|
||||
INITIALIZER(runLoadTable);
|
||||
INITIALIZER(setTransactionTimeout);
|
||||
STEPS(runTimeoutTrans, 1);
|
||||
FINALIZER(resetTransactionTimeout);
|
||||
FINALIZER(runClearTable);
|
||||
}
|
||||
TESTCASE("TimeoutTransaction5",
|
||||
@ -355,7 +361,9 @@ TESTCASE("TimeoutTransaction5",
|
||||
"value which is larger than TransactionInactiveTimeout" \
|
||||
"Five simultaneous threads"){
|
||||
INITIALIZER(runLoadTable);
|
||||
INITIALIZER(setTransactionTimeout);
|
||||
STEPS(runTimeoutTrans, 5);
|
||||
FINALIZER(resetTransactionTimeout);
|
||||
FINALIZER(runClearTable);
|
||||
}
|
||||
TESTCASE("TimeoutRandTransaction",
|
||||
@ -363,9 +371,11 @@ TESTCASE("TimeoutRandTransaction",
|
||||
"if we sleep during the transaction. Use a sleep "\
|
||||
"value which is larger than TransactionInactiveTimeout"){
|
||||
INITIALIZER(runLoadTable);
|
||||
INITIALIZER(setTransactionTimeout);
|
||||
TC_PROPERTY("Op1", 7);
|
||||
TC_PROPERTY("Op2", 11);
|
||||
STEPS(runTimeoutTrans2, 5);
|
||||
FINALIZER(resetTransactionTimeout);
|
||||
FINALIZER(runClearTable);
|
||||
}
|
||||
TESTCASE("BuddyTransNoTimeout",
|
||||
@ -375,7 +385,9 @@ TESTCASE("BuddyTransNoTimeout",
|
||||
"The total sleep time is longer than TransactionInactiveTimeout" \
|
||||
"Commit the first transaction, it should not have timed out."){
|
||||
INITIALIZER(runLoadTable);
|
||||
INITIALIZER(setTransactionTimeout);
|
||||
STEPS(runBuddyTransNoTimeout, 1);
|
||||
FINALIZER(resetTransactionTimeout);
|
||||
FINALIZER(runClearTable);
|
||||
}
|
||||
TESTCASE("BuddyTransNoTimeout5",
|
||||
@ -386,7 +398,9 @@ TESTCASE("BuddyTransNoTimeout5",
|
||||
"Commit the first transaction, it should not have timed out." \
|
||||
"Five simultaneous threads"){
|
||||
INITIALIZER(runLoadTable);
|
||||
INITIALIZER(setTransactionTimeout);
|
||||
STEPS(runBuddyTransNoTimeout, 5);
|
||||
FINALIZER(resetTransactionTimeout);
|
||||
FINALIZER(runClearTable);
|
||||
}
|
||||
NDBT_TESTSUITE_END(testTimeout);
|
||||
|
@ -102,7 +102,7 @@ OperationTestCase matrix[] = {
|
||||
{ "ScanExInsert", true, "SCAN-EX",1, "INSERT", 266, X, 0, 1 },
|
||||
{ "ScanExUpdate", true, "SCAN-EX",1, "UPDATE", 266, 2, 0, 1 },
|
||||
{ "ScanExDelete", true, "SCAN-EX",1, "DELETE", 266, X, 0, 1 },
|
||||
{ "ScanExScan", true, "SCAN-EX",1, "SCAN", 274, X, 0, 1 },
|
||||
{ "ScanExScan", true, "SCAN-EX",1, "SCAN", 0, 1, 0, 1 },
|
||||
{ "ScanExScanHl", true, "SCAN-EX",1, "SCAN-HL", 274, X, 0, 1 },
|
||||
{ "ScanExScanEx", true, "SCAN-EX",1, "SCAN-EX", 274, X, 0, 1 },
|
||||
#if 0
|
||||
@ -117,8 +117,8 @@ OperationTestCase matrix[] = {
|
||||
{ "ReadExInsert", true, "READ-EX",1, "INSERT", 266, X, 0, 1 },
|
||||
{ "ReadExUpdate", true, "READ-EX",1, "UPDATE", 266, X, 0, 1 },
|
||||
{ "ReadExDelete", true, "READ-EX",1, "DELETE", 266, X, 0, 1 },
|
||||
{ "ReadExScan", true, "READ-EX",1, "SCAN", 274, 1, 0, 1 },
|
||||
{ "ReadExScanHl", true, "READ-EX",1, "SCAN-HL", 274, 1, 0, 1 },
|
||||
{ "ReadExScan", true, "READ-EX",1, "SCAN", 0, 1, 0, 1 },
|
||||
{ "ReadExScanHl", true, "READ-EX",1, "SCAN-HL", 274, X, 0, 1 },
|
||||
{ "ReadExScanEx", true, "READ-EX",1, "SCAN-EX", 274, X, 0, 1 },
|
||||
#if 0
|
||||
{ "ReadExScanUp", true, "READ-EX",1, "SCAN-UP", 266, X, 0, 1 },
|
||||
@ -132,7 +132,7 @@ OperationTestCase matrix[] = {
|
||||
{ "InsertInsert", false, "INSERT", 1, "INSERT", 266, X, 0, 1 },
|
||||
{ "InsertUpdate", false, "INSERT", 1, "UPDATE", 266, X, 0, 1 },
|
||||
{ "InsertDelete", false, "INSERT", 1, "DELETE", 266, X, 0, 1 },
|
||||
{ "InsertScan", false, "INSERT", 1, "SCAN", 274, X, 0, 1 },
|
||||
{ "InsertScan", false, "INSERT", 1, "SCAN", 626, X, 0, 1 },
|
||||
{ "InsertScanHl", false, "INSERT", 1, "SCAN-HL", 274, X, 0, 1 },
|
||||
{ "InsertScanEx", false, "INSERT", 1, "SCAN-EX", 274, X, 0, 1 },
|
||||
#if 0
|
||||
@ -147,7 +147,7 @@ OperationTestCase matrix[] = {
|
||||
{ "UpdateInsert", true, "UPDATE", 2, "INSERT", 266, X, 0, 2 },
|
||||
{ "UpdateUpdate", true, "UPDATE", 2, "UPDATE", 266, X, 0, 2 },
|
||||
{ "UpdateDelete", true, "UPDATE", 2, "DELETE", 266, X, 0, 2 },
|
||||
{ "UpdateScan", true, "UPDATE", 2, "SCAN", 274, X, 0, 2 },
|
||||
{ "UpdateScan", true, "UPDATE", 2, "SCAN", 0, 1, 0, 2 },
|
||||
{ "UpdateScanHl", true, "UPDATE", 2, "SCAN-HL", 274, X, 0, 2 },
|
||||
{ "UpdateScanEx", true, "UPDATE", 2, "SCAN-EX", 274, X, 0, 2 },
|
||||
#if 0
|
||||
@ -162,7 +162,7 @@ OperationTestCase matrix[] = {
|
||||
{ "DeleteInsert", true, "DELETE", X, "INSERT", 266, X, 626, X },
|
||||
{ "DeleteUpdate", true, "DELETE", X, "UPDATE", 266, X, 626, X },
|
||||
{ "DeleteDelete", true, "DELETE", X, "DELETE", 266, X, 626, X },
|
||||
{ "DeleteScan", true, "DELETE", X, "SCAN", 274, X, 626, X },
|
||||
{ "DeleteScan", true, "DELETE", X, "SCAN", 0, 1, 626, X },
|
||||
{ "DeleteScanHl", true, "DELETE", X, "SCAN-HL", 274, X, 626, X },
|
||||
{ "DeleteScanEx", true, "DELETE", X, "SCAN-EX", 274, X, 626, X },
|
||||
#if 0
|
||||
@ -204,14 +204,11 @@ runOp(HugoOperations & hugoOps,
|
||||
} else if(strcmp(op, "DELETE") == 0){
|
||||
C2(hugoOps.pkDeleteRecord(pNdb, 1, 1) == 0);
|
||||
} else if(strcmp(op, "SCAN") == 0){
|
||||
abort();
|
||||
//C2(hugoOps.scanReadRecords(pNdb) == 0);
|
||||
C2(hugoOps.scanReadRecords(pNdb) == 0);
|
||||
} else if(strcmp(op, "SCAN-HL") == 0){
|
||||
abort();
|
||||
//C2(hugoOps.scanReadRecords(pNdb, 240, HugoOperations::SL_ReadHold)== 0);
|
||||
C2(hugoOps.scanReadRecords(pNdb, NdbScanOperation::LM_Read)== 0);
|
||||
} else if(strcmp(op, "SCAN-EX") == 0){
|
||||
abort();
|
||||
//C2(hugoOps.scanReadRecords(pNdb, 240, HugoOperations::SL_Exclusive)== 0);
|
||||
C2(hugoOps.scanReadRecords(pNdb, NdbScanOperation::LM_Exclusive)== 0);
|
||||
} else {
|
||||
g_err << __FILE__ << " - " << __LINE__
|
||||
<< ": Unknown operation" << op << endl;
|
||||
|
@ -139,10 +139,6 @@ max-time: 500
|
||||
cmd: testBasicAsynch
|
||||
args: -n PkDeleteAsynch
|
||||
|
||||
max-time:
|
||||
cmd: ndb_drop_table
|
||||
args: T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14
|
||||
|
||||
max-time: 500
|
||||
cmd: testBasic
|
||||
args: -n MassiveRollback T1 T6 T13
|
||||
@ -152,34 +148,34 @@ cmd: testBasic
|
||||
args: -n MassiveRollback2 T1 T6 T13
|
||||
|
||||
#-m 500 1: testBasic -n ReadConsistency T6
|
||||
#max-time: 500
|
||||
#cmd: testTimeout
|
||||
#args: -n DontTimeoutTransaction T1
|
||||
#
|
||||
#max-time: 500
|
||||
#cmd: testTimeout
|
||||
#args: -n DontTimeoutTransaction5 T1
|
||||
#
|
||||
#max-time: 500
|
||||
#cmd: testTimeout
|
||||
#args: -n TimeoutTransaction T1
|
||||
#
|
||||
#max-time: 500
|
||||
#cmd: testTimeout
|
||||
#args: -n TimeoutTransaction5 T1
|
||||
#
|
||||
#max-time: 500
|
||||
#cmd: testTimeout
|
||||
#args: -n BuddyTransNoTimeout T1
|
||||
#
|
||||
#max-time: 500
|
||||
#cmd: testTimeout
|
||||
#args: -n BuddyTransNoTimeout5 T1
|
||||
#
|
||||
#max-time: 500
|
||||
#cmd: testTimeout
|
||||
#args: -n TimeoutRandTransaction T1
|
||||
#
|
||||
max-time: 500
|
||||
cmd: testTimeout
|
||||
args: -n DontTimeoutTransaction T1
|
||||
|
||||
max-time: 500
|
||||
cmd: testTimeout
|
||||
args: -n DontTimeoutTransaction5 T1
|
||||
|
||||
max-time: 500
|
||||
cmd: testTimeout
|
||||
args: -n TimeoutTransaction T1
|
||||
|
||||
max-time: 500
|
||||
cmd: testTimeout
|
||||
args: -n TimeoutTransaction5 T1
|
||||
|
||||
max-time: 500
|
||||
cmd: testTimeout
|
||||
args: -n BuddyTransNoTimeout T1
|
||||
|
||||
max-time: 500
|
||||
cmd: testTimeout
|
||||
args: -n BuddyTransNoTimeout5 T1
|
||||
|
||||
max-time: 500
|
||||
cmd: testTimeout
|
||||
args: -n TimeoutRandTransaction T1
|
||||
|
||||
# SCAN TESTS
|
||||
#
|
||||
max-time: 500
|
||||
@ -786,6 +782,186 @@ max-time: 1500
|
||||
cmd: testTransactions
|
||||
args: -n DeleteDirtyRead
|
||||
|
||||
max-time: 1500
|
||||
cmd: testTransactions
|
||||
args: -n ReadScan
|
||||
|
||||
max-time: 1500
|
||||
cmd: testTransactions
|
||||
args: -n ReadScanHl
|
||||
|
||||
max-time: 1500
|
||||
cmd: testTransactions
|
||||
args: -n ReadScanEx
|
||||
|
||||
max-time: 1500
|
||||
cmd: testTransactions
|
||||
args: -n ScanRead
|
||||
|
||||
max-time: 1500
|
||||
cmd: testTransactions
|
||||
args: -n ScanReadEx
|
||||
|
||||
max-time: 1500
|
||||
cmd: testTransactions
|
||||
args: -n ScanSimpleRead
|
||||
|
||||
max-time: 1500
|
||||
cmd: testTransactions
|
||||
args: -n ScanDirtyRead
|
||||
|
||||
max-time: 1500
|
||||
cmd: testTransactions
|
||||
args: -n ScanInsert
|
||||
|
||||
max-time: 1500
|
||||
cmd: testTransactions
|
||||
args: -n ScanUpdate
|
||||
|
||||
max-time: 1500
|
||||
cmd: testTransactions
|
||||
args: -n ScanDelete
|
||||
|
||||
max-time: 1500
|
||||
cmd: testTransactions
|
||||
args: -n ScanScan
|
||||
|
||||
max-time: 1500
|
||||
cmd: testTransactions
|
||||
args: -n ScanScanHl
|
||||
|
||||
max-time: 1500
|
||||
cmd: testTransactions
|
||||
args: -n ScanScanEx
|
||||
|
||||
max-time: 1500
|
||||
cmd: testTransactions
|
||||
args: -n ScanHlRead
|
||||
|
||||
max-time: 1500
|
||||
cmd: testTransactions
|
||||
args: -n ScanHlReadEx
|
||||
|
||||
max-time: 1500
|
||||
cmd: testTransactions
|
||||
args: -n ScanHlSimpleRead
|
||||
|
||||
max-time: 1500
|
||||
cmd: testTransactions
|
||||
args: -n ScanHlDirtyRead
|
||||
|
||||
max-time: 1500
|
||||
cmd: testTransactions
|
||||
args: -n ScanHlInsert
|
||||
|
||||
max-time: 1500
|
||||
cmd: testTransactions
|
||||
args: -n ScanHlUpdate
|
||||
|
||||
max-time: 1500
|
||||
cmd: testTransactions
|
||||
args: -n ScanHlDelete
|
||||
|
||||
max-time: 1500
|
||||
cmd: testTransactions
|
||||
args: -n ScanHlScan
|
||||
|
||||
max-time: 1500
|
||||
cmd: testTransactions
|
||||
args: -n ScanHlScanHl
|
||||
|
||||
max-time: 1500
|
||||
cmd: testTransactions
|
||||
args: -n ScanHlScanEx
|
||||
|
||||
max-time: 1500
|
||||
cmd: testTransactions
|
||||
args: -n ScanExRead
|
||||
|
||||
max-time: 1500
|
||||
cmd: testTransactions
|
||||
args: -n ScanExReadEx
|
||||
|
||||
max-time: 1500
|
||||
cmd: testTransactions
|
||||
args: -n ScanExSimpleRead
|
||||
|
||||
max-time: 1500
|
||||
cmd: testTransactions
|
||||
args: -n ScanExDirtyRead
|
||||
|
||||
max-time: 1500
|
||||
cmd: testTransactions
|
||||
args: -n ScanExInsert
|
||||
|
||||
max-time: 1500
|
||||
cmd: testTransactions
|
||||
args: -n ScanExUpdate
|
||||
|
||||
max-time: 1500
|
||||
cmd: testTransactions
|
||||
args: -n ScanExDelete
|
||||
|
||||
max-time: 1500
|
||||
cmd: testTransactions
|
||||
args: -n ScanExScan
|
||||
|
||||
max-time: 1500
|
||||
cmd: testTransactions
|
||||
args: -n ScanExScanHl
|
||||
|
||||
max-time: 1500
|
||||
cmd: testTransactions
|
||||
args: -n ScanExScanEx
|
||||
|
||||
max-time: 1500
|
||||
cmd: testTransactions
|
||||
args: -n ReadExScan
|
||||
|
||||
max-time: 1500
|
||||
cmd: testTransactions
|
||||
args: -n ReadExScanHl
|
||||
|
||||
max-time: 1500
|
||||
cmd: testTransactions
|
||||
args: -n ReadExScanEx
|
||||
|
||||
max-time: 1500
|
||||
cmd: testTransactions
|
||||
args: -n InsertScan
|
||||
|
||||
max-time: 1500
|
||||
cmd: testTransactions
|
||||
args: -n InsertScanHl
|
||||
|
||||
max-time: 1500
|
||||
cmd: testTransactions
|
||||
args: -n InsertScanEx
|
||||
|
||||
max-time: 1500
|
||||
cmd: testTransactions
|
||||
args: -n UpdateScan
|
||||
|
||||
max-time: 1500
|
||||
cmd: testTransactions
|
||||
args: -n UpdateScanHl
|
||||
|
||||
max-time: 1500
|
||||
cmd: testTransactions
|
||||
args: -n UpdateScanEx
|
||||
|
||||
max-time: 1500
|
||||
cmd: testTransactions
|
||||
args: -n DeleteScan
|
||||
|
||||
max-time: 1500
|
||||
cmd: testTransactions
|
||||
args: -n DeleteScanHl
|
||||
|
||||
max-time: 1500
|
||||
cmd: testTransactions
|
||||
args: -n DeleteScanEx
|
||||
|
||||
max-time: 1500
|
||||
cmd: testRestartGci
|
||||
args: T6
|
||||
|
@ -40,6 +40,9 @@ int HugoOperations::closeTransaction(Ndb* pNdb){
|
||||
}
|
||||
pTrans = NULL;
|
||||
|
||||
m_result_sets.clear();
|
||||
m_executed_result_sets.clear();
|
||||
|
||||
return NDBT_OK;
|
||||
}
|
||||
|
||||
@ -291,7 +294,7 @@ int HugoOperations::pkDeleteRecord(Ndb* pNdb,
|
||||
}
|
||||
return NDBT_OK;
|
||||
}
|
||||
|
||||
#if 0
|
||||
NdbResultSet*
|
||||
HugoOperations::scanReadRecords(Ndb* pNdb, ScanLock lock){
|
||||
|
||||
@ -349,6 +352,7 @@ HugoOperations::readTuples(NdbResultSet* rs){
|
||||
return NDBT_FAILED;
|
||||
return NDBT_OK;
|
||||
}
|
||||
#endif
|
||||
|
||||
int HugoOperations::execute_Commit(Ndb* pNdb,
|
||||
AbortOption eao){
|
||||
@ -368,6 +372,35 @@ int HugoOperations::execute_Commit(Ndb* pNdb,
|
||||
return NDBT_FAILED;
|
||||
return err.code;
|
||||
}
|
||||
|
||||
for(int i = 0; i<m_result_sets.size(); i++){
|
||||
m_executed_result_sets.push_back(m_result_sets[i]);
|
||||
|
||||
int rows = m_result_sets[i].records;
|
||||
NdbResultSet* rs = m_result_sets[i].m_result_set;
|
||||
int res = rs->nextResult();
|
||||
switch(res){
|
||||
case 1:
|
||||
return 626;
|
||||
case -1:
|
||||
const NdbError err = pTrans->getNdbError();
|
||||
ERR(err);
|
||||
return (err.code > 0 ? err.code : NDBT_FAILED);
|
||||
}
|
||||
|
||||
// A row found
|
||||
|
||||
switch(rows){
|
||||
case 0:
|
||||
return 4000;
|
||||
default:
|
||||
m_result_sets[i].records--;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
m_result_sets.clear();
|
||||
|
||||
return NDBT_OK;
|
||||
}
|
||||
|
||||
@ -388,6 +421,35 @@ int HugoOperations::execute_NoCommit(Ndb* pNdb, AbortOption eao){
|
||||
return NDBT_FAILED;
|
||||
return err.code;
|
||||
}
|
||||
|
||||
for(int i = 0; i<m_result_sets.size(); i++){
|
||||
m_executed_result_sets.push_back(m_result_sets[i]);
|
||||
|
||||
int rows = m_result_sets[i].records;
|
||||
NdbResultSet* rs = m_result_sets[i].m_result_set;
|
||||
int res = rs->nextResult();
|
||||
switch(res){
|
||||
case 1:
|
||||
return 626;
|
||||
case -1:
|
||||
const NdbError err = pTrans->getNdbError();
|
||||
ERR(err);
|
||||
return (err.code > 0 ? err.code : NDBT_FAILED);
|
||||
}
|
||||
|
||||
// A row found
|
||||
|
||||
switch(rows){
|
||||
case 0:
|
||||
return 4000;
|
||||
default:
|
||||
case 1:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
m_result_sets.clear();
|
||||
|
||||
return NDBT_OK;
|
||||
}
|
||||
|
||||
@ -704,3 +766,33 @@ HugoOperations::indexUpdateRecord(Ndb*,
|
||||
}
|
||||
return NDBT_OK;
|
||||
}
|
||||
|
||||
int
|
||||
HugoOperations::scanReadRecords(Ndb* pNdb, NdbScanOperation::LockMode lm,
|
||||
int records){
|
||||
|
||||
allocRows(records);
|
||||
NdbScanOperation * pOp = pTrans->getNdbScanOperation(tab.getName());
|
||||
|
||||
if(!pOp)
|
||||
return -1;
|
||||
|
||||
NdbResultSet * rs = pOp->readTuples(lm, 1, 1);
|
||||
|
||||
if(!rs){
|
||||
return -1;
|
||||
}
|
||||
|
||||
for(int a = 0; a<tab.getNoOfColumns(); a++){
|
||||
if((rows[0]->attributeStore(a) =
|
||||
pOp->getValue(tab.getColumn(a)->getName())) == 0) {
|
||||
ERR(pTrans->getNdbError());
|
||||
return NDBT_FAILED;
|
||||
}
|
||||
}
|
||||
|
||||
RsPair p = {rs, records};
|
||||
m_result_sets.push_back(p);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -820,15 +820,15 @@ void NDBT_TestSuite::execute(Ndb* ndb, const NdbDictionary::Table* pTab,
|
||||
const NdbDictionary::Table* pTab2 = pDict->getTable(pTab->getName());
|
||||
if (createTable == true){
|
||||
|
||||
if (pTab2 != 0 && !pTab->equal(* pTab2)){
|
||||
if(pTab2 != 0 && pDict->dropTable(pTab->getName()) != 0){
|
||||
numTestsFail++;
|
||||
numTestsExecuted++;
|
||||
g_err << "ERROR0: Failed to create table " << pTab->getName() << endl;
|
||||
g_err << "ERROR0: Failed to drop table " << pTab->getName() << endl;
|
||||
tests[t]->saveTestResult(pTab, FAILED_TO_CREATE);
|
||||
continue;
|
||||
}
|
||||
|
||||
if(pTab2 == 0 && pDict->createTable(* pTab) != 0){
|
||||
if(pDict->createTable(* pTab) != 0){
|
||||
numTestsFail++;
|
||||
numTestsExecuted++;
|
||||
g_err << "ERROR1: Failed to create table " << pTab->getName()
|
||||
|
Reference in New Issue
Block a user