summaryrefslogtreecommitdiff
path: root/storage
diff options
context:
space:
mode:
authorjonas@perch.ndb.mysql.com <>2007-04-30 13:00:36 +0200
committerjonas@perch.ndb.mysql.com <>2007-04-30 13:00:36 +0200
commit15cfd0fd034bd0c5bda5b002546aafb7a4dc5475 (patch)
treecf7e8b694a6061b5a6becc3cc0b3d4a010d9ff52 /storage
parent598a60285feb1ab6ac3d312c6d9ee05b92bd62f8 (diff)
parent5db64df3dc94bcf793992ebd74032db77d08678b (diff)
downloadmariadb-git-15cfd0fd034bd0c5bda5b002546aafb7a4dc5475.tar.gz
Merge joreland@bk-internal.mysql.com:/home/bk/mysql-5.1-new-ndb
into perch.ndb.mysql.com:/home/jonas/src/mysql-5.1-new-ndb
Diffstat (limited to 'storage')
-rw-r--r--storage/ndb/include/kernel/signaldata/TupCommit.hpp3
-rw-r--r--storage/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp1
-rw-r--r--storage/ndb/src/kernel/blocks/dbtup/Dbtup.hpp14
-rw-r--r--storage/ndb/src/kernel/blocks/dbtup/DbtupCommit.cpp17
-rw-r--r--storage/ndb/src/kernel/blocks/dbtup/DbtupExecQuery.cpp1
-rw-r--r--storage/ndb/src/kernel/blocks/dbtup/DbtupTrigger.cpp33
6 files changed, 46 insertions, 23 deletions
diff --git a/storage/ndb/include/kernel/signaldata/TupCommit.hpp b/storage/ndb/include/kernel/signaldata/TupCommit.hpp
index 976aa590659..11d0dbbb8d3 100644
--- a/storage/ndb/include/kernel/signaldata/TupCommit.hpp
+++ b/storage/ndb/include/kernel/signaldata/TupCommit.hpp
@@ -35,7 +35,7 @@ class TupCommitReq {
friend bool printTUPCOMMITREQ(FILE * output, const Uint32 * theData, Uint32 len, Uint16 receiverBlockNo);
public:
- STATIC_CONST( SignalLength = 3 );
+ STATIC_CONST( SignalLength = 4 );
private:
@@ -45,6 +45,7 @@ private:
Uint32 opPtr;
Uint32 gci;
Uint32 hashValue;
+ Uint32 diskpage;
};
#endif
diff --git a/storage/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp b/storage/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp
index d64f1d2b01e..ff4c5b2648b 100644
--- a/storage/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp
+++ b/storage/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp
@@ -6379,6 +6379,7 @@ void Dblqh::commitContinueAfterBlockedLab(Signal* signal)
tupCommitReq->opPtr = sig0;
tupCommitReq->gci = regTcPtr.p->gci;
tupCommitReq->hashValue = regTcPtr.p->hashValue;
+ tupCommitReq->diskpage = RNIL;
EXECUTE_DIRECT(tup, GSN_TUP_COMMITREQ, signal,
TupCommitReq::SignalLength);
diff --git a/storage/ndb/src/kernel/blocks/dbtup/Dbtup.hpp b/storage/ndb/src/kernel/blocks/dbtup/Dbtup.hpp
index 4d2a4003eb4..4577671202c 100644
--- a/storage/ndb/src/kernel/blocks/dbtup/Dbtup.hpp
+++ b/storage/ndb/src/kernel/blocks/dbtup/Dbtup.hpp
@@ -2208,7 +2208,8 @@ private:
#endif
void checkDetachedTriggers(KeyReqStruct *req_struct,
Operationrec* regOperPtr,
- Tablerec* regTablePtr);
+ Tablerec* regTablePtr,
+ bool disk);
void fireImmediateTriggers(KeyReqStruct *req_struct,
DLList<TupTriggerData>& triggerList,
@@ -2220,7 +2221,8 @@ private:
void fireDetachedTriggers(KeyReqStruct *req_struct,
DLList<TupTriggerData>& triggerList,
- Operationrec* regOperPtr);
+ Operationrec* regOperPtr,
+ bool disk);
void executeTriggers(KeyReqStruct *req_struct,
DLList<TupTriggerData>& triggerList,
@@ -2228,7 +2230,8 @@ private:
void executeTrigger(KeyReqStruct *req_struct,
TupTriggerData* trigPtr,
- Operationrec* regOperPtr);
+ Operationrec* regOperPtr,
+ bool disk = true);
bool readTriggerInfo(TupTriggerData* trigPtr,
Operationrec* regOperPtr,
@@ -2239,8 +2242,9 @@ private:
Uint32* afterBuffer,
Uint32& noAfterWords,
Uint32* beforeBuffer,
- Uint32& noBeforeWords);
-
+ Uint32& noBeforeWords,
+ bool disk);
+
void sendTrigAttrInfo(Signal* signal,
Uint32* data,
Uint32 dataLen,
diff --git a/storage/ndb/src/kernel/blocks/dbtup/DbtupCommit.cpp b/storage/ndb/src/kernel/blocks/dbtup/DbtupCommit.cpp
index 883e038b125..ee0f194211b 100644
--- a/storage/ndb/src/kernel/blocks/dbtup/DbtupCommit.cpp
+++ b/storage/ndb/src/kernel/blocks/dbtup/DbtupCommit.cpp
@@ -356,6 +356,7 @@ Dbtup::disk_page_commit_callback(Signal* signal,
tupCommitReq->opPtr= opPtrI;
tupCommitReq->hashValue= hash_value;
tupCommitReq->gci= gci;
+ tupCommitReq->diskpage = page_id;
regOperPtr.p->op_struct.m_load_diskpage_on_commit= 0;
regOperPtr.p->m_commit_disk_callback_page= page_id;
@@ -386,14 +387,15 @@ Dbtup::disk_page_log_buffer_callback(Signal* signal,
c_operation_pool.getPtr(regOperPtr, opPtrI);
c_lqh->get_op_info(regOperPtr.p->userpointer, &hash_value, &gci);
+ Uint32 page= regOperPtr.p->m_commit_disk_callback_page;
TupCommitReq * const tupCommitReq= (TupCommitReq *)signal->getDataPtr();
tupCommitReq->opPtr= opPtrI;
tupCommitReq->hashValue= hash_value;
tupCommitReq->gci= gci;
+ tupCommitReq->diskpage = page;
- Uint32 page= regOperPtr.p->m_commit_disk_callback_page;
ndbassert(regOperPtr.p->op_struct.m_load_diskpage_on_commit == 0);
regOperPtr.p->op_struct.m_wait_log_buffer= 0;
m_global_page_pool.getPtr(m_pgman.m_ptr, page);
@@ -478,7 +480,16 @@ void Dbtup::execTUP_COMMITREQ(Signal* signal)
req_struct.signal= signal;
req_struct.hash_value= hash_value;
req_struct.gci= gci;
+ regOperPtr.p->m_commit_disk_callback_page = tupCommitReq->diskpage;
+#ifdef VM_TRACE
+ if (tupCommitReq->diskpage == RNIL)
+ {
+ m_pgman.m_ptr.setNull();
+ req_struct.m_disk_page_ptr.setNull();
+ }
+#endif
+
ptrCheckGuard(regTabPtr, no_of_tablerec, tablerec);
PagePtr page;
@@ -626,8 +637,10 @@ skip_disk:
/**
* Perform "real" commit
*/
+ Uint32 disk = regOperPtr.p->m_commit_disk_callback_page;
set_change_mask_info(&req_struct, regOperPtr.p);
- checkDetachedTriggers(&req_struct, regOperPtr.p, regTabPtr.p);
+ checkDetachedTriggers(&req_struct, regOperPtr.p, regTabPtr.p,
+ disk != RNIL);
if(regOperPtr.p->op_struct.op_type != ZDELETE)
{
diff --git a/storage/ndb/src/kernel/blocks/dbtup/DbtupExecQuery.cpp b/storage/ndb/src/kernel/blocks/dbtup/DbtupExecQuery.cpp
index 7c36377d13d..ce337afb20b 100644
--- a/storage/ndb/src/kernel/blocks/dbtup/DbtupExecQuery.cpp
+++ b/storage/ndb/src/kernel/blocks/dbtup/DbtupExecQuery.cpp
@@ -24,7 +24,6 @@
#include "AttributeOffset.hpp"
#include <AttributeHeader.hpp>
#include <Interpreter.hpp>
-#include <signaldata/TupCommit.hpp>
#include <signaldata/TupKey.hpp>
#include <signaldata/AttrInfo.hpp>
#include <NdbSqlUtil.hpp>
diff --git a/storage/ndb/src/kernel/blocks/dbtup/DbtupTrigger.cpp b/storage/ndb/src/kernel/blocks/dbtup/DbtupTrigger.cpp
index 0d54f9c821b..09d71a19add 100644
--- a/storage/ndb/src/kernel/blocks/dbtup/DbtupTrigger.cpp
+++ b/storage/ndb/src/kernel/blocks/dbtup/DbtupTrigger.cpp
@@ -457,7 +457,8 @@ void Dbtup::checkDeferredTriggers(Signal* signal,
/* ---------------------------------------------------------------- */
void Dbtup::checkDetachedTriggers(KeyReqStruct *req_struct,
Operationrec* regOperPtr,
- Tablerec* regTablePtr)
+ Tablerec* regTablePtr,
+ bool disk)
{
Uint32 save_type = regOperPtr->op_struct.op_type;
Tuple_header *save_ptr = req_struct->m_tuple_ptr;
@@ -503,7 +504,7 @@ void Dbtup::checkDetachedTriggers(KeyReqStruct *req_struct,
// If any fired immediate insert trigger then fetch after tuple
fireDetachedTriggers(req_struct,
regTablePtr->subscriptionInsertTriggers,
- regOperPtr);
+ regOperPtr, disk);
break;
case(ZDELETE):
jam();
@@ -517,7 +518,7 @@ void Dbtup::checkDetachedTriggers(KeyReqStruct *req_struct,
// FIRETRIGORD with the before tuple
fireDetachedTriggers(req_struct,
regTablePtr->subscriptionDeleteTriggers,
- regOperPtr);
+ regOperPtr, disk);
break;
case(ZUPDATE):
jam();
@@ -531,7 +532,7 @@ void Dbtup::checkDetachedTriggers(KeyReqStruct *req_struct,
// and send two FIRETRIGORD one with before tuple and one with after tuple
fireDetachedTriggers(req_struct,
regTablePtr->subscriptionUpdateTriggers,
- regOperPtr);
+ regOperPtr, disk);
break;
default:
ndbrequire(false);
@@ -589,7 +590,8 @@ Dbtup::fireDeferredTriggers(Signal* signal,
void
Dbtup::fireDetachedTriggers(KeyReqStruct *req_struct,
DLList<TupTriggerData>& triggerList,
- Operationrec* const regOperPtr)
+ Operationrec* const regOperPtr,
+ bool disk)
{
TriggerPtr trigPtr;
@@ -610,7 +612,8 @@ Dbtup::fireDetachedTriggers(KeyReqStruct *req_struct,
jam();
executeTrigger(req_struct,
trigPtr.p,
- regOperPtr);
+ regOperPtr,
+ disk);
}
triggerList.next(trigPtr);
}
@@ -634,7 +637,8 @@ void Dbtup::executeTriggers(KeyReqStruct *req_struct,
void Dbtup::executeTrigger(KeyReqStruct *req_struct,
TupTriggerData* const trigPtr,
- Operationrec* const regOperPtr)
+ Operationrec* const regOperPtr,
+ bool disk)
{
/**
* The block below does not work together with GREP.
@@ -701,7 +705,8 @@ void Dbtup::executeTrigger(KeyReqStruct *req_struct,
afterBuffer,
noAfterWords,
beforeBuffer,
- noBeforeWords)) {
+ noBeforeWords,
+ disk)) {
jam();
return;
}
@@ -804,9 +809,9 @@ bool Dbtup::readTriggerInfo(TupTriggerData* const trigPtr,
Uint32* const afterBuffer,
Uint32& noAfterWords,
Uint32* const beforeBuffer,
- Uint32& noBeforeWords)
+ Uint32& noBeforeWords,
+ bool disk)
{
- //XXX this will not work with varsize attributes...
noAfterWords = 0;
noBeforeWords = 0;
Uint32 readBuffer[MAX_ATTRIBUTES_IN_TABLE];
@@ -839,8 +844,8 @@ bool Dbtup::readTriggerInfo(TupTriggerData* const trigPtr,
c_undo_buffer.get_ptr(&req_struct->prevOpPtr.p->m_copy_tuple_location);
}
- if (regTabPtr->need_expand())
- prepare_read(req_struct, regTabPtr, true);
+ if (regTabPtr->need_expand(disk))
+ prepare_read(req_struct, regTabPtr, disk);
int ret = readAttributes(req_struct,
&tableDescriptor[regTabPtr->readKeyArray].tabDescr,
@@ -935,8 +940,8 @@ bool Dbtup::readTriggerInfo(TupTriggerData* const trigPtr,
req_struct->m_tuple_ptr= (Tuple_header*)ptr;
}
- if (regTabPtr->need_expand()) // no disk
- prepare_read(req_struct, regTabPtr, true);
+ if (regTabPtr->need_expand(disk))
+ prepare_read(req_struct, regTabPtr, disk);
int ret = readAttributes(req_struct,
&readBuffer[0],