summaryrefslogtreecommitdiff
path: root/storage/ndb/src/kernel/blocks/backup/Backup.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'storage/ndb/src/kernel/blocks/backup/Backup.cpp')
-rw-r--r--storage/ndb/src/kernel/blocks/backup/Backup.cpp35
1 files changed, 35 insertions, 0 deletions
diff --git a/storage/ndb/src/kernel/blocks/backup/Backup.cpp b/storage/ndb/src/kernel/blocks/backup/Backup.cpp
index 79970ce9723..aae64b4bb6c 100644
--- a/storage/ndb/src/kernel/blocks/backup/Backup.cpp
+++ b/storage/ndb/src/kernel/blocks/backup/Backup.cpp
@@ -355,6 +355,25 @@ Backup::execCONTINUEB(Signal* signal)
GetTabInfoReq::SignalLength, JBB);
return;
}
+ case BackupContinueB::ZDELAY_SCAN_NEXT:
+ if (ERROR_INSERTED(10036))
+ {
+ jam();
+ sendSignalWithDelay(BACKUP_REF, GSN_CONTINUEB, signal, 300,
+ signal->getLength());
+ return;
+ }
+ else
+ {
+ jam();
+ CLEAR_ERROR_INSERT_VALUE;
+ ndbout_c("Resuming backup");
+ memmove(signal->theData, signal->theData + 1,
+ 4*ScanFragNextReq::SignalLength);
+ sendSignal(DBLQH_REF, GSN_SCAN_NEXTREQ, signal,
+ ScanFragNextReq::SignalLength, JBB);
+ return ;
+ }
default:
ndbrequire(0);
}//switch
@@ -3924,6 +3943,22 @@ Backup::checkScan(Signal* signal, BackupFilePtr filePtr)
req->transId2 = (BACKUP << 20) + (getOwnNodeId() << 8);
req->batch_size_rows= 16;
req->batch_size_bytes= 0;
+
+ if (ERROR_INSERTED(10036) &&
+ filePtr.p->tableId >= 2 &&
+ filePtr.p->operation.noOfRecords > 0)
+ {
+ ndbout_c("halting backup for table %d fragment: %d after %d records",
+ filePtr.p->tableId,
+ filePtr.p->fragmentNo,
+ filePtr.p->operation.noOfRecords);
+ memmove(signal->theData+1, signal->theData,
+ 4*ScanFragNextReq::SignalLength);
+ signal->theData[0] = BackupContinueB::ZDELAY_SCAN_NEXT;
+ sendSignalWithDelay(BACKUP_REF, GSN_CONTINUEB, signal,
+ 300, 1+ScanFragNextReq::SignalLength);
+ return;
+ }
if(ERROR_INSERTED(10032))
sendSignalWithDelay(DBLQH_REF, GSN_SCAN_NEXTREQ, signal,
100, ScanFragNextReq::SignalLength);