List:Commits« Previous MessageNext Message »
From:jonas Date:August 24 2006 1:22pm
Subject:bk commit into 5.1 tree (jonas:1.2283)
View as plain text  
Below is the list of changes that have just been committed into a local
5.1 repository of jonas. When jonas does a push these changes will
be propagated to the main repository and, within 24 hours after the
push, to the public repository.
For information on how to access the public repository
see http://dev.mysql.com/doc/mysql/en/installing-source-tree.html

ChangeSet@stripped, 2006-08-24 15:22:07+02:00, jonas@stripped +8 -0
  ndb - fix monster bug in NdbEventOperation->stop where Suma sent uninitialized data
        affects basically all replication tests

  storage/ndb/include/kernel/signaldata/SumaImpl.hpp@stripped, 2006-08-24 15:22:05+02:00, jonas@stripped +23 -4
    Fix signal data class SubTableData not to use Uint8 which can result in incorrect packing

  storage/ndb/src/common/debugger/signaldata/SumaImpl.cpp@stripped, 2006-08-24 15:22:05+02:00, jonas@stripped +2 -2
    Fix signal data class SubTableData not to use Uint8 which can result in incorrect packing

  storage/ndb/src/kernel/blocks/suma/Suma.cpp@stripped, 2006-08-24 15:22:05+02:00, jonas@stripped +36 -18
    1) Fix signal data class SubTableData not to use Uint8 which can result in incorrect packing
    2) make sure to set NdbdNodeId on _TE_STOP

  storage/ndb/src/ndbapi/NdbBlob.cpp@stripped, 2006-08-24 15:22:05+02:00, jonas@stripped +2 -1
    Fix signal data class SubTableData not to use Uint8 which can result in incorrect packing

  storage/ndb/src/ndbapi/NdbEventOperation.cpp@stripped, 2006-08-24 15:22:05+02:00, jonas@stripped +2 -2
    Fix signal data class SubTableData not to use Uint8 which can result in incorrect packing

  storage/ndb/src/ndbapi/NdbEventOperationImpl.cpp@stripped, 2006-08-24 15:22:05+02:00, jonas@stripped +47 -32
    Fix signal data class SubTableData not to use Uint8 which can result in incorrect packing

  storage/ndb/src/ndbapi/NdbEventOperationImpl.hpp@stripped, 2006-08-24 15:22:05+02:00, jonas@stripped +2 -1
    Fix signal data class SubTableData not to use Uint8 which can result in incorrect packing

  storage/ndb/src/ndbapi/Ndbif.cpp@stripped, 2006-08-24 15:22:05+02:00, jonas@stripped +5 -3
    Fix signal data class SubTableData not to use Uint8 which can result in incorrect packing

# This is a BitKeeper patch.  What follows are the unified diffs for the
# set of deltas contained in the patch.  The rest of the patch, the part
# that BitKeeper cares about, is below these diffs.
# User:	jonas
# Host:	perch.ndb.mysql.com
# Root:	/home/jonas/src/51-work

--- 1.8/storage/ndb/include/kernel/signaldata/SumaImpl.hpp	2006-08-24 15:22:12 +02:00
+++ 1.9/storage/ndb/include/kernel/signaldata/SumaImpl.hpp	2006-08-24 15:22:12 +02:00
@@ -302,13 +302,32 @@
   Uint32 senderData;
   Uint32 gci;
   Uint32 tableId;
-  Uint8  operation;
-  Uint8  req_nodeid;
-  Uint8  ndbd_nodeid;
-  Uint8  not_used3;
+  Uint32 requestInfo;
   Uint32 logType;
   Uint32 changeMask;
   Uint32 totalLen;
+
+  static void setOperation(Uint32& ri, Uint32 val) { 
+    ri = (ri & 0xFFFFFF00) | val;
+  }
+  static void setReqNodeId(Uint32& ri, Uint32 val) { 
+    ri = (ri & 0xFFFF00FF) | (val << 8);
+  }
+  static void setNdbdNodeId(Uint32& ri, Uint32 val) { 
+    ri = (ri & 0xFF00FFFF) | (val << 16);
+  }
+
+  static Uint32 getOperation(const Uint32 & ri){
+    return (ri & 0xFF);
+  }
+
+  static Uint32 getReqNodeId(const Uint32 & ri){
+    return (ri >> 8) & 0xFF;
+  }
+
+  static Uint32 getNdbdNodeId(const Uint32 & ri){
+    return (ri >> 16) & 0xFF;
+  }
 };
 
 struct SubSyncContinueReq {

--- 1.5/storage/ndb/src/common/debugger/signaldata/SumaImpl.cpp	2006-08-24 15:22:12 +02:00
+++ 1.6/storage/ndb/src/common/debugger/signaldata/SumaImpl.cpp	2006-08-24 15:22:12 +02:00
@@ -174,10 +174,10 @@
 		    Uint32 len, Uint16 receiverBlockNo) {
   const SubTableData * const sig = (SubTableData *)theData;
   fprintf(output, " senderData: %x\n", sig->senderData);
-  fprintf(output, " senderData: %x\n", sig->senderData);
   fprintf(output, " gci: %x\n", sig->gci);
   fprintf(output, " tableId: %x\n", sig->tableId);
-  fprintf(output, " operation: %x\n", sig->operation);
+  fprintf(output, " operation: %x\n", 
+	  SubTableData::getOperation(sig->requestInfo));
   return false;
 }
 

--- 1.47/storage/ndb/src/kernel/blocks/suma/Suma.cpp	2006-08-24 15:22:12 +02:00
+++ 1.48/storage/ndb/src/kernel/blocks/suma/Suma.cpp	2006-08-24 15:22:12 +02:00
@@ -2642,12 +2642,16 @@
     SubTableData * data  = (SubTableData*)signal->getDataPtrSend();
     data->gci            = m_last_complete_gci + 1; // XXX ???
     data->tableId        = 0;
-    data->operation      = NdbDictionary::Event::_TE_STOP;
+    data->requestInfo    = 0;
+    SubTableData::setOperation(data->requestInfo, 
+			       NdbDictionary::Event::_TE_STOP);
+    SubTableData::setNdbdNodeId(data->requestInfo,
+				getOwnNodeId());
     data->senderData     = subbPtr.p->m_senderData;
     sendSignal(subbPtr.p->m_senderRef, GSN_SUB_TABLE_DATA, signal,
 	       SubTableData::SignalLength, JBB);
   }
-
+  
   SubStopConf * const conf = (SubStopConf*)signal->getDataPtrSend();
   
   conf->senderRef= reference();
@@ -2681,11 +2685,14 @@
   {
     data->gci            = m_last_complete_gci + 1;
     data->tableId        = subPtr.p->m_tableId;
-    data->operation      = NdbDictionary::Event::_TE_ACTIVE;
-    data->ndbd_nodeid    = refToNode(reference());
+    data->requestInfo    = 0;
+    SubTableData::setOperation(data->requestInfo, 
+			       NdbDictionary::Event::_TE_ACTIVE);
+    SubTableData::setNdbdNodeId(data->requestInfo, getOwnNodeId());
+    SubTableData::setReqNodeId(data->requestInfo, 
+			       refToNode(subbPtr.p->m_senderRef));
     data->changeMask     = 0;
     data->totalLen       = 0;
-    data->req_nodeid     = refToNode(subbPtr.p->m_senderRef);
     data->senderData     = subbPtr.p->m_senderData;
     sendSignal(subbPtr.p->m_senderRef, GSN_SUB_TABLE_DATA, signal,
                SubTableData::SignalLength, JBB);
@@ -2707,8 +2714,9 @@
 //#endif
   data->gci            = m_last_complete_gci + 1;
   data->tableId        = subPtr.p->m_tableId;
-  data->operation      = table_event;
-  data->ndbd_nodeid    = refToNode(reference());
+  data->requestInfo    = 0;
+  SubTableData::setOperation(data->requestInfo, table_event);
+  SubTableData::setNdbdNodeId(data->requestInfo, getOwnNodeId());
   data->changeMask     = 0;
   data->totalLen       = 0;
   
@@ -2720,7 +2728,8 @@
   {
     if (i_subbPtr.p->m_subPtrI == subPtr.i)
     {
-      data->req_nodeid = refToNode(subbPtr.p->m_senderRef);
+      SubTableData::setReqNodeId(data->requestInfo, 
+				 refToNode(subbPtr.p->m_senderRef));
       data->senderData = i_subbPtr.p->m_senderData;
       sendSignal(i_subbPtr.p->m_senderRef, GSN_SUB_TABLE_DATA, signal,
                  SubTableData::SignalLength, JBB);
@@ -2729,12 +2738,14 @@
                table_event == NdbDictionary::Event::_TE_SUBSCRIBE ?
                "SUBSCRIBE" : "UNSUBSCRIBE", (int) table_event,
                refToNode(i_subbPtr.p->m_senderRef),
-               data->req_nodeid, data->senderData
+               refToNode(subbPtr.p->m_senderRef), data->senderData
                );
 //#endif
       if (i_subbPtr.i != subbPtr.i)
       {
-        data->req_nodeid = refToNode(i_subbPtr.p->m_senderRef);
+	SubTableData::setReqNodeId(data->requestInfo, 
+				   refToNode(i_subbPtr.p->m_senderRef));
+	
         data->senderData = subbPtr.p->m_senderData;
         sendSignal(subbPtr.p->m_senderRef, GSN_SUB_TABLE_DATA, signal,
                    SubTableData::SignalLength, JBB);
@@ -2743,7 +2754,7 @@
                  table_event == NdbDictionary::Event::_TE_SUBSCRIBE ?
                  "SUBSCRIBE" : "UNSUBSCRIBE", (int) table_event,
                  refToNode(subbPtr.p->m_senderRef),
-                 data->req_nodeid, data->senderData
+                 refToNode(i_subbPtr.p->m_senderRef), data->senderData
                  );
 //#endif
       }
@@ -3146,7 +3157,9 @@
   Uint32 ref = subPtr.p->m_senderRef;
   sdata->tableId = syncPtr.p->m_currentTableId;
   sdata->senderData = subPtr.p->m_senderData;
-  sdata->operation = NdbDictionary::Event::_TE_SCAN; // Scan
+  sdata->requestInfo = 0;
+  SubTableData::setOperation(sdata->requestInfo, 
+			     NdbDictionary::Event::_TE_SCAN); // Scan
   sdata->gci = 0; // Undefined
 #if PRINT_ONLY
   ndbout_c("GSN_SUB_TABLE_DATA (scan) #attr: %d len: %d", attribs, sum);
@@ -3362,7 +3375,8 @@
     SubTableData * data = (SubTableData*)signal->getDataPtrSend();//trg;
     data->gci            = gci;
     data->tableId        = tabPtr.p->m_tableId;
-    data->operation      = event;
+    data->requestInfo    = 0;
+    SubTableData::setOperation(data->requestInfo, event);
     data->logType        = 0;
     data->changeMask     = 0;
     data->totalLen       = ptrLen;
@@ -3588,8 +3602,9 @@
   SubTableData * data = (SubTableData*)signal->getDataPtrSend();
   data->gci            = m_last_complete_gci+1;
   data->tableId        = tableId;
-  data->operation      = NdbDictionary::Event::_TE_DROP;
-  data->req_nodeid     = refToNode(senderRef);
+  data->requestInfo    = 0;
+  SubTableData::setOperation(data->requestInfo,NdbDictionary::Event::_TE_DROP);
+  SubTableData::setReqNodeId(data->requestInfo, refToNode(senderRef));
   
   {
     LocalDLList<Subscriber> subbs(c_subscriberPool,tabPtr.p->c_subscribers);
@@ -3667,8 +3682,10 @@
   SubTableData * data = (SubTableData*)signal->getDataPtrSend();
   data->gci            = m_last_complete_gci+1;
   data->tableId        = tableId;
-  data->operation      = NdbDictionary::Event::_TE_ALTER;
-  data->req_nodeid     = refToNode(senderRef);
+  data->requestInfo    = 0;
+  SubTableData::setOperation(data->requestInfo, 
+			     NdbDictionary::Event::_TE_ALTER);
+  SubTableData::setReqNodeId(data->requestInfo, refToNode(senderRef));
   data->logType        = 0;
   data->changeMask     = changeMask;
   data->totalLen       = tabInfoPtr.sz;
@@ -4898,7 +4915,8 @@
       SubTableData * data = (SubTableData*)signal->getDataPtrSend();//trg;
       data->gci            = last_gci;
       data->tableId        = tabPtr.p->m_tableId;
-      data->operation      = event;
+      data->requestInfo    = 0;
+      SubTableData::setOperation(data->requestInfo, event);
       data->logType        = 0;
       data->changeMask     = 0;
       data->totalLen       = ptrLen;

--- 1.12/storage/ndb/src/ndbapi/NdbEventOperation.cpp	2006-08-24 15:22:12 +02:00
+++ 1.13/storage/ndb/src/ndbapi/NdbEventOperation.cpp	2006-08-24 15:22:12 +02:00
@@ -192,12 +192,12 @@
 
 int NdbEventOperation::getReqNodeId() const
 {
-  return m_impl.m_data_item->sdata->req_nodeid;
+  return SubTableData::getReqNodeId(m_impl.m_data_item->sdata->requestInfo);
 }
 
 int NdbEventOperation::getNdbdNodeId() const
 {
-  return m_impl.m_data_item->sdata->ndbd_nodeid;
+  return SubTableData::getNdbdNodeId(m_impl.m_data_item->sdata->requestInfo);
 }
 
 /*

--- 1.66/storage/ndb/src/ndbapi/NdbEventOperationImpl.cpp	2006-08-24 15:22:12 +02:00
+++ 1.67/storage/ndb/src/ndbapi/NdbEventOperationImpl.cpp	2006-08-24 15:22:12 +02:00
@@ -54,7 +54,8 @@
 static void
 print_std(const SubTableData * sdata, LinearSectionPtr ptr[3])
 {
-  printf("addr=%p gci=%d op=%d\n", (void*)sdata, sdata->gci, sdata->operation);
+  printf("addr=%p gci=%d op=%d\n", (void*)sdata, sdata->gci, 
+	 SubTableData::getOperation(sdata->requestInfo));
   for (int i = 0; i <= 2; i++) {
     printf("sec=%d addr=%p sz=%d\n", i, (void*)ptr[i].p, ptr[i].sz);
     for (int j = 0; j < ptr[i].sz; j++)
@@ -672,7 +673,8 @@
 int
 NdbEventOperationImpl::receive_event()
 {
-  Uint32 operation= (Uint32)m_data_item->sdata->operation;
+  Uint32 operation= 
+    SubTableData::getOperation(m_data_item->sdata->requestInfo);
   if (unlikely(operation >= NdbDictionary::Event::_TE_FIRST_NON_DATA_EVENT))
   {
     DBUG_ENTER("NdbEventOperationImpl::receive_event");
@@ -869,7 +871,7 @@
 NdbEventOperationImpl::getEventType()
 {
   return (NdbDictionary::Event::TableEvent)
-    (1 << (unsigned)m_data_item->sdata->operation);
+    (1 << SubTableData::getOperation(m_data_item->sdata->requestInfo));
 }
 
 
@@ -1207,7 +1209,8 @@
         }
         assert(gci_ops && (op->getGCI() == gci_ops->m_gci));
         // to return TE_NUL it should be made into data event
-        if (data->sdata->operation == NdbDictionary::Event::_TE_NUL)
+        if (SubTableData::getOperation(data->sdata->requestInfo) == 
+	    NdbDictionary::Event::_TE_NUL)
         {
           DBUG_PRINT_EVENT("info", ("skip _TE_NUL"));
           continue;
@@ -1574,9 +1577,11 @@
   bzero(ptr, sizeof(ptr));
 
   data.tableId = ~0;
-  data.operation = NdbDictionary::Event::_TE_ACTIVE;
-  data.req_nodeid = (Uint8)node_id;
-  data.ndbd_nodeid = (Uint8)node_id;
+  data.requestInfo = 0;
+  SubTableData::setOperation(data.requestInfo,
+			     NdbDictionary::Event::_TE_ACTIVE);
+  SubTableData::setReqNodeId(data.requestInfo, node_id);
+  SubTableData::setNdbdNodeId(data.requestInfo, node_id);
   data.logType = SubTableData::LOG;
   data.gci = m_latestGCI + 1;
   /**
@@ -1614,9 +1619,11 @@
   bzero(ptr, sizeof(ptr));
 
   data.tableId = ~0;
-  data.operation = NdbDictionary::Event::_TE_NODE_FAILURE;
-  data.req_nodeid = (Uint8)node_id;
-  data.ndbd_nodeid = (Uint8)node_id;
+  data.requestInfo = 0;
+  SubTableData::setOperation(data.requestInfo, 
+			     NdbDictionary::Event::_TE_NODE_FAILURE);
+  SubTableData::setReqNodeId(data.requestInfo, node_id);
+  SubTableData::setNdbdNodeId(data.requestInfo, node_id);
   data.logType = SubTableData::LOG;
   data.gci = m_latestGCI + 1;
   /**
@@ -1654,7 +1661,9 @@
   bzero(ptr, sizeof(ptr));
 
   data.tableId = ~0;
-  data.operation = NdbDictionary::Event::_TE_CLUSTER_FAILURE;
+  data.requestInfo = 0;
+  SubTableData::setOperation(data.requestInfo,
+			     NdbDictionary::Event::_TE_CLUSTER_FAILURE);
   data.logType = SubTableData::LOG;
   data.gci = m_latestGCI + 1;
   
@@ -1757,19 +1766,21 @@
 			    LinearSectionPtr ptr[3])
 {
   DBUG_ENTER_EVENT("NdbEventBuffer::insertDataL");
+  const Uint32 ri = sdata->requestInfo;
+  const Uint32 operation = SubTableData::getOperation(ri);
   Uint64 gci= sdata->gci;
-  const bool is_data_event =
-    sdata->operation < NdbDictionary::Event::_TE_FIRST_NON_DATA_EVENT;
+  const bool is_data_event = 
+    operation < NdbDictionary::Event::_TE_FIRST_NON_DATA_EVENT;
 
   if (!is_data_event)
   {
-    switch (sdata->operation)
+    switch (operation)
     {
     case NdbDictionary::Event::_TE_NODE_FAILURE:
-      op->m_node_bit_mask.clear(sdata->ndbd_nodeid);
+      op->m_node_bit_mask.clear(SubTableData::getNdbdNodeId(ri));
       break;
     case NdbDictionary::Event::_TE_ACTIVE:
-      op->m_node_bit_mask.set(sdata->ndbd_nodeid);
+      op->m_node_bit_mask.set(SubTableData::getNdbdNodeId(ri));
       // internal event, do not relay to user
       DBUG_RETURN_EVENT(0);
       break;
@@ -1780,7 +1791,8 @@
       DBUG_PRINT("info", ("m_ref_count: %u for op: %p", op->m_ref_count, op));
       break;
     case NdbDictionary::Event::_TE_STOP:
-      op->m_node_bit_mask.clear(sdata->ndbd_nodeid);
+      ndbout_c("sdata->ndbd_nodeid: %d", SubTableData::getNdbdNodeId(ri));
+      op->m_node_bit_mask.clear(SubTableData::getNdbdNodeId(ri));
       if (op->m_node_bit_mask.isclear())
       {
         DBUG_ASSERT(op->m_ref_count > 0);
@@ -1792,19 +1804,20 @@
       break;
     }
   }
-
-  if ( likely((Uint32)op->mi_type & (1 << (Uint32)sdata->operation)) )
+  
+  if ( likely((Uint32)op->mi_type & (1 << operation)))
   {
     Gci_container* bucket= find_bucket(&m_active_gci, gci
 #ifdef VM_TRACE
                                        , m_flush_gci
 #endif
                                        );
-      
+    
     DBUG_PRINT_EVENT("info", ("data insertion in eventId %d", op->m_eventId));
     DBUG_PRINT_EVENT("info", ("gci=%d tab=%d op=%d node=%d",
-                              sdata->gci, sdata->tableId, sdata->operation,
-                              sdata->req_nodeid));
+                              sdata->gci, sdata->tableId, 
+			      SubTableData::getOperation(sdata->requestInfo),
+                              SubTableData::getReqNodeId(sdata->requestInfo)));
 
     if (unlikely(bucket == 0))
     {
@@ -1824,7 +1837,7 @@
       DBUG_PRINT_EVENT("info", ("ignore non-data event on blob table"));
       DBUG_RETURN_EVENT(0);
     }
-
+    
     // find position in bucket hash table
     EventBufData* data = 0;
     EventBufData_hash::Pos hpos;
@@ -1833,7 +1846,7 @@
       bucket->m_data_hash.search(hpos, op, ptr);
       data = hpos.data;
     }
-
+    
     if (data == 0)
     {
       // allocate new result buffer
@@ -1901,20 +1914,22 @@
         // since the flags represent multiple ops on multiple PKs
         // XXX fix by doing merge at end of epoch (extra mem cost)
         {
-          EventBufData_list::Gci_op g = { op, (1 << sdata->operation) };
+          EventBufData_list::Gci_op g = { op, (1 << operation) };
           bucket->m_data.add_gci_op(g);
         }
         {
-          EventBufData_list::Gci_op g = { op, (1 << data->sdata->operation) };
+          EventBufData_list::Gci_op 
+	    g = { op, 
+		  (1 << SubTableData::getOperation(data->sdata->requestInfo))};
           bucket->m_data.add_gci_op(g);
         }
       }
     }
     DBUG_RETURN_EVENT(0);
   }
-
+  
 #ifdef VM_TRACE
-  if ((Uint32)op->m_eventImpl->mi_type & (1 << (Uint32)sdata->operation))
+  if ((Uint32)op->m_eventImpl->mi_type & (1 << operation))
   {
     DBUG_PRINT_EVENT("info",("Data arrived before ready eventId", op->m_eventId));
     DBUG_RETURN_EVENT(0);
@@ -2100,8 +2115,8 @@
 
   Uint32 nkey = data->m_event_op->m_eventImpl->m_tableImpl->m_noOfKeys;
 
-  int t1 = data->sdata->operation;
-  int t2 = sdata->operation;
+  int t1 = SubTableData::getOperation(data->sdata->requestInfo);
+  int t2 = SubTableData::getOperation(sdata->requestInfo);
   if (t1 == Ev_t::enum_NUL)
     DBUG_RETURN_EVENT(copy_data(sdata, ptr2, data));
 
@@ -2165,7 +2180,7 @@
         goto end;
       }
       *data->sdata = *sdata;
-      data->sdata->operation = tp->t3;
+      SubTableData::setOperation(data->sdata->requestInfo, tp->t3);
     }
 
     ptr[0].sz = ptr[1].sz = ptr[2].sz = 0;
@@ -2357,7 +2372,7 @@
     DBUG_RETURN_EVENT(-1);
   SubTableData sdata = *blob_data->sdata;
   sdata.tableId = main_op->m_eventImpl->m_tableImpl->m_id;
-  sdata.operation = NdbDictionary::Event::_TE_NUL;
+  SubTableData::setOperation(sdata.requestInfo, NdbDictionary::Event::_TE_NUL);
   if (copy_data(&sdata, ptr, main_data) != 0)
     DBUG_RETURN_EVENT(-1);
   hpos.data = main_data;

--- 1.27/storage/ndb/src/ndbapi/NdbEventOperationImpl.hpp	2006-08-24 15:22:12 +02:00
+++ 1.28/storage/ndb/src/ndbapi/NdbEventOperationImpl.hpp	2006-08-24 15:22:12 +02:00
@@ -225,7 +225,8 @@
 inline
 void EventBufData_list::append_data(EventBufData *data)
 {
-  Gci_op g = { data->m_event_op, 1 << (Uint32)data->sdata->operation };
+  Gci_op g = { data->m_event_op, 
+	       1 << SubTableData::getOperation(data->sdata->requestInfo) };
   add_gci_op(g);
 
   append_used_data(data);

--- 1.44/storage/ndb/src/ndbapi/Ndbif.cpp	2006-08-24 15:22:12 +02:00
+++ 1.45/storage/ndb/src/ndbapi/Ndbif.cpp	2006-08-24 15:22:12 +02:00
@@ -750,17 +750,19 @@
     }
 
     // Accumulate DIC_TAB_INFO for TE_ALTER events
-    if (sdata->operation == NdbDictionary::Event::_TE_ALTER &&
+    if (SubTableData::getOperation(sdata->requestInfo) == 
+	NdbDictionary::Event::_TE_ALTER &&
         !op->execSUB_TABLE_DATA(aSignal, ptr))
       return;
-
+    
     for (int i= aSignal->m_noOfSections;i < 3; i++) {
       ptr[i].p = NULL;
       ptr[i].sz = 0;
     }
     DBUG_PRINT("info",("oid=senderData: %d, gci: %d, operation: %d, "
 		       "tableId: %d",
-		       sdata->senderData, sdata->gci, sdata->operation,
+		       sdata->senderData, sdata->gci, 
+		       SubTableData::getOperation(sdata->requestInfo),
 		       sdata->tableId));
 
     theEventBuffer->insertDataL(op,sdata, ptr);

--- 1.46/storage/ndb/src/ndbapi/NdbBlob.cpp	2006-08-24 15:22:12 +02:00
+++ 1.47/storage/ndb/src/ndbapi/NdbBlob.cpp	2006-08-24 15:22:12 +02:00
@@ -1894,7 +1894,8 @@
 NdbBlob::atNextEvent()
 {
   DBUG_ENTER("NdbBlob::atNextEvent");
-  Uint32 optype = theEventOp->m_data_item->sdata->operation;
+  Uint32 optype = 
+    SubTableData::getOperation(theEventOp->m_data_item->sdata->requestInfo);
   DBUG_PRINT("info", ("this=%p op=%p blob op=%p version=%d optype=%u", this, theEventOp, theBlobEventOp, theEventBlobVersion, optype));
   if (theState == Invalid)
     DBUG_RETURN(-1);
Thread
bk commit into 5.1 tree (jonas:1.2283)jonas24 Aug