List:Commits« Previous MessageNext Message »
From:Jonas Oreland Date:August 5 2009 11:05am
Subject:bzr commit into mysql-5.1-telco-7.0 branch (jonas:2960) Bug#46563
View as plain text  
#At file:///home/jonas/src/telco-6.4/ based on revid:jonas@stripped

 2960 Jonas Oreland	2009-08-05
      ndb - bug#46563
        Add code to detect table-id of SYSTAB_0 as it's impossible to know (hard-coded)
          e.g after upgrade
      
        The incorrect table-id cause Sequences not to work in DbUtil
        Which causes BACKUP (and replication) not to work

    modified:
      storage/ndb/src/kernel/blocks/dbutil/DbUtil.cpp
      storage/ndb/src/kernel/blocks/dbutil/DbUtil.hpp
      storage/ndb/src/kernel/blocks/suma/Suma.cpp
      storage/ndb/test/ndbapi/testUpgrade.cpp
=== modified file 'storage/ndb/src/kernel/blocks/dbutil/DbUtil.cpp'
--- a/storage/ndb/src/kernel/blocks/dbutil/DbUtil.cpp	2009-05-27 15:21:45 +0000
+++ b/storage/ndb/src/kernel/blocks/dbutil/DbUtil.cpp	2009-08-05 11:05:34 +0000
@@ -237,9 +237,24 @@ DbUtil::execSTTOR(Signal* signal) 
     c_transId[1] = 0;
   }
   
-  if(startphase == 6){
-    hardcodedPrepare();
-    connectTc(signal);
+  if(startphase == 6)
+  {
+    jam();
+
+    /**
+     * 1) get systab_0 table-id
+     * 2) run hardcodedPrepare (for sequences)
+     * 3) connectTc()
+     * 4) STTORRY
+     */
+
+    /**
+     * We need to find table-id of SYSTAB_0, as it can be after upgrade
+     *   we don't know what it will be...
+     */
+    get_systab_tableid(signal);
+
+    return;
   }
   
   signal->theData[0] = 0;
@@ -252,6 +267,35 @@ DbUtil::execSTTOR(Signal* signal) 
 }
 
 void
+DbUtil::get_systab_tableid(Signal* signal)
+{
+  static char NAME[] = "sys/def/SYSTAB_0";
+
+  GetTabInfoReq * req = (GetTabInfoReq *)signal->getDataPtrSend();
+  req->senderRef = reference();
+  req->senderData = RNIL;
+  req->schemaTransId = 0;
+  req->requestType = GetTabInfoReq::RequestByName |
+    GetTabInfoReq::LongSignalConf;
+
+  req->tableNameLen = sizeof(NAME);
+
+  /********************************************
+   * Code signal data and send signals to DICT
+   ********************************************/
+
+  Uint32 buf[(sizeof(NAME)+3)/4];
+  ndbrequire(sizeof(buf) >= sizeof(NAME));
+  memcpy(buf, NAME, sizeof(NAME));
+
+  LinearSectionPtr ptr[1];
+  ptr[0].p = buf;
+  ptr[0].sz = sizeof(NAME);
+  sendSignal(DBDICT_REF, GSN_GET_TABINFOREQ, signal,
+             GetTabInfoReq::SignalLength, JBB, ptr,1);
+}
+
+void
 DbUtil::execNDB_STTOR(Signal* signal) 
 {
   (void)signal;  // Don't want compiler warning
@@ -286,6 +330,16 @@ DbUtil::execTCSEIZECONF(Signal* signal){
   ptr.p->connectPtr = signal->theData[1];
   
   c_seizingTransactions.release(ptr);
+
+  if (c_seizingTransactions.isEmpty())
+  {
+    jam();
+    signal->theData[0] = 0;
+    signal->theData[3] = 1;
+    signal->theData[4] = 6;
+    signal->theData[5] = 255;
+    sendSignal(NDBCNTR_REF, GSN_STTORRY, signal, 6, JBB);
+  }
 }
 
 
@@ -970,7 +1024,7 @@ void DbUtil::readPrepareProps(Signal* si
   {
     GetTabInfoReq * req = (GetTabInfoReq *)signal->getDataPtrSend();
     req->senderRef = reference();
-    req->senderData = prepPtr.i;;           
+    req->senderData = prepPtr.i;
     req->schemaTransId = prepPtr.p->schemaTransId;
     if (tableKey == UtilPrepareReq::TableName) {
       jam();
@@ -1031,10 +1085,23 @@ DbUtil::execGET_TABINFO_CONF(Signal* sig
   handle.getSection(dictTabInfoPtr, GetTabInfoConf::DICT_TAB_INFO);
   ndbrequire(dictTabInfoPtr.sz == totalLen);
   
-  PreparePtr prepPtr;
-  c_runningPrepares.getPtr(prepPtr, prepI);
-  prepareOperation(signal, prepPtr, dictTabInfoPtr);
-  releaseSections(handle);
+  if (prepI != RNIL)
+  {
+    jam();
+    PreparePtr prepPtr;
+    c_runningPrepares.getPtr(prepPtr, prepI);
+    prepareOperation(signal, prepPtr, dictTabInfoPtr);
+    releaseSections(handle);
+    return;
+  }
+  else
+  {
+    jam();
+    // get_systab_tableid
+    releaseSections(handle);
+    hardcodedPrepare(signal, conf->tableId);
+    return;
+  }
 }
 
 void
@@ -1512,10 +1579,9 @@ DbUtil::execUTIL_RELEASE_REQ(Signal* sig
  *
  *  A service with a stored incrementable number
  **************************************************************************/
-#define SYSTAB_0 2
-
 void
-DbUtil::hardcodedPrepare() {
+DbUtil::hardcodedPrepare(Signal* signal, Uint32 SYSTAB_0)
+{
   /**
    * Prepare SequenceCurrVal (READ)
    */
@@ -1647,6 +1713,8 @@ DbUtil::hardcodedPrepare() {
     attrInfo[3] = 0; // FinalReadSize
     attrInfo[4] = 0; // SubroutineSize
   }
+
+  connectTc(signal);
 }
 
 void

=== modified file 'storage/ndb/src/kernel/blocks/dbutil/DbUtil.hpp'
--- a/storage/ndb/src/kernel/blocks/dbutil/DbUtil.hpp	2009-05-27 15:21:45 +0000
+++ b/storage/ndb/src/kernel/blocks/dbutil/DbUtil.hpp	2009-08-05 11:05:34 +0000
@@ -420,7 +420,8 @@ public:
 		   struct LinearSectionPtr sectionsPtr[]);
   void finishTransaction(Signal*, TransactionPtr);
   void releaseTransaction(TransactionPtr transPtr);
-  void hardcodedPrepare();
+  void get_systab_tableid(Signal*);
+  void hardcodedPrepare(Signal*, Uint32 SYSTAB_0);
   void connectTc(Signal* signal);
   void reportSequence(Signal*, const Transaction *);
   void readPrepareProps(Signal* signal, 

=== modified file 'storage/ndb/src/kernel/blocks/suma/Suma.cpp'
--- a/storage/ndb/src/kernel/blocks/suma/Suma.cpp	2009-05-27 15:21:45 +0000
+++ b/storage/ndb/src/kernel/blocks/suma/Suma.cpp	2009-08-05 11:05:34 +0000
@@ -1653,6 +1653,11 @@ Suma::execUTIL_SEQUENCE_REF(Signal* sign
 
   SubscriberPtr subbPtr;
   c_subscriberPool.getPtr(subbPtr,subData);
+  if (err == UtilSequenceRef::TCError)
+  {
+    jam();
+    err = ref->TCErrorCode;
+  }
   sendSubIdRef(signal, subbPtr.p->m_senderRef, subbPtr.p->m_senderData, err);
   c_subscriberPool.release(subbPtr);
   DBUG_PRINT("info",("c_subscriberPool  size: %d free: %d",

=== modified file 'storage/ndb/test/ndbapi/testUpgrade.cpp'
--- a/storage/ndb/test/ndbapi/testUpgrade.cpp	2009-08-05 09:57:22 +0000
+++ b/storage/ndb/test/ndbapi/testUpgrade.cpp	2009-08-05 11:05:34 +0000
@@ -23,6 +23,7 @@
 #include <NdbRestarter.hpp>
 #include <AtrtClient.hpp>
 #include <Bitmask.hpp>
+#include <NdbBackup.hpp>
 
 static Vector<BaseString> table_list;
 
@@ -496,6 +497,17 @@ runPostUpgradeChecks(NDBT_Context* ctx, 
    *   automatically by NDBT...
    *   so when we enter here, this is already tested
    */
+
+  NdbBackup backup(GETNDB(step)->getNodeId()+1);
+
+  ndbout << "Starting backup..." << flush;
+  if (backup.start() != 0)
+  {
+    ndbout << "Failed" << endl;
+    return NDBT_FAILED;
+  }
+  ndbout << "done" << endl;
+
   return NDBT_OK;
 }
 


Attachment: [text/bzr-bundle] bzr/jonas@mysql.com-20090805110534-ovymemsb130twcrr.bundle
Thread
bzr commit into mysql-5.1-telco-7.0 branch (jonas:2960) Bug#46563Jonas Oreland5 Aug