List:Commits« Previous MessageNext Message »
From:pekka Date:July 19 2006 2:50pm
Subject:bk commit into 5.1 tree (pekka:1.2257) BUG#14935
View as plain text  
Below is the list of changes that have just been committed into a local
5.1 repository of pekka. When pekka 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@stripped, 2006-07-19 14:49:58+02:00, pekka@stripped +5 -0
  ndb - bug#14935 fix

  storage/ndb/src/kernel/blocks/ERROR_codes.txt@stripped, 2006-07-19 14:48:48+02:00,
pekka@stripped +4 -1
    if TUX update fails, need to abort op on tuple (5.1 specific)

  storage/ndb/src/kernel/blocks/dbtup/Dbtup.hpp@stripped, 2006-07-19 14:48:48+02:00,
pekka@stripped +3 -0
    if TUX update fails, need to abort op on tuple (5.1 specific)

  storage/ndb/src/kernel/blocks/dbtup/DbtupAbort.cpp@stripped, 2006-07-19 14:48:48+02:00,
pekka@stripped +9 -2
    if TUX update fails, need to abort op on tuple (5.1 specific)

  storage/ndb/src/kernel/blocks/dbtup/DbtupExecQuery.cpp@stripped, 2006-07-19 14:48:48+02:00,
pekka@stripped +11 -0
    if TUX update fails, need to abort op on tuple (5.1 specific)

  storage/ndb/src/kernel/blocks/dbtup/DbtupTrigger.cpp@stripped, 2006-07-19 14:48:48+02:00,
pekka@stripped +14 -0
    if TUX update fails, need to abort op on tuple (5.1 specific)

# 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:	pekka
# Host:	orca.ndb.mysql.com
# Root:	/space_old/pekka/ndb/version/my51-bug14935

--- 1.22/storage/ndb/src/kernel/blocks/ERROR_codes.txt	2006-07-19 14:50:17 +02:00
+++ 1.23/storage/ndb/src/kernel/blocks/ERROR_codes.txt	2006-07-19 14:50:17 +02:00
@@ -2,7 +2,7 @@
 Next NDBCNTR 1000
 Next NDBFS 2000
 Next DBACC 3002
-Next DBTUP 4013
+Next DBTUP 4024
 Next DBLQH 5043
 Next DBDICT 6007
 Next DBDIH 7177
@@ -484,3 +484,6 @@
 4019 - handleInsert - Alloc rowid error
 4020 - handleInsert - Size change error
 4021 - handleInsert - Out of disk space
+
+4022 - addTuxEntries - fail before add of first entry
+4023 - addTuxEntries - fail add of last entry (the entry for last index)

--- 1.47/storage/ndb/src/kernel/blocks/dbtup/Dbtup.hpp	2006-07-19 14:50:17 +02:00
+++ 1.48/storage/ndb/src/kernel/blocks/dbtup/Dbtup.hpp	2006-07-19 14:50:17 +02:00
@@ -2156,6 +2156,9 @@
 //------------------------------------------------------------------
   void tupkeyErrorLab(Signal* signal);
 
+  // need flag to skip TUX indexes
+  void do_tup_abortreq(Signal*, Uint32 flags);
+
 //------------------------------------------------------------------
 //------------------------------------------------------------------
 // Methods to handle execution of TUP_COMMITREQ + TUP_ABORTREQ.

--- 1.9/storage/ndb/src/kernel/blocks/dbtup/DbtupAbort.cpp	2006-07-19 14:50:18 +02:00
+++ 1.10/storage/ndb/src/kernel/blocks/dbtup/DbtupAbort.cpp	2006-07-19 14:50:18 +02:00
@@ -63,6 +63,11 @@
  */
 void Dbtup::execTUP_ABORTREQ(Signal* signal) 
 {
+  do_tup_abortreq(signal, 0);
+}
+
+void Dbtup::do_tup_abortreq(Signal* signal, Uint32 flags)
+{
   OperationrecPtr regOperPtr;
   FragrecordPtr regFragPtr;
   TablerecPtr regTabPtr;
@@ -91,7 +96,8 @@
   if (get_tuple_state(regOperPtr.p) == TUPLE_PREPARED)
   {
     ljam();
-    if (!regTabPtr.p->tuxCustomTriggers.isEmpty())
+    if (!regTabPtr.p->tuxCustomTriggers.isEmpty() &&
+        (flags & 0x1) == 0)
       executeTuxAbortTriggers(signal,
 			      regOperPtr.p,
 			      regFragPtr.p,
@@ -103,7 +109,8 @@
       ljam();
       c_operation_pool.getPtr(loopOpPtr);
       if (get_tuple_state(loopOpPtr.p) != TUPLE_ALREADY_ABORTED &&
-	  !regTabPtr.p->tuxCustomTriggers.isEmpty()) {
+	  !regTabPtr.p->tuxCustomTriggers.isEmpty() &&
+          (flags & 0x1) == 0) {
         ljam();
         executeTuxAbortTriggers(signal,
                                 loopOpPtr.p,

--- 1.39/storage/ndb/src/kernel/blocks/dbtup/DbtupExecQuery.cpp	2006-07-19 14:50:18 +02:00
+++ 1.40/storage/ndb/src/kernel/blocks/dbtup/DbtupExecQuery.cpp	2006-07-19 14:50:18 +02:00
@@ -747,6 +747,12 @@
 				      regFragPtr,
 				      regTabPtr) != 0) {
 	   jam();
+           /*
+            * undo the change before tupkeyErrorLab resets the op
+            * assume no timeslicing can occur even with diskdata
+            */
+           signal->theData[0] = operPtr.i;
+           do_tup_abortreq(signal, 0x1);
 	   tupkeyErrorLab(signal);
 	   return;
 	 }
@@ -775,6 +781,11 @@
 				      regFragPtr,
 				      regTabPtr) != 0) {
 	   jam();
+           /*
+            * see insert case
+            */
+           signal->theData[0] = operPtr.i;
+           do_tup_abortreq(signal, 0x1);
 	   tupkeyErrorLab(signal);
 	   return;
 	 }

--- 1.24/storage/ndb/src/kernel/blocks/dbtup/DbtupTrigger.cpp	2006-07-19 14:50:18 +02:00
+++ 1.25/storage/ndb/src/kernel/blocks/dbtup/DbtupTrigger.cpp	2006-07-19 14:50:18 +02:00
@@ -1111,6 +1111,12 @@
                      Operationrec* regOperPtr,
                      Tablerec* regTabPtr)
 {
+  if (ERROR_INSERTED(4022)) {
+    ljam();
+    CLEAR_ERROR_INSERT_VALUE;
+    terrorCode = 9999;
+    return -1;
+  }
   TuxMaintReq* const req = (TuxMaintReq*)signal->getDataPtrSend();
   const DLList<TupTriggerData>& triggerList = regTabPtr->tuxCustomTriggers;
   TriggerPtr triggerPtr;
@@ -1120,6 +1126,14 @@
     ljam();
     req->indexId = triggerPtr.p->indexId;
     req->errorCode = RNIL;
+    if (ERROR_INSERTED(4023) &&
+        ! triggerList.hasNext(triggerPtr)) {
+      ljam();
+      CLEAR_ERROR_INSERT_VALUE;
+      terrorCode = 9999;
+      failPtrI = triggerPtr.i;
+      goto fail;
+    }
     EXECUTE_DIRECT(DBTUX, GSN_TUX_MAINT_REQ,
         signal, TuxMaintReq::SignalLength);
     ljamEntry();
Thread
bk commit into 5.1 tree (pekka:1.2257) BUG#14935pekka19 Jul