List:Commits« Previous MessageNext Message »
From:Pekka Nousiainen Date:November 16 2008 12:29pm
Subject:bzr commit into mysql-5.1 branch (pekka:3088) WL#4391
View as plain text  
#At file:///export/space/pekka/ndb/version/my51-wl4391/

 3088 Pekka Nousiainen	2008-11-16
      wl#4391 27b_ddcb.diff
      DD - callback via signal: application
modified:
  storage/ndb/src/kernel/blocks/dbtup/Dbtup.hpp
  storage/ndb/src/kernel/blocks/dbtup/DbtupCommit.cpp
  storage/ndb/src/kernel/blocks/dbtup/DbtupExecQuery.cpp
  storage/ndb/src/kernel/blocks/dbtup/DbtupGen.cpp
  storage/ndb/src/kernel/blocks/dbtup/DbtupMeta.cpp
  storage/ndb/src/kernel/blocks/lgman.cpp
  storage/ndb/src/kernel/blocks/lgman.hpp
  storage/ndb/src/kernel/blocks/pgman.cpp
  storage/ndb/src/kernel/blocks/pgman.hpp

=== modified file 'storage/ndb/src/kernel/blocks/dbtup/Dbtup.hpp'
--- a/storage/ndb/src/kernel/blocks/dbtup/Dbtup.hpp	2008-11-15 15:49:10 +0000
+++ b/storage/ndb/src/kernel/blocks/dbtup/Dbtup.hpp	2008-11-16 12:29:39 +0000
@@ -360,6 +360,20 @@ public:
   // copy of pgman.m_ptr set after each get_page
   Ptr<GlobalPage> m_pgman_ptr;
 
+  enum CallbackIndex {
+    // lgman
+    UNDO_CREATETABLE_LOGSYNC_CALLBACK = 1,
+    DROP_TABLE_LOGSYNC_CALLBACK = 2,
+    UNDO_CREATETABLE_CALLBACK = 3,
+    DROP_TABLE_LOG_BUFFER_CALLBACK = 4,
+    DROP_FRAGMENT_FREE_EXTENT_LOG_BUFFER_CALLBACK = 5,
+    NR_DELETE_LOG_BUFFER_CALLBACK = 6,
+    DISK_PAGE_LOG_BUFFER_CALLBACK = 7,
+    COUNT_CALLBACKS = 8
+  };
+  CallbackEntry m_callbackEntry[COUNT_CALLBACKS];
+  CallbackTable m_callbackTable;
+
 enum TransState {
   TRANS_IDLE = 0,
   TRANS_STARTED = 1,

=== modified file 'storage/ndb/src/kernel/blocks/dbtup/DbtupCommit.cpp'
--- a/storage/ndb/src/kernel/blocks/dbtup/DbtupCommit.cpp	2008-11-16 09:16:35 +0000
+++ b/storage/ndb/src/kernel/blocks/dbtup/DbtupCommit.cpp	2008-11-16 12:29:39 +0000
@@ -663,10 +663,9 @@ void Dbtup::execTUP_COMMITREQ(Signal* si
      */
     ndbassert(tuple_ptr->m_operation_ptr_i == regOperPtr.i);
     
-    Callback cb;
+    CallbackPtr cb;
     cb.m_callbackData= regOperPtr.i;
-    cb.m_callbackFunction = 
-      safe_cast(&Dbtup::disk_page_log_buffer_callback);
+    cb.m_callbackIndex = DISK_PAGE_LOG_BUFFER_CALLBACK;
     Uint32 sz= regOperPtr.p->m_undo_buffer_space;
     
     D("Logfile_client - execTUP_COMMITREQ");

=== modified file 'storage/ndb/src/kernel/blocks/dbtup/DbtupExecQuery.cpp'
--- a/storage/ndb/src/kernel/blocks/dbtup/DbtupExecQuery.cpp	2008-11-16 09:16:35 +0000
+++ b/storage/ndb/src/kernel/blocks/dbtup/DbtupExecQuery.cpp	2008-11-16 12:29:39 +0000
@@ -3741,9 +3741,10 @@ Dbtup::nr_delete(Signal* signal, Uint32 
     PagePtr disk_page = *(PagePtr*)&m_pgman_ptr;
     disk_page_set_dirty(disk_page);
 
-    preq.m_callback.m_callbackFunction =
-      safe_cast(&Dbtup::nr_delete_log_buffer_callback);      
-    res= lgman.get_log_buffer(signal, sz, &preq.m_callback);
+    CallbackPtr cptr;
+    cptr.m_callbackIndex = NR_DELETE_LOG_BUFFER_CALLBACK;
+    cptr.m_callbackData = senderData;
+    res= lgman.get_log_buffer(signal, sz, &cptr);
     switch(res){
     case 0:
       signal->theData[2] = disk_page.i;
@@ -3768,7 +3769,7 @@ timeslice:
 
 void
 Dbtup::nr_delete_page_callback(Signal* signal, 
-			       Uint32 userpointer, Uint32 page_id)
+			       Uint32 userpointer, Uint32 page_id)//unused
 {
   Ptr<GlobalPage> gpage;
   m_global_page_pool.getPtr(gpage, page_id);
@@ -3791,10 +3792,9 @@ Dbtup::nr_delete_page_callback(Signal* s
   Uint32 sz = (sizeof(Dbtup::Disk_undo::Free) >> 2) + 
     tablePtr.p->m_offsets[DD].m_fix_header_size - 1;
   
-  Callback cb;
+  CallbackPtr cb;
   cb.m_callbackData = userpointer;
-  cb.m_callbackFunction =
-    safe_cast(&Dbtup::nr_delete_log_buffer_callback);      
+  cb.m_callbackIndex = NR_DELETE_LOG_BUFFER_CALLBACK;
   D("Logfile_client - nr_delete_page_callback");
   Logfile_client lgman(this, c_lgman, fragPtr.p->m_logfile_group_id);
   int res= lgman.get_log_buffer(signal, sz, &cb);

=== modified file 'storage/ndb/src/kernel/blocks/dbtup/DbtupGen.cpp'
--- a/storage/ndb/src/kernel/blocks/dbtup/DbtupGen.cpp	2008-11-15 16:00:08 +0000
+++ b/storage/ndb/src/kernel/blocks/dbtup/DbtupGen.cpp	2008-11-16 12:29:39 +0000
@@ -129,6 +129,53 @@ Dbtup::Dbtup(Block_context& ctx, Uint32 
   RSS_OP_COUNTER_INIT(cnoOfFreeFragoprec);
   RSS_OP_COUNTER_INIT(cnoOfFreeFragrec);
   RSS_OP_COUNTER_INIT(cnoOfFreeTabDescrRec);
+
+  {
+    CallbackEntry& ce = m_callbackEntry[THE_NULL_CALLBACK];
+    ce.m_function = TheNULLCallback.m_callbackFunction;
+    ce.m_flags = 0;
+  }
+  { // 1
+    CallbackEntry& ce = m_callbackEntry[UNDO_CREATETABLE_LOGSYNC_CALLBACK];
+    ce.m_function = safe_cast(&Dbtup::undo_createtable_logsync_callback);
+    ce.m_flags = 0;
+  }
+  { // 2
+    CallbackEntry& ce = m_callbackEntry[DROP_TABLE_LOGSYNC_CALLBACK];
+    ce.m_function = safe_cast(&Dbtup::drop_table_logsync_callback);
+    ce.m_flags = 0;
+  }
+  { // 3
+    CallbackEntry& ce = m_callbackEntry[UNDO_CREATETABLE_CALLBACK];
+    ce.m_function = safe_cast(&Dbtup::undo_createtable_callback);
+    ce.m_flags = 0;
+  }
+  { // 4
+    CallbackEntry& ce = m_callbackEntry[DROP_TABLE_LOG_BUFFER_CALLBACK];
+    ce.m_function = safe_cast(&Dbtup::drop_table_log_buffer_callback);
+    ce.m_flags = 0;
+  }
+  { // 5
+    CallbackEntry& ce = m_callbackEntry[DROP_FRAGMENT_FREE_EXTENT_LOG_BUFFER_CALLBACK];
+    ce.m_function = safe_cast(&Dbtup::drop_fragment_free_extent_log_buffer_callback);
+    ce.m_flags = 0;
+  }
+  { // 6
+    CallbackEntry& ce = m_callbackEntry[NR_DELETE_LOG_BUFFER_CALLBACK];
+    ce.m_function = safe_cast(&Dbtup::nr_delete_log_buffer_callback);
+    ce.m_flags = 0;
+  }
+  { // 7
+    CallbackEntry& ce = m_callbackEntry[DISK_PAGE_LOG_BUFFER_CALLBACK];
+    ce.m_function = safe_cast(&Dbtup::disk_page_log_buffer_callback);
+    ce.m_flags = 0;
+  }
+  {
+    CallbackTable& ct = m_callbackTable;
+    ct.m_count = COUNT_CALLBACKS;
+    ct.m_entry = m_callbackEntry;
+    m_callbackTableAddr = &ct;
+  }
 }//Dbtup::Dbtup()
 
 Dbtup::~Dbtup() 

=== modified file 'storage/ndb/src/kernel/blocks/dbtup/DbtupMeta.cpp'
--- a/storage/ndb/src/kernel/blocks/dbtup/DbtupMeta.cpp	2008-11-16 09:16:35 +0000
+++ b/storage/ndb/src/kernel/blocks/dbtup/DbtupMeta.cpp	2008-11-16 12:29:39 +0000
@@ -337,12 +337,11 @@ void Dbtup::execTUP_ADD_ATTRREQ(Signal* 
     if(!(getNodeState().startLevel == NodeState::SL_STARTING && 
 	 getNodeState().starting.startPhase <= 4))
     {
-      Callback cb;
+      CallbackPtr cb;
       jam();
 
       cb.m_callbackData= fragOperPtr.i;
-      cb.m_callbackFunction = 
-	safe_cast(&Dbtup::undo_createtable_callback);
+      cb.m_callbackIndex = UNDO_CREATETABLE_CALLBACK;
       Uint32 sz= sizeof(Disk_undo::Create) >> 2;
       
       D("Logfile_client - execTUP_ADD_ATTRREQ");
@@ -1321,8 +1320,7 @@ Dbtup::undo_createtable_callback(Signal*
 
   Logfile_client::Request req;
   req.m_callback.m_callbackData= fragOperPtr.i;
-  req.m_callback.m_callbackFunction = 
-    safe_cast(&Dbtup::undo_createtable_logsync_callback);
+  req.m_callback.m_callbackIndex = UNDO_CREATETABLE_LOGSYNC_CALLBACK;
   
   int ret = lgman.sync_lsn(signal, lsn, &req, 0);
   switch(ret){
@@ -1614,10 +1612,9 @@ void Dbtup::releaseFragment(Signal* sign
 
   if (logfile_group_id != RNIL)
   {
-    Callback cb;
+    CallbackPtr cb;
     cb.m_callbackData= tabPtr.i;
-    cb.m_callbackFunction = 
-      safe_cast(&Dbtup::drop_table_log_buffer_callback);
+    cb.m_callbackIndex = DROP_TABLE_LOG_BUFFER_CALLBACK;
     Uint32 sz= sizeof(Disk_undo::Drop) >> 2;
     D("Logfile_client - releaseFragment");
     Logfile_client lgman(this, c_lgman, logfile_group_id);
@@ -1770,10 +1767,9 @@ Dbtup::drop_fragment_free_extent(Signal 
       if(!alloc_info.m_free_extents[pos].isEmpty())
       {
 	jam();
-	Callback cb;
+        CallbackPtr cb;
 	cb.m_callbackData= fragPtr.i;
-	cb.m_callbackFunction = 
-	  safe_cast(&Dbtup::drop_fragment_free_extent_log_buffer_callback);
+	cb.m_callbackIndex = DROP_FRAGMENT_FREE_EXTENT_LOG_BUFFER_CALLBACK;
 #if NOT_YET_UNDO_FREE_EXTENT
 	Uint32 sz= sizeof(Disk_undo::FreeExtent) >> 2;
 	(void) c_lgman->alloc_log_space(fragPtr.p->m_logfile_group_id, sz);
@@ -1836,8 +1832,7 @@ Dbtup::drop_table_log_buffer_callback(Si
 
   Logfile_client::Request req;
   req.m_callback.m_callbackData= tablePtrI;
-  req.m_callback.m_callbackFunction = 
-    safe_cast(&Dbtup::drop_table_logsync_callback);
+  req.m_callback.m_callbackIndex = DROP_TABLE_LOGSYNC_CALLBACK;
   
   int ret = lgman.sync_lsn(signal, lsn, &req, 0);
   switch(ret){

=== modified file 'storage/ndb/src/kernel/blocks/lgman.cpp'
--- a/storage/ndb/src/kernel/blocks/lgman.cpp	2008-11-16 09:16:35 +0000
+++ b/storage/ndb/src/kernel/blocks/lgman.cpp	2008-11-16 12:29:39 +0000
@@ -102,6 +102,23 @@ Lgman::Lgman(Block_context & ctx) :
     int ret = m_client_mutex.create();
     ndbrequire(ret == 0);
   }
+
+  {
+    CallbackEntry& ce = m_callbackEntry[THE_NULL_CALLBACK];
+    ce.m_function = TheNULLCallback.m_callbackFunction;
+    ce.m_flags = 0;
+  }
+  {
+    CallbackEntry& ce = m_callbackEntry[ENDLCP_CALLBACK];
+    ce.m_function = safe_cast(&Lgman::endlcp_callback);
+    ce.m_flags = 0;
+  }
+  {
+    CallbackTable& ct = m_callbackTable;
+    ct.m_count = COUNT_CALLBACKS;
+    ct.m_entry = m_callbackEntry;
+    m_callbackTableAddr = &ct;
+  }
 }
   
 Lgman::~Lgman()
@@ -1150,7 +1167,7 @@ Logfile_client::sync_lsn(Signal* signal,
       wait.p->m_block= m_block;
       wait.p->m_sync_lsn= lsn;
       memcpy(&wait.p->m_callback, &req->m_callback, 
-	     sizeof(SimulatedBlock::Callback));
+	     sizeof(SimulatedBlock::CallbackPtr));
 
       ptr.p->m_max_sync_req_lsn = lsn > ptr.p->m_max_sync_req_lsn ?
 	lsn : ptr.p->m_max_sync_req_lsn;
@@ -1252,10 +1269,9 @@ Lgman::process_log_sync_waiters(Signal* 
   if(waiter.p->m_sync_lsn <= ptr.p->m_last_synced_lsn)
   {
     removed= true;
-    Uint32 blockNo = blockToMain(waiter.p->m_block);
-    Uint32 instanceNo = blockToInstance(waiter.p->m_block);
-    SimulatedBlock* b = globalData.getBlock(blockNo, instanceNo);
-    b->execute(signal, waiter.p->m_callback, logfile_group_id);
+    Uint32 block = waiter.p->m_block;
+    CallbackPtr & callback = waiter.p->m_callback;
+    sendCallbackConf(signal, block, callback, logfile_group_id);
     
     list.releaseFirst(waiter);
   }
@@ -1356,7 +1372,7 @@ Lgman::next_page(Logfile_group* ptrP, Ui
 
 int
 Logfile_client::get_log_buffer(Signal* signal, Uint32 sz, 
-			       SimulatedBlock::Callback* callback)
+			       SimulatedBlock::CallbackPtr* callback)
 {
   sz += 2; // lsn
   Lgman::Logfile_group key;
@@ -1384,7 +1400,7 @@ Logfile_client::get_log_buffer(Signal* s
 
       wait.p->m_size= sz;
       wait.p->m_block= m_block;
-      memcpy(&wait.p->m_callback, callback,sizeof(SimulatedBlock::Callback));
+      memcpy(&wait.p->m_callback, callback,sizeof(SimulatedBlock::CallbackPtr));
     }
 
     return 0;
@@ -1615,10 +1631,9 @@ Lgman::process_log_buffer_waiters(Signal
   if(waiter.p->m_size + 2*File_formats::UNDO_PAGE_WORDS < free_buffer)
   {
     removed= true;
-    Uint32 blockNo = blockToMain(waiter.p->m_block);
-    Uint32 instanceNo = blockToInstance(waiter.p->m_block);
-    SimulatedBlock* b = globalData.getBlock(blockNo, instanceNo);
-    b->execute(signal, waiter.p->m_callback, logfile_group_id);
+    Uint32 block = waiter.p->m_block;
+    CallbackPtr & callback = waiter.p->m_callback;
+    sendCallbackConf(signal, block, callback, logfile_group_id);
 
     list.releaseFirst(waiter);
   }
@@ -1935,7 +1950,7 @@ Lgman::execEND_LCP_REQ(Signal* signal)
 	Logfile_client tmp(this, this, ptr.p->m_logfile_group_id);
 	Logfile_client::Request req;
 	req.m_callback.m_callbackData = ptr.i;
-	req.m_callback.m_callbackFunction = safe_cast(&Lgman::endlcp_callback);
+	req.m_callback.m_callbackIndex = ENDLCP_CALLBACK;
 	ndbrequire(tmp.sync_lsn(signal, lcp_lsn, &req, 0) == 0);
       }
     }

=== modified file 'storage/ndb/src/kernel/blocks/lgman.hpp'
--- a/storage/ndb/src/kernel/blocks/lgman.hpp	2008-11-16 09:16:35 +0000
+++ b/storage/ndb/src/kernel/blocks/lgman.hpp	2008-11-16 12:29:39 +0000
@@ -80,7 +80,7 @@ protected:
 public:
   struct Log_waiter
   {
-    Callback m_callback;
+    CallbackPtr m_callback;
     union {
       Uint32 m_size;
       Uint64 m_sync_lsn;
@@ -236,6 +236,14 @@ public:
   typedef DLFifoListImpl<Logfile_group_pool, Logfile_group> Logfile_group_list;
   typedef LocalDLFifoListImpl<Logfile_group_pool, Logfile_group> Local_logfile_group_list;
   typedef KeyTableImpl<Logfile_group_pool, Logfile_group> Logfile_group_hash;
+
+  enum CallbackIndex {
+    // lgman
+    ENDLCP_CALLBACK = 1,
+    COUNT_CALLBACKS = 2
+  };
+  CallbackEntry m_callbackEntry[COUNT_CALLBACKS];
+  CallbackTable m_callbackTable;
   
 private:
   friend class Logfile_client;
@@ -324,7 +332,7 @@ public:
 
   struct Request
   {
-    SimulatedBlock::Callback m_callback;
+    SimulatedBlock::CallbackPtr m_callback;
   };
   
   /**
@@ -364,7 +372,7 @@ public:
    *           0 on time slice
    *          -1 on error
    */
-  int get_log_buffer(Signal*, Uint32 sz, SimulatedBlock::Callback* m_callback);
+  int get_log_buffer(Signal*, Uint32 sz, SimulatedBlock::CallbackPtr*);
 
   int alloc_log_space(Uint32 words) {
     return m_lgman->alloc_log_space(m_logfile_group_id, words);

=== modified file 'storage/ndb/src/kernel/blocks/pgman.cpp'
--- a/storage/ndb/src/kernel/blocks/pgman.cpp	2008-11-16 09:16:35 +0000
+++ b/storage/ndb/src/kernel/blocks/pgman.cpp	2008-11-16 12:29:39 +0000
@@ -84,6 +84,23 @@ Pgman::Pgman(Block_context& ctx, Uint32 
   
   for (Uint32 k = 0; k < Page_entry::SUBLIST_COUNT; k++)
     m_page_sublist[k] = new Page_sublist(m_page_entry_pool);
+
+  {
+    CallbackEntry& ce = m_callbackEntry[THE_NULL_CALLBACK];
+    ce.m_function = TheNULLCallback.m_callbackFunction;
+    ce.m_flags = 0;
+  }
+  {
+    CallbackEntry& ce = m_callbackEntry[LOGSYNC_CALLBACK];
+    ce.m_function = safe_cast(&Pgman::logsync_callback);
+    ce.m_flags = 0;
+  }
+  {
+    CallbackTable& ct = m_callbackTable;
+    ct.m_count = COUNT_CALLBACKS;
+    ct.m_entry = m_callbackEntry;
+    m_callbackTableAddr = &ct;
+  }
 }
 
 Pgman::~Pgman()
@@ -1389,7 +1406,7 @@ Pgman::pageout(Signal* signal, Ptr<Page_
   // undo WAL
   Logfile_client::Request req;
   req.m_callback.m_callbackData = ptr.i;
-  req.m_callback.m_callbackFunction = safe_cast(&Pgman::logsync_callback);
+  req.m_callback.m_callbackIndex = LOGSYNC_CALLBACK;
   D("Logfile_client - pageout");
   Logfile_client lgman(this, c_lgman, RNIL);
   int ret = lgman.sync_lsn(signal, ptr.p->m_lsn, &req, 0);

=== modified file 'storage/ndb/src/kernel/blocks/pgman.hpp'
--- a/storage/ndb/src/kernel/blocks/pgman.hpp	2008-11-15 16:01:37 +0000
+++ b/storage/ndb/src/kernel/blocks/pgman.hpp	2008-11-16 12:29:39 +0000
@@ -421,6 +421,14 @@ private:
     Uint32 m_current_io_waits;
   } m_stats;
 
+  enum CallbackIndex {
+    // lgman
+    LOGSYNC_CALLBACK = 1,
+    COUNT_CALLBACKS = 2
+  };
+  CallbackEntry m_callbackEntry[COUNT_CALLBACKS];
+  CallbackTable m_callbackTable;
+
 protected:
   void execSTTOR(Signal* signal);
   void sendSTTORRY(Signal*);

Thread
bzr commit into mysql-5.1 branch (pekka:3088) WL#4391Pekka Nousiainen16 Nov