List:Commits« Previous MessageNext Message »
From:stewart Date:July 2 2007 3:00pm
Subject:[patch 5/5] Test for Bug#28804
View as plain text  
Single index lookup, simulate out of txn buffer memory when saving
INDXKEYINFO.

should get back 4000 no mem.

Index: ndb-work/ndb/src/kernel/blocks/ERROR_codes.txt
===================================================================
--- ndb-work.orig/ndb/src/kernel/blocks/ERROR_codes.txt	2007-07-02 17:56:06.773940868
+1000
+++ ndb-work/ndb/src/kernel/blocks/ERROR_codes.txt	2007-07-02 17:56:49.948401240 +1000
@@ -6,7 +6,7 @@ Next DBTUP 4014
 Next DBLQH 5043
 Next DBDICT 6007
 Next DBDIH 7183
-Next DBTC 8039
+Next DBTC 8040
 Next CMVMI 9000
 Next BACKUP 10022
 Next DBUTIL 11002
@@ -296,6 +296,8 @@ ABORT OF TCKEYREQ
 
 8038 : Simulate API disconnect just after SCAN_TAB_REQ
 
+8039 : Simulate failure of TransactionBufferMemory allocation for OI lookup
+
 
 CMVMI
 -----
Index: ndb-work/ndb/src/kernel/blocks/dbtc/DbtcMain.cpp
===================================================================
--- ndb-work.orig/ndb/src/kernel/blocks/dbtc/DbtcMain.cpp	2007-07-02 17:54:51.485650433
+1000
+++ ndb-work/ndb/src/kernel/blocks/dbtc/DbtcMain.cpp	2007-07-02 17:57:01.005031322 +1000
@@ -11764,7 +11764,7 @@ bool Dbtc::saveINDXKEYINFO(Signal* signa
                            const Uint32 *src, 
                            Uint32 len)
 {
-  if (!indexOp->keyInfo.append(src, len)) {
+  if (ERROR_INSERTED(8039) || !indexOp->keyInfo.append(src, len)) {
     jam();
     // Failed to seize keyInfo, abort transaction
 #ifdef VM_TRACE
Index: ndb-work/ndb/test/ndbapi/testIndex.cpp
===================================================================
--- ndb-work.orig/ndb/test/ndbapi/testIndex.cpp	2007-07-02 17:59:02.155935318 +1000
+++ ndb-work/ndb/test/ndbapi/testIndex.cpp	2007-07-02 23:33:03.702037942 +1000
@@ -1297,6 +1297,47 @@ runBug25059(NDBT_Context* ctx, NDBT_Step
   return res;
 }
 
+int
+runBug28804(NDBT_Context* ctx, NDBT_Step* step)
+{
+  Ndb* pNdb = GETNDB(step);
+  HugoTransactions hugoTrans(*ctx->getTab());
+  NdbRestarter restarter;
+
+  int loops = ctx->getNumLoops();
+  const int rows = ctx->getNumRecords();
+  const int batchsize = ctx->getProperty("BatchSize", 1);
+
+  while (loops--)
+  {
+    if(restarter.insertErrorInAllNodes(8039) != 0)
+    {
+      g_err << "Failed to error insert(8039)" << endl;
+      return NDBT_FAILED;
+    }
+
+    if (hugoTrans.indexReadRecords(pNdb, pkIdxName, rows, batchsize,
+                                   NoCommit, AO_IgnoreError) == 0)
+    {
+      g_err << "Index succeded (it should have failed" << endl;
+      return NDBT_FAILED;
+    }
+
+    if(restarter.insertErrorInAllNodes(0) != 0)
+    {
+      g_err << "Failed to error insert(0)" << endl;
+      return NDBT_FAILED;
+    }
+
+    if (hugoTrans.indexReadRecords(pNdb, pkIdxName, rows, batchsize) != 0){
+      g_err << "Index read failed" << endl;
+      return NDBT_FAILED;
+    }
+  }
+
+  return NDBT_OK;
+}
+
 NDBT_TESTSUITE(testIndex);
 TESTCASE("CreateAll", 
 	 "Test that we can create all various indexes on each table\n"
@@ -1628,6 +1669,16 @@ TESTCASE("Bug25059", 
   STEP(runBug25059);
   FINALIZER(createPkIndex_Drop);
 }
+TESTCASE("Bug28804",
+	 "Test behaviour on out of TransactionBufferMemory for index lookup"){
+  TC_PROPERTY("LoggedIndexes", (unsigned)0);
+  INITIALIZER(runClearTable);
+  INITIALIZER(createPkIndex);
+  INITIALIZER(runLoadTable);
+  STEP(runBug28804);
+  FINALIZER(createPkIndex_Drop);
+  FINALIZER(runClearTable);
+}
 NDBT_TESTSUITE_END(testIndex);
 
 int main(int argc, const char** argv){
Index: ndb-work/ndb/test/include/HugoTransactions.hpp
===================================================================
--- ndb-work.orig/ndb/test/include/HugoTransactions.hpp	2007-07-02 23:06:00.561540437
+1000
+++ ndb-work/ndb/test/include/HugoTransactions.hpp	2007-07-02 23:13:43.235906746 +1000
@@ -97,7 +97,9 @@ public:
   int indexReadRecords(Ndb*, 
 		       const char * idxName,
 		       int records,
-		       int batchsize = 1);
+		       int batchsize = 1,
+                       ExecType execType= Commit,
+                       AbortOption abortOption= AbortOnError);
 
   int indexUpdateRecords(Ndb*,
 			 const char * idxName,
Index: ndb-work/ndb/test/src/HugoTransactions.cpp
===================================================================
--- ndb-work.orig/ndb/test/src/HugoTransactions.cpp	2007-07-02 23:05:55.129230867 +1000
+++ ndb-work/ndb/test/src/HugoTransactions.cpp	2007-07-02 23:13:54.140528165 +1000
@@ -1434,7 +1434,9 @@ int 
 HugoTransactions::indexReadRecords(Ndb* pNdb, 
 				   const char * idxName,
 				   int records,
-				   int batch){
+				   int batch,
+                                   ExecType execType,
+                                   AbortOption abortOption){
   int                  reads = 0;
   int                  r = 0;
   int                  retryAttempt = 0;
@@ -1528,7 +1530,8 @@ HugoTransactions::indexReadRecords(Ndb* 
       }
     }
 
-    check = pTrans->execute(Commit);   
+    check = pTrans->execute(execType, abortOption, 1);
+
     check = (check == -1 ? -1 : !ordered ? check : sOp->nextResult(true));
     if( check == -1 ) {
       const NdbError err = pTrans->getNdbError();
Index: ndb-work/ndb/test/run-test/daily-basic-tests.txt
===================================================================
--- ndb-work.orig/ndb/test/run-test/daily-basic-tests.txt	2007-07-02 23:26:08.386370451
+1000
+++ ndb-work/ndb/test/run-test/daily-basic-tests.txt	2007-07-02 23:39:53.789407489 +1000
@@ -771,3 +771,7 @@ cmd: DbAsyncGenerator
 args: -time 60 -p 1 -proc 25
 type: bench
 
+max-time: 60
+cmd: testIndex
+args: -n Bug28804 T1
+

--
Stewart Smith
Thread
[patch 5/5] Test for Bug#28804stewart2 Jul
  • Re: [patch 5/5] Test for Bug#28804Jonas Oreland3 Jul