#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#4391 | Pekka Nousiainen | 16 Nov |