From eff21a028df572a10b88a84c1ed12064de336573 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 8 Dec 2006 16:15:59 +0100 Subject: [PATCH] ndb - bug#24914 Fix start transaction with hint from ndbapi storage/ndb/src/kernel/blocks/dbdict/Dbdict.cpp: Fix fragments array for API storage/ndb/src/kernel/blocks/dbdih/DbdihMain.cpp: Fix fragments array for API storage/ndb/src/ndbapi/NdbDictionaryImpl.cpp: Fix fragments array for API --- storage/ndb/src/kernel/blocks/dbdict/Dbdict.cpp | 2 +- storage/ndb/src/kernel/blocks/dbdih/DbdihMain.cpp | 2 +- storage/ndb/src/ndbapi/NdbDictionaryImpl.cpp | 9 +++++++-- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/storage/ndb/src/kernel/blocks/dbdict/Dbdict.cpp b/storage/ndb/src/kernel/blocks/dbdict/Dbdict.cpp index 2098c196f2b..beb7e0ceb7b 100644 --- a/storage/ndb/src/kernel/blocks/dbdict/Dbdict.cpp +++ b/storage/ndb/src/kernel/blocks/dbdict/Dbdict.cpp @@ -479,7 +479,7 @@ Dbdict::packTableIntoPages(SimpleProperties::Writer & w, CreateFragmentationReq::SignalLength); ndbrequire(signal->theData[0] == 0); Uint16 *data = (Uint16*)&signal->theData[25]; - Uint32 count = 2 + data[0] * data[1]; + Uint32 count = 2 + (1 + data[0]) * data[1]; w.add(DictTabInfo::ReplicaDataLen, 2*count); for (Uint32 i = 0; i < count; i++) data[i] = htons(data[i]); diff --git a/storage/ndb/src/kernel/blocks/dbdih/DbdihMain.cpp b/storage/ndb/src/kernel/blocks/dbdih/DbdihMain.cpp index 396d4417865..50c7c5472ba 100644 --- a/storage/ndb/src/kernel/blocks/dbdih/DbdihMain.cpp +++ b/storage/ndb/src/kernel/blocks/dbdih/DbdihMain.cpp @@ -6728,7 +6728,7 @@ void Dbdih::execCREATE_FRAGMENTATION_REQ(Signal * signal) FragmentstorePtr fragPtr; ReplicaRecordPtr replicaPtr; getFragstore(primTabPtr.p, fragNo, fragPtr); - fragments[count++] = c_nextLogPart++; + fragments[count++] = fragPtr.p->m_log_part_id; fragments[count++] = fragPtr.p->preferredPrimary; for (replicaPtr.i = fragPtr.p->storedReplicas; replicaPtr.i != RNIL; diff --git a/storage/ndb/src/ndbapi/NdbDictionaryImpl.cpp b/storage/ndb/src/ndbapi/NdbDictionaryImpl.cpp index 40eb815d48b..4f6673cb468 100644 --- a/storage/ndb/src/ndbapi/NdbDictionaryImpl.cpp +++ b/storage/ndb/src/ndbapi/NdbDictionaryImpl.cpp @@ -2191,9 +2191,14 @@ NdbDictInterface::parseTableInfo(NdbTableImpl ** ret, impl->m_replicaCount = replicaCount; impl->m_fragmentCount = fragCount; DBUG_PRINT("info", ("replicaCount=%x , fragCount=%x",replicaCount,fragCount)); - for(i = 0; i < (Uint32) (fragCount*replicaCount); i++) + Uint32 pos = 2; + for(i = 0; i < (Uint32) fragCount;i++) { - impl->m_fragments.push_back(ntohs(tableDesc->ReplicaData[i+2])); + pos++; // skip logpart + for (Uint32 j = 0; j<(Uint32)replicaCount; j++) + { + impl->m_fragments.push_back(ntohs(tableDesc->ReplicaData[pos++])); + } } Uint32 topBit = (1 << 31);