diff options
author | unknown <tomas@whalegate.ndb.mysql.com> | 2007-04-26 13:50:04 +0200 |
---|---|---|
committer | unknown <tomas@whalegate.ndb.mysql.com> | 2007-04-26 13:50:04 +0200 |
commit | da719b3dab64b1801cb490fae79528a682105bae (patch) | |
tree | 73aa9e01899355690137cfd5b2260885865c03a8 /storage | |
parent | 9eb496dabecda510517cbad80b8376bc6d5f9210 (diff) | |
parent | 10d2d90063fa20b4c96646783da7d7369f632f3d (diff) | |
download | mariadb-git-da719b3dab64b1801cb490fae79528a682105bae.tar.gz |
Merge whalegate.ndb.mysql.com:/home/tomas/mysql-5.1-telco-gca
into whalegate.ndb.mysql.com:/home/tomas/mysql-5.1-single-user
storage/ndb/include/kernel/signaldata/DictTabInfo.hpp:
Auto merged
storage/ndb/include/ndbapi/NdbDictionary.hpp:
Auto merged
storage/ndb/src/common/debugger/signaldata/DictTabInfo.cpp:
Auto merged
storage/ndb/src/kernel/blocks/dbdict/Dbdict.cpp:
Auto merged
storage/ndb/src/kernel/blocks/dbdict/Dbdict.hpp:
Auto merged
storage/ndb/src/kernel/blocks/dblqh/Dblqh.hpp:
Auto merged
storage/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp:
Auto merged
storage/ndb/src/kernel/blocks/dbtup/Dbtup.hpp:
Auto merged
storage/ndb/src/kernel/blocks/dbtup/DbtupFixAlloc.cpp:
Auto merged
storage/ndb/src/kernel/blocks/dbtup/DbtupPageMap.cpp:
Auto merged
storage/ndb/src/ndbapi/NdbDictionary.cpp:
Auto merged
storage/ndb/src/ndbapi/NdbDictionaryImpl.hpp:
Auto merged
storage/ndb/test/include/HugoOperations.hpp:
Auto merged
storage/ndb/test/ndbapi/testBasic.cpp:
Auto merged
storage/ndb/test/run-test/daily-basic-tests.txt:
Auto merged
storage/ndb/test/src/HugoOperations.cpp:
Auto merged
mysql-test/r/ndb_partition_key.result:
manual merge
sql/ha_ndbcluster.cc:
manual merge
storage/ndb/src/ndbapi/NdbDictionaryImpl.cpp:
manual merge
storage/ndb/test/src/NDBT_Table.cpp:
manual merge
Diffstat (limited to 'storage')
17 files changed, 75 insertions, 21 deletions
diff --git a/storage/ndb/include/kernel/signaldata/DictTabInfo.hpp b/storage/ndb/include/kernel/signaldata/DictTabInfo.hpp index 57b4f0e7520..3923d8e6fbf 100644 --- a/storage/ndb/include/kernel/signaldata/DictTabInfo.hpp +++ b/storage/ndb/include/kernel/signaldata/DictTabInfo.hpp @@ -118,6 +118,7 @@ public: FrmData = 27, TableTemporaryFlag = 28, //Default not Temporary + ForceVarPartFlag = 29, FragmentCount = 128, // No of fragments in table (!fragment replicas) FragmentDataLen = 129, @@ -301,6 +302,7 @@ public: Uint32 PrimaryTableId; Uint32 TableLoggedFlag; Uint32 TableTemporaryFlag; + Uint32 ForceVarPartFlag; Uint32 NoOfKeyAttr; Uint32 NoOfAttributes; Uint32 NoOfNullable; diff --git a/storage/ndb/include/kernel/signaldata/LqhFrag.hpp b/storage/ndb/include/kernel/signaldata/LqhFrag.hpp index 40ed73ad2e7..d4f4877cc5b 100644 --- a/storage/ndb/include/kernel/signaldata/LqhFrag.hpp +++ b/storage/ndb/include/kernel/signaldata/LqhFrag.hpp @@ -105,7 +105,7 @@ class LqhFragReq { friend bool printLQH_FRAG_REQ(FILE *, const Uint32 *, Uint32, Uint16); public: - STATIC_CONST( SignalLength = 24 ); + STATIC_CONST( SignalLength = 25 ); enum RequestInfo { CreateInRunning = 0x8000000, @@ -143,6 +143,7 @@ private: Uint32 maxRowsHigh; Uint32 minRowsLow; Uint32 minRowsHigh; + Uint32 forceVarPartFlag; }; class LqhFragConf { diff --git a/storage/ndb/include/kernel/signaldata/TupFrag.hpp b/storage/ndb/include/kernel/signaldata/TupFrag.hpp index cae548aa094..106518dd47b 100644 --- a/storage/ndb/include/kernel/signaldata/TupFrag.hpp +++ b/storage/ndb/include/kernel/signaldata/TupFrag.hpp @@ -29,7 +29,7 @@ class TupFragReq { friend class Dblqh; friend class Dbtup; public: - STATIC_CONST( SignalLength = 17 ); + STATIC_CONST( SignalLength = 18 ); private: Uint32 userPtr; Uint32 userRef; @@ -48,6 +48,7 @@ private: Uint32 checksumIndicator; Uint32 globalCheckpointIdIndicator; Uint32 tablespaceid; + Uint32 forceVarPartFlag; }; class TupFragConf { diff --git a/storage/ndb/include/ndbapi/NdbDictionary.hpp b/storage/ndb/include/ndbapi/NdbDictionary.hpp index 02dcf81a413..58882e139fd 100644 --- a/storage/ndb/include/ndbapi/NdbDictionary.hpp +++ b/storage/ndb/include/ndbapi/NdbDictionary.hpp @@ -939,6 +939,14 @@ public: void setTemporary(bool); /** + * Only table with varpart do support online add column + * Add property so that table wo/ varsize column(s) still + * allocates varpart-ref, so that later online add column is possible + */ + bool getForceVarPart() const; + void setForceVarPart(bool); + + /** * Check if any of column in bitmaps are disk columns * returns bitmap of different columns * bit 0 = atleast 1 pk column is set diff --git a/storage/ndb/src/common/debugger/signaldata/DictTabInfo.cpp b/storage/ndb/src/common/debugger/signaldata/DictTabInfo.cpp index 49392b9beeb..dae5527dc5e 100644 --- a/storage/ndb/src/common/debugger/signaldata/DictTabInfo.cpp +++ b/storage/ndb/src/common/debugger/signaldata/DictTabInfo.cpp @@ -26,6 +26,7 @@ DictTabInfo::TableMapping[] = { DTIMAP(Table, PrimaryTableId, PrimaryTableId), DTIMAP2(Table, TableLoggedFlag, TableLoggedFlag, 0, 1), DTIMAP2(Table, TableTemporaryFlag, TableTemporaryFlag, 0, 1), + DTIMAP2(Table, ForceVarPartFlag, ForceVarPartFlag, 0, 1), DTIMAP2(Table, TableKValue, TableKValue, 6, 6), DTIMAP2(Table, MinLoadFactor, MinLoadFactor, 0, 90), DTIMAP2(Table, MaxLoadFactor, MaxLoadFactor, 25, 110), @@ -124,6 +125,7 @@ DictTabInfo::Table::init(){ PrimaryTableId = RNIL; TableLoggedFlag = 1; TableTemporaryFlag = 0; + ForceVarPartFlag = 0; NoOfKeyAttr = 0; NoOfAttributes = 0; NoOfNullable = 0; diff --git a/storage/ndb/src/kernel/blocks/dbdict/Dbdict.cpp b/storage/ndb/src/kernel/blocks/dbdict/Dbdict.cpp index 39dda8b6db5..13ecd230f8c 100644 --- a/storage/ndb/src/kernel/blocks/dbdict/Dbdict.cpp +++ b/storage/ndb/src/kernel/blocks/dbdict/Dbdict.cpp @@ -448,6 +448,8 @@ Dbdict::packTableIntoPages(SimpleProperties::Writer & w, !!(tablePtr.p->m_bits & TableRecord::TR_RowChecksum)); w.add(DictTabInfo::TableTemporaryFlag, !!(tablePtr.p->m_bits & TableRecord::TR_Temporary)); + w.add(DictTabInfo::ForceVarPartFlag, + !!(tablePtr.p->m_bits & TableRecord::TR_ForceVarPart)); w.add(DictTabInfo::MinLoadFactor, tablePtr.p->minLoadFactor); w.add(DictTabInfo::MaxLoadFactor, tablePtr.p->maxLoadFactor); @@ -5413,8 +5415,8 @@ Dbdict::execADD_FRAGREQ(Signal* signal) { req->tableType = tabPtr.p->tableType; req->primaryTableId = tabPtr.p->primaryTableId; req->tablespace_id= tabPtr.p->m_tablespace_id; - //req->tablespace_id= tablespace_id; req->logPartId = logPart; + req->forceVarPartFlag = !!(tabPtr.p->m_bits& TableRecord::TR_ForceVarPart); sendSignal(DBLQH_REF, GSN_LQHFRAGREQ, signal, LqhFragReq::SignalLength, JBB); } @@ -6031,6 +6033,8 @@ void Dbdict::handleTabInfoInit(SimpleProperties::Reader & it, (c_tableDesc.RowGCIFlag ? TableRecord::TR_RowGCI : 0); tablePtr.p->m_bits |= (c_tableDesc.TableTemporaryFlag ? TableRecord::TR_Temporary : 0); + tablePtr.p->m_bits |= + (c_tableDesc.ForceVarPartFlag ? TableRecord::TR_ForceVarPart : 0); tablePtr.p->minLoadFactor = c_tableDesc.MinLoadFactor; tablePtr.p->maxLoadFactor = c_tableDesc.MaxLoadFactor; tablePtr.p->fragmentType = (DictTabInfo::FragmentType)c_tableDesc.FragmentType; diff --git a/storage/ndb/src/kernel/blocks/dbdict/Dbdict.hpp b/storage/ndb/src/kernel/blocks/dbdict/Dbdict.hpp index a5a9a83d7e3..e5b918ca270 100644 --- a/storage/ndb/src/kernel/blocks/dbdict/Dbdict.hpp +++ b/storage/ndb/src/kernel/blocks/dbdict/Dbdict.hpp @@ -236,10 +236,11 @@ public: /* Is the table logged (i.e. data survives system restart) */ enum Bits { - TR_Logged = 0x1, - TR_RowGCI = 0x2, - TR_RowChecksum = 0x4, - TR_Temporary = 0x8 + TR_Logged = 0x1, + TR_RowGCI = 0x2, + TR_RowChecksum = 0x4, + TR_Temporary = 0x8, + TR_ForceVarPart = 0x10 }; Uint16 m_bits; diff --git a/storage/ndb/src/kernel/blocks/dblqh/Dblqh.hpp b/storage/ndb/src/kernel/blocks/dblqh/Dblqh.hpp index 8d7290469ca..ba146fce005 100644 --- a/storage/ndb/src/kernel/blocks/dblqh/Dblqh.hpp +++ b/storage/ndb/src/kernel/blocks/dblqh/Dblqh.hpp @@ -459,7 +459,8 @@ public: Uint32 maxRowsHigh; Uint32 minRowsLow; Uint32 minRowsHigh; - };// Size 128 bytes + Uint32 forceVarPartFlag; + }; typedef Ptr<AddFragRecord> AddFragRecordPtr; /* $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ */ diff --git a/storage/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp b/storage/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp index 56d320de68c..817e6830a87 100644 --- a/storage/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp +++ b/storage/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp @@ -1092,6 +1092,7 @@ void Dblqh::execLQHFRAGREQ(Signal* signal) Uint32 primaryTableId = req->primaryTableId; Uint32 tablespace= req->tablespace_id; Uint32 logPart = req->logPartId; + Uint32 forceVarPartFlag = req->forceVarPartFlag; if (signal->getLength() < 20) { @@ -1211,6 +1212,7 @@ void Dblqh::execLQHFRAGREQ(Signal* signal) addfragptr.p->tableType = tableType; addfragptr.p->primaryTableId = primaryTableId; addfragptr.p->tablespace_id= tablespace; + addfragptr.p->forceVarPartFlag = forceVarPartFlag; // addfragptr.p->tupConnectptr = RNIL; addfragptr.p->tuxConnectptr = RNIL; @@ -1361,6 +1363,7 @@ Dblqh::sendAddFragReq(Signal* signal) tupFragReq->checksumIndicator = addfragptr.p->checksumIndicator; tupFragReq->globalCheckpointIdIndicator = addfragptr.p->GCPIndicator; tupFragReq->tablespaceid = addfragptr.p->tablespace_id; + tupFragReq->forceVarPartFlag = addfragptr.p->forceVarPartFlag; sendSignal(fragptr.p->tupBlockref, GSN_TUPFRAGREQ, signal, TupFragReq::SignalLength, JBB); return; diff --git a/storage/ndb/src/kernel/blocks/dbtup/Dbtup.hpp b/storage/ndb/src/kernel/blocks/dbtup/Dbtup.hpp index 55eca41fed8..2e8b6695c13 100644 --- a/storage/ndb/src/kernel/blocks/dbtup/Dbtup.hpp +++ b/storage/ndb/src/kernel/blocks/dbtup/Dbtup.hpp @@ -688,7 +688,7 @@ struct Fragrecord { Uint32 noOfPagesToGrow; DLList<Page>::Head emptyPrimPage; // allocated pages (not init) - DLList<Page>::Head thFreeFirst; // pages with atleast 1 free record + DLFifoList<Page>::Head thFreeFirst; // pages with atleast 1 free record SLList<Page>::Head m_empty_pages; // Empty pages not in logical/physical map Uint32 m_lcp_scan_op; diff --git a/storage/ndb/src/kernel/blocks/dbtup/DbtupFixAlloc.cpp b/storage/ndb/src/kernel/blocks/dbtup/DbtupFixAlloc.cpp index 31903ea8c33..900a02cfd72 100644 --- a/storage/ndb/src/kernel/blocks/dbtup/DbtupFixAlloc.cpp +++ b/storage/ndb/src/kernel/blocks/dbtup/DbtupFixAlloc.cpp @@ -90,8 +90,8 @@ Dbtup::alloc_fix_rec(Fragrecord* const regFragPtr, pagePtr.p->page_state = ZTH_MM_FREE; - LocalDLList<Page> free_pages(c_page_pool, regFragPtr->thFreeFirst); - free_pages.add(pagePtr); + LocalDLFifoList<Page> free_pages(c_page_pool, regFragPtr->thFreeFirst); + free_pages.addFirst(pagePtr); } else { jam(); /* ---------------------------------------------------------------- */ @@ -173,7 +173,7 @@ Dbtup::alloc_tuple_from_page(Fragrecord* const regFragPtr, /* ARE MAINTAINED EVEN AFTER A SYSTEM CRASH. */ /* ---------------------------------------------------------------- */ ndbrequire(regPagePtr->page_state == ZTH_MM_FREE); - LocalDLList<Page> free_pages(c_page_pool, regFragPtr->thFreeFirst); + LocalDLFifoList<Page> free_pages(c_page_pool, regFragPtr->thFreeFirst); free_pages.remove((Page*)regPagePtr); regPagePtr->page_state = ZTH_MM_FULL; } @@ -193,10 +193,10 @@ void Dbtup::free_fix_rec(Fragrecord* regFragPtr, { jam(); PagePtr pagePtr = { (Page*)regPagePtr, key->m_page_no }; - LocalDLList<Page> free_pages(c_page_pool, regFragPtr->thFreeFirst); + LocalDLFifoList<Page> free_pages(c_page_pool, regFragPtr->thFreeFirst); ndbrequire(regPagePtr->page_state == ZTH_MM_FULL); regPagePtr->page_state = ZTH_MM_FREE; - free_pages.add(pagePtr); + free_pages.addLast(pagePtr); } }//Dbtup::freeTh() @@ -224,13 +224,13 @@ Dbtup::alloc_page(Tablerec* tabPtrP, Fragrecord* fragPtrP, c_page_pool.getPtr(pagePtr, getRealpid(fragPtrP, page_no)); LocalDLList<Page> alloc_pages(c_page_pool, fragPtrP->emptyPrimPage); - LocalDLList<Page> free_pages(c_page_pool, fragPtrP->thFreeFirst); + LocalDLFifoList<Page> free_pages(c_page_pool, fragPtrP->thFreeFirst); if (pagePtr.p->page_state == ZEMPTY_MM) { convertThPage((Fix_page*)pagePtr.p, tabPtrP, MM); pagePtr.p->page_state = ZTH_MM_FREE; alloc_pages.remove(pagePtr); - free_pages.add(pagePtr); + free_pages.addFirst(pagePtr); } *ret = pagePtr; @@ -254,7 +254,7 @@ Dbtup::alloc_fix_rowid(Fragrecord* regFragPtr, } Uint32 state = pagePtr.p->page_state; - LocalDLList<Page> free_pages(c_page_pool, regFragPtr->thFreeFirst); + LocalDLFifoList<Page> free_pages(c_page_pool, regFragPtr->thFreeFirst); switch(state){ case ZTH_MM_FREE: if (((Fix_page*)pagePtr.p)->alloc_record(idx) != idx) diff --git a/storage/ndb/src/kernel/blocks/dbtup/DbtupPageMap.cpp b/storage/ndb/src/kernel/blocks/dbtup/DbtupPageMap.cpp index 380826d9330..6ef8d3585e9 100644 --- a/storage/ndb/src/kernel/blocks/dbtup/DbtupPageMap.cpp +++ b/storage/ndb/src/kernel/blocks/dbtup/DbtupPageMap.cpp @@ -293,7 +293,7 @@ void Dbtup::releaseFragPages(Fragrecord* regFragPtr) } { - LocalDLList<Page> tmp(c_page_pool, regFragPtr->thFreeFirst); + LocalDLFifoList<Page> tmp(c_page_pool, regFragPtr->thFreeFirst); tmp.remove(); } diff --git a/storage/ndb/src/kernel/vm/DLFifoList.hpp b/storage/ndb/src/kernel/vm/DLFifoList.hpp index a71cb71e207..da92390dd8f 100644 --- a/storage/ndb/src/kernel/vm/DLFifoList.hpp +++ b/storage/ndb/src/kernel/vm/DLFifoList.hpp @@ -62,8 +62,9 @@ public: */ void insert(Ptr<T> & ptr, Ptr<T>& loc); + void remove(); void remove(Ptr<T> &); - + void remove(T*); /** * Update i & p value according to <b>i</b> */ @@ -277,9 +278,25 @@ DLFifoListImpl<P,T,U>::insert(Ptr<T> & ptr, Ptr<T> & loc) template <typename P, typename T, typename U> inline void +DLFifoListImpl<P,T,U>::remove() +{ + head.firstItem = RNIL; + head.lastItem = RNIL; +} + +template <typename P, typename T, typename U> +inline +void DLFifoListImpl<P,T,U>::remove(Ptr<T> & p) { - T * t = p.p; + remove(p.p); +} + +template <typename P, typename T, typename U> +inline +void +DLFifoListImpl<P,T,U>::remove(T * t) +{ Uint32 ni = t->U::nextList; Uint32 pi = t->U::prevList; @@ -328,7 +345,7 @@ inline void DLFifoListImpl<P,T,U>::release(Ptr<T> & p) { - remove(p); + remove(p.p); thePool.release(p); } diff --git a/storage/ndb/src/ndbapi/NdbDictionary.cpp b/storage/ndb/src/ndbapi/NdbDictionary.cpp index b3ee41358d9..a4395fc4b9c 100644 --- a/storage/ndb/src/ndbapi/NdbDictionary.cpp +++ b/storage/ndb/src/ndbapi/NdbDictionary.cpp @@ -727,6 +727,16 @@ NdbDictionary::Table::getRowGCIIndicator() const { return m_impl.m_row_gci; } +void +NdbDictionary::Table::setForceVarPart(bool val){ + m_impl.m_force_var_part = val; +} + +bool +NdbDictionary::Table::getForceVarPart() const { + return m_impl.m_force_var_part; +} + int NdbDictionary::Table::aggregate(NdbError& error) { diff --git a/storage/ndb/src/ndbapi/NdbDictionaryImpl.cpp b/storage/ndb/src/ndbapi/NdbDictionaryImpl.cpp index 41b1dbc06e4..7c956651518 100644 --- a/storage/ndb/src/ndbapi/NdbDictionaryImpl.cpp +++ b/storage/ndb/src/ndbapi/NdbDictionaryImpl.cpp @@ -2179,6 +2179,7 @@ NdbDictInterface::parseTableInfo(NdbTableImpl ** ret, impl->m_temporary = tableDesc->TableTemporaryFlag; impl->m_row_gci = tableDesc->RowGCIFlag; impl->m_row_checksum = tableDesc->RowChecksumFlag; + impl->m_force_var_part = tableDesc->ForceVarPartFlag; impl->m_kvalue = tableDesc->TableKValue; impl->m_minLoadFactor = tableDesc->MinLoadFactor; impl->m_maxLoadFactor = tableDesc->MaxLoadFactor; @@ -2693,6 +2694,7 @@ NdbDictInterface::createOrAlterTable(Ndb & ndb, tmpTab->DefaultNoPartFlag = impl.m_default_no_part_flag; tmpTab->LinearHashFlag = impl.m_linear_flag; tmpTab->SingleUserMode = impl.m_single_user_mode; + tmpTab->ForceVarPartFlag = impl.m_force_var_part; if (impl.m_ts_name.length()) { diff --git a/storage/ndb/src/ndbapi/NdbDictionaryImpl.hpp b/storage/ndb/src/ndbapi/NdbDictionaryImpl.hpp index c904b9d65c3..673587b1ed7 100644 --- a/storage/ndb/src/ndbapi/NdbDictionaryImpl.hpp +++ b/storage/ndb/src/ndbapi/NdbDictionaryImpl.hpp @@ -199,6 +199,7 @@ public: bool m_temporary; bool m_row_gci; bool m_row_checksum; + bool m_force_var_part; int m_kvalue; int m_minLoadFactor; int m_maxLoadFactor; diff --git a/storage/ndb/test/src/NDBT_Table.cpp b/storage/ndb/test/src/NDBT_Table.cpp index 2e0e5939266..1787bef9aba 100644 --- a/storage/ndb/test/src/NDBT_Table.cpp +++ b/storage/ndb/test/src/NDBT_Table.cpp @@ -34,6 +34,7 @@ operator <<(class NdbOut& ndbout, const NDBT_Table & tab) ndbout << "Row Checksum: " << tab.getRowChecksumIndicator() << endl; ndbout << "Row GCI: " << tab.getRowGCIIndicator() << endl; ndbout << "SingleUserMode: " << (Uint32) tab.getSingleUserMode() << endl; + ndbout << "ForceVarPart: " << tab.getForceVarPart() << endl; //<< ((tab.getTupleKey() == TupleId) ? " tupleid" : "") <<endl; ndbout << "TableStatus: "; |