List:Internals« Previous MessageNext Message »
From:jonas.oreland Date:July 22 2005 2:30pm
Subject:bk commit into 5.0 tree (joreland:1.1876) BUG#11133
View as plain text  
Below is the list of changes that have just been committed into a local
5.0 repository of jonas. When jonas does a push these changes will
be propagated to the main repository and, within 24 hours after the
push, to the public repository.
For information on how to access the public repository
see http://dev.mysql.com/doc/mysql/en/installing-source-tree.html

ChangeSet
  1.1876 05/07/22 14:30:00 joreland@stripped +4 -0
  bug#11133 - ndb write/lock upgrade
    fix test case
    improve testing

  ndb/test/src/HugoOperations.cpp
    1.22 05/07/22 14:29:56 joreland@stripped +41 -1
    write partial + improve prinout in wait_async

  ndb/test/ndbapi/testNdbApi.cpp
    1.22 05/07/22 14:29:56 joreland@stripped +25 -3
    improve testcase
      use writePartial to verify that ops get correctly converted
      (also test negative)

  ndb/test/include/HugoOperations.hpp
    1.14 05/07/22 14:29:56 joreland@stripped +4 -0
    Partial write (only pk)

  ndb/src/kernel/blocks/dbacc/DbaccMain.cpp
    1.52 05/07/22 14:29:56 joreland@stripped +3 -3
    bug#11133 - ndb write/lock upgrade
      fix test case
      improve testing

# This is a BitKeeper patch.  What follows are the unified diffs for the
# set of deltas contained in the patch.  The rest of the patch, the part
# that BitKeeper cares about, is below these diffs.
# User:	joreland
# Host:	eel.(none)
# Root:	/home/jonas/src/mysql-5.0

--- 1.51/ndb/src/kernel/blocks/dbacc/DbaccMain.cpp	2005-07-20 13:22:37 +02:00
+++ 1.52/ndb/src/kernel/blocks/dbacc/DbaccMain.cpp	2005-07-22 14:29:56 +02:00
@@ -4849,16 +4849,16 @@
   else if(operationRecPtr.p->operation == ZWRITE)
   {
     jam();
-    operationRecPtr.p->operation = ZINSERT;
+    operationRecPtr.p->operation = ZUPDATE;
     if (operationRecPtr.p->prevParallelQue != RNIL) {
       OperationrecPtr prevOpPtr;
       jam();
       prevOpPtr.i = operationRecPtr.p->prevParallelQue;
       ptrCheckGuard(prevOpPtr, coprecsize, operationrec);
-      if (prevOpPtr.p->operation != ZDELETE) 
+      if (prevOpPtr.p->operation == ZDELETE) 
       {
         jam();
-        operationRecPtr.p->operation = ZUPDATE;
+        operationRecPtr.p->operation = ZINSERT;
       }
     }
   }

--- 1.13/ndb/test/include/HugoOperations.hpp	2005-07-21 09:10:40 +02:00
+++ 1.14/ndb/test/include/HugoOperations.hpp	2005-07-22 14:29:56 +02:00
@@ -45,6 +45,10 @@
 		    int recordNo,
 		    int numRecords = 1,
 		    int updatesValue = 0);
+
+  int pkWritePartialRecord(Ndb*,
+			   int recordNo,
+			   int numRecords = 1);
   
   int pkReadRecord(Ndb*,
 		   int recordNo,

--- 1.21/ndb/test/ndbapi/testNdbApi.cpp	2005-07-21 09:10:40 +02:00
+++ 1.22/ndb/test/ndbapi/testNdbApi.cpp	2005-07-22 14:29:56 +02:00
@@ -1037,7 +1037,7 @@
   return result;
 }
 
-#define C2(x) { int _x= (x); if(_x == 0) return NDBT_FAILED; }
+#define C2(x) { int _x= (x); if(_x == 0){ ndbout << "line: " << __LINE__
<< endl;  return NDBT_FAILED;} }
 
 int runBug_11133(NDBT_Context* ctx, NDBT_Step* step){
   int result = NDBT_OK;
@@ -1046,7 +1046,6 @@
   HugoOperations hugoOps(*pTab);
 
   Ndb* pNdb = GETNDB(step);
-
   C2(hugoOps.startTransaction(pNdb) == 0);
   C2(hugoOps.pkInsertRecord(pNdb, 0, 1) == 0);
   C2(hugoOps.execute_NoCommit(pNdb) == 0);
@@ -1098,7 +1097,7 @@
   C2(hugoOps.pkInsertRecord(pNdb, 0, 1) == 0);
   C2(hugoOps.execute_NoCommit(pNdb) == 0);
   C2(hugoOps2.startTransaction(&ndb2) == 0);
-  C2(hugoOps2.pkWriteRecord(&ndb2, 0, 1) == 0);
+  C2(hugoOps2.pkWritePartialRecord(&ndb2, 0) == 0);
   C2(hugoOps2.execute_async(&ndb2, NdbTransaction::NoCommit) == 0);
   C2(hugoOps.execute_Commit(pNdb) == 0);
   C2(hugoOps2.wait_async(&ndb2) == 0);
@@ -1113,6 +1112,29 @@
   C2(hugoOps2.execute_async(&ndb2, NdbTransaction::NoCommit) == 0);
   C2(hugoOps.execute_Commit(pNdb) == 0);
   C2(hugoOps2.wait_async(&ndb2) == 0);
+  C2(hugoOps2.execute_Commit(pNdb) == 0);
+  C2(hugoOps.closeTransaction(pNdb) == 0);
+  C2(hugoOps2.closeTransaction(&ndb2) == 0);  
+
+  C2(hugoOps.startTransaction(pNdb) == 0);
+  C2(hugoOps.pkUpdateRecord(pNdb, 0, 1) == 0);
+  C2(hugoOps.execute_NoCommit(pNdb) == 0);
+  C2(hugoOps2.startTransaction(&ndb2) == 0);
+  C2(hugoOps2.pkWritePartialRecord(&ndb2, 0) == 0);
+  C2(hugoOps2.execute_async(&ndb2, NdbTransaction::NoCommit) == 0);
+  C2(hugoOps.execute_Commit(pNdb) == 0);
+  C2(hugoOps2.wait_async(&ndb2) == 0);
+  C2(hugoOps.closeTransaction(pNdb) == 0);
+  C2(hugoOps2.closeTransaction(&ndb2) == 0);  
+
+  C2(hugoOps.startTransaction(pNdb) == 0);
+  C2(hugoOps.pkDeleteRecord(pNdb, 0, 1) == 0);
+  C2(hugoOps.execute_NoCommit(pNdb) == 0);
+  C2(hugoOps2.startTransaction(&ndb2) == 0);
+  C2(hugoOps2.pkWritePartialRecord(&ndb2, 0) == 0);
+  C2(hugoOps2.execute_async(&ndb2, NdbTransaction::NoCommit) == 0);
+  C2(hugoOps.execute_Commit(pNdb) == 0);
+  C2(hugoOps2.wait_async(&ndb2) != 0);
   C2(hugoOps.closeTransaction(pNdb) == 0);
   C2(hugoOps2.closeTransaction(&ndb2) == 0);  
 

--- 1.21/ndb/test/src/HugoOperations.cpp	2005-07-21 09:10:40 +02:00
+++ 1.22/ndb/test/src/HugoOperations.cpp	2005-07-22 14:29:56 +02:00
@@ -267,6 +267,37 @@
   return NDBT_OK;
 }
 
+int HugoOperations::pkWritePartialRecord(Ndb* pNdb,
+					 int recordNo,
+					 int numRecords){
+  
+  int a, check;
+  for(int r=0; r < numRecords; r++){
+    NdbOperation* pOp = pTrans->getNdbOperation(tab.getName());	
+    if (pOp == NULL) {
+      ERR(pTrans->getNdbError());
+      return NDBT_FAILED;
+    }
+    
+    check = pOp->writeTuple();
+    if( check == -1 ) {
+      ERR(pTrans->getNdbError());
+      return NDBT_FAILED;
+    }
+    
+    // Define primary keys
+    for(a = 0; a<tab.getNoOfColumns(); a++){
+      if (tab.getColumn(a)->getPrimaryKey() == true){
+	if(equalForAttr(pOp, a, r+recordNo) != 0){
+	  ERR(pTrans->getNdbError());
+	  return NDBT_FAILED;
+	}
+      }
+    }
+  }
+  return NDBT_OK;
+}
+
 int HugoOperations::pkDeleteRecord(Ndb* pNdb,
 				   int recordNo,
 				   int numRecords){
@@ -419,7 +450,14 @@
 {
   assert(pCon == pTrans);
   m_async_reply= 1;
-  m_async_return= res;
+  if(res)
+  {
+    m_async_return = pCon->getNdbError().code;
+  }
+  else
+  {
+    m_async_return = 0;
+  }
 }
 
 int 
@@ -444,6 +482,8 @@
 
   if(m_async_reply)
   {
+    if(m_async_return)
+      ndbout << "ERROR: " << pNdb->getNdbError(m_async_return) <<
endl;
     return m_async_return;
   }
   ndbout_c("wait returned nothing...");
Thread
bk commit into 5.0 tree (joreland:1.1876) BUG#11133jonas.oreland22 Jul