diff options
author | unknown <ndbdev@dl145b.mysql.com> | 2005-06-14 00:05:27 +0200 |
---|---|---|
committer | unknown <ndbdev@dl145b.mysql.com> | 2005-06-14 00:05:27 +0200 |
commit | 7bb5fe94115329ba179c59d30b4cff60823b16a4 (patch) | |
tree | 57430419848f0b4ed26d8c02853b7eaa63fbe1fe /ndb/test | |
parent | 1a0bddb84d5c93af339e7c5ce1a45c7cbde59071 (diff) | |
parent | 91a7d4e737455b4eed9185ebf622626e982bd8ad (diff) | |
download | mariadb-git-7bb5fe94115329ba179c59d30b4cff60823b16a4.tar.gz |
merge
BitKeeper/etc/logging_ok:
auto-union
ndb/src/kernel/blocks/dbtc/DbtcMain.cpp:
Auto merged
sql/item_cmpfunc.cc:
Auto merged
Diffstat (limited to 'ndb/test')
-rw-r--r-- | ndb/test/ndbapi/testTimeout.cpp | 78 |
1 files changed, 69 insertions, 9 deletions
diff --git a/ndb/test/ndbapi/testTimeout.cpp b/ndb/test/ndbapi/testTimeout.cpp index ac4f257f12c..b02751ec819 100644 --- a/ndb/test/ndbapi/testTimeout.cpp +++ b/ndb/test/ndbapi/testTimeout.cpp @@ -22,14 +22,14 @@ #include <NdbConfig.hpp> #include <signaldata/DumpStateOrd.hpp> -#define TIMEOUT 3000 - +#define TIMEOUT (Uint32)3000 Uint32 g_org_timeout = 3000; int setTransactionTimeout(NDBT_Context* ctx, NDBT_Step* step){ NdbRestarter restarter; - + int timeout = ctx->getProperty("TransactionInactiveTimeout",TIMEOUT); + NdbConfig conf(GETNDB(step)->getNodeId()+1); unsigned int nodeId = conf.getMasterNodeId(); if (!conf.getProperty(nodeId, @@ -39,7 +39,7 @@ setTransactionTimeout(NDBT_Context* ctx, NDBT_Step* step){ return NDBT_FAILED; } - int val[] = { DumpStateOrd::TcSetApplTransactionTimeout, TIMEOUT }; + int val[] = { DumpStateOrd::TcSetApplTransactionTimeout, timeout }; if(restarter.dumpStateAllNodes(val, 2) != 0){ return NDBT_FAILED; } @@ -95,8 +95,10 @@ int runTimeoutTrans2(NDBT_Context* ctx, NDBT_Step* step){ int mul2 = ctx->getProperty("Op2", (Uint32)0); int records = ctx->getNumRecords(); - int minSleep = (int)(TIMEOUT * 1.5); - int maxSleep = TIMEOUT * 2; + int timeout = ctx->getProperty("TransactionInactiveTimeout",TIMEOUT); + + int minSleep = (int)(timeout * 1.5); + int maxSleep = timeout * 2; HugoOperations hugoOps(*ctx->getTab()); Ndb* pNdb = GETNDB(step); @@ -109,7 +111,7 @@ int runTimeoutTrans2(NDBT_Context* ctx, NDBT_Step* step){ op1 = (op1 % 5); op2 = (op2 % 5); - ndbout << stepNo << ": TransactionInactiveTimeout="<< TIMEOUT + ndbout << stepNo << ": TransactionInactiveTimeout="<< timeout << ", minSleep="<<minSleep << ", maxSleep="<<maxSleep << ", op1=" << op1 @@ -211,8 +213,10 @@ int runDontTimeoutTrans(NDBT_Context* ctx, NDBT_Step* step){ int loops = ctx->getNumLoops(); int stepNo = step->getStepNo(); - int maxSleep = (int)(TIMEOUT * 0.5); - ndbout << "TransactionInactiveTimeout="<< TIMEOUT + int timeout = ctx->getProperty("TransactionInactiveTimeout",TIMEOUT); + + int maxSleep = (int)(timeout * 0.5); + ndbout << "TransactionInactiveTimeout="<< timeout << ", maxSleep="<<maxSleep<<endl; @@ -242,6 +246,51 @@ int runDontTimeoutTrans(NDBT_Context* ctx, NDBT_Step* step){ return result; } +int runDeadlockTimeoutTrans(NDBT_Context* ctx, NDBT_Step* step){ + int result = NDBT_OK; + int loops = ctx->getNumLoops(); + int stepNo = step->getStepNo(); + + Uint32 deadlock_timeout; + NdbConfig conf(GETNDB(step)->getNodeId()+1); + unsigned int nodeId = conf.getMasterNodeId(); + if (!conf.getProperty(nodeId, + NODE_TYPE_DB, + CFG_DB_TRANSACTION_DEADLOCK_TIMEOUT, + &deadlock_timeout)){ + return NDBT_FAILED; + } + + + int do_sleep = (int)(deadlock_timeout * 0.5); + + + HugoOperations hugoOps(*ctx->getTab()); + Ndb* pNdb = GETNDB(step); + + for (int l = 0; l < loops && result == NDBT_OK; l++){ + + do{ + // Commit transaction + CHECK(hugoOps.startTransaction(pNdb) == 0); + CHECK(hugoOps.pkReadRecord(pNdb, stepNo) == 0); + CHECK(hugoOps.execute_NoCommit(pNdb) == 0); + + int sleep = deadlock_timeout * 1.5 + myRandom48(do_sleep); + ndbout << "Sleeping for " << sleep << " milliseconds" << endl; + NdbSleep_MilliSleep(sleep); + + // Expect that transaction has NOT timed-out + CHECK(hugoOps.execute_Commit(pNdb) == 0); + + } while(false); + + hugoOps.closeTransaction(pNdb); + } + + return result; +} + int runBuddyTransNoTimeout(NDBT_Context* ctx, NDBT_Step* step){ int result = NDBT_OK; int loops = ctx->getNumLoops(); @@ -295,6 +344,17 @@ TESTCASE("DontTimeoutTransaction", FINALIZER(resetTransactionTimeout); FINALIZER(runClearTable); } +TESTCASE("Bug11290", + "Setting TransactionInactiveTimeout to 0(zero) "\ + "should result in infinite timeout, and not as "\ + "was the bug, a timeout that is equal to the deadlock timeout"){ + TC_PROPERTY("TransactionInactiveTimeout",(Uint32)0); + INITIALIZER(runLoadTable); + INITIALIZER(setTransactionTimeout); + STEPS(runDeadlockTimeoutTrans, 1); + FINALIZER(resetTransactionTimeout); + FINALIZER(runClearTable); +} TESTCASE("DontTimeoutTransaction5", "Test that the transaction does not timeout "\ "if we sleep during the transaction. Use a sleep "\ |