#At file:///home/jonas/src/telco-6.2/ based on revid:jonas@stripped
3011 Jonas Oreland 2009-10-05
ndb - bug#47831 - fix scan error handling in Dbtc, wrt lists
modified:
storage/ndb/src/kernel/blocks/ERROR_codes.txt
storage/ndb/src/kernel/blocks/dbtc/DbtcMain.cpp
storage/ndb/test/ndbapi/testScan.cpp
storage/ndb/test/run-test/daily-basic-tests.txt
=== modified file 'storage/ndb/src/kernel/blocks/ERROR_codes.txt'
--- a/storage/ndb/src/kernel/blocks/ERROR_codes.txt 2009-09-14 12:48:22 +0000
+++ b/storage/ndb/src/kernel/blocks/ERROR_codes.txt 2009-10-05 10:38:50 +0000
@@ -6,7 +6,7 @@ Next DBTUP 4029
Next DBLQH 5054
Next DBDICT 6008
Next DBDIH 7215
-Next DBTC 8081
+Next DBTC 8082
Next CMVMI 9000
Next BACKUP 10041
Next DBUTIL 11002
=== modified file 'storage/ndb/src/kernel/blocks/dbtc/DbtcMain.cpp'
--- a/storage/ndb/src/kernel/blocks/dbtc/DbtcMain.cpp 2009-09-14 12:48:22 +0000
+++ b/storage/ndb/src/kernel/blocks/dbtc/DbtcMain.cpp 2009-10-05 10:38:50 +0000
@@ -7094,10 +7094,11 @@ void Dbtc::timeOutFoundFragLab(Signal* s
* The node has died
*/
ptr.p->scanFragState = ScanFragRec::COMPLETED;
- ScanFragList run(c_scan_frag_pool, scanptr.p->m_running_scan_frags);
-
- run.release(ptr);
ptr.p->stopFragTimer();
+ {
+ ScanFragList run(c_scan_frag_pool, scanptr.p->m_running_scan_frags);
+ run.release(ptr);
+ }
}
scanError(signal, scanptr, ZSCAN_FRAG_LQH_ERROR);
@@ -9799,12 +9800,24 @@ void Dbtc::execDIGETPRIMCONF(Signal* sig
tabPtr.i = scanptr.p->scanTableref;
ptrAss(tabPtr, tableRecord);
Uint32 schemaVersion = scanptr.p->scanSchemaVersion;
- if(tabPtr.p->checkTable(schemaVersion) == false){
+ if (ERROR_INSERTED(8081) || tabPtr.p->checkTable(schemaVersion) == false)
+ {
jam();
- ScanFragList run(c_scan_frag_pool, scanptr.p->m_running_scan_frags);
-
- run.release(scanFragptr);
- scanError(signal, scanptr, tabPtr.p->getErrorCode(schemaVersion));
+ Uint32 err;
+ if (ERROR_INSERTED(8081))
+ {
+ err = ZTIME_OUT_ERROR;
+ CLEAR_ERROR_INSERT_VALUE;
+ }
+ else
+ {
+ err = tabPtr.p->getErrorCode(schemaVersion);
+ }
+ {
+ ScanFragList run(c_scan_frag_pool, scanptr.p->m_running_scan_frags);
+ run.release(scanFragptr);
+ }
+ scanError(signal, scanptr, err);
return;
}
}
@@ -9821,7 +9834,6 @@ void Dbtc::execDIGETPRIMCONF(Signal* sig
updateBuddyTimer(apiConnectptr);
{
ScanFragList run(c_scan_frag_pool, scanptr.p->m_running_scan_frags);
-
run.release(scanFragptr);
}
close_scan_req_send_conf(signal, scanptr);
@@ -9878,9 +9890,10 @@ void Dbtc::execDIGETPRIMREF(Signal* sign
scanptr.i = scanFragptr.p->scanRec;
ptrCheckGuard(scanptr, cscanrecFileSize, scanRecord);
- ScanFragList run(c_scan_frag_pool, scanptr.p->m_running_scan_frags);
-
- run.release(scanFragptr);
+ {
+ ScanFragList run(c_scan_frag_pool, scanptr.p->m_running_scan_frags);
+ run.release(scanFragptr);
+ }
scanError(signal, scanptr, errCode);
}//Dbtc::execDIGETPRIMREF()
@@ -9922,12 +9935,11 @@ void Dbtc::execSCAN_FRAGREF(Signal* sign
* close of the other fragment scans
*/
ndbrequire(scanFragptr.p->scanFragState == ScanFragRec::LQH_ACTIVE);
+ scanFragptr.p->scanFragState = ScanFragRec::COMPLETED;
+ scanFragptr.p->stopFragTimer();
{
- scanFragptr.p->scanFragState = ScanFragRec::COMPLETED;
ScanFragList run(c_scan_frag_pool, scanptr.p->m_running_scan_frags);
-
run.release(scanFragptr);
- scanFragptr.p->stopFragTimer();
}
scanError(signal, scanptr, errCode);
}//Dbtc::execSCAN_FRAGREF()
@@ -10023,11 +10035,12 @@ void Dbtc::execSCAN_FRAGCONF(Signal* sig
return;
} else {
jam();
- ScanFragList run(c_scan_frag_pool, scanptr.p->m_running_scan_frags);
-
- run.release(scanFragptr);
scanFragptr.p->stopFragTimer();
scanFragptr.p->scanFragState = ScanFragRec::COMPLETED;
+ {
+ ScanFragList run(c_scan_frag_pool, scanptr.p->m_running_scan_frags);
+ run.release(scanFragptr);
+ }
}
close_scan_req_send_conf(signal, scanptr);
return;
=== modified file 'storage/ndb/test/ndbapi/testScan.cpp'
--- a/storage/ndb/test/ndbapi/testScan.cpp 2009-05-26 18:53:34 +0000
+++ b/storage/ndb/test/ndbapi/testScan.cpp 2009-10-05 10:38:50 +0000
@@ -1717,6 +1717,13 @@ TESTCASE("ScanReadError5025",
STEP(runScanReadError);
FINALIZER(runClearTable);
}
+TESTCASE("ScanReadError8081",
+ "Scan and insert error 8081"){
+ INITIALIZER(runLoadTable);
+ TC_PROPERTY("ErrorCode", 8081);
+ STEP(runScanReadError);
+ FINALIZER(runClearTable);
+}
TESTCASE("ScanReadError5030",
"Scan and insert error 5030."\
"Drop all SCAN_NEXTREQ signals in LQH until the node is "\
=== modified file 'storage/ndb/test/run-test/daily-basic-tests.txt'
--- a/storage/ndb/test/run-test/daily-basic-tests.txt 2009-09-22 13:04:32 +0000
+++ b/storage/ndb/test/run-test/daily-basic-tests.txt 2009-10-05 10:38:50 +0000
@@ -475,6 +475,10 @@ args: -n ScanReadError5030 T1 D1 D2
max-time: 500
cmd: testScan
+args: -n ScanReadError8081 T1 D1 D2
+
+max-time: 500
+cmd: testScan
args: -n InsertDelete T1 T6 D1 D2
max-time: 500
Attachment: [text/bzr-bundle] bzr/jonas@mysql.com-20091005103850-dwij2dojwpvf5hi6.bundle
| Thread |
|---|
| • bzr commit into mysql-5.1-telco-6.2 branch (jonas:3011) Bug#47831 | Jonas Oreland | 5 Oct |