Loading ndb/include/kernel/signaldata/TupFrag.hpp +4 −2 Original line number Diff line number Diff line Loading @@ -132,9 +132,10 @@ class TupAddAttrConf { friend class Dblqh; friend class Dbtup; public: STATIC_CONST( SignalLength = 1 ); STATIC_CONST( SignalLength = 2 ); private: Uint32 userPtr; Uint32 lastAttr; // bool: got last attr and closed frag op }; class TupAddAttrRef { Loading Loading @@ -171,9 +172,10 @@ class TuxAddAttrConf { friend class Dblqh; friend class Dbtux; public: STATIC_CONST( SignalLength = 1 ); STATIC_CONST( SignalLength = 2 ); private: Uint32 userPtr; Uint32 lastAttr; // bool: got last attr and closed frag op }; class TuxAddAttrRef { Loading ndb/src/common/util/NdbSqlUtil.cpp +3 −3 Original line number Diff line number Diff line Loading @@ -582,7 +582,7 @@ NdbSqlUtil::usable_in_pk(Uint32 typeId, const void* info) cs->cset != 0 && cs->coll != 0 && cs->coll->strnxfrm != 0 && cs->strxfrm_multiply == 1; // current limitation cs->strxfrm_multiply <= 1; // current limitation } break; case Type::Varchar: Loading Loading @@ -618,7 +618,7 @@ NdbSqlUtil::usable_in_ordered_index(Uint32 typeId, const void* info) cs->coll != 0 && cs->coll->strnxfrm != 0 && cs->coll->strnncollsp != 0 && cs->strxfrm_multiply == 1; // current limitation cs->strxfrm_multiply <= 1; // current limitation } break; case Type::Varchar: Loading @@ -633,7 +633,7 @@ NdbSqlUtil::usable_in_ordered_index(Uint32 typeId, const void* info) cs->coll != 0 && cs->coll->strnxfrm != 0 && cs->coll->strnncollsp != 0 && cs->strxfrm_multiply == 1; // current limitation cs->strxfrm_multiply <= 1; // current limitation } break; default: Loading ndb/src/kernel/blocks/ERROR_codes.txt +8 −2 Original line number Diff line number Diff line Loading @@ -2,7 +2,7 @@ Next QMGR 1 Next NDBCNTR 1000 Next NDBFS 2000 Next DBACC 3001 Next DBTUP 4007 Next DBTUP 4013 Next DBLQH 5042 Next DBDICT 6006 Next DBDIH 7174 Loading @@ -10,7 +10,7 @@ Next DBTC 8035 Next CMVMI 9000 Next BACKUP 10022 Next DBUTIL 11002 Next DBTUX 12001 Next DBTUX 12007 Next SUMA 13001 TESTING NODE FAILURE, ARBITRATION Loading Loading @@ -393,6 +393,12 @@ Failed Create Table: -------------------- 7173: Create table failed due to not sufficient number of fragment or replica records. 4007 12001: Fail create 1st fragment 4008 12002: Fail create 2nd fragment 4009 12003: Fail create 1st attribute in 1st fragment 4010 12004: Fail create last attribute in 1st fragment 4011 12005: Fail create 1st attribute in 2nd fragment 4012 12006: Fail create last attribute in 2nd fragment Drop Table/Index: ----------------- Loading ndb/src/kernel/blocks/dblqh/Dblqh.hpp +1 −1 Original line number Diff line number Diff line Loading @@ -2474,7 +2474,7 @@ private: void sendExecFragRefLab(Signal* signal); void fragrefLab(Signal* signal, BlockReference retRef, Uint32 retPtr, Uint32 errorCode); void accFragRefLab(Signal* signal); void abortAddFragOps(Signal* signal); void rwConcludedLab(Signal* signal); void sendsttorryLab(Signal* signal); void initialiseRecordsLab(Signal* signal, Uint32 data, Uint32, Uint32); Loading ndb/src/kernel/blocks/dblqh/DblqhMain.cpp +104 −1 Original line number Diff line number Diff line Loading @@ -912,6 +912,10 @@ void Dblqh::execREAD_CONFIG_REQ(Signal* signal) /* *********************************************************> */ /* LQHFRAGREQ: Create new fragments for a table. Sender DICT */ /* *********************************************************> */ // this unbelievable mess could be replaced by one signal to LQH // and execute direct to local DICT to get everything at once void Dblqh::execLQHFRAGREQ(Signal* signal) { jamEntry(); Loading Loading @@ -1049,6 +1053,11 @@ void Dblqh::execLQHFRAGREQ(Signal* signal) addfragptr.p->lh3DistrBits = tlhstar; addfragptr.p->tableType = tableType; addfragptr.p->primaryTableId = primaryTableId; // addfragptr.p->tup1Connectptr = RNIL; addfragptr.p->tup2Connectptr = RNIL; addfragptr.p->tux1Connectptr = RNIL; addfragptr.p->tux2Connectptr = RNIL; if (DictTabInfo::isTable(tableType) || DictTabInfo::isHashIndex(tableType)) { Loading Loading @@ -1329,15 +1338,21 @@ void Dblqh::execTUP_ADD_ATTCONF(Signal* signal) { jamEntry(); addfragptr.i = signal->theData[0]; // implies that operation was released on the other side const bool lastAttr = signal->theData[1]; ptrCheckGuard(addfragptr, caddfragrecFileSize, addFragRecord); switch (addfragptr.p->addfragStatus) { case AddFragRecord::TUP_ATTR_WAIT1: jam(); if (lastAttr) addfragptr.p->tup1Connectptr = RNIL; addfragptr.p->addfragStatus = AddFragRecord::TUP_ATTR_WAIT2; sendAddAttrReq(signal); break; case AddFragRecord::TUP_ATTR_WAIT2: jam(); if (lastAttr) addfragptr.p->tup2Connectptr = RNIL; if (DictTabInfo::isOrderedIndex(addfragptr.p->tableType)) { addfragptr.p->addfragStatus = AddFragRecord::TUX_ATTR_WAIT1; sendAddAttrReq(signal); Loading @@ -1347,11 +1362,15 @@ void Dblqh::execTUP_ADD_ATTCONF(Signal* signal) break; case AddFragRecord::TUX_ATTR_WAIT1: jam(); if (lastAttr) addfragptr.p->tux1Connectptr = RNIL; addfragptr.p->addfragStatus = AddFragRecord::TUX_ATTR_WAIT2; sendAddAttrReq(signal); break; case AddFragRecord::TUX_ATTR_WAIT2: jam(); if (lastAttr) addfragptr.p->tux2Connectptr = RNIL; goto done_with_attr; break; done_with_attr: Loading Loading @@ -1455,6 +1474,7 @@ Dblqh::sendAddAttrReq(Signal* signal) jam(); TupAddAttrConf* tupconf = (TupAddAttrConf*)signal->getDataPtrSend(); tupconf->userPtr = addfragptr.i; tupconf->lastAttr = false; sendSignal(reference(), GSN_TUP_ADD_ATTCONF, signal, TupAddAttrConf::SignalLength, JBB); return; Loading Loading @@ -1485,6 +1505,7 @@ Dblqh::sendAddAttrReq(Signal* signal) jam(); TuxAddAttrConf* tuxconf = (TuxAddAttrConf*)signal->getDataPtrSend(); tuxconf->userPtr = addfragptr.i; tuxconf->lastAttr = false; sendSignal(reference(), GSN_TUX_ADD_ATTRCONF, signal, TuxAddAttrConf::SignalLength, JBB); return; Loading Loading @@ -1549,6 +1570,40 @@ void Dblqh::fragrefLab(Signal* signal, return; }//Dblqh::fragrefLab() /* * Abort on-going ops. */ void Dblqh::abortAddFragOps(Signal* signal) { fragptr.i = addfragptr.p->fragmentPtr; ptrCheckGuard(fragptr, cfragrecFileSize, fragrecord); signal->theData[0] = (Uint32)-1; if (addfragptr.p->tup1Connectptr != RNIL) { jam(); signal->theData[1] = addfragptr.p->tup1Connectptr; sendSignal(fragptr.p->tupBlockref, GSN_TUPFRAGREQ, signal, 2, JBB); addfragptr.p->tup1Connectptr = RNIL; } if (addfragptr.p->tup2Connectptr != RNIL) { jam(); signal->theData[1] = addfragptr.p->tup2Connectptr; sendSignal(fragptr.p->tupBlockref, GSN_TUPFRAGREQ, signal, 2, JBB); addfragptr.p->tup2Connectptr = RNIL; } if (addfragptr.p->tux1Connectptr != RNIL) { jam(); signal->theData[1] = addfragptr.p->tux1Connectptr; sendSignal(fragptr.p->tuxBlockref, GSN_TUXFRAGREQ, signal, 2, JBB); addfragptr.p->tux1Connectptr = RNIL; } if (addfragptr.p->tux2Connectptr != RNIL) { jam(); signal->theData[1] = addfragptr.p->tux2Connectptr; sendSignal(fragptr.p->tuxBlockref, GSN_TUXFRAGREQ, signal, 2, JBB); addfragptr.p->tux2Connectptr = RNIL; } } /* ************>> */ /* ACCFRAGREF > */ /* ************>> */ Loading Loading @@ -1582,6 +1637,27 @@ void Dblqh::execTUPFRAGREF(Signal* signal) fragptr.i = addfragptr.p->fragmentPtr; ptrCheckGuard(fragptr, cfragrecFileSize, fragrecord); addfragptr.p->addfragErrorCode = terrorCode; // no operation to release, just add some jams switch (addfragptr.p->addfragStatus) { case AddFragRecord::WAIT_TWO_TUP: jam(); break; case AddFragRecord::WAIT_ONE_TUP: jam(); break; case AddFragRecord::WAIT_TWO_TUX: jam(); break; case AddFragRecord::WAIT_ONE_TUX: jam(); break; default: ndbrequire(false); break; } abortAddFragOps(signal); const Uint32 ref = addfragptr.p->dictBlockref; const Uint32 senderData = addfragptr.p->dictConnectptr; const Uint32 errorCode = addfragptr.p->addfragErrorCode; Loading @@ -1605,12 +1681,39 @@ void Dblqh::execTUXFRAGREF(Signal* signal) void Dblqh::execTUP_ADD_ATTRREF(Signal* signal) { jamEntry(); addfragptr.i = signal->theData[0]; ptrCheckGuard(addfragptr, caddfragrecFileSize, addFragRecord); terrorCode = signal->theData[1]; addfragptr.p->addfragErrorCode = terrorCode; // operation was released on the other side switch (addfragptr.p->addfragStatus) { case AddFragRecord::TUP_ATTR_WAIT1: jam(); ndbrequire(addfragptr.p->tup1Connectptr != RNIL); addfragptr.p->tup1Connectptr = RNIL; break; case AddFragRecord::TUP_ATTR_WAIT2: jam(); ndbrequire(addfragptr.p->tup2Connectptr != RNIL); addfragptr.p->tup2Connectptr = RNIL; break; case AddFragRecord::TUX_ATTR_WAIT1: jam(); ndbrequire(addfragptr.p->tux1Connectptr != RNIL); addfragptr.p->tux1Connectptr = RNIL; break; case AddFragRecord::TUX_ATTR_WAIT2: jam(); ndbrequire(addfragptr.p->tux2Connectptr != RNIL); addfragptr.p->tux2Connectptr = RNIL; break; default: ndbrequire(false); break; } abortAddFragOps(signal); const Uint32 Ref = addfragptr.p->dictBlockref; const Uint32 senderData = addfragptr.p->dictConnectptr; const Uint32 errorCode = addfragptr.p->addfragErrorCode; Loading Loading
ndb/include/kernel/signaldata/TupFrag.hpp +4 −2 Original line number Diff line number Diff line Loading @@ -132,9 +132,10 @@ class TupAddAttrConf { friend class Dblqh; friend class Dbtup; public: STATIC_CONST( SignalLength = 1 ); STATIC_CONST( SignalLength = 2 ); private: Uint32 userPtr; Uint32 lastAttr; // bool: got last attr and closed frag op }; class TupAddAttrRef { Loading Loading @@ -171,9 +172,10 @@ class TuxAddAttrConf { friend class Dblqh; friend class Dbtux; public: STATIC_CONST( SignalLength = 1 ); STATIC_CONST( SignalLength = 2 ); private: Uint32 userPtr; Uint32 lastAttr; // bool: got last attr and closed frag op }; class TuxAddAttrRef { Loading
ndb/src/common/util/NdbSqlUtil.cpp +3 −3 Original line number Diff line number Diff line Loading @@ -582,7 +582,7 @@ NdbSqlUtil::usable_in_pk(Uint32 typeId, const void* info) cs->cset != 0 && cs->coll != 0 && cs->coll->strnxfrm != 0 && cs->strxfrm_multiply == 1; // current limitation cs->strxfrm_multiply <= 1; // current limitation } break; case Type::Varchar: Loading Loading @@ -618,7 +618,7 @@ NdbSqlUtil::usable_in_ordered_index(Uint32 typeId, const void* info) cs->coll != 0 && cs->coll->strnxfrm != 0 && cs->coll->strnncollsp != 0 && cs->strxfrm_multiply == 1; // current limitation cs->strxfrm_multiply <= 1; // current limitation } break; case Type::Varchar: Loading @@ -633,7 +633,7 @@ NdbSqlUtil::usable_in_ordered_index(Uint32 typeId, const void* info) cs->coll != 0 && cs->coll->strnxfrm != 0 && cs->coll->strnncollsp != 0 && cs->strxfrm_multiply == 1; // current limitation cs->strxfrm_multiply <= 1; // current limitation } break; default: Loading
ndb/src/kernel/blocks/ERROR_codes.txt +8 −2 Original line number Diff line number Diff line Loading @@ -2,7 +2,7 @@ Next QMGR 1 Next NDBCNTR 1000 Next NDBFS 2000 Next DBACC 3001 Next DBTUP 4007 Next DBTUP 4013 Next DBLQH 5042 Next DBDICT 6006 Next DBDIH 7174 Loading @@ -10,7 +10,7 @@ Next DBTC 8035 Next CMVMI 9000 Next BACKUP 10022 Next DBUTIL 11002 Next DBTUX 12001 Next DBTUX 12007 Next SUMA 13001 TESTING NODE FAILURE, ARBITRATION Loading Loading @@ -393,6 +393,12 @@ Failed Create Table: -------------------- 7173: Create table failed due to not sufficient number of fragment or replica records. 4007 12001: Fail create 1st fragment 4008 12002: Fail create 2nd fragment 4009 12003: Fail create 1st attribute in 1st fragment 4010 12004: Fail create last attribute in 1st fragment 4011 12005: Fail create 1st attribute in 2nd fragment 4012 12006: Fail create last attribute in 2nd fragment Drop Table/Index: ----------------- Loading
ndb/src/kernel/blocks/dblqh/Dblqh.hpp +1 −1 Original line number Diff line number Diff line Loading @@ -2474,7 +2474,7 @@ private: void sendExecFragRefLab(Signal* signal); void fragrefLab(Signal* signal, BlockReference retRef, Uint32 retPtr, Uint32 errorCode); void accFragRefLab(Signal* signal); void abortAddFragOps(Signal* signal); void rwConcludedLab(Signal* signal); void sendsttorryLab(Signal* signal); void initialiseRecordsLab(Signal* signal, Uint32 data, Uint32, Uint32); Loading
ndb/src/kernel/blocks/dblqh/DblqhMain.cpp +104 −1 Original line number Diff line number Diff line Loading @@ -912,6 +912,10 @@ void Dblqh::execREAD_CONFIG_REQ(Signal* signal) /* *********************************************************> */ /* LQHFRAGREQ: Create new fragments for a table. Sender DICT */ /* *********************************************************> */ // this unbelievable mess could be replaced by one signal to LQH // and execute direct to local DICT to get everything at once void Dblqh::execLQHFRAGREQ(Signal* signal) { jamEntry(); Loading Loading @@ -1049,6 +1053,11 @@ void Dblqh::execLQHFRAGREQ(Signal* signal) addfragptr.p->lh3DistrBits = tlhstar; addfragptr.p->tableType = tableType; addfragptr.p->primaryTableId = primaryTableId; // addfragptr.p->tup1Connectptr = RNIL; addfragptr.p->tup2Connectptr = RNIL; addfragptr.p->tux1Connectptr = RNIL; addfragptr.p->tux2Connectptr = RNIL; if (DictTabInfo::isTable(tableType) || DictTabInfo::isHashIndex(tableType)) { Loading Loading @@ -1329,15 +1338,21 @@ void Dblqh::execTUP_ADD_ATTCONF(Signal* signal) { jamEntry(); addfragptr.i = signal->theData[0]; // implies that operation was released on the other side const bool lastAttr = signal->theData[1]; ptrCheckGuard(addfragptr, caddfragrecFileSize, addFragRecord); switch (addfragptr.p->addfragStatus) { case AddFragRecord::TUP_ATTR_WAIT1: jam(); if (lastAttr) addfragptr.p->tup1Connectptr = RNIL; addfragptr.p->addfragStatus = AddFragRecord::TUP_ATTR_WAIT2; sendAddAttrReq(signal); break; case AddFragRecord::TUP_ATTR_WAIT2: jam(); if (lastAttr) addfragptr.p->tup2Connectptr = RNIL; if (DictTabInfo::isOrderedIndex(addfragptr.p->tableType)) { addfragptr.p->addfragStatus = AddFragRecord::TUX_ATTR_WAIT1; sendAddAttrReq(signal); Loading @@ -1347,11 +1362,15 @@ void Dblqh::execTUP_ADD_ATTCONF(Signal* signal) break; case AddFragRecord::TUX_ATTR_WAIT1: jam(); if (lastAttr) addfragptr.p->tux1Connectptr = RNIL; addfragptr.p->addfragStatus = AddFragRecord::TUX_ATTR_WAIT2; sendAddAttrReq(signal); break; case AddFragRecord::TUX_ATTR_WAIT2: jam(); if (lastAttr) addfragptr.p->tux2Connectptr = RNIL; goto done_with_attr; break; done_with_attr: Loading Loading @@ -1455,6 +1474,7 @@ Dblqh::sendAddAttrReq(Signal* signal) jam(); TupAddAttrConf* tupconf = (TupAddAttrConf*)signal->getDataPtrSend(); tupconf->userPtr = addfragptr.i; tupconf->lastAttr = false; sendSignal(reference(), GSN_TUP_ADD_ATTCONF, signal, TupAddAttrConf::SignalLength, JBB); return; Loading Loading @@ -1485,6 +1505,7 @@ Dblqh::sendAddAttrReq(Signal* signal) jam(); TuxAddAttrConf* tuxconf = (TuxAddAttrConf*)signal->getDataPtrSend(); tuxconf->userPtr = addfragptr.i; tuxconf->lastAttr = false; sendSignal(reference(), GSN_TUX_ADD_ATTRCONF, signal, TuxAddAttrConf::SignalLength, JBB); return; Loading Loading @@ -1549,6 +1570,40 @@ void Dblqh::fragrefLab(Signal* signal, return; }//Dblqh::fragrefLab() /* * Abort on-going ops. */ void Dblqh::abortAddFragOps(Signal* signal) { fragptr.i = addfragptr.p->fragmentPtr; ptrCheckGuard(fragptr, cfragrecFileSize, fragrecord); signal->theData[0] = (Uint32)-1; if (addfragptr.p->tup1Connectptr != RNIL) { jam(); signal->theData[1] = addfragptr.p->tup1Connectptr; sendSignal(fragptr.p->tupBlockref, GSN_TUPFRAGREQ, signal, 2, JBB); addfragptr.p->tup1Connectptr = RNIL; } if (addfragptr.p->tup2Connectptr != RNIL) { jam(); signal->theData[1] = addfragptr.p->tup2Connectptr; sendSignal(fragptr.p->tupBlockref, GSN_TUPFRAGREQ, signal, 2, JBB); addfragptr.p->tup2Connectptr = RNIL; } if (addfragptr.p->tux1Connectptr != RNIL) { jam(); signal->theData[1] = addfragptr.p->tux1Connectptr; sendSignal(fragptr.p->tuxBlockref, GSN_TUXFRAGREQ, signal, 2, JBB); addfragptr.p->tux1Connectptr = RNIL; } if (addfragptr.p->tux2Connectptr != RNIL) { jam(); signal->theData[1] = addfragptr.p->tux2Connectptr; sendSignal(fragptr.p->tuxBlockref, GSN_TUXFRAGREQ, signal, 2, JBB); addfragptr.p->tux2Connectptr = RNIL; } } /* ************>> */ /* ACCFRAGREF > */ /* ************>> */ Loading Loading @@ -1582,6 +1637,27 @@ void Dblqh::execTUPFRAGREF(Signal* signal) fragptr.i = addfragptr.p->fragmentPtr; ptrCheckGuard(fragptr, cfragrecFileSize, fragrecord); addfragptr.p->addfragErrorCode = terrorCode; // no operation to release, just add some jams switch (addfragptr.p->addfragStatus) { case AddFragRecord::WAIT_TWO_TUP: jam(); break; case AddFragRecord::WAIT_ONE_TUP: jam(); break; case AddFragRecord::WAIT_TWO_TUX: jam(); break; case AddFragRecord::WAIT_ONE_TUX: jam(); break; default: ndbrequire(false); break; } abortAddFragOps(signal); const Uint32 ref = addfragptr.p->dictBlockref; const Uint32 senderData = addfragptr.p->dictConnectptr; const Uint32 errorCode = addfragptr.p->addfragErrorCode; Loading @@ -1605,12 +1681,39 @@ void Dblqh::execTUXFRAGREF(Signal* signal) void Dblqh::execTUP_ADD_ATTRREF(Signal* signal) { jamEntry(); addfragptr.i = signal->theData[0]; ptrCheckGuard(addfragptr, caddfragrecFileSize, addFragRecord); terrorCode = signal->theData[1]; addfragptr.p->addfragErrorCode = terrorCode; // operation was released on the other side switch (addfragptr.p->addfragStatus) { case AddFragRecord::TUP_ATTR_WAIT1: jam(); ndbrequire(addfragptr.p->tup1Connectptr != RNIL); addfragptr.p->tup1Connectptr = RNIL; break; case AddFragRecord::TUP_ATTR_WAIT2: jam(); ndbrequire(addfragptr.p->tup2Connectptr != RNIL); addfragptr.p->tup2Connectptr = RNIL; break; case AddFragRecord::TUX_ATTR_WAIT1: jam(); ndbrequire(addfragptr.p->tux1Connectptr != RNIL); addfragptr.p->tux1Connectptr = RNIL; break; case AddFragRecord::TUX_ATTR_WAIT2: jam(); ndbrequire(addfragptr.p->tux2Connectptr != RNIL); addfragptr.p->tux2Connectptr = RNIL; break; default: ndbrequire(false); break; } abortAddFragOps(signal); const Uint32 Ref = addfragptr.p->dictBlockref; const Uint32 senderData = addfragptr.p->dictConnectptr; const Uint32 errorCode = addfragptr.p->addfragErrorCode; Loading