corrected prev fix for bug #13054

so that _only_ backup master replies to API
 
parent 06345424
...@@ -859,20 +859,20 @@ Backup::execBACKUP_REQ(Signal* signal) ...@@ -859,20 +859,20 @@ Backup::execBACKUP_REQ(Signal* signal)
if(getOwnNodeId() != getMasterNodeId()) { if(getOwnNodeId() != getMasterNodeId()) {
jam(); jam();
sendBackupRef(senderRef, signal, senderData, BackupRef::IAmNotMaster); sendBackupRef(senderRef, flags, signal, senderData, BackupRef::IAmNotMaster);
return; return;
}//if }//if
if (m_diskless) if (m_diskless)
{ {
sendBackupRef(senderRef, signal, senderData, sendBackupRef(senderRef, flags, signal, senderData,
BackupRef::CannotBackupDiskless); BackupRef::CannotBackupDiskless);
return; return;
} }
if(dataLen32 != 0) { if(dataLen32 != 0) {
jam(); jam();
sendBackupRef(senderRef, signal, senderData, sendBackupRef(senderRef, flags, signal, senderData,
BackupRef::BackupDefinitionNotImplemented); BackupRef::BackupDefinitionNotImplemented);
return; return;
}//if }//if
...@@ -887,7 +887,7 @@ Backup::execBACKUP_REQ(Signal* signal) ...@@ -887,7 +887,7 @@ Backup::execBACKUP_REQ(Signal* signal)
c_backups.seize(ptr); c_backups.seize(ptr);
if(ptr.i == RNIL) { if(ptr.i == RNIL) {
jam(); jam();
sendBackupRef(senderRef, signal, senderData, BackupRef::OutOfBackupRecord); sendBackupRef(senderRef, flags, signal, senderData, BackupRef::OutOfBackupRecord);
return; return;
}//if }//if
...@@ -936,23 +936,23 @@ void ...@@ -936,23 +936,23 @@ void
Backup::sendBackupRef(Signal* signal, BackupRecordPtr ptr, Uint32 errorCode) Backup::sendBackupRef(Signal* signal, BackupRecordPtr ptr, Uint32 errorCode)
{ {
jam(); jam();
if (SEND_BACKUP_STARTED_FLAG(ptr.p->flags)) sendBackupRef(ptr.p->clientRef, ptr.p->flags, signal, ptr.p->clientData, errorCode);
{
sendBackupRef(ptr.p->clientRef, signal, ptr.p->clientData, errorCode);
}
cleanup(signal, ptr); cleanup(signal, ptr);
} }
void void
Backup::sendBackupRef(BlockReference senderRef, Signal *signal, Backup::sendBackupRef(BlockReference senderRef, Uint32 flags, Signal *signal,
Uint32 senderData, Uint32 errorCode) Uint32 senderData, Uint32 errorCode)
{ {
jam(); jam();
if (SEND_BACKUP_STARTED_FLAG(flags))
{
BackupRef* ref = (BackupRef*)signal->getDataPtrSend(); BackupRef* ref = (BackupRef*)signal->getDataPtrSend();
ref->senderData = senderData; ref->senderData = senderData;
ref->errorCode = errorCode; ref->errorCode = errorCode;
ref->masterRef = numberToRef(BACKUP, getMasterNodeId()); ref->masterRef = numberToRef(BACKUP, getMasterNodeId());
sendSignal(senderRef, GSN_BACKUP_REF, signal, BackupRef::SignalLength, JBB); sendSignal(senderRef, GSN_BACKUP_REF, signal, BackupRef::SignalLength, JBB);
}
if(errorCode != BackupRef::IAmNotMaster){ if(errorCode != BackupRef::IAmNotMaster){
signal->theData[0] = EventReport::BackupFailedToStart; signal->theData[0] = EventReport::BackupFailedToStart;
...@@ -1204,12 +1204,12 @@ Backup::defineBackupReply(Signal* signal, BackupRecordPtr ptr, Uint32 nodeId) ...@@ -1204,12 +1204,12 @@ Backup::defineBackupReply(Signal* signal, BackupRecordPtr ptr, Uint32 nodeId)
*/ */
CRASH_INSERTION((10034)); CRASH_INSERTION((10034));
if (SEND_BACKUP_STARTED_FLAG(ptr.p->flags))
{
BackupConf * conf = (BackupConf*)signal->getDataPtrSend(); BackupConf * conf = (BackupConf*)signal->getDataPtrSend();
conf->backupId = ptr.p->backupId; conf->backupId = ptr.p->backupId;
conf->senderData = ptr.p->clientData; conf->senderData = ptr.p->clientData;
conf->nodes = ptr.p->nodes; conf->nodes = ptr.p->nodes;
if (SEND_BACKUP_STARTED_FLAG(ptr.p->flags))
{
sendSignal(ptr.p->clientRef, GSN_BACKUP_CONF, signal, sendSignal(ptr.p->clientRef, GSN_BACKUP_CONF, signal,
BackupConf::SignalLength, JBB); BackupConf::SignalLength, JBB);
} }
...@@ -2093,6 +2093,8 @@ Backup::stopBackupReply(Signal* signal, BackupRecordPtr ptr, Uint32 nodeId) ...@@ -2093,6 +2093,8 @@ Backup::stopBackupReply(Signal* signal, BackupRecordPtr ptr, Uint32 nodeId)
sendAbortBackupOrd(signal, ptr, AbortBackupOrd::BackupComplete); sendAbortBackupOrd(signal, ptr, AbortBackupOrd::BackupComplete);
if(!ptr.p->checkError()) if(!ptr.p->checkError())
{
if (SEND_BACKUP_COMPLETED_FLAG(ptr.p->flags))
{ {
BackupCompleteRep * rep = (BackupCompleteRep*)signal->getDataPtrSend(); BackupCompleteRep * rep = (BackupCompleteRep*)signal->getDataPtrSend();
rep->backupId = ptr.p->backupId; rep->backupId = ptr.p->backupId;
...@@ -2104,8 +2106,6 @@ Backup::stopBackupReply(Signal* signal, BackupRecordPtr ptr, Uint32 nodeId) ...@@ -2104,8 +2106,6 @@ Backup::stopBackupReply(Signal* signal, BackupRecordPtr ptr, Uint32 nodeId)
rep->noOfLogBytes = ptr.p->noOfLogBytes; rep->noOfLogBytes = ptr.p->noOfLogBytes;
rep->noOfLogRecords = ptr.p->noOfLogRecords; rep->noOfLogRecords = ptr.p->noOfLogRecords;
rep->nodes = ptr.p->nodes; rep->nodes = ptr.p->nodes;
if (SEND_BACKUP_COMPLETED_FLAG(ptr.p->flags))
{
sendSignal(ptr.p->clientRef, GSN_BACKUP_COMPLETE_REP, signal, sendSignal(ptr.p->clientRef, GSN_BACKUP_COMPLETE_REP, signal,
BackupCompleteRep::SignalLength, JBB); BackupCompleteRep::SignalLength, JBB);
} }
...@@ -2146,12 +2146,12 @@ Backup::masterAbort(Signal* signal, BackupRecordPtr ptr) ...@@ -2146,12 +2146,12 @@ Backup::masterAbort(Signal* signal, BackupRecordPtr ptr)
return; return;
} }
if (SEND_BACKUP_COMPLETED_FLAG(ptr.p->flags))
{
BackupAbortRep* rep = (BackupAbortRep*)signal->getDataPtrSend(); BackupAbortRep* rep = (BackupAbortRep*)signal->getDataPtrSend();
rep->backupId = ptr.p->backupId; rep->backupId = ptr.p->backupId;
rep->senderData = ptr.p->clientData; rep->senderData = ptr.p->clientData;
rep->reason = ptr.p->errorCode; rep->reason = ptr.p->errorCode;
if (SEND_BACKUP_COMPLETED_FLAG(ptr.p->flags))
{
sendSignal(ptr.p->clientRef, GSN_BACKUP_ABORT_REP, signal, sendSignal(ptr.p->clientRef, GSN_BACKUP_ABORT_REP, signal,
BackupAbortRep::SignalLength, JBB); BackupAbortRep::SignalLength, JBB);
} }
...@@ -2286,7 +2286,13 @@ Backup::execDEFINE_BACKUP_REQ(Signal* signal) ...@@ -2286,7 +2286,13 @@ Backup::execDEFINE_BACKUP_REQ(Signal* signal)
ptr.p->errorCode = 0; ptr.p->errorCode = 0;
ptr.p->clientRef = req->clientRef; ptr.p->clientRef = req->clientRef;
ptr.p->clientData = req->clientData; ptr.p->clientData = req->clientData;
if(senderRef == reference())
ptr.p->flags = req->flags; ptr.p->flags = req->flags;
else
ptr.p->flags = req->flags & ~((Uint32)0x3); /* remove waitCompleted flags
* as non master should never
* reply
*/
ptr.p->masterRef = senderRef; ptr.p->masterRef = senderRef;
ptr.p->nodes = req->nodes; ptr.p->nodes = req->nodes;
ptr.p->backupId = backupId; ptr.p->backupId = backupId;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment