#At file:///home/jonas/src/telco-6.2/ based on revid:magnus.blaudd@stripped
3025 Jonas Oreland 2009-10-12
ndb - bug#47935 - fix incorrect assertion on backup replica when getting ZTUPLE_ALREADY_EXIST
modified:
storage/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp
storage/ndb/test/ndbapi/testNdbApi.cpp
=== modified file 'storage/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp'
--- a/storage/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp 2009-09-22 07:32:29 +0000
+++ b/storage/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp 2009-10-12 05:43:10 +0000
@@ -7086,31 +7086,22 @@ void Dblqh::execACCKEYREF(Signal* signal
ndbrequire(!LqhKeyReq::getNrCopyFlag(tcPtr->reqinfo));
/**
- * Only primary replica can get ZTUPLE_ALREADY_EXIST || ZNO_TUPLE_FOUND
+ * Not only primary replica can get ZTUPLE_ALREADY_EXIST || ZNO_TUPLE_FOUND
*
- * Unless it's a simple or dirty read
- *
- * NOT TRUE!
* 1) op1 - primary insert ok
* 2) op1 - backup insert fail (log full or what ever)
* 3) op1 - delete ok @ primary
* 4) op1 - delete fail @ backup
*
* -> ZNO_TUPLE_FOUND is possible
+ *
+ * 1) op1 primary delete ok
+ * 2) op1 backup delete fail (log full or what ever)
+ * 3) op2 insert ok @ primary
+ * 4) op2 insert fail @ backup
+ *
+ * -> ZTUPLE_ALREADY_EXIST
*/
- if (unlikely(! (tcPtr->seqNoReplica == 0 ||
- errCode != ZTUPLE_ALREADY_EXIST ||
- (tcPtr->operation == ZREAD &&
- (tcPtr->dirtyOp || tcPtr->opSimple)))))
- {
- jamLine(Uint32(tcPtr->operation));
- jamLine(Uint32(tcPtr->seqNoReplica));
- jamLine(Uint32(errCode));
- jamLine(Uint32(tcPtr->dirtyOp));
- jamLine(Uint32(tcPtr->opSimple));
- ndbrequire(false);
- }
-
tcPtr->abortState = TcConnectionrec::ABORT_FROM_LQH;
abortCommonLab(signal);
return;
=== modified file 'storage/ndb/test/ndbapi/testNdbApi.cpp'
--- a/storage/ndb/test/ndbapi/testNdbApi.cpp 2009-10-06 10:39:02 +0000
+++ b/storage/ndb/test/ndbapi/testNdbApi.cpp 2009-10-12 05:43:10 +0000
@@ -2758,10 +2758,10 @@ runBug44065_org(NDBT_Context* ctx, NDBT_
ndbout << "Outer Iter : " << outerIter
<< " " << offset << "-" << (offset + numRecords - 1) << endl;
- CHECK(hugoOps.startTransaction(pNdb) == 0);
- CHECK(hugoOps.pkInsertRecord(pNdb, offset, numRecords) == 0);
- CHECK(hugoOps.execute_Commit(pNdb) == 0);
- CHECK(hugoOps.closeTransaction(pNdb) == 0);
+ {
+ HugoTransactions trans(*pTab);
+ CHECK(trans.loadTableStartFrom(pNdb, offset, numRecords) == 0);
+ }
for (int iter=0; iter < numInnerIterations; iter++)
{
@@ -2784,10 +2784,12 @@ runBug44065_org(NDBT_Context* ctx, NDBT_
if ((trans->execute(NdbTransaction::NoCommit,
NdbOperation::AO_IgnoreError) != 0))
{
+ NdbError err = trans->getNdbError();
ndbout << "Execute failed, error is "
- << trans->getNdbError().code << " "
- << trans->getNdbError().message << endl;
- CHECK(0);
+ << err.code << " " << endl;
+ CHECK((err.classification == NdbError::TemporaryResourceError ||
+ err.classification == NdbError::OverloadError));
+ NdbSleep_MilliSleep(50);
}
/* Now abort the transaction by closing it without committing */
Attachment: [text/bzr-bundle] bzr/jonas@mysql.com-20091012054310-9o2a0r0ox4ms1cv4.bundle
| Thread |
|---|
| • bzr commit into mysql-5.1-telco-6.2 branch (jonas:3025) Bug#47935 | Jonas Oreland | 12 Oct |