From: Date: July 22 2005 2:30pm Subject: bk commit into 5.0 tree (joreland:1.1876) BUG#11133 List-Archive: http://lists.mysql.com/internals/27470 X-Bug: 11133 Message-Id: <20050722123007.677A41D2C44@eel> 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; agetPrimaryKey() == 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...");