#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#46563 | Jonas Oreland | 5 Aug |