List:Commits« Previous MessageNext Message »
From:Jonas Oreland Date:October 12 2009 5:43am
Subject:bzr commit into mysql-5.1-telco-6.2 branch (jonas:3025) Bug#47935
View as plain text  
#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#47935Jonas Oreland12 Oct