diff options
Diffstat (limited to 'storage/ndb/src/kernel/blocks/backup/Backup.cpp')
-rw-r--r-- | storage/ndb/src/kernel/blocks/backup/Backup.cpp | 35 |
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); |