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#11133 | jonas.oreland | 22 Jul |