mirror of
https://github.com/MariaDB/server.git
synced 2025-01-30 18:41:56 +01:00
Merge joreland@bk-internal.mysql.com:/home/bk/mysql-4.1
into mysql.com:/home/jonas/src/mysql-4.1
This commit is contained in:
commit
232bbfda4d
3 changed files with 31 additions and 22 deletions
|
@ -550,6 +550,11 @@ public:
|
||||||
UintR scanErrorCounter;
|
UintR scanErrorCounter;
|
||||||
UintR scanLocalFragid;
|
UintR scanLocalFragid;
|
||||||
UintR scanSchemaVersion;
|
UintR scanSchemaVersion;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This is _always_ main table, even in range scan
|
||||||
|
* in which case scanTcrec->fragmentptr is different
|
||||||
|
*/
|
||||||
Uint32 fragPtrI;
|
Uint32 fragPtrI;
|
||||||
UintR scanStoredProcId;
|
UintR scanStoredProcId;
|
||||||
ScanState scanState;
|
ScanState scanState;
|
||||||
|
|
|
@ -7703,6 +7703,9 @@ void Dblqh::abort_scan(Signal* signal, Uint32 scan_ptr_i, Uint32 errcode){
|
||||||
jam();
|
jam();
|
||||||
scanptr.i = scan_ptr_i;
|
scanptr.i = scan_ptr_i;
|
||||||
c_scanRecordPool.getPtr(scanptr);
|
c_scanRecordPool.getPtr(scanptr);
|
||||||
|
|
||||||
|
fragptr.i = tcConnectptr.p->fragmentptr;
|
||||||
|
ptrCheckGuard(fragptr, cfragrecFileSize, fragrecord);
|
||||||
finishScanrec(signal);
|
finishScanrec(signal);
|
||||||
releaseScanrec(signal);
|
releaseScanrec(signal);
|
||||||
tcConnectptr.p->transactionState = TcConnectionrec::IDLE;
|
tcConnectptr.p->transactionState = TcConnectionrec::IDLE;
|
||||||
|
@ -8570,10 +8573,12 @@ Uint32 Dblqh::initScanrec(const ScanFragReq* scanFragReq)
|
||||||
/**
|
/**
|
||||||
* Used for scan take over
|
* Used for scan take over
|
||||||
*/
|
*/
|
||||||
FragrecordPtr tFragPtr;
|
{
|
||||||
tFragPtr.i = fragptr.p->tableFragptr;
|
FragrecordPtr tFragPtr;
|
||||||
ptrCheckGuard(tFragPtr, cfragrecFileSize, fragrecord);
|
tFragPtr.i = fragptr.p->tableFragptr;
|
||||||
scanptr.p->fragPtrI = fragptr.p->tableFragptr;
|
ptrCheckGuard(tFragPtr, cfragrecFileSize, fragrecord);
|
||||||
|
scanptr.p->fragPtrI = fragptr.p->tableFragptr;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* !idx uses 1 - (MAX_PARALLEL_SCANS_PER_FRAG - 1) = 1-11
|
* !idx uses 1 - (MAX_PARALLEL_SCANS_PER_FRAG - 1) = 1-11
|
||||||
|
@ -8582,7 +8587,7 @@ Uint32 Dblqh::initScanrec(const ScanFragReq* scanFragReq)
|
||||||
Uint32 start = (idx ? MAX_PARALLEL_SCANS_PER_FRAG : 1 );
|
Uint32 start = (idx ? MAX_PARALLEL_SCANS_PER_FRAG : 1 );
|
||||||
Uint32 stop = (idx ? MAX_PARALLEL_INDEX_SCANS_PER_FRAG : MAX_PARALLEL_SCANS_PER_FRAG - 1);
|
Uint32 stop = (idx ? MAX_PARALLEL_INDEX_SCANS_PER_FRAG : MAX_PARALLEL_SCANS_PER_FRAG - 1);
|
||||||
stop += start;
|
stop += start;
|
||||||
Uint32 free = tFragPtr.p->m_scanNumberMask.find(start);
|
Uint32 free = fragptr.p->m_scanNumberMask.find(start);
|
||||||
|
|
||||||
if(free == Fragrecord::ScanNumberMask::NotFound || free >= stop){
|
if(free == Fragrecord::ScanNumberMask::NotFound || free >= stop){
|
||||||
jam();
|
jam();
|
||||||
|
@ -8597,16 +8602,16 @@ Uint32 Dblqh::initScanrec(const ScanFragReq* scanFragReq)
|
||||||
*/
|
*/
|
||||||
scanptr.p->scanState = ScanRecord::IN_QUEUE;
|
scanptr.p->scanState = ScanRecord::IN_QUEUE;
|
||||||
LocalDLFifoList<ScanRecord> queue(c_scanRecordPool,
|
LocalDLFifoList<ScanRecord> queue(c_scanRecordPool,
|
||||||
tFragPtr.p->m_queuedScans);
|
fragptr.p->m_queuedScans);
|
||||||
queue.add(scanptr);
|
queue.add(scanptr);
|
||||||
return ZOK;
|
return ZOK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
scanptr.p->scanNumber = free;
|
scanptr.p->scanNumber = free;
|
||||||
tFragPtr.p->m_scanNumberMask.clear(free);// Update mask
|
fragptr.p->m_scanNumberMask.clear(free);// Update mask
|
||||||
|
|
||||||
LocalDLList<ScanRecord> active(c_scanRecordPool, tFragPtr.p->m_activeScans);
|
LocalDLList<ScanRecord> active(c_scanRecordPool, fragptr.p->m_activeScans);
|
||||||
active.add(scanptr);
|
active.add(scanptr);
|
||||||
if(scanptr.p->scanKeyinfoFlag){
|
if(scanptr.p->scanKeyinfoFlag){
|
||||||
jam();
|
jam();
|
||||||
|
@ -8666,12 +8671,8 @@ void Dblqh::finishScanrec(Signal* signal)
|
||||||
{
|
{
|
||||||
release_acc_ptr_list(scanptr.p);
|
release_acc_ptr_list(scanptr.p);
|
||||||
|
|
||||||
FragrecordPtr tFragPtr;
|
|
||||||
tFragPtr.i = scanptr.p->fragPtrI;
|
|
||||||
ptrCheckGuard(tFragPtr, cfragrecFileSize, fragrecord);
|
|
||||||
|
|
||||||
LocalDLFifoList<ScanRecord> queue(c_scanRecordPool,
|
LocalDLFifoList<ScanRecord> queue(c_scanRecordPool,
|
||||||
tFragPtr.p->m_queuedScans);
|
fragptr.p->m_queuedScans);
|
||||||
|
|
||||||
if(scanptr.p->scanState == ScanRecord::IN_QUEUE){
|
if(scanptr.p->scanState == ScanRecord::IN_QUEUE){
|
||||||
jam();
|
jam();
|
||||||
|
@ -8689,11 +8690,11 @@ void Dblqh::finishScanrec(Signal* signal)
|
||||||
ndbrequire(tmp.p == scanptr.p);
|
ndbrequire(tmp.p == scanptr.p);
|
||||||
}
|
}
|
||||||
|
|
||||||
LocalDLList<ScanRecord> scans(c_scanRecordPool, tFragPtr.p->m_activeScans);
|
LocalDLList<ScanRecord> scans(c_scanRecordPool, fragptr.p->m_activeScans);
|
||||||
scans.release(scanptr);
|
scans.release(scanptr);
|
||||||
|
|
||||||
const Uint32 scanNumber = scanptr.p->scanNumber;
|
const Uint32 scanNumber = scanptr.p->scanNumber;
|
||||||
ndbrequire(!tFragPtr.p->m_scanNumberMask.get(scanNumber));
|
ndbrequire(!fragptr.p->m_scanNumberMask.get(scanNumber));
|
||||||
ScanRecordPtr restart;
|
ScanRecordPtr restart;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -8701,13 +8702,13 @@ void Dblqh::finishScanrec(Signal* signal)
|
||||||
*/
|
*/
|
||||||
if(scanNumber == NR_ScanNo || !queue.first(restart)){
|
if(scanNumber == NR_ScanNo || !queue.first(restart)){
|
||||||
jam();
|
jam();
|
||||||
tFragPtr.p->m_scanNumberMask.set(scanNumber);
|
fragptr.p->m_scanNumberMask.set(scanNumber);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(ERROR_INSERTED(5034)){
|
if(ERROR_INSERTED(5034)){
|
||||||
jam();
|
jam();
|
||||||
tFragPtr.p->m_scanNumberMask.set(scanNumber);
|
fragptr.p->m_scanNumberMask.set(scanNumber);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1122,8 +1122,11 @@ NdbConnection::getNdbIndexScanOperation(const NdbIndexImpl* index,
|
||||||
if (indexTable != 0){
|
if (indexTable != 0){
|
||||||
NdbIndexScanOperation* tOp =
|
NdbIndexScanOperation* tOp =
|
||||||
getNdbScanOperation((NdbTableImpl *) indexTable);
|
getNdbScanOperation((NdbTableImpl *) indexTable);
|
||||||
tOp->m_currentTable = table;
|
if(tOp)
|
||||||
if(tOp) tOp->m_cursor_type = NdbScanOperation::IndexCursor;
|
{
|
||||||
|
tOp->m_currentTable = table;
|
||||||
|
tOp->m_cursor_type = NdbScanOperation::IndexCursor;
|
||||||
|
}
|
||||||
return tOp;
|
return tOp;
|
||||||
} else {
|
} else {
|
||||||
setOperationErrorCodeAbort(theNdb->theError.code);
|
setOperationErrorCodeAbort(theNdb->theError.code);
|
||||||
|
|
Loading…
Add table
Reference in a new issue