mirror of
https://github.com/MariaDB/server.git
synced 2025-01-18 21:12:26 +01:00
ndb - bug #10987
make sure not to cut log to early (specificly not use LCP with maxGciStarted that has not yet completed)
This commit is contained in:
parent
c3f4ecb544
commit
3a555b999c
5 changed files with 38 additions and 3 deletions
|
@ -215,5 +215,6 @@ GSN_PRINT_SIGNATURE(printSCAN_FRAGREQ);
|
|||
|
||||
GSN_PRINT_SIGNATURE(printCONTINUEB_NDBFS);
|
||||
GSN_PRINT_SIGNATURE(printCONTINUEB_DBDIH);
|
||||
GSN_PRINT_SIGNATURE(printSTART_FRAG_REQ);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -195,6 +195,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 }
|
||||
};
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -9640,6 +9640,9 @@ void Dbdih::execLCP_FRAG_REP(Signal* signal)
|
|||
}
|
||||
|
||||
bool tableDone = reportLcpCompletion(lcpReport);
|
||||
|
||||
Uint32 started = lcpReport->maxGciStarted;
|
||||
Uint32 completed = lcpReport->maxGciCompleted;
|
||||
|
||||
if(tableDone){
|
||||
jam();
|
||||
|
@ -9673,7 +9676,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;
|
||||
|
@ -10790,7 +10795,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];
|
||||
|
@ -10798,7 +10805,6 @@ void Dbdih::findMinGci(ReplicaRecordPtr fmgReplicaPtr,
|
|||
return;
|
||||
} else {
|
||||
jam();
|
||||
ndbrequire(fmgReplicaPtr.p->lcpStatus[lcpNo] == ZINVALID);
|
||||
if (fmgReplicaPtr.p->createGci[0] == fmgReplicaPtr.p->initialGci) {
|
||||
jam();
|
||||
/*-------------------------------------------------------------------
|
||||
|
|
Loading…
Reference in a new issue