Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
M
mariadb
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
mariadb
Commits
b7ffde86
Commit
b7ffde86
authored
Sep 01, 2004
by
unknown
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Piggy back close scan req
parent
e7a950a6
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
60 additions
and
85 deletions
+60
-85
ndb/src/kernel/blocks/dbtc/Dbtc.hpp
ndb/src/kernel/blocks/dbtc/Dbtc.hpp
+1
-2
ndb/src/kernel/blocks/dbtc/DbtcMain.cpp
ndb/src/kernel/blocks/dbtc/DbtcMain.cpp
+42
-55
ndb/src/ndbapi/NdbConnectionScan.cpp
ndb/src/ndbapi/NdbConnectionScan.cpp
+10
-1
ndb/src/ndbapi/NdbScanOperation.cpp
ndb/src/ndbapi/NdbScanOperation.cpp
+7
-27
No files found.
ndb/src/kernel/blocks/dbtc/Dbtc.hpp
View file @
b7ffde86
...
...
@@ -1155,7 +1155,6 @@ public:
union
{
Uint32
m_queued_count
;
Uint32
scanReceivedOperations
;
};
DLList
<
ScanFragRec
>::
Head
m_queued_scan_frags
;
// In TC !sent to API
DLList
<
ScanFragRec
>::
Head
m_delivered_scan_frags
;
// Delivered to API
DLList
<
ScanFragRec
>::
Head
m_completed_scan_frags
;
// Completed
// Id of the next fragment to be scanned. Used by scan fragment
// processes when they are ready for the next fragment
...
...
@@ -1433,7 +1432,7 @@ private:
void
releaseScanResources
(
ScanRecordPtr
);
ScanRecordPtr
seizeScanrec
(
Signal
*
signal
);
void
sendScanFragReq
(
Signal
*
,
ScanRecord
*
,
ScanFragRec
*
);
void
sendScanTabConf
(
Signal
*
signal
,
ScanRecord
*
);
void
sendScanTabConf
(
Signal
*
signal
,
ScanRecord
Ptr
);
void
close_scan_req
(
Signal
*
,
ScanRecordPtr
,
bool
received_req
);
void
close_scan_req_send_conf
(
Signal
*
,
ScanRecordPtr
);
...
...
ndb/src/kernel/blocks/dbtc/DbtcMain.cpp
View file @
b7ffde86
...
...
@@ -6586,10 +6586,8 @@ void Dbtc::timeOutFoundFragLab(Signal* signal, UintR TscanConPtr)
*/
ptr
.
p
->
scanFragState
=
ScanFragRec
::
COMPLETED
;
ScanFragList
run
(
c_scan_frag_pool
,
scanptr
.
p
->
m_running_scan_frags
);
ScanFragList
comp
(
c_scan_frag_pool
,
scanptr
.
p
->
m_completed_scan_frags
);
run
.
remove
(
ptr
);
comp
.
add
(
ptr
);
run
.
release
(
ptr
);
ptr
.
p
->
stopFragTimer
();
}
...
...
@@ -6865,7 +6863,6 @@ void Dbtc::checkScanActiveInFailedLqh(Signal* signal,
jam
();
ScanFragRecPtr
ptr
;
ScanFragList
run
(
c_scan_frag_pool
,
scanptr
.
p
->
m_running_scan_frags
);
ScanFragList
comp
(
c_scan_frag_pool
,
scanptr
.
p
->
m_completed_scan_frags
);
for
(
run
.
first
(
ptr
);
!
ptr
.
isNull
();
){
jam
();
...
...
@@ -6875,8 +6872,7 @@ void Dbtc::checkScanActiveInFailedLqh(Signal* signal,
refToNode
(
curr
.
p
->
lqhBlockref
)
==
failedNodeId
){
jam
();
run
.
remove
(
curr
);
comp
.
add
(
curr
);
run
.
release
(
curr
);
curr
.
p
->
scanFragState
=
ScanFragRec
::
COMPLETED
;
curr
.
p
->
stopFragTimer
();
found
=
true
;
...
...
@@ -8809,13 +8805,9 @@ void Dbtc::releaseScanResources(ScanRecordPtr scanPtr)
ptrCheckGuard
(
tcConnectptr
,
ctcConnectFilesize
,
tcConnectRecord
);
releaseTcCon
();
ScanFragList
x
(
c_scan_frag_pool
,
scanPtr
.
p
->
m_completed_scan_frags
);
x
.
release
();
ndbrequire
(
scanPtr
.
p
->
m_running_scan_frags
.
isEmpty
());
ndbrequire
(
scanPtr
.
p
->
m_queued_scan_frags
.
isEmpty
());
ndbrequire
(
scanPtr
.
p
->
m_delivered_scan_frags
.
isEmpty
());
ndbassert
(
scanPtr
.
p
->
scanApiRec
==
apiConnectptr
.
i
);
ndbassert
(
apiConnectptr
.
p
->
apiScanRec
==
scanPtr
.
i
);
...
...
@@ -8868,10 +8860,8 @@ void Dbtc::execDIGETPRIMCONF(Signal* signal)
if
(
tabPtr
.
p
->
checkTable
(
schemaVersion
)
==
false
){
jam
();
ScanFragList
run
(
c_scan_frag_pool
,
scanptr
.
p
->
m_running_scan_frags
);
ScanFragList
comp
(
c_scan_frag_pool
,
scanptr
.
p
->
m_completed_scan_frags
);
run
.
remove
(
scanFragptr
);
comp
.
add
(
scanFragptr
);
run
.
release
(
scanFragptr
);
scanError
(
signal
,
scanptr
,
tabPtr
.
p
->
getErrorCode
(
schemaVersion
));
return
;
}
...
...
@@ -8889,10 +8879,8 @@ void Dbtc::execDIGETPRIMCONF(Signal* signal)
updateBuddyTimer
(
apiConnectptr
);
{
ScanFragList
run
(
c_scan_frag_pool
,
scanptr
.
p
->
m_running_scan_frags
);
ScanFragList
comp
(
c_scan_frag_pool
,
scanptr
.
p
->
m_completed_scan_frags
);
run
.
remove
(
scanFragptr
);
comp
.
add
(
scanFragptr
);
run
.
release
(
scanFragptr
);
}
close_scan_req_send_conf
(
signal
,
scanptr
);
return
;
...
...
@@ -8945,10 +8933,8 @@ void Dbtc::execDIGETPRIMREF(Signal* signal)
ptrCheckGuard
(
scanptr
,
cscanrecFileSize
,
scanRecord
);
ScanFragList
run
(
c_scan_frag_pool
,
scanptr
.
p
->
m_running_scan_frags
);
ScanFragList
comp
(
c_scan_frag_pool
,
scanptr
.
p
->
m_completed_scan_frags
);
run
.
remove
(
scanFragptr
);
comp
.
add
(
scanFragptr
);
run
.
release
(
scanFragptr
);
scanError
(
signal
,
scanptr
,
errCode
);
}
//Dbtc::execDIGETPRIMREF()
...
...
@@ -8993,10 +8979,8 @@ void Dbtc::execSCAN_FRAGREF(Signal* signal)
{
scanFragptr
.
p
->
scanFragState
=
ScanFragRec
::
COMPLETED
;
ScanFragList
run
(
c_scan_frag_pool
,
scanptr
.
p
->
m_running_scan_frags
);
ScanFragList
comp
(
c_scan_frag_pool
,
scanptr
.
p
->
m_completed_scan_frags
);
run
.
remove
(
scanFragptr
);
comp
.
add
(
scanFragptr
);
run
.
release
(
scanFragptr
);
scanFragptr
.
p
->
stopFragTimer
();
}
scanError
(
signal
,
scanptr
,
errCode
);
...
...
@@ -9095,10 +9079,8 @@ void Dbtc::execSCAN_FRAGCONF(Signal* signal)
}
else
{
jam
();
ScanFragList
run
(
c_scan_frag_pool
,
scanptr
.
p
->
m_running_scan_frags
);
ScanFragList
comp
(
c_scan_frag_pool
,
scanptr
.
p
->
m_completed_scan_frags
);
run
.
remove
(
scanFragptr
);
comp
.
add
(
scanFragptr
);
run
.
release
(
scanFragptr
);
scanFragptr
.
p
->
stopFragTimer
();
scanFragptr
.
p
->
scanFragState
=
ScanFragRec
::
COMPLETED
;
}
...
...
@@ -9147,7 +9129,7 @@ void Dbtc::execSCAN_FRAGCONF(Signal* signal)
if
(
scanptr
.
p
->
m_queued_count
>
/** Min */
0
){
jam
();
sendScanTabConf
(
signal
,
scanptr
.
p
);
sendScanTabConf
(
signal
,
scanptr
);
}
}
//Dbtc::execSCAN_FRAGCONF()
...
...
@@ -9308,7 +9290,6 @@ Dbtc::close_scan_req(Signal* signal, ScanRecordPtr scanPtr, bool req_received){
{
ScanFragRecPtr
ptr
;
ScanFragList
running
(
c_scan_frag_pool
,
scanP
->
m_running_scan_frags
);
ScanFragList
completed
(
c_scan_frag_pool
,
scanP
->
m_completed_scan_frags
);
ScanFragList
delivered
(
c_scan_frag_pool
,
scanP
->
m_delivered_scan_frags
);
ScanFragList
queued
(
c_scan_frag_pool
,
scanP
->
m_queued_scan_frags
);
...
...
@@ -9350,7 +9331,7 @@ Dbtc::close_scan_req(Signal* signal, ScanRecordPtr scanPtr, bool req_received){
}
else
{
jam
();
c
ompleted
.
add
(
curr
);
c
_scan_frag_pool
.
release
(
curr
);
curr
.
p
->
scanFragState
=
ScanFragRec
::
COMPLETED
;
curr
.
p
->
stopFragTimer
();
}
...
...
@@ -9378,7 +9359,7 @@ Dbtc::close_scan_req(Signal* signal, ScanRecordPtr scanPtr, bool req_received){
ScanFragNextReq
::
SignalLength
,
JBB
);
}
else
{
jam
();
c
ompleted
.
add
(
curr
);
c
_scan_frag_pool
.
release
(
curr
);
curr
.
p
->
scanFragState
=
ScanFragRec
::
COMPLETED
;
curr
.
p
->
stopFragTimer
();
}
...
...
@@ -9492,10 +9473,10 @@ void Dbtc::sendScanFragReq(Signal* signal,
}
//Dbtc::sendScanFragReq()
void
Dbtc
::
sendScanTabConf
(
Signal
*
signal
,
ScanRecord
*
scanP
)
{
void
Dbtc
::
sendScanTabConf
(
Signal
*
signal
,
ScanRecord
Ptr
scanPtr
)
{
jam
();
Uint32
*
ops
=
signal
->
getDataPtrSend
()
+
4
;
Uint32
op_count
=
scanP
->
m_queued_count
;
Uint32
op_count
=
scanP
tr
.
p
->
m_queued_count
;
if
(
4
+
3
*
op_count
>
25
){
jam
();
ops
+=
21
;
...
...
@@ -9507,30 +9488,37 @@ void Dbtc::sendScanTabConf(Signal* signal, ScanRecord * scanP) {
conf
->
transId1
=
apiConnectptr
.
p
->
transid
[
0
];
conf
->
transId2
=
apiConnectptr
.
p
->
transid
[
1
];
ScanFragRecPtr
ptr
;
ScanFragList
queued
(
c_scan_frag_pool
,
scanP
->
m_queued_scan_frags
);
ScanFragList
completed
(
c_scan_frag_pool
,
scanP
->
m_completed_scan_frags
);
ScanFragList
delivered
(
c_scan_frag_pool
,
scanP
->
m_delivered_scan_frags
);
for
(
queued
.
first
(
ptr
);
!
ptr
.
isNull
();
){
ndbrequire
(
ptr
.
p
->
scanFragState
==
ScanFragRec
::
QUEUED_FOR_DELIVERY
);
ScanFragRecPtr
curr
=
ptr
;
// Remove while iterating...
queued
.
next
(
ptr
);
*
ops
++
=
curr
.
p
->
m_apiPtr
;
*
ops
++
=
curr
.
i
;
*
ops
++
=
(
curr
.
p
->
m_totalLen
<<
10
)
+
curr
.
p
->
m_ops
;
queued
.
remove
(
curr
);
if
(
curr
.
p
->
m_ops
>
0
){
delivered
.
add
(
curr
);
curr
.
p
->
scanFragState
=
ScanFragRec
::
DELIVERED
;
curr
.
p
->
stopFragTimer
();
}
else
{
(
*
--
ops
)
=
ScanTabConf
::
EndOfData
;
ops
++
;
completed
.
add
(
curr
);
curr
.
p
->
scanFragState
=
ScanFragRec
::
COMPLETED
;
curr
.
p
->
stopFragTimer
();
{
ScanFragList
queued
(
c_scan_frag_pool
,
scanPtr
.
p
->
m_queued_scan_frags
);
ScanFragList
delivered
(
c_scan_frag_pool
,
scanPtr
.
p
->
m_delivered_scan_frags
);
for
(
queued
.
first
(
ptr
);
!
ptr
.
isNull
();
){
ndbrequire
(
ptr
.
p
->
scanFragState
==
ScanFragRec
::
QUEUED_FOR_DELIVERY
);
ScanFragRecPtr
curr
=
ptr
;
// Remove while iterating...
queued
.
next
(
ptr
);
*
ops
++
=
curr
.
p
->
m_apiPtr
;
*
ops
++
=
curr
.
i
;
*
ops
++
=
(
curr
.
p
->
m_totalLen
<<
10
)
+
curr
.
p
->
m_ops
;
queued
.
remove
(
curr
);
if
(
curr
.
p
->
m_ops
>
0
){
delivered
.
add
(
curr
);
curr
.
p
->
scanFragState
=
ScanFragRec
::
DELIVERED
;
curr
.
p
->
stopFragTimer
();
}
else
{
(
*
--
ops
)
=
ScanTabConf
::
EndOfData
;
ops
++
;
c_scan_frag_pool
.
release
(
curr
);
curr
.
p
->
scanFragState
=
ScanFragRec
::
COMPLETED
;
curr
.
p
->
stopFragTimer
();
}
}
}
if
(
scanPtr
.
p
->
m_delivered_scan_frags
.
isEmpty
()
&&
scanPtr
.
p
->
m_running_scan_frags
.
isEmpty
()){
conf
->
requestInfo
=
op_count
|
ScanTabConf
::
EndOfData
;
releaseScanResources
(
scanPtr
);
}
if
(
4
+
3
*
op_count
>
25
){
jam
();
...
...
@@ -9544,7 +9532,7 @@ void Dbtc::sendScanTabConf(Signal* signal, ScanRecord * scanP) {
sendSignal
(
apiConnectptr
.
p
->
ndbapiBlockref
,
GSN_SCAN_TABCONF
,
signal
,
ScanTabConf
::
SignalLength
+
3
*
op_count
,
JBB
);
}
scanP
->
m_queued_count
=
0
;
scanP
tr
.
p
->
m_queued_count
=
0
;
}
//Dbtc::sendScanTabConf()
...
...
@@ -10446,7 +10434,6 @@ Dbtc::execDUMP_STATE_ORD(Signal* signal)
DUMP_SFR
(
sp
.
p
->
m_running_scan_frags
);
DUMP_SFR
(
sp
.
p
->
m_queued_scan_frags
);
DUMP_SFR
(
sp
.
p
->
m_delivered_scan_frags
);
DUMP_SFR
(
sp
.
p
->
m_completed_scan_frags
);
// Request dump of ApiConnectRecord
dumpState
->
args
[
0
]
=
DumpStateOrd
::
TcDumpOneApiConnectRec
;
...
...
ndb/src/ndbapi/NdbConnectionScan.cpp
View file @
b7ffde86
...
...
@@ -120,12 +120,21 @@ NdbConnection::receiveSCAN_TABCONF(NdbApiSignal* aSignal,
}
}
}
if
(
conf
->
requestInfo
&
ScanTabConf
::
EndOfData
)
{
if
(
theScanningOp
->
m_ordered
)
theScanningOp
->
m_api_receivers_count
=
0
;
if
(
theScanningOp
->
m_api_receivers_count
+
theScanningOp
->
m_conf_receivers_count
+
theScanningOp
->
m_sent_receivers_count
){
abort
();
}
}
return
0
;
}
else
{
#ifdef NDB_NO_DROPPED_SIGNAL
abort
();
#endif
}
return
-
1
;
}
ndb/src/ndbapi/NdbScanOperation.cpp
View file @
b7ffde86
...
...
@@ -520,20 +520,9 @@ int NdbScanOperation::nextResult(bool fetchAllowed)
/**
* No completed & no sent -> EndOfData
*/
if
(
send_next_scan
(
0
,
true
)
==
0
){
// Close scan
theNdb
->
theWaiter
.
m_node
=
nodeId
;
theNdb
->
theWaiter
.
m_state
=
WAIT_SCAN
;
int
return_code
=
theNdb
->
receiveResponse
(
WAITFOR_SCAN_TIMEOUT
);
if
(
return_code
==
0
&&
seq
==
tp
->
getNodeSequence
(
nodeId
))
{
theError
.
code
=
-
1
;
// make sure user gets error if he tries again
if
(
DEBUG_NEXT_RESULT
)
ndbout_c
(
"return 1"
);
return
1
;
}
retVal
=
-
1
;
//return_code;
}
else
{
retVal
=
-
3
;
}
idx
=
last
;
theError
.
code
=
-
1
;
// make sure user gets error if he tries again
if
(
DEBUG_NEXT_RESULT
)
ndbout_c
(
"return 1"
);
return
1
;
}
if
(
retVal
==
0
)
...
...
@@ -685,6 +674,7 @@ void NdbScanOperation::closeScan()
if
(
m_api_receivers_count
+
m_conf_receivers_count
){
// Send close scan
ndbout_c
(
"sending close %d %d"
,
m_api_receivers_count
,
m_conf_receivers_count
);
send_next_scan
(
0
,
true
);
// Close scan
}
...
...
@@ -1344,19 +1334,9 @@ NdbIndexScanOperation::next_result_ordered(bool fetchAllowed){
return
0
;
}
TransporterFacade
*
tp
=
TransporterFacade
::
instance
();
Guard
guard
(
tp
->
theMutexPtr
);
Uint32
seq
=
theNdbCon
->
theNodeSequence
;
Uint32
nodeId
=
theNdbCon
->
theDBnode
;
if
(
seq
==
tp
->
getNodeSequence
(
nodeId
)
&&
send_next_scan
(
0
,
true
)
==
0
&&
theError
.
code
==
0
){
if
(
DEBUG_NEXT_RESULT
)
ndbout_c
(
"return 1"
);
return
1
;
}
setErrorCode
(
theError
.
code
);
if
(
DEBUG_NEXT_RESULT
)
ndbout_c
(
"return -1"
);
return
-
1
;
theError
.
code
=
-
1
;
if
(
DEBUG_NEXT_RESULT
)
ndbout_c
(
"return 1"
);
return
1
;
}
int
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment