#At file:///export/space/pekka/ndb/version/my51-wl4391/
2765 Pekka Nousiainen 2008-09-16
wl#4391 21.diff
Alter table.
modified:
storage/ndb/src/common/debugger/signaldata/AlterTab.cpp
storage/ndb/src/kernel/blocks/dblqh/DblqhProxy.cpp
storage/ndb/src/kernel/blocks/dblqh/DblqhProxy.hpp
storage/ndb/src/kernel/vm/mt.cpp
=== modified file 'storage/ndb/src/common/debugger/signaldata/AlterTab.cpp'
--- a/storage/ndb/src/common/debugger/signaldata/AlterTab.cpp 2007-12-25 16:15:08 +0000
+++ b/storage/ndb/src/common/debugger/signaldata/AlterTab.cpp 2008-09-16 18:33:52 +0000
@@ -29,10 +29,10 @@ printALTER_TAB_REQ(FILE* output, const U
fprintf(output, " gci: %u", sig->gci);
fprintf(output, " changeMask: 0x%x", sig->changeMask);
fprintf(output, "\n");
- fprintf(output, "connectPtr: %u", sig->connectPtr);
- fprintf(output, "noOfNewAttr: %u", sig->noOfNewAttr);
- fprintf(output, "newNoOfCharsets: %u", sig->newNoOfCharsets);
- fprintf(output, "newNoOfKeyAttrs: %u", sig->newNoOfKeyAttrs);
+ fprintf(output, " connectPtr: %u", sig->connectPtr);
+ fprintf(output, " noOfNewAttr: %u", sig->noOfNewAttr);
+ fprintf(output, " newNoOfCharsets: %u", sig->newNoOfCharsets);
+ fprintf(output, " newNoOfKeyAttrs: %u", sig->newNoOfKeyAttrs);
fprintf(output, "\n");
return true;
}
@@ -43,7 +43,7 @@ printALTER_TAB_CONF(FILE* output, const
const AlterTabConf* sig = (const AlterTabConf*)theData;
fprintf(output, " senderRef: 0x%x", sig->senderRef);
fprintf(output, " senderData: %u", sig->senderData);
- fprintf(output, "connectPtr: %u", sig->connectPtr);
+ fprintf(output, " connectPtr: %u", sig->connectPtr);
fprintf(output, "\n");
return true;
}
=== modified file 'storage/ndb/src/kernel/blocks/dblqh/DblqhProxy.cpp'
--- a/storage/ndb/src/kernel/blocks/dblqh/DblqhProxy.cpp 2008-08-23 06:32:32 +0000
+++ b/storage/ndb/src/kernel/blocks/dblqh/DblqhProxy.cpp 2008-09-16 18:33:52 +0000
@@ -59,6 +59,11 @@ DblqhProxy::DblqhProxy(Block_context& ct
addRecSignal(GSN_DROP_TAB_CONF, &DblqhProxy::execDROP_TAB_CONF);
addRecSignal(GSN_DROP_TAB_REF, &DblqhProxy::execDROP_TAB_REF);
+ // GSN_ALTER_TAB_REQ
+ addRecSignal(GSN_ALTER_TAB_REQ, &DblqhProxy::execALTER_TAB_REQ);
+ addRecSignal(GSN_ALTER_TAB_CONF, &DblqhProxy::execALTER_TAB_CONF);
+ addRecSignal(GSN_ALTER_TAB_REF, &DblqhProxy::execALTER_TAB_REF);
+
// GSN_START_RECREQ
addRecSignal(GSN_START_RECREQ, &DblqhProxy::execSTART_RECREQ);
addRecSignal(GSN_START_RECCONF, &DblqhProxy::execSTART_RECCONF);
@@ -726,13 +731,109 @@ DblqhProxy::sendDROP_TAB_CONF(Signal* si
ref->senderData = ss.m_req.senderData;
ref->tableId = ss.m_req.tableId;
ref->errorCode = ss.m_error;
- sendSignal(dictRef, GSN_DROP_TAB_CONF,
+ sendSignal(dictRef, GSN_DROP_TAB_REF,
signal, DropTabConf::SignalLength, JBB);
}
ssRelease<Ss_DROP_TAB_REQ>(ssId);
}
+// GSN_ALTER_TAB_REQ
+
+void
+DblqhProxy::execALTER_TAB_REQ(Signal* signal)
+{
+ const AlterTabReq* req = (const AlterTabReq*)signal->getDataPtr();
+ Uint32 ssId = getSsId(req);
+ Ss_ALTER_TAB_REQ& ss = ssSeize<Ss_ALTER_TAB_REQ>(ssId);
+ ss.m_req = *req;
+ ndbrequire(signal->getLength() == AlterTabReq::SignalLength);
+
+ {
+ SectionHandle handle(this, signal);
+ ss.m_sections = handle.m_cnt;
+ ndbrequire(ss.m_sections <= 1);
+ if (ss.m_sections >= 1) {
+ ss.m_sz0 = handle.m_ptr[0].p->m_sz;
+ ndbrequire(ss.m_sz0 <= ss.MaxSection0);
+ ::copy(ss.m_section0, handle.m_ptr[0]);
+ }
+ releaseSections(handle);
+ }
+
+ sendREQ(signal, ss);
+}
+
+void
+DblqhProxy::sendALTER_TAB_REQ(Signal* signal, Uint32 ssId)
+{
+ Ss_ALTER_TAB_REQ& ss = ssFind<Ss_ALTER_TAB_REQ>(ssId);
+
+ AlterTabReq* req = (AlterTabReq*)signal->getDataPtrSend();
+ *req = ss.m_req;
+ req->senderRef = reference();
+ req->senderData = ssId;
+ if (ss.m_sections == 0) {
+ jam();
+ sendSignal(workerRef(ss.m_worker), GSN_ALTER_TAB_REQ,
+ signal, AlterTabReq::SignalLength, JBB);
+ } else {
+ jam();
+ LinearSectionPtr ptr[3];
+ ptr[0].sz = ss.m_sz0;
+ ptr[0].p = ss.m_section0;
+ sendSignal(workerRef(ss.m_worker), GSN_ALTER_TAB_REQ,
+ signal, AlterTabReq::SignalLength, JBB, ptr, 1);
+ }
+}
+
+void
+DblqhProxy::execALTER_TAB_CONF(Signal* signal)
+{
+ const AlterTabConf* conf = (const AlterTabConf*)signal->getDataPtr();
+ Uint32 ssId = getSsId(conf);
+ Ss_ALTER_TAB_REQ& ss = ssFind<Ss_ALTER_TAB_REQ>(ssId);
+ recvCONF(signal, ss);
+}
+
+void
+DblqhProxy::execALTER_TAB_REF(Signal* signal)
+{
+ const AlterTabRef* ref = (const AlterTabRef*)signal->getDataPtr();
+ Uint32 ssId = getSsId(ref);
+ Ss_ALTER_TAB_REQ& ss = ssFind<Ss_ALTER_TAB_REQ>(ssId);
+ recvREF(signal, ss, ref->errorCode);
+}
+
+void
+DblqhProxy::sendALTER_TAB_CONF(Signal* signal, Uint32 ssId)
+{
+ Ss_ALTER_TAB_REQ& ss = ssFind<Ss_ALTER_TAB_REQ>(ssId);
+ BlockReference dictRef = ss.m_req.senderRef;
+
+ if (!lastReply(ss))
+ return;
+
+ if (ss.m_error == 0) {
+ jam();
+ AlterTabConf* conf = (AlterTabConf*)signal->getDataPtrSend();
+ conf->senderRef = reference();
+ conf->senderData = ss.m_req.senderData;
+ sendSignal(dictRef, GSN_ALTER_TAB_CONF,
+ signal, AlterTabConf::SignalLength, JBB);
+ } else {
+ jam();
+ AlterTabRef* ref = (AlterTabRef*)signal->getDataPtrSend();
+ ref->senderRef = reference();
+ ref->senderData = ss.m_req.senderData;
+ ref->errorCode = ss.m_error;
+ sendSignal(dictRef, GSN_ALTER_TAB_REF,
+ signal, AlterTabConf::SignalLength, JBB);
+ }
+
+ ssRelease<Ss_ALTER_TAB_REQ>(ssId);
+}
+
// GSN_START_RECREQ
void
=== modified file 'storage/ndb/src/kernel/blocks/dblqh/DblqhProxy.hpp'
--- a/storage/ndb/src/kernel/blocks/dblqh/DblqhProxy.hpp 2008-08-23 06:32:32 +0000
+++ b/storage/ndb/src/kernel/blocks/dblqh/DblqhProxy.hpp 2008-09-16 18:33:52 +0000
@@ -24,6 +24,7 @@
#include <signaldata/GCP.hpp>
#include <signaldata/PrepDropTab.hpp>
#include <signaldata/DropTab.hpp>
+#include <signaldata/AlterTab.hpp>
#include <signaldata/StartRec.hpp>
#include <signaldata/LqhTransReq.hpp>
#include <signaldata/LqhTransConf.hpp>
@@ -230,6 +231,41 @@ protected:
void execDROP_TAB_REF(Signal*);
void sendDROP_TAB_CONF(Signal*, Uint32 ssId);
+ // GSN_ALTER_TAB_REQ
+ struct Ss_ALTER_TAB_REQ : SsParallel {
+ AlterTabReq m_req;
+ Uint32 m_sections;
+ // wl4391_todo check max length in various cases
+ enum { MaxSection0 = 2 * MAX_ATTRIBUTES_IN_TABLE };
+ Uint32 m_sz0;
+ Uint32 m_section0[MaxSection0];
+ Ss_ALTER_TAB_REQ() {
+ m_sendREQ = (SsFUNC)&DblqhProxy::sendALTER_TAB_REQ;
+ m_sendCONF = (SsFUNC)&DblqhProxy::sendALTER_TAB_CONF;
+ m_sections = 0;
+ m_sz0 = 0;
+ }
+ enum { poolSize = 1 };
+ static SsPool<Ss_ALTER_TAB_REQ>& pool(LocalProxy* proxy) {
+ return ((DblqhProxy*)proxy)->c_ss_ALTER_TAB_REQ;
+ }
+ };
+ SsPool<Ss_ALTER_TAB_REQ> c_ss_ALTER_TAB_REQ;
+ Uint32 getSsId(const AlterTabReq* req) {
+ return SsIdBase | req->tableId;
+ }
+ Uint32 getSsId(const AlterTabConf* conf) {
+ return conf->senderData;
+ }
+ Uint32 getSsId(const AlterTabRef* ref) {
+ return ref->senderData;
+ }
+ void execALTER_TAB_REQ(Signal*);
+ void sendALTER_TAB_REQ(Signal*, Uint32 ssId);
+ void execALTER_TAB_CONF(Signal*);
+ void execALTER_TAB_REF(Signal*);
+ void sendALTER_TAB_CONF(Signal*, Uint32 ssId);
+
// GSN_START_RECREQ
struct Ss_START_RECREQ : SsParallel {
StartRecReq m_req;
=== modified file 'storage/ndb/src/kernel/vm/mt.cpp'
--- a/storage/ndb/src/kernel/vm/mt.cpp 2008-08-27 20:27:20 +0000
+++ b/storage/ndb/src/kernel/vm/mt.cpp 2008-09-16 18:33:52 +0000
@@ -1823,11 +1823,16 @@ execute_signals(thr_data *selfptr, thr_j
#ifdef VM_TRACE
if (globalData.testOn) { //wl4391_todo segments
+ SegmentedSectionPtr ptr[3];
+ ptr[0].i = sig->m_sectionPtrI[0];
+ ptr[1].i = sig->m_sectionPtrI[1];
+ ptr[2].i = sig->m_sectionPtrI[2];
+ ::getSections(seccnt, ptr);
globalSignalLoggers.executeSignal(*s,
0,
&sig->theData[0],
- globalData.ownId);
-
+ globalData.ownId,
+ ptr, seccnt);
}
#endif
| Thread |
|---|
| • bzr commit into mysql-5.1 branch (pekka:2765) WL#4391 | Pekka Nousiainen | 16 Sep |