summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ndb/include/kernel/signaldata/SignalData.hpp1
-rw-r--r--ndb/include/kernel/signaldata/StartFragReq.hpp2
-rw-r--r--ndb/src/common/debugger/EventLogger.cpp7
-rw-r--r--ndb/src/common/debugger/signaldata/SignalDataPrint.cpp1
-rw-r--r--ndb/src/common/debugger/signaldata/StartRec.cpp25
-rw-r--r--ndb/src/kernel/blocks/dbdih/DbdihMain.cpp12
-rw-r--r--ndb/src/kernel/blocks/dbtc/DbtcMain.cpp2
7 files changed, 43 insertions, 7 deletions
diff --git a/ndb/include/kernel/signaldata/SignalData.hpp b/ndb/include/kernel/signaldata/SignalData.hpp
index f825b0feb7b..0591a85d6e6 100644
--- a/ndb/include/kernel/signaldata/SignalData.hpp
+++ b/ndb/include/kernel/signaldata/SignalData.hpp
@@ -222,5 +222,6 @@ GSN_PRINT_SIGNATURE(printSCAN_FRAGREQ);
GSN_PRINT_SIGNATURE(printCONTINUEB_NDBFS);
GSN_PRINT_SIGNATURE(printCONTINUEB_DBDIH);
+GSN_PRINT_SIGNATURE(printSTART_FRAG_REQ);
#endif
diff --git a/ndb/include/kernel/signaldata/StartFragReq.hpp b/ndb/include/kernel/signaldata/StartFragReq.hpp
index ec05c1ee366..ab17a147195 100644
--- a/ndb/include/kernel/signaldata/StartFragReq.hpp
+++ b/ndb/include/kernel/signaldata/StartFragReq.hpp
@@ -32,6 +32,8 @@ class StartFragReq {
public:
STATIC_CONST( SignalLength = 19 );
+ friend bool printSTART_FRAG_REQ(FILE *, const Uint32 *, Uint32, Uint16);
+
private:
Uint32 userPtr;
Uint32 userRef;
diff --git a/ndb/src/common/debugger/EventLogger.cpp b/ndb/src/common/debugger/EventLogger.cpp
index 5a534b36b59..d18b0feb1ad 100644
--- a/ndb/src/common/debugger/EventLogger.cpp
+++ b/ndb/src/common/debugger/EventLogger.cpp
@@ -33,7 +33,6 @@ EventLoggerBase::~EventLoggerBase()
}
-
#define QQQQ char *m_text, size_t m_text_len, const Uint32* theData
void getTextConnected(QQQQ) {
@@ -434,10 +433,12 @@ void getTextNR_CopyFragsCompleted(QQQQ) {
void getTextLCPFragmentCompleted(QQQQ) {
BaseString::snprintf(m_text, m_text_len,
"Table ID = %u, fragment ID = %u has completed LCP "
- "on Node %u",
+ "on Node %u maxGciStarted: %d maxGciCompleted: %d",
theData[2],
theData[3],
- theData[1]);
+ theData[1],
+ theData[4],
+ theData[5]);
}
void getTextTransReportCounters(QQQQ) {
// -------------------------------------------------------------------
diff --git a/ndb/src/common/debugger/signaldata/SignalDataPrint.cpp b/ndb/src/common/debugger/signaldata/SignalDataPrint.cpp
index ab23c04bffa..34cae9f618f 100644
--- a/ndb/src/common/debugger/signaldata/SignalDataPrint.cpp
+++ b/ndb/src/common/debugger/signaldata/SignalDataPrint.cpp
@@ -198,6 +198,7 @@ SignalDataPrintFunctions[] = {
,{ GSN_ACC_LOCKREQ, printACC_LOCKREQ }
,{ GSN_LQH_TRANSCONF, printLQH_TRANSCONF }
,{ GSN_SCAN_FRAGREQ, printSCAN_FRAGREQ }
+ ,{ GSN_START_FRAGREQ, printSTART_FRAG_REQ }
,{ 0, 0 }
};
diff --git a/ndb/src/common/debugger/signaldata/StartRec.cpp b/ndb/src/common/debugger/signaldata/StartRec.cpp
index 482e3cb0728..54830e533c5 100644
--- a/ndb/src/common/debugger/signaldata/StartRec.cpp
+++ b/ndb/src/common/debugger/signaldata/StartRec.cpp
@@ -17,6 +17,7 @@
#include <RefConvert.hpp>
#include <signaldata/StartRec.hpp>
+#include <signaldata/StartFragReq.hpp>
bool
printSTART_REC_REQ(FILE * output,
@@ -50,3 +51,27 @@ printSTART_REC_CONF(FILE * output,
return true;
}
+
+bool
+printSTART_FRAG_REQ(FILE * output,
+ const Uint32 * theData,
+ Uint32 len,
+ Uint16 recBlockNo)
+{
+ StartFragReq* sig = (StartFragReq*)theData;
+
+ fprintf(output, " table: %d frag: %d lcpId: %d lcpNo: %d #nodes: %d \n",
+ sig->tableId, sig->fragId, sig->lcpId, sig->lcpNo,
+ sig->noOfLogNodes);
+
+ for(Uint32 i = 0; i<sig->noOfLogNodes; i++)
+ {
+ fprintf(output, " (node: %d startGci: %d lastGci: %d)",
+ sig->lqhLogNode[i],
+ sig->startGci[i],
+ sig->lastGci[i]);
+ }
+
+ fprintf(output, "\n");
+ return true;
+}
diff --git a/ndb/src/kernel/blocks/dbdih/DbdihMain.cpp b/ndb/src/kernel/blocks/dbdih/DbdihMain.cpp
index 55353dca0b5..72051777959 100644
--- a/ndb/src/kernel/blocks/dbdih/DbdihMain.cpp
+++ b/ndb/src/kernel/blocks/dbdih/DbdihMain.cpp
@@ -9673,6 +9673,9 @@ void Dbdih::execLCP_FRAG_REP(Signal* signal)
}
bool tableDone = reportLcpCompletion(lcpReport);
+
+ Uint32 started = lcpReport->maxGciStarted;
+ Uint32 completed = lcpReport->maxGciCompleted;
if(tableDone){
jam();
@@ -9706,7 +9709,9 @@ void Dbdih::execLCP_FRAG_REP(Signal* signal)
signal->theData[1] = nodeId;
signal->theData[2] = tableId;
signal->theData[3] = fragId;
- sendSignal(CMVMI_REF, GSN_EVENT_REP, signal, 4, JBB);
+ signal->theData[4] = started;
+ signal->theData[5] = completed;
+ sendSignal(CMVMI_REF, GSN_EVENT_REP, signal, 6, JBB);
#endif
bool ok = false;
@@ -10903,7 +10908,9 @@ void Dbdih::findMinGci(ReplicaRecordPtr fmgReplicaPtr,
lcpNo = fmgReplicaPtr.p->nextLcp;
do {
ndbrequire(lcpNo < MAX_LCP_STORED);
- if (fmgReplicaPtr.p->lcpStatus[lcpNo] == ZVALID) {
+ if (fmgReplicaPtr.p->lcpStatus[lcpNo] == ZVALID &&
+ fmgReplicaPtr.p->maxGciStarted[lcpNo] <= coldgcp)
+ {
jam();
keepGci = fmgReplicaPtr.p->maxGciCompleted[lcpNo];
oldestRestorableGci = fmgReplicaPtr.p->maxGciStarted[lcpNo];
@@ -10911,7 +10918,6 @@ void Dbdih::findMinGci(ReplicaRecordPtr fmgReplicaPtr,
return;
} else {
jam();
- ndbrequire(fmgReplicaPtr.p->lcpStatus[lcpNo] == ZINVALID);
if (fmgReplicaPtr.p->createGci[0] == fmgReplicaPtr.p->initialGci) {
jam();
/*-------------------------------------------------------------------
diff --git a/ndb/src/kernel/blocks/dbtc/DbtcMain.cpp b/ndb/src/kernel/blocks/dbtc/DbtcMain.cpp
index 0ff6d8477b9..e61ec45b18d 100644
--- a/ndb/src/kernel/blocks/dbtc/DbtcMain.cpp
+++ b/ndb/src/kernel/blocks/dbtc/DbtcMain.cpp
@@ -4454,7 +4454,7 @@ Dbtc::DIVER_node_fail_handling(Signal* signal, UintR Tgci)
*------------------------------------------------------------------------*/
tabortInd = ZFALSE;
setupFailData(signal);
- if (tabortInd == ZFALSE) {
+ if (false && tabortInd == ZFALSE) {
jam();
commitGciHandling(signal, Tgci);
toCommitHandlingLab(signal);