3119 Jonas Oreland 2009-10-27 [merge]
merge 70 to 71
modified:
storage/ndb/include/util/Bitmask.hpp
storage/ndb/src/kernel/blocks/dbtup/Dbtup.hpp
storage/ndb/src/kernel/blocks/dbtup/DbtupExecQuery.cpp
storage/ndb/src/kernel/blocks/dbtup/DbtupRoutines.cpp
3118 Jonas Oreland 2009-10-27 [merge]
merge 70 to 71
modified:
storage/ndb/src/kernel/blocks/dbdih/DbdihMain.cpp
storage/ndb/test/ndbapi/testDict.cpp
3117 Jonas Oreland 2009-10-27 [merge]
merge 70 to 71
modified:
storage/ndb/src/kernel/blocks/ERROR_codes.txt
storage/ndb/src/kernel/blocks/dbdict/Dbdict.cpp
storage/ndb/test/ndbapi/testSystemRestart.cpp
=== modified file 'storage/ndb/include/util/Bitmask.hpp'
--- a/storage/ndb/include/util/Bitmask.hpp 2009-06-06 12:01:09 +0000
+++ b/storage/ndb/include/util/Bitmask.hpp 2009-10-27 12:08:44 +0000
@@ -183,6 +183,9 @@ public:
*/
static int parseMask(unsigned size, Uint32 data[], const char * str);
+ /* Fast bit counting (16 instructions on x86_64, gcc -O3). */
+ static inline Uint32 count_bits(Uint32 x);
+
private:
static void getFieldImpl(const Uint32 data[], unsigned, unsigned, Uint32 []);
static void setFieldImpl(Uint32 data[], unsigned, unsigned, const Uint32 []);
@@ -325,11 +328,7 @@ BitmaskImpl::count(unsigned size, const
{
unsigned cnt = 0;
for (unsigned i = 0; i < size; i++) {
- Uint32 x = data[i];
- while (x) {
- x &= (x - 1);
- cnt++;
- }
+ cnt += count_bits(data[i]);
}
return cnt;
}
@@ -449,6 +448,17 @@ BitmaskImpl::getText(unsigned size, cons
return org;
}
+inline
+Uint32
+BitmaskImpl::count_bits(Uint32 x)
+{
+ x= x - ((x>>1) & 0x55555555);
+ x= (x & 0x33333333) + ((x>>2) & 0x33333333);
+ x= (x + (x>>4)) & 0x0f0f0f0f;
+ x= (x*0x01010101) >> 24;
+ return x;
+}
+
/**
* Bitmasks. The size is number of 32-bit words (Uint32).
* Unused bits in the last word must be zero.
=== modified file 'storage/ndb/src/kernel/blocks/dbdih/DbdihMain.cpp'
--- a/storage/ndb/src/kernel/blocks/dbdih/DbdihMain.cpp 2009-10-16 06:30:30 +0000
+++ b/storage/ndb/src/kernel/blocks/dbdih/DbdihMain.cpp 2009-10-27 11:40:14 +0000
@@ -8004,6 +8004,9 @@ void Dbdih::execALTER_TAB_REQ(Signal * s
connectPtr.i = req->connectPtr;
ptrCheckGuard(connectPtr, cconnectFileSize, connectRecord);
+
+ ndbrequire(connectPtr.p->connectState == ConnectRecord::ALTER_TABLE);
+
connectPtr.p->userpointer = senderData;
connectPtr.p->userblockref = senderRef;
@@ -8120,6 +8123,10 @@ void Dbdih::execALTER_TAB_REQ(Signal * s
ndbrequire(tabPtr.p->totalfragments == save);
ndbrequire(connectPtr.p->m_alter.m_org_totalfragments == save);
send_alter_tab_ref(signal, tabPtr, connectPtr, err);
+
+ ndbrequire(tabPtr.p->connectrec == connectPtr.i);
+ tabPtr.p->connectrec = RNIL;
+ release_connect(connectPtr);
return;
}
@@ -8345,10 +8352,6 @@ Dbdih::send_alter_tab_ref(Signal* signal
ref->errorCode = errCode;
sendSignal(connectPtr.p->userblockref, GSN_ALTER_TAB_REF, signal,
AlterTabRef::SignalLength, JBB);
-
- ndbrequire(tabPtr.p->connectrec == connectPtr.i);
- tabPtr.p->connectrec = RNIL;
- release_connect(connectPtr);
}
void
@@ -8429,7 +8432,7 @@ Dbdih::drop_fragments(Signal* signal, Pt
jam();
Ptr<TabRecord> tabPtr;
tabPtr.i = connectPtr.p->table;
- ptrAss(tabPtr, tabRecord);
+ ptrCheckGuard(tabPtr, ctabFileSize, tabRecord);
Uint32 new_frags = connectPtr.p->m_alter.m_totalfragments;
Uint32 org_frags = connectPtr.p->m_alter.m_org_totalfragments;
@@ -8448,6 +8451,8 @@ Dbdih::drop_fragments(Signal* signal, Pt
ndbrequire(tabPtr.p->tabCopyStatus == TabRecord::CS_ALTER_TABLE);
tabPtr.p->tabCopyStatus = TabRecord::CS_IDLE;
send_alter_tab_ref(signal, tabPtr, connectPtr, ~0);
+
+ connectPtr.p->connectState = ConnectRecord::ALTER_TABLE;
return;
}
case ConnectRecord::ALTER_TABLE_REVERT:
=== modified file 'storage/ndb/src/kernel/blocks/dbtup/Dbtup.hpp'
--- a/storage/ndb/src/kernel/blocks/dbtup/Dbtup.hpp 2009-10-20 16:11:14 +0000
+++ b/storage/ndb/src/kernel/blocks/dbtup/Dbtup.hpp 2009-10-27 12:11:34 +0000
@@ -2432,16 +2432,6 @@ public:
Uint32 read_lcp_keys(Uint32, const Uint32 * src, Uint32 len, Uint32 *dst);
private:
- /* Fast bit counting (16 instructions on x86_64, gcc -O3). */
- static inline Uint32 count_bits(Uint32 x)
- {
- x= x - ((x>>1) & 0x55555555);
- x= (x & 0x33333333) + ((x>>2) & 0x33333333);
- x= (x + (x>>4)) & 0x0f0f0f0f;
- x= (x*0x01010101) >> 24;
- return x;
- }
-
//------------------------------------------------------------------
//------------------------------------------------------------------
void setUpQueryRoutines(Tablerec* regTabPtr);
=== modified file 'storage/ndb/src/kernel/blocks/dbtup/DbtupExecQuery.cpp'
--- a/storage/ndb/src/kernel/blocks/dbtup/DbtupExecQuery.cpp 2009-10-23 13:01:47 +0000
+++ b/storage/ndb/src/kernel/blocks/dbtup/DbtupExecQuery.cpp 2009-10-27 12:11:34 +0000
@@ -3310,7 +3310,7 @@ Dbtup::shrink_tuple(KeyReqStruct* req_st
for(Uint16 i= 0; i< bm_len; i++)
{
Uint32 v= src_bm_ptr[i];
- dyn_var_count+= count_bits(v & *dyn_bm_var_mask_ptr++);
+ dyn_var_count+= BitmaskImpl::count_bits(v & *dyn_bm_var_mask_ptr++);
dst_bm_ptr[i]= v;
}
=== modified file 'storage/ndb/src/kernel/blocks/dbtup/DbtupRoutines.cpp'
--- a/storage/ndb/src/kernel/blocks/dbtup/DbtupRoutines.cpp 2009-09-04 11:33:38 +0000
+++ b/storage/ndb/src/kernel/blocks/dbtup/DbtupRoutines.cpp 2009-10-27 12:08:44 +0000
@@ -921,9 +921,9 @@ Dbtup::readDynFixedSizeShrunkenNotNULL(U
Uint32 *bm_mask_ptr= regTabPtr->dynFixSizeMask;
Uint32 bm_pos= AttributeOffset::getNullFlagOffset(attrDes2);
Uint32 prevMask= (1 << (pos & 31)) - 1;
- Uint32 bit_count= count_bits(prevMask & bm_mask_ptr[bm_pos] & bm_ptr[bm_pos]);
+ Uint32 bit_count= BitmaskImpl::count_bits(prevMask & bm_mask_ptr[bm_pos] & bm_ptr[bm_pos]);
for(Uint32 i=0; i<bm_pos; i++)
- bit_count+= count_bits(bm_mask_ptr[i] & bm_ptr[i]);
+ bit_count+= BitmaskImpl::count_bits(bm_mask_ptr[i] & bm_ptr[i]);
/* Now compute the data pointer from the row length. */
Uint32 attr_descriptor= req_struct->attr_descriptor;
@@ -1067,9 +1067,9 @@ Dbtup::readDynBigFixedSizeShrunkenNotNUL
Uint32 *bm_mask_ptr= regTabPtr->dynVarSizeMask;
Uint32 bm_pos= AttributeOffset::getNullFlagOffset(attrDes2);
Uint32 prevMask= (1 << (pos & 31)) - 1;
- Uint32 bit_count= count_bits(prevMask & bm_mask_ptr[bm_pos] & bm_ptr[bm_pos]);
+ Uint32 bit_count= BitmaskImpl::count_bits(prevMask & bm_mask_ptr[bm_pos] & bm_ptr[bm_pos]);
for(Uint32 i=0; i<bm_pos; i++)
- bit_count+= count_bits(bm_mask_ptr[i] & bm_ptr[i]);
+ bit_count+= BitmaskImpl::count_bits(bm_mask_ptr[i] & bm_ptr[i]);
/* Now find the data pointer and length from the offset array. */
Uint32 attr_descriptor= req_struct->attr_descriptor;
@@ -1318,9 +1318,9 @@ Dbtup::readDynVarSizeShrunkenNotNULL(Uin
Uint32 *bm_mask_ptr= regTabPtr->dynVarSizeMask;
Uint32 bm_pos= AttributeOffset::getNullFlagOffset(attrDes2);
Uint32 prevMask= (1 << (pos & 31)) - 1;
- Uint32 bit_count= count_bits(prevMask & bm_mask_ptr[bm_pos] & bm_ptr[bm_pos]);
+ Uint32 bit_count= BitmaskImpl::count_bits(prevMask & bm_mask_ptr[bm_pos] & bm_ptr[bm_pos]);
for(Uint32 i=0; i<bm_pos; i++)
- bit_count+= count_bits(bm_mask_ptr[i] & bm_ptr[i]);
+ bit_count+= BitmaskImpl::count_bits(bm_mask_ptr[i] & bm_ptr[i]);
/* Now find the data pointer and length from the offset array. */
//Uint16* offset_array = req_struct->m_var_data[MM].m_dyn_offset_arr_ptr;
=== modified file 'storage/ndb/test/ndbapi/testDict.cpp'
--- a/storage/ndb/test/ndbapi/testDict.cpp 2009-10-16 07:15:21 +0000
+++ b/storage/ndb/test/ndbapi/testDict.cpp 2009-10-27 11:40:14 +0000
@@ -1977,7 +1977,7 @@ int runFailAddFragment(NDBT_Context* ctx
int errval = acclst[j];
if (errNo != 0 && errNo != errval)
continue;
- g_info << "insert error node=" << nodeId << " value=" << errval << endl;
+ g_err << "insert error node=" << nodeId << " value=" << errval << endl;
CHECK(restarter.dumpStateAllNodes(&dump1, 1) == 0);
CHECK2(restarter.insertErrorInNode(nodeId, errval) == 0,
"failed to set error insert");
@@ -1996,7 +1996,7 @@ int runFailAddFragment(NDBT_Context* ctx
int errval = tuplst[j];
if (errNo != 0 && errNo != errval)
continue;
- g_info << "insert error node=" << nodeId << " value=" << errval << endl;
+ g_err << "insert error node=" << nodeId << " value=" << errval << endl;
CHECK(restarter.dumpStateAllNodes(&dump1, 1) == 0);
CHECK2(restarter.insertErrorInNode(nodeId, errval) == 0,
"failed to set error insert");
@@ -2018,7 +2018,7 @@ int runFailAddFragment(NDBT_Context* ctx
CHECK2(pDic->createTable(tab) == 0,
pDic->getNdbError());
- g_info << "insert error node=" << nodeId << " value=" << errval << endl;
+ g_err << "insert error node=" << nodeId << " value=" << errval << endl;
CHECK(restarter.dumpStateAllNodes(&dump1, 1) == 0);
CHECK2(restarter.insertErrorInNode(nodeId, errval) == 0,
"failed to set error insert");
@@ -6761,7 +6761,7 @@ runFailAddPartition(NDBT_Context* ctx, N
int errval = lst[j];
if (errNo != 0 && errNo != errval)
continue;
- g_info << "insert error node=" << nodeId << " value=" << errval << endl;
+ g_err << "insert error node=" << nodeId << " value=" << errval << endl;
CHECK(restarter.dumpStateAllNodes(&dump1, 1) == 0);
CHECK2(restarter.insertErrorInNode(nodeId, errval) == 0,
"failed to set error insert");
@@ -7247,6 +7247,15 @@ runBug46585(NDBT_Context* ctx, NDBT_Step
{
ndbout << pDic->getNdbError() << endl;
}
+ if (pDic->getNdbError().code == 1224)
+ {
+ /**
+ * To many fragments is an acceptable error
+ * depending on configuration used for test-case
+ */
+ result = NDBT_OK;
+ goto end;
+ }
CHECK2(result == 0,
"failed to alter");
@@ -7272,6 +7281,7 @@ runBug46585(NDBT_Context* ctx, NDBT_Step
if (res.getNumDbNodes() > 1)
{
int nodeId = res.getNode(NdbRestarter::NS_RANDOM);
+ ndbout_c("performing node-restart of node %d", nodeId);
CHECK2(res.restartOneDbNode(nodeId,
false,
true,
@@ -7285,6 +7295,7 @@ runBug46585(NDBT_Context* ctx, NDBT_Step
}
case 1:
{
+ ndbout_c("performing system restart");
CHECK2(res.restartAll(false, true, false) == 0,
"restart all failed");
CHECK2(res.waitClusterNoStart() == 0,
Attachment: [text/bzr-bundle] bzr/jonas@mysql.com-20091027121134-l89av9t0173veogl.bundle
| Thread |
|---|
| • bzr push into mysql-5.1-telco-7.1 branch (jonas:3117 to 3119) | Jonas Oreland | 27 Oct |