📄 testscan.cpp
字号:
if(res != 1 || row != records){ ERR(pCon->getNdbError()); abort(); return NDBT_FAILED; } pCon->close(); } return NDBT_OK;}int runScanParallelism(NDBT_Context* ctx, NDBT_Step* step){ int loops = ctx->getNumLoops() + 3; int records = ctx->getNumRecords(); int abort = ctx->getProperty("AbortProb", 15); Uint32 fib[] = { 1, 2 }; Uint32 parallelism = 0; // start with 0 int i = 0; HugoTransactions hugoTrans(*ctx->getTab()); while (i<loops && !ctx->isTestStopped()) { g_info << i << ": "; if (hugoTrans.scanReadRecords(GETNDB(step), records, abort, parallelism, NdbOperation::LM_Read) != 0){ return NDBT_FAILED; } if (hugoTrans.scanReadRecords(GETNDB(step), records, abort, parallelism, NdbOperation::LM_Exclusive) != 0){ return NDBT_FAILED; } if (hugoTrans.scanReadRecords(GETNDB(step), records, abort, parallelism, NdbOperation::LM_CommittedRead) != 0){ return NDBT_FAILED; } if (hugoTrans.scanUpdateRecords(GETNDB(step), records, abort, parallelism) != 0){ return NDBT_FAILED; } i++; parallelism = fib[0]; Uint32 next = fib[0] + fib[1]; fib[0] = fib[1]; fib[1] = next; } return NDBT_OK;}NDBT_TESTSUITE(testScan);TESTCASE("ScanRead", "Verify scan requirement: It should be possible "\ "to read all records in a table without knowing their "\ "primary key."){ INITIALIZER(runLoadTable); TC_PROPERTY("Parallelism", 1); STEP(runScanRead); FINALIZER(runClearTable);}TESTCASE("ScanRead16", "Verify scan requirement: It should be possible to scan read "\ "with parallelism, test with parallelism 16"){ INITIALIZER(runLoadTable); TC_PROPERTY("Parallelism", 16); STEP(runScanRead); FINALIZER(runClearTable);}TESTCASE("ScanRead240", "Verify scan requirement: It should be possible to scan read with "\ "parallelism, test with parallelism 240(240 would automatically be "\ "downgraded to the maximum parallelism value for the current config)"){ INITIALIZER(runLoadTable); TC_PROPERTY("Parallelism", 240); STEP(runScanRead); FINALIZER(runClearTable);}TESTCASE("ScanReadCommitted240", "Verify scan requirement: It should be possible to scan read committed with "\ "parallelism, test with parallelism 240(240 would automatically be "\ "downgraded to the maximum parallelism value for the current config)"){ INITIALIZER(runLoadTable); TC_PROPERTY("Parallelism", 240); TC_PROPERTY("TupScan", (Uint32)0); STEP(runScanReadCommitted); FINALIZER(runClearTable);}TESTCASE("ScanTupReadCommitted240", "Verify scan requirement: It should be possible to scan read committed with "\ "parallelism, test with parallelism 240(240 would automatically be "\ "downgraded to the maximum parallelism value for the current config). "\ "Scans TUP pages directly without using ACC."){ INITIALIZER(runLoadTable); TC_PROPERTY("Parallelism", 240); TC_PROPERTY("TupScan", 1); STEP(runScanReadCommitted); FINALIZER(runClearTable);}TESTCASE("ScanUpdate", "Verify scan requirement: It should be possible "\ "to update all records in a table without knowing their"\ " primary key."){ INITIALIZER(runLoadTable); STEP(runScanUpdate); FINALIZER(runClearTable);}TESTCASE("ScanUpdate2", "Verify scan requirement: It should be possible "\ "to update all records in a table without knowing their"\ " primary key. Do this efficently by calling nextScanResult(false) "\ "in order to update the records already fetched to the api in one batch."){ INITIALIZER(runLoadTable); TC_PROPERTY("Parallelism", 240); STEP(runScanUpdate2); FINALIZER(runClearTable);}TESTCASE("ScanDelete", "Verify scan requirement: It should be possible "\ "to delete all records in a table without knowing their"\ " primary key."){ INITIALIZER(runLoadTable); STEP(runScanDelete); FINALIZER(runClearTable);}TESTCASE("ScanDelete2", "Verify scan requirement: It should be possible "\ "to delete all records in a table without knowing their"\ " primary key. Do this efficently by calling nextScanResult(false) "\ "in order to delete the records already fetched to the api in one batch."){ INITIALIZER(runLoadTable); TC_PROPERTY("Parallelism", 240); STEP(runScanDelete2); FINALIZER(runClearTable);}TESTCASE("ScanUpdateAndScanRead", "Verify scan requirement: It should be possible to run "\ "scan read and scan update at the same time"){ INITIALIZER(runLoadTable); TC_PROPERTY("Parallelism", 16); STEP(runScanRead); STEP(runScanUpdate); FINALIZER(runClearTable);}TESTCASE("ScanReadAndLocker", "Verify scan requirement: The locks are not kept throughout "\ "the entire scan operation. This means that a scan does not "\ "lock the entire table, only the records it's currently "\ "operating on. This will test how scan performs when there are "\ " a number of 1 second locks in the table"){ INITIALIZER(runLoadTable); STEP(runScanReadUntilStopped); STEP(runLocker); FINALIZER(runClearTable);}TESTCASE("ScanReadAndPkRead", "Verify scan requirement: The locks are not kept throughout "\ "the entire scan operation. This means that a scan does not "\ "lock the entire table, only the records it's currently "\ "operating on. This will test how scan performs when there are "\ " a pk reads "){ INITIALIZER(runLoadTable); STEPS(runScanRead, 2); STEPS(runPkRead, 2); FINALIZER(runClearTable);}TESTCASE("ScanRead488", "Verify scan requirement: It's only possible to have 11 concurrent "\ "scans per fragment running in Ndb kernel at the same time. "\ "When this limit is exceeded the scan will be aborted with errorcode "\ "488."){ INITIALIZER(runLoadTable); STEPS(runRandScanRead, 70); FINALIZER(runClearTable);}TESTCASE("ScanRead488O", "Verify scan requirement: It's only possible to have 11 concurrent "\ "scans per fragment running in Ndb kernel at the same time. "\ "When this limit is exceeded the scan will be aborted with errorcode "\ "488."){ INITIALIZER(createOrderedPkIndex); INITIALIZER(runLoadTable); STEPS(runScanReadIndex, 70); FINALIZER(createOrderedPkIndex_Drop); FINALIZER(runClearTable);}TESTCASE("ScanRead488_Mixed", "Verify scan requirement: It's only possible to have 11 concurrent "\ "scans per fragment running in Ndb kernel at the same time. "\ "When this limit is exceeded the scan will be aborted with errorcode "\ "488."){ INITIALIZER(createOrderedPkIndex); INITIALIZER(runLoadTable); STEPS(runRandScanRead, 50); STEPS(runScanReadIndex, 50); FINALIZER(createOrderedPkIndex_Drop); FINALIZER(runClearTable);}TESTCASE("ScanRead488Timeout", ""){ INITIALIZER(runLoadTable); TC_PROPERTY("ErrorCode", 5034); STEPS(runScanRead, 30); STEP(runScanReadError); FINALIZER(runClearTable);}TESTCASE("ScanRead40", "Verify scan requirement: Scan with 40 simultaneous threads"){ INITIALIZER(runLoadTable); STEPS(runScanRead, 40); FINALIZER(runClearTable);}TESTCASE("ScanRead100", "Verify scan requirement: Scan with 100 simultaneous threads"){ INITIALIZER(runLoadTable); STEPS(runScanRead, 100); FINALIZER(runClearTable);}TESTCASE("Scan-bug8262", ""){ TC_PROPERTY("Rows", 1); TC_PROPERTY("ErrorCode", 8035); INITIALIZER(runLoadTable); INITIALIZER(runInsertError); // Will reset error code STEPS(runScanRead, 25); FINALIZER(runInsertError); FINALIZER(runClearTable);}TESTCASE("ScanRead40RandomTable", "Verify scan requirement: Scan with 40 simultaneous threads. "\ "Use random table for the scan"){ INITIALIZER(runCreateAllTables); INITIALIZER(runLoadAllTables); STEPS(runScanReadRandomTable, 40); FINALIZER(runDropAllTablesExceptTestTable);}TESTCASE("ScanRead100RandomTable", "Verify scan requirement: Scan with 100 simultaneous threads. "\ "Use random table for the scan"){ INITIALIZER(runCreateAllTables); INITIALIZER(runLoadAllTables); STEPS(runScanReadRandomTable, 100); FINALIZER(runDropAllTablesExceptTestTable);}TESTCASE("ScanReadRandomPrepare", "Create and load tables for ScanRead40RandomNoTableCreate."){ INITIALIZER(runCreateAllTables); INITIALIZER(runLoadAllTables);}TESTCASE("ScanRead40RandomNoTableCreate", "Verify scan requirement: Scan with 40 simultaneous threads. "\ "Use random table for the scan. Dont create or load the tables."){ STEPS(runScanReadRandomTable, 40);}TESTCASE("ScanRead100RandomNoTableCreate", "Verify scan requirement: Scan with 100 simultaneous threads. "\ "Use random table for the scan. Dont create or load the tables."){ STEPS(runScanReadRandomTable, 100);}TESTCASE("ScanWithLocksAndInserts", "TR457: This test is added to verify that an insert of a records "\ "that is already in the database does not delete the record"){ INITIALIZER(runLoadTable); STEPS(runScanReadUntilStopped, 2); STEP(runLocker); STEP(runInsertUntilStopped); FINALIZER(runClearTable);}TESTCASE("ScanReadAbort", "Scan requirement: A scan may be aborted by the application "\ "at any time. This can be performed even if there are more "\ "tuples to scan."){ INITIALIZER(runLoadTable); TC_PROPERTY("AbortProb", 90); STEPS(runScanRead, 3); FINALIZER(runClearTable);}TESTCASE("ScanReadAbort15", "Scan requirement: A scan may be aborted by the application "\ "at any time. This can be performed even if there are more "\ "tuples to scan. Use parallelism 15"){ INITIALIZER(runLoadTable); TC_PROPERTY("Parallelism", 15); TC_PROPERTY("AbortProb", 90); STEPS(runScanRead, 3); FINALIZER(runClearTable);}TESTCASE("ScanReadAbort240", "Scan requirement: A scan may be aborted by the application "\ "at any time. This can be performed even if there are more "\ "tuples to scan. Use parallelism 240(it will be downgraded to max para for this config)"){ INITIALIZER(runLoadTable); TC_PROPERTY("Parallelism", 240); TC_PROPERTY("AbortProb", 90); STEPS(runScanRead, 3); FINALIZER(runClearTable);}TESTCASE("ScanUpdateAbort16", "Scan requirement: A scan may be aborted by the application "\ "at any time. This can be performed even if there are more "\ "tuples to scan. Use parallelism 16"){ INITIALIZER(runLoadTable); TC_PROPERTY("Parallelism", 16); TC_PROPERTY("AbortProb", 90); STEPS(runScanUpdate, 3); FINALIZER(runClearTable);}TESTCASE("ScanUpdateAbort240", "Scan requirement: A scan may be aborted by the application "\ "at any time. This can be performed even if there are more "\ "tuples to scan. Use parallelism 240(it will be downgraded to max para for this config)"){ INITIALIZER(runLoadTable); TC_PROPERTY("Parallelism", 240); TC_PROPERTY("AbortProb", 90); STEPS(runScanUpdate, 3); FINALIZER(runClearTable);}TESTCASE("CheckGetValue", "Check that we can call getValue to read attributes"\ "Especially interesting to see if we can read only the"\ " first, last or any two attributes from the table"){ INITIALIZER(runLoadTable); STEP(runCheckGetValue); VERIFIER(runScanRead); FINALIZER(runClearTable);}TESTCASE("CloseWithoutStop", "Check that we can close the scanning transaction without calling "\ "stopScan"){ INITIALIZER(runLoadTable); STEP(runCloseWithoutStop); VERIFIER(runScanRead); FINALIZER(runClearTable);}TESTCASE("NextScanWhenNoMore", "Check that we can call nextScanResult when there are no more "\ "records, and that it returns a valid value"){ INITIALIZER(runLoadTable); STEP(runNextScanWhenNoMore); VERIFIER(runScanRead); FINALIZER(runClearTable);}TESTCASE("EqualAfterOpenScan", "Check that we can't call equal after openScan"){ STEP(runEqualAfterOpenScan);}TESTCASE("ExecuteScanWithoutOpenScan", "Check that we can't call executeScan without defining a scan "\ "with openScan"){ INITIALIZER(runLoadTable); STEP(runExecuteScanWithoutOpenScan); VERIFIER(runScanRead); FINALIZER(runClearTable);}TESTCASE("OnlyOpenScanOnce", "Check that we may only call openScan once in the same trans"){ INITIALIZER(runLoadTable); STEP(runOnlyOpenScanOnce); VERIFIER(runScanRead); FINALIZER(runClearTable);}TESTCASE("OnlyOneOpInScanTrans", "Check that we can have only one operation in a scan trans"){ INITIALIZER(runLoadTable); STEP(runOnlyOneOpInScanTrans); VERIFIER(runScanRead); FINALIZER(runClearTable);}TESTCASE("OnlyOneOpBeforeOpenScan", "Check that we can have only one operation in a trans defined "\ "when calling openScan "){ INITIALIZER(runLoadTable); STEP(runOnlyOneOpBeforeOpenScan); VERIFIER(runScanRead); FINALIZER(runClearTable);}TESTCASE("OnlyOneScanPerTrans", "Check that we can have only one scan operation in a trans"){ INITIALIZER(runLoadTable); STEP(runOnlyOneScanPerTrans); VERIFIER(runScanRead); FINALIZER(runClearTable);}TESTCASE("NoCloseTransaction", "Check behaviour when close transaction is not called "){ INITIALIZER(runLoadTable); STEP(runNoCloseTransaction); VERIFIER(runScanRead); FINALIZER(runClearTable);}TESTCASE("CheckInactivityTimeOut", "Check behaviour when the api sleeps for a long time before continuing scan "){ INITIALIZER(runLoadTable); STEP(runCheckInactivityTimeOut); VERIFIER(runScanRead); FINALIZER(runClearTable);}TESTCASE("CheckInactivityBeforeClose", "Check behaviour when the api sleeps for a long time before calling close scan "){ INITIALIZER(runLoadTable); STEP(runCheckInactivityBeforeClose); VERIFIER(runScanRead); FINALIZER(runClearTable);}TESTCASE("ScanReadError5021", "Scan and insert error 5021, one node is expected to crash"){ INITIALIZER(runLoadTable); TC_PROPERTY("ErrorCode", 5021); STEP(runScanReadErrorOneNode); FINALIZER(runClearTable);}TESTCASE("ScanReadError5022", "Scan and insert error 5022, one node is expected to crash"){ INITIALIZER(runLoadTable); TC_PROPERTY("ErrorCode", 5022); TC_PROPERTY("NodeNumber", 2); STEP(runScanReadErrorOneNode); FINALIZER(runClearTable);}TESTCASE("ScanReadError5023", "Scan and insert error 5023"){ INITIALIZER(runLoadTable); TC_PROPERTY("ErrorCode", 5023); STEP(runScanReadError); FINALIZER(runClearTable);}TESTCASE("ScanReadError5024", "Scan and insert error 5024"){ INITIALIZER(runLoadTable); TC_PROPERTY("ErrorCode", 5024); STEP(runScanReadError); FINALIZER(runClearTable);}TESTCASE("ScanReadError5025", "Scan and insert error 5025"){ INITIALIZER(runLoadTable); TC_PROPERTY("ErrorCode", 5025); STEP(runScanReadError); FINALIZER(runClearTable);}TESTCASE("ScanReadError5030", "Scan and insert error 5030."\ "Drop all SCAN_NEXTREQ signals in LQH until the node is "\ "shutdown with SYSTEM_ERROR because of scan fragment timeout"){ INITIALIZER(runLoadTable); TC_PROPERTY("ErrorCode", 5030); STEP(runScanReadErrorOneNode); FINALIZER(runClearTable);}TESTCASE("ScanReadRestart", "Scan requirement:A scan should be able to start and "\ "complete during node recovery and when one or more nodes "\ "in the cluster is down.Use random parallelism "){ INITIALIZER(runLoadTable); TC_PROPERTY("Parallelism", RANDOM_PARALLELISM); // Random STEP(runScanReadUntilStopped); STEP(runRestarter); FINALIZER(runClearTable);}TESTCASE("ScanUpdateRestart", "Scan requirement:A scan should be able to start and "\ "complete during node recovery and when one or more nodes "\ "in the cluster is down. Use random parallelism"){ INITIALIZER(runLoadTable); TC_PROPERTY("Parallelism", RANDOM_PARALLELISM); // Random STEP(runScanUpdateUntilStopped); STEP(runRestarter); FINALIZER(runClearTable);}#if 0TESTCASE("ScanReadRestart9999", "Scan requirement:A scan should be able to start and "\ "complete during node recovery and when one or more nodes "\ "in the cluster is down. Use parallelism 240."\ "Restart using error insert 9999"){ INITIALIZER(runLoadTable); TC_PROPERTY("Parallelism", 240); STEP(runScanReadUntilStopped); STEP(runRestarter9999); FINALIZER(runClearTable);}TESTCASE("ScanUpdateRestart9999", "Scan requirement:A scan should be able to start and "\ "complete during node recovery and when one or more nodes "\ "in the cluster is down. Use parallelism 240."\ "Restart using error insert 9999"){ INITIALIZER(runLoadTable); TC_PROPERTY("Parallelism", 240); STEP(runScanReadUntilStopped); STEP(runScanUpdateUntilStopped); STEP(runRestarter9999); FINALIZER(runClearTable);}#endifTESTCASE("InsertDelete", "Load and delete all while scan updating and scan reading\n"\ "Alexander Lukas special"){ INITIALIZER(runClearTable); STEP(runScanReadUntilStoppedNoCount); STEP(runScanUpdateUntilStopped); STEP(runInsertDelete); FINALIZER(runClearTable);}TESTCASE("CheckAfterTerror", "Check that we can still scan read after this terror of NdbApi"){ INITIALIZER(runLoadTable); STEPS(runScanRead, 5); FINALIZER(runClearTable);}TESTCASE("ScanReadWhileNodeIsDown", "Scan requirement:A scan should be able to run as fast when "\ "one or more nodes in the cluster is down."){ INITIALIZER(runLoadTable); STEP(runScanReadUntilStoppedPrintTime); STEP(runStopAndStartNode); FINALIZER(runClearTable);}TESTCASE("ScanRestart", "Verify restart functionallity"){ INITIALIZER(runLoadTable); STEP(runScanRestart); FINALIZER(runClearTable);}TESTCASE("ScanParallelism", "Test scan with different parallelism"){ INITIALIZER(runLoadTable); STEP(runScanParallelism); FINALIZER(runClearTable);}NDBT_TESTSUITE_END(testScan);int main(int argc, const char** argv){ ndb_init(); myRandom48Init(NdbTick_CurrentMillisecond()); return testScan.execute(argc, argv);}template class Vector<Attrib*>;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -