📄 testbasic.cpp
字号:
CHECK(hugoOps.closeTransaction(pNdb) == 0); // Update record 5 CHECK(hugoOps.startTransaction(pNdb) == 0); CHECK(hugoOps.pkUpdateRecord(pNdb, 5) == 0); CHECK(hugoOps.execute_NoCommit(pNdb) == 0); CHECK(hugoOps.closeTransaction(pNdb) == 0); // Delete record 5 CHECK(hugoOps.startTransaction(pNdb) == 0); CHECK(hugoOps.pkDeleteRecord(pNdb, 5) == 0); CHECK(hugoOps.execute_NoCommit(pNdb) == 0); CHECK(hugoOps.closeTransaction(pNdb) == 0); // Check record is not deleted // Close transaction should have rollbacked CHECK(hugoOps.startTransaction(pNdb) == 0); CHECK(hugoOps.pkReadRecord(pNdb, 5, 1, NdbOperation::LM_Exclusive) == 0); CHECK(hugoOps.execute_Commit(pNdb) == 0); }while(false); hugoOps.closeTransaction(pNdb); return result;}int runCheckCommitDelete(NDBT_Context* ctx, NDBT_Step* step){ int result = NDBT_OK; HugoOperations hugoOps(*ctx->getTab()); Ndb* pNdb = GETNDB(step); do{ // Read 10 records CHECK(hugoOps.startTransaction(pNdb) == 0); CHECK(hugoOps.pkReadRecord(pNdb, 5, 10, NdbOperation::LM_Exclusive) == 0); CHECK(hugoOps.execute_NoCommit(pNdb) == 0); // Update 10 records CHECK(hugoOps.pkUpdateRecord(pNdb, 5, 10) == 0); CHECK(hugoOps.execute_NoCommit(pNdb) == 0); // Delete 10 records CHECK(hugoOps.pkDeleteRecord(pNdb, 5, 10) == 0); CHECK(hugoOps.execute_NoCommit(pNdb) == 0); CHECK(hugoOps.execute_Commit(pNdb) == 0); CHECK(hugoOps.closeTransaction(pNdb) == 0); // Check record's are deleted CHECK(hugoOps.startTransaction(pNdb) == 0); CHECK(hugoOps.pkReadRecord(pNdb, 5, 10, NdbOperation::LM_Exclusive) == 0); CHECK(hugoOps.execute_Commit(pNdb) == 626); }while(false); hugoOps.closeTransaction(pNdb); return result;}int runRollbackNothing(NDBT_Context* ctx, NDBT_Step* step){ int result = NDBT_OK; HugoOperations hugoOps(*ctx->getTab()); Ndb* pNdb = GETNDB(step); do{ // Delete record 5 - 15 CHECK(hugoOps.startTransaction(pNdb) == 0); CHECK(hugoOps.pkDeleteRecord(pNdb, 5, 10) == 0); // Rollback CHECK(hugoOps.execute_Rollback(pNdb) == 0); CHECK(hugoOps.closeTransaction(pNdb) == 0); // Check records are not deleted CHECK(hugoOps.startTransaction(pNdb) == 0); CHECK(hugoOps.pkReadRecord(pNdb, 5, 10, NdbOperation::LM_Exclusive) == 0); CHECK(hugoOps.execute_Commit(pNdb) == 0); CHECK(hugoOps.closeTransaction(pNdb) == 0); CHECK(hugoOps.startTransaction(pNdb) == 0); CHECK(hugoOps.execute_Rollback(pNdb) == 0); }while(false); hugoOps.closeTransaction(pNdb); return result;}int runMassiveRollback(NDBT_Context* ctx, NDBT_Step* step){ NdbRestarter restarter; const int records = 4 * restarter.getNumDbNodes(); HugoTransactions hugoTrans(*ctx->getTab()); if (hugoTrans.loadTable(GETNDB(step), records) != 0){ return NDBT_FAILED; } int result = NDBT_OK; HugoOperations hugoOps(*ctx->getTab()); Ndb* pNdb = GETNDB(step); const Uint32 OPS_PER_TRANS = 256; const Uint32 OPS_TOTAL = 4096; for(int row = 0; row < records; row++){ int res; CHECK(hugoOps.startTransaction(pNdb) == 0); for(Uint32 i = 0; i<OPS_TOTAL; i += OPS_PER_TRANS){ for(Uint32 j = 0; j<OPS_PER_TRANS; j++){ CHECK(hugoOps.pkUpdateRecord(pNdb, row, 1, i) == 0); } g_info << "Performed " << (i+OPS_PER_TRANS) << " updates on row: " << row << endl; if(result != NDBT_OK){ break; } res = hugoOps.execute_NoCommit(pNdb); if(res != 0){ NdbError err = pNdb->getNdbError(res); CHECK(err.classification == NdbError::TimeoutExpired); break; } } if(result != NDBT_OK){ break; } g_info << "executeRollback" << endl; CHECK(hugoOps.execute_Rollback(pNdb) == 0); CHECK(hugoOps.closeTransaction(pNdb) == 0); } hugoOps.closeTransaction(pNdb); return result;}intrunMassiveRollback2(NDBT_Context* ctx, NDBT_Step* step){ HugoTransactions hugoTrans(*ctx->getTab()); if (hugoTrans.loadTable(GETNDB(step), 1) != 0){ return NDBT_FAILED; } int result = NDBT_OK; HugoOperations hugoOps(*ctx->getTab()); Ndb* pNdb = GETNDB(step); const Uint32 OPS_TOTAL = 4096; const Uint32 LOOPS = 10; for(Uint32 loop = 0; loop<LOOPS; loop++){ CHECK(hugoOps.startTransaction(pNdb) == 0); for(Uint32 i = 0; i<OPS_TOTAL-1; i ++){ if((i & 1) == 0){ CHECK(hugoOps.pkUpdateRecord(pNdb, 0, 1, loop) == 0); } else { CHECK(hugoOps.pkUpdateRecord(pNdb, 1, 1, loop) == 0); } } CHECK(hugoOps.execute_Commit(pNdb) == 626); CHECK(hugoOps.execute_Rollback(pNdb) == 0); CHECK(hugoOps.closeTransaction(pNdb) == 0); } hugoOps.closeTransaction(pNdb); return result;}NDBT_TESTSUITE(testBasic);TESTCASE("PkInsert", "Verify that we can insert and delete from this table using PK" "NOTE! No errors are allowed!" ){ INITIALIZER(runInsert); VERIFIER(runVerifyInsert);}TESTCASE("PkRead", "Verify that we can insert, read and delete from this table using PK"){ INITIALIZER(runLoadTable); STEP(runPkRead); FINALIZER(runClearTable);}TESTCASE("PkDirtyRead", "Verify that we can insert, dirty read and delete from this table using PK"){ INITIALIZER(runLoadTable); STEP(runPkDirtyRead); FINALIZER(runClearTable);}TESTCASE("PkUpdate", "Verify that we can insert, update and delete from this table using PK"){ INITIALIZER(runLoadTable); STEP(runPkUpdate); FINALIZER(runClearTable);}TESTCASE("PkDelete", "Verify that we can delete from this table using PK"){ INITIALIZER(runLoadTable); STEP(runPkDelete); FINALIZER(runClearTable);}TESTCASE("UpdateAndRead", "Verify that we can read and update at the same time"){ INITIALIZER(runLoadTable); STEP(runPkRead); STEP(runPkRead); STEP(runPkRead); STEP(runPkUpdate); STEP(runPkUpdate); STEP(runPkUpdate); FINALIZER(runClearTable);}TESTCASE("PkReadAndLocker", "Verify that we can read although there are "\ " a number of 1 second locks in the table"){ INITIALIZER(runLoadTable); STEP(runPkReadUntilStopped); STEP(runLocker); FINALIZER(runClearTable);}TESTCASE("PkReadAndLocker2", "Verify that we can read and update although there are "\ " a number of 1 second locks in the table"){ INITIALIZER(runLoadTable); STEP(runPkReadUntilStopped); STEP(runPkReadUntilStopped); STEP(runPkReadUntilStopped); STEP(runPkReadUntilStopped); STEP(runPkReadUntilStopped); STEP(runPkReadUntilStopped); STEP(runLocker); FINALIZER(runClearTable);}TESTCASE("PkReadUpdateAndLocker", "Verify that we can read and update although there are "\ " a number of 1 second locks in the table"){ INITIALIZER(runLoadTable); STEP(runPkReadUntilStopped); STEP(runPkReadUntilStopped); STEP(runPkUpdateUntilStopped); STEP(runPkUpdateUntilStopped); STEP(runLocker); FINALIZER(runClearTable);}TESTCASE("ReadWithLocksAndInserts", "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); STEP(runPkReadUntilStopped); STEP(runPkReadUntilStopped); STEP(runLocker); STEP(runInsertUntilStopped); FINALIZER(runClearTable);}TESTCASE("PkInsertTwice", "Verify that we can't insert an already inserted record." "Error should be returned" ){ INITIALIZER(runLoadTable); STEP(runInsertTwice); FINALIZER(runClearTable);}TESTCASE("NoCommitSleep", "Verify what happens when a NoCommit transaction is aborted by " "NDB because the application is sleeping" ){ INITIALIZER(runLoadTable); INITIALIZER(runNoCommitSleep); FINALIZER(runClearTable2);}TESTCASE("Commit626", "Verify what happens when a Commit transaction is aborted by " "NDB because the record does no exist" ){ INITIALIZER(runClearTable2); INITIALIZER(runCommit626); FINALIZER(runClearTable2);}TESTCASE("CommitTry626", "Verify what happens when a Commit(TryCommit) \n" "transaction is aborted by " "NDB because the record does no exist" ){ INITIALIZER(runClearTable2); INITIALIZER(runCommit_TryCommit626); FINALIZER(runClearTable2);}TESTCASE("CommitAsMuch626", "Verify what happens when a Commit(CommitAsMuchAsPossible) \n" "transaction is aborted by\n" "NDB because the record does no exist" ){ INITIALIZER(runClearTable2); INITIALIZER(runCommit_CommitAsMuchAsPossible626); FINALIZER(runClearTable2);}TESTCASE("NoCommit626", "Verify what happens when a NoCommit transaction is aborted by " "NDB because the record does no exist" ){ INITIALIZER(runClearTable2); INITIALIZER(runNoCommit626); FINALIZER(runClearTable2);}TESTCASE("NoCommitRollback626", "Verify what happens when a NoCommit transaction is aborted by " "NDB because the record does no exist and then we try to rollback\n" "the transaction" ){ INITIALIZER(runClearTable2); INITIALIZER(runNoCommitRollback626); FINALIZER(runClearTable2);}TESTCASE("Commit630", "Verify what happens when a Commit transaction is aborted by " "NDB because the record already exist" ){ INITIALIZER(runLoadTable); INITIALIZER(runCommit630); FINALIZER(runClearTable2);}TESTCASE("CommitTry630", "Verify what happens when a Commit(TryCommit) \n" "transaction is aborted by " "NDB because the record already exist" ){ INITIALIZER(runLoadTable); INITIALIZER(runCommit_TryCommit630); FINALIZER(runClearTable2);}TESTCASE("CommitAsMuch630", "Verify what happens when a Commit(CommitAsMuchAsPossible) \n" "transaction is aborted by\n" "NDB because the record already exist" ){ INITIALIZER(runLoadTable); INITIALIZER(runCommit_CommitAsMuchAsPossible630); FINALIZER(runClearTable2);}TESTCASE("NoCommit630", "Verify what happens when a NoCommit transaction is aborted by " "NDB because the record already exist" ){ INITIALIZER(runLoadTable); INITIALIZER(runNoCommit630); FINALIZER(runClearTable2);}TESTCASE("NoCommitRollback630", "Verify what happens when a NoCommit transaction is aborted by " "NDB because the record already exist and then we try to rollback\n" "the transaction" ){ INITIALIZER(runLoadTable); INITIALIZER(runNoCommitRollback630); FINALIZER(runClearTable2);}TESTCASE("NoCommitAndClose", "Verify what happens when a NoCommit transaction is closed " "without rolling back the transaction " ){ INITIALIZER(runLoadTable); INITIALIZER(runNoCommitAndClose); FINALIZER(runClearTable2);}TESTCASE("RollbackDelete", "Test rollback of a no committed delete"){ INITIALIZER(runLoadTable); INITIALIZER(runCheckRollbackDelete); FINALIZER(runClearTable2);}TESTCASE("RollbackUpdate", "Test rollback of a no committed update"){ INITIALIZER(runLoadTable); INITIALIZER(runCheckRollbackUpdate); FINALIZER(runClearTable2);}TESTCASE("RollbackDeleteMultiple", "Test rollback of 10 non committed delete"){ INITIALIZER(runLoadTable); INITIALIZER(runCheckRollbackDeleteMultiple); FINALIZER(runClearTable2);}TESTCASE("ImplicitRollbackDelete", "Test close transaction after a no commited delete\n" "this would give an implicit rollback of the delete\n"){ INITIALIZER(runLoadTable); INITIALIZER(runCheckImplicitRollbackDelete); FINALIZER(runClearTable2);}TESTCASE("CommitDelete", "Test close transaction after a no commited delete\n" "this would give an implicit rollback of the delete\n"){ INITIALIZER(runLoadTable); INITIALIZER(runCheckCommitDelete); FINALIZER(runClearTable2);}TESTCASE("RollbackNothing", "Test rollback of nothing"){ INITIALIZER(runLoadTable); INITIALIZER(runRollbackNothing); FINALIZER(runClearTable2);}TESTCASE("MassiveRollback", "Test rollback of 4096 operations"){ INITIALIZER(runClearTable2); INITIALIZER(runMassiveRollback); FINALIZER(runClearTable2);}TESTCASE("MassiveRollback2", "Test rollback of 4096 operations"){ INITIALIZER(runClearTable2); INITIALIZER(runMassiveRollback2); FINALIZER(runClearTable2);}TESTCASE("MassiveTransaction", "Test very large insert transaction"){ INITIALIZER(runLoadTable2); FINALIZER(runClearTable2);}TESTCASE("Fill", "Verify what happens when we fill the db" ){ INITIALIZER(runFillTable); INITIALIZER(runPkRead); FINALIZER(runClearTable2);}NDBT_TESTSUITE_END(testBasic);#if 0TESTCASE("ReadConsistency", "Check that a read within a transaction returns the " \ "same result no matter"){ STEP(runInsertOne); STEP(runReadOne); FINALIZER(runClearTable2);}#endifint main(int argc, const char** argv){ ndb_init(); return testBasic.execute(argc, argv);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -