List:Commits« Previous MessageNext Message »
From:Pekka Nousiainen Date:September 16 2008 6:33pm
Subject:bzr commit into mysql-5.1 branch (pekka:2765) WL#4391
View as plain text  
#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#4391Pekka Nousiainen16 Sep