From: Date: September 14 2006 10:01pm Subject: bk commit into 5.0 tree (jonas:1.2247) BUG#21535 List-Archive: http://lists.mysql.com/commits/11969 X-Bug: 21535 Message-Id: <20060914200130.888DF4133F5@perch.ndb.mysql.com> Below is the list of changes that have just been committed into a local 5.0 repository of jonas. When jonas 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-09-14 22:01:26+02:00, jonas@stripped +8 -0 ndb - bug#21535 send new fragdistkeys to all replicas during node recovery to make sure that not 3rd or 4th replicas fragDistKey becomes out of sync ndb/include/kernel/GlobalSignalNumbers.h@stripped, 2006-09-14 22:01:24+02:00, jonas@stripped +1 -0 new signal UpdateFragDistKeyOrd ndb/include/kernel/signaldata/CopyFrag.hpp@stripped, 2006-09-14 22:01:24+02:00, jonas@stripped +13 -1 new signal UpdateFragDistKeyOrd ndb/include/ndb_version.h.in@stripped, 2006-09-14 22:01:24+02:00, jonas@stripped +2 -0 online software upgrade for new signal UpdateFragDistKeyOrd ndb/src/common/debugger/signaldata/SignalNames.cpp@stripped, 2006-09-14 22:01:24+02:00, jonas@stripped +2 -1 new signal UpdateFragDistKeyOrd ndb/src/kernel/blocks/dbdih/DbdihMain.cpp@stripped, 2006-09-14 22:01:24+02:00, jonas@stripped +4 -1 Send noew list of all replicas in copyfragreq ndb/src/kernel/blocks/dblqh/Dblqh.hpp@stripped, 2006-09-14 22:01:24+02:00, jonas@stripped +1 -0 new signal UpdateFragDistKeyOrd ndb/src/kernel/blocks/dblqh/DblqhInit.cpp@stripped, 2006-09-14 22:01:24+02:00, jonas@stripped +3 -1 new signal UpdateFragDistKeyOrd ndb/src/kernel/blocks/dblqh/DblqhMain.cpp@stripped, 2006-09-14 22:01:24+02:00, jonas@stripped +65 -1 new signal UpdateFragDistKeyOrd # 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: jonas # Host: perch.ndb.mysql.com # Root: /home/jonas/src/50-work --- 1.4/ndb/include/ndb_version.h.in 2006-09-14 22:01:30 +02:00 +++ 1.5/ndb/include/ndb_version.h.in 2006-09-14 22:01:30 +02:00 @@ -62,5 +62,7 @@ #define NDBD_DICT_LOCK_VERSION_5 MAKE_VERSION(5,0,23) +#define NDBD_UPDATE_FRAG_DIST_KEY_50 MAKE_VERSION(5,0,26) +#define NDBD_UPDATE_FRAG_DIST_KEY_51 MAKE_VERSION(5,1,12) #endif --- 1.15/ndb/include/kernel/GlobalSignalNumbers.h 2006-09-14 22:01:30 +02:00 +++ 1.16/ndb/include/kernel/GlobalSignalNumbers.h 2006-09-14 22:01:30 +02:00 @@ -127,6 +127,7 @@ /* 68 unused */ /* 69 unused */ /* 70 unused */ +#define GSN_UPDATE_FRAG_DIST_KEY_ORD 70 #define GSN_ACC_ABORTREQ 71 #define GSN_ACC_CHECK_SCAN 72 #define GSN_ACC_COMMITCONF 73 --- 1.1/ndb/include/kernel/signaldata/CopyFrag.hpp 2006-09-14 22:01:30 +02:00 +++ 1.2/ndb/include/kernel/signaldata/CopyFrag.hpp 2006-09-14 22:01:30 +02:00 @@ -30,7 +30,8 @@ */ friend class Dblqh; public: - STATIC_CONST( SignalLength = 7 ); + STATIC_CONST( SignalLength = 8 + ); private: Uint32 userPtr; @@ -40,6 +41,8 @@ Uint32 nodeId; Uint32 schemaVersion; Uint32 distributionKey; + Uint32 nodeCount; + Uint32 nodeList[1]; }; class CopyFragConf { @@ -82,6 +85,15 @@ Uint32 tableId; Uint32 fragId; Uint32 errorCode; +}; + +struct UpdateFragDistKeyOrd +{ + Uint32 tableId; + Uint32 fragId; + Uint32 fragDistributionKey; + + STATIC_CONST( SignalLength = 3 ); }; #endif --- 1.9/ndb/src/common/debugger/signaldata/SignalNames.cpp 2006-09-14 22:01:30 +02:00 +++ 1.10/ndb/src/common/debugger/signaldata/SignalNames.cpp 2006-09-14 22:01:30 +02:00 @@ -636,6 +636,7 @@ ,{ GSN_DICT_LOCK_CONF, "DICT_LOCK_CONF" } ,{ GSN_DICT_LOCK_REF, "DICT_LOCK_REF" } ,{ GSN_DICT_UNLOCK_ORD, "DICT_UNLOCK_ORD" } - + + ,{ GSN_UPDATE_FRAG_DIST_KEY_ORD, "UPDATE_FRAG_DIST_KEY_ORD" } }; const unsigned short NO_OF_SIGNAL_NAMES = sizeof(SignalNames)/sizeof(GsnName); --- 1.58/ndb/src/kernel/blocks/dbdih/DbdihMain.cpp 2006-09-14 22:01:30 +02:00 +++ 1.59/ndb/src/kernel/blocks/dbdih/DbdihMain.cpp 2006-09-14 22:01:30 +02:00 @@ -3078,7 +3078,10 @@ copyFragReq->nodeId = takeOverPtr.p->toStartingNode; copyFragReq->schemaVersion = tabPtr.p->schemaVersion; copyFragReq->distributionKey = fragPtr.p->distributionKey; - sendSignal(ref, GSN_COPY_FRAGREQ, signal, CopyFragReq::SignalLength, JBB); + copyFragReq->nodeCount = extractNodeInfo(fragPtr.p, + copyFragReq->nodeList); + sendSignal(ref, GSN_COPY_FRAGREQ, signal, + CopyFragReq::SignalLength + copyFragReq->nodeCount, JBB); } else { ndbrequire(takeOverPtr.p->toMasterStatus == TakeOverRecord::COMMIT_CREATE); jam(); --- 1.39/ndb/src/kernel/blocks/dblqh/Dblqh.hpp 2006-09-14 22:01:30 +02:00 +++ 1.40/ndb/src/kernel/blocks/dblqh/Dblqh.hpp 2006-09-14 22:01:30 +02:00 @@ -2161,6 +2161,7 @@ void execSTORED_PROCCONF(Signal* signal); void execSTORED_PROCREF(Signal* signal); void execCOPY_FRAGREQ(Signal* signal); + void execUPDATE_FRAG_DIST_KEY_ORD(Signal*); void execCOPY_ACTIVEREQ(Signal* signal); void execCOPY_STATEREQ(Signal* signal); void execLQH_TRANSREQ(Signal* signal); --- 1.15/ndb/src/kernel/blocks/dblqh/DblqhInit.cpp 2006-09-14 22:01:30 +02:00 +++ 1.16/ndb/src/kernel/blocks/dblqh/DblqhInit.cpp 2006-09-14 22:01:30 +02:00 @@ -335,7 +335,9 @@ addRecSignal(GSN_TUX_ADD_ATTRREF, &Dblqh::execTUX_ADD_ATTRREF); addRecSignal(GSN_READ_PSUEDO_REQ, &Dblqh::execREAD_PSUEDO_REQ); - + addRecSignal(GSN_UPDATE_FRAG_DIST_KEY_ORD, + &Dblqh::execUPDATE_FRAG_DIST_KEY_ORD); + initData(); #ifdef VM_TRACE --- 1.93/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp 2006-09-14 22:01:30 +02:00 +++ 1.94/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp 2006-09-14 22:01:30 +02:00 @@ -9109,7 +9109,12 @@ ndbrequire(cfirstfreeTcConrec != RNIL); ndbrequire(fragptr.p->m_scanNumberMask.get(NR_ScanNo)); - fragptr.p->fragDistributionKey = copyFragReq->distributionKey; + Uint32 key = fragptr.p->fragDistributionKey = copyFragReq->distributionKey; + + Uint32 nodeCount = copyFragReq->nodeCount; + Uint32 nodeList[MAX_REPLICAS]; + ndbrequire(nodeCount <= MAX_REPLICAS); + memcpy(nodeList, copyFragReq->nodeList, 4*nodeCount); if (DictTabInfo::isOrderedIndex(tabptr.p->tableType)) { jam(); @@ -9184,9 +9189,56 @@ req->savePointId = tcConnectptr.p->savePointId; sendSignal(tcConnectptr.p->tcAccBlockref, GSN_ACC_SCANREQ, signal, AccScanReq::SignalLength, JBB); + + Uint32 i; + NdbNodeBitmask mask; + for (i = 0; igetDataPtrSend(); + ord->tableId = tabptr.i; + ord->fragId = fragId; + ord->fragDistributionKey = key; + i = 0; + while ((i = mask.find(i+1)) != NdbNodeBitmask::NotFound) + { +#ifdef NDB_VERSION >= MAKE_VERSION(5,1,0) + Uint32 checkversion = NDBD_UPDATE_FRAG_DIST_KEY_51; +#elif NDB_VERSION >= MAKE_VERSION(5,0,0) + Uint32 checkversion = NDBD_UPDATE_FRAG_DIST_KEY_50; +#endif + checkversion = NDB_VERSION; + if (getNodeInfo(i).m_version >= checkversion) + sendSignal(calcLqhBlockRef(i), GSN_UPDATE_FRAG_DIST_KEY_ORD, + signal, UpdateFragDistKeyOrd::SignalLength, JBB); + } + } return; }//Dblqh::execCOPY_FRAGREQ() +void +Dblqh::execUPDATE_FRAG_DIST_KEY_ORD(Signal * signal) +{ + jamEntry(); + UpdateFragDistKeyOrd* ord =(UpdateFragDistKeyOrd*)signal->getDataPtr(); + + tabptr.i = ord->tableId; + ptrCheckGuard(tabptr, ctabrecFileSize, tablerec); + ndbrequire(getFragmentrec(signal, ord->fragId)); + fragptr.p->fragDistributionKey = ord->fragDistributionKey; + + ndbout_c("UpdateFragDistKeyOrd tab: %d frag: %d key: %d", + tabptr.i, + ord->fragId, + ord->fragDistributionKey); +} + void Dblqh::accScanConfCopyLab(Signal* signal) { AccScanConf * const accScanConf = (AccScanConf *)&signal->theData[0]; @@ -18437,6 +18489,18 @@ if(tabPtr.p->tableStatus != Tablerec::NOT_DEFINED){ infoEvent("Table %d Status: %d Usage: %d", i, tabPtr.p->tableStatus, tabPtr.p->usageCount); + + for (Uint32 j = 0; jfragrec[j]) != RNIL) + { + ptrCheckGuard(fragPtr, cfragrecFileSize, fragrecord); + infoEvent(" frag: %d distKey: %u", + tabPtr.p->fragid[j], + fragPtr.p->fragDistributionKey); + } + } } } return;