Commit 86999f2a authored by unknown's avatar unknown

bug#11133 - ndb write/lock upgrade

  fix test case
  improve testing


ndb/test/include/HugoOperations.hpp:
  Partial write (only pk)
ndb/test/ndbapi/testNdbApi.cpp:
  improve testcase
    use writePartial to verify that ops get correctly converted
    (also test negative)
ndb/test/src/HugoOperations.cpp:
  write partial + improve prinout in wait_async
parent 3ea233d5
...@@ -4849,16 +4849,16 @@ Uint32 Dbacc::executeNextOperation(Signal* signal) ...@@ -4849,16 +4849,16 @@ Uint32 Dbacc::executeNextOperation(Signal* signal)
else if(operationRecPtr.p->operation == ZWRITE) else if(operationRecPtr.p->operation == ZWRITE)
{ {
jam(); jam();
operationRecPtr.p->operation = ZINSERT; operationRecPtr.p->operation = ZUPDATE;
if (operationRecPtr.p->prevParallelQue != RNIL) { if (operationRecPtr.p->prevParallelQue != RNIL) {
OperationrecPtr prevOpPtr; OperationrecPtr prevOpPtr;
jam(); jam();
prevOpPtr.i = operationRecPtr.p->prevParallelQue; prevOpPtr.i = operationRecPtr.p->prevParallelQue;
ptrCheckGuard(prevOpPtr, coprecsize, operationrec); ptrCheckGuard(prevOpPtr, coprecsize, operationrec);
if (prevOpPtr.p->operation != ZDELETE) if (prevOpPtr.p->operation == ZDELETE)
{ {
jam(); jam();
operationRecPtr.p->operation = ZUPDATE; operationRecPtr.p->operation = ZINSERT;
} }
} }
} }
......
...@@ -46,6 +46,10 @@ public: ...@@ -46,6 +46,10 @@ public:
int numRecords = 1, int numRecords = 1,
int updatesValue = 0); int updatesValue = 0);
int pkWritePartialRecord(Ndb*,
int recordNo,
int numRecords = 1);
int pkReadRecord(Ndb*, int pkReadRecord(Ndb*,
int recordNo, int recordNo,
int numRecords = 1, int numRecords = 1,
......
...@@ -1037,7 +1037,7 @@ int runCheckGetNdbErrorOperation(NDBT_Context* ctx, NDBT_Step* step){ ...@@ -1037,7 +1037,7 @@ int runCheckGetNdbErrorOperation(NDBT_Context* ctx, NDBT_Step* step){
return result; 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 runBug_11133(NDBT_Context* ctx, NDBT_Step* step){
int result = NDBT_OK; int result = NDBT_OK;
...@@ -1046,7 +1046,6 @@ int runBug_11133(NDBT_Context* ctx, NDBT_Step* step){ ...@@ -1046,7 +1046,6 @@ int runBug_11133(NDBT_Context* ctx, NDBT_Step* step){
HugoOperations hugoOps(*pTab); HugoOperations hugoOps(*pTab);
Ndb* pNdb = GETNDB(step); Ndb* pNdb = GETNDB(step);
C2(hugoOps.startTransaction(pNdb) == 0); C2(hugoOps.startTransaction(pNdb) == 0);
C2(hugoOps.pkInsertRecord(pNdb, 0, 1) == 0); C2(hugoOps.pkInsertRecord(pNdb, 0, 1) == 0);
C2(hugoOps.execute_NoCommit(pNdb) == 0); C2(hugoOps.execute_NoCommit(pNdb) == 0);
...@@ -1098,7 +1097,7 @@ int runBug_11133(NDBT_Context* ctx, NDBT_Step* step){ ...@@ -1098,7 +1097,7 @@ int runBug_11133(NDBT_Context* ctx, NDBT_Step* step){
C2(hugoOps.pkInsertRecord(pNdb, 0, 1) == 0); C2(hugoOps.pkInsertRecord(pNdb, 0, 1) == 0);
C2(hugoOps.execute_NoCommit(pNdb) == 0); C2(hugoOps.execute_NoCommit(pNdb) == 0);
C2(hugoOps2.startTransaction(&ndb2) == 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(hugoOps2.execute_async(&ndb2, NdbTransaction::NoCommit) == 0);
C2(hugoOps.execute_Commit(pNdb) == 0); C2(hugoOps.execute_Commit(pNdb) == 0);
C2(hugoOps2.wait_async(&ndb2) == 0); C2(hugoOps2.wait_async(&ndb2) == 0);
...@@ -1113,6 +1112,29 @@ int runBug_11133(NDBT_Context* ctx, NDBT_Step* step){ ...@@ -1113,6 +1112,29 @@ int runBug_11133(NDBT_Context* ctx, NDBT_Step* step){
C2(hugoOps2.execute_async(&ndb2, NdbTransaction::NoCommit) == 0); C2(hugoOps2.execute_async(&ndb2, NdbTransaction::NoCommit) == 0);
C2(hugoOps.execute_Commit(pNdb) == 0); C2(hugoOps.execute_Commit(pNdb) == 0);
C2(hugoOps2.wait_async(&ndb2) == 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(hugoOps.closeTransaction(pNdb) == 0);
C2(hugoOps2.closeTransaction(&ndb2) == 0); C2(hugoOps2.closeTransaction(&ndb2) == 0);
......
...@@ -267,6 +267,37 @@ int HugoOperations::pkWriteRecord(Ndb* pNdb, ...@@ -267,6 +267,37 @@ int HugoOperations::pkWriteRecord(Ndb* pNdb,
return NDBT_OK; 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 HugoOperations::pkDeleteRecord(Ndb* pNdb,
int recordNo, int recordNo,
int numRecords){ int numRecords){
...@@ -419,7 +450,14 @@ HugoOperations::callback(int res, NdbTransaction* pCon) ...@@ -419,7 +450,14 @@ HugoOperations::callback(int res, NdbTransaction* pCon)
{ {
assert(pCon == pTrans); assert(pCon == pTrans);
m_async_reply= 1; m_async_reply= 1;
m_async_return= res; if(res)
{
m_async_return = pCon->getNdbError().code;
}
else
{
m_async_return = 0;
}
} }
int int
...@@ -444,6 +482,8 @@ HugoOperations::wait_async(Ndb* pNdb, int timeout) ...@@ -444,6 +482,8 @@ HugoOperations::wait_async(Ndb* pNdb, int timeout)
if(m_async_reply) if(m_async_reply)
{ {
if(m_async_return)
ndbout << "ERROR: " << pNdb->getNdbError(m_async_return) << endl;
return m_async_return; return m_async_return;
} }
ndbout_c("wait returned nothing..."); ndbout_c("wait returned nothing...");
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment