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
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
nexedi
MariaDB
Commits
a23944b9
Commit
a23944b9
authored
Apr 25, 2006
by
jonas@perch.ndb.mysql.com
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
ndb - bug#18597
Handle early abort of scan, so that resources are correctly freed
parent
58d214b9
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
28 additions
and
14 deletions
+28
-14
ndb/src/kernel/blocks/dbtc/Dbtc.hpp
ndb/src/kernel/blocks/dbtc/Dbtc.hpp
+3
-2
ndb/src/kernel/blocks/dbtc/DbtcMain.cpp
ndb/src/kernel/blocks/dbtc/DbtcMain.cpp
+25
-12
No files found.
ndb/src/kernel/blocks/dbtc/Dbtc.hpp
View file @
a23944b9
...
...
@@ -1400,7 +1400,7 @@ private:
const
UintR
scanParallel
,
const
UintR
noOprecPerFrag
);
void
initScanfragrec
(
Signal
*
signal
);
void
releaseScanResources
(
ScanRecordPtr
);
void
releaseScanResources
(
ScanRecordPtr
,
bool
not_started
=
false
);
ScanRecordPtr
seizeScanrec
(
Signal
*
signal
);
void
sendScanFragReq
(
Signal
*
,
ScanRecord
*
,
ScanFragRec
*
);
void
sendScanTabConf
(
Signal
*
signal
,
ScanRecordPtr
);
...
...
@@ -1543,7 +1543,8 @@ private:
void
signalErrorRefuseLab
(
Signal
*
signal
);
void
abort080Lab
(
Signal
*
signal
);
void
packKeyData000Lab
(
Signal
*
signal
,
BlockReference
TBRef
,
Uint32
len
);
void
abortScanLab
(
Signal
*
signal
,
ScanRecordPtr
,
Uint32
errCode
);
void
abortScanLab
(
Signal
*
signal
,
ScanRecordPtr
,
Uint32
errCode
,
bool
not_started
=
false
);
void
sendAbortedAfterTimeout
(
Signal
*
signal
,
int
Tcheck
);
void
abort010Lab
(
Signal
*
signal
);
void
abort015Lab
(
Signal
*
signal
);
...
...
ndb/src/kernel/blocks/dbtc/DbtcMain.cpp
View file @
a23944b9
...
...
@@ -8767,17 +8767,17 @@ void Dbtc::scanAttrinfoLab(Signal* signal, UintR Tlen)
scanAttrinfo_attrbuf_error:
jam
();
abortScanLab
(
signal
,
scanptr
,
ZGET_ATTRBUF_ERROR
);
abortScanLab
(
signal
,
scanptr
,
ZGET_ATTRBUF_ERROR
,
true
);
return
;
scanAttrinfo_attrbuf2_error:
jam
();
abortScanLab
(
signal
,
scanptr
,
ZGET_ATTRBUF_ERROR
);
abortScanLab
(
signal
,
scanptr
,
ZGET_ATTRBUF_ERROR
,
true
);
return
;
scanAttrinfo_len_error:
jam
();
abortScanLab
(
signal
,
scanptr
,
ZLENGTH_ERROR
);
abortScanLab
(
signal
,
scanptr
,
ZLENGTH_ERROR
,
true
);
return
;
}
//Dbtc::scanAttrinfoLab()
...
...
@@ -8793,7 +8793,8 @@ void Dbtc::diFcountReqLab(Signal* signal, ScanRecordPtr scanptr)
;
}
else
{
abortScanLab
(
signal
,
scanptr
,
tabPtr
.
p
->
getErrorCode
(
scanptr
.
p
->
scanSchemaVersion
));
tabPtr
.
p
->
getErrorCode
(
scanptr
.
p
->
scanSchemaVersion
),
true
);
return
;
}
...
...
@@ -8831,13 +8832,13 @@ void Dbtc::execDI_FCOUNTCONF(Signal* signal)
ndbrequire
(
scanptr
.
p
->
scanState
==
ScanRecord
::
WAIT_FRAGMENT_COUNT
);
if
(
apiConnectptr
.
p
->
apiFailState
==
ZTRUE
)
{
jam
();
releaseScanResources
(
scanptr
);
releaseScanResources
(
scanptr
,
true
);
handleApiFailState
(
signal
,
apiConnectptr
.
i
);
return
;
}
//if
if
(
tfragCount
==
0
)
{
jam
();
abortScanLab
(
signal
,
scanptr
,
ZNO_FRAGMENT_ERROR
);
abortScanLab
(
signal
,
scanptr
,
ZNO_FRAGMENT_ERROR
,
true
);
return
;
}
//if
...
...
@@ -8851,7 +8852,8 @@ void Dbtc::execDI_FCOUNTCONF(Signal* signal)
;
}
else
{
abortScanLab
(
signal
,
scanptr
,
tabPtr
.
p
->
getErrorCode
(
scanptr
.
p
->
scanSchemaVersion
));
tabPtr
.
p
->
getErrorCode
(
scanptr
.
p
->
scanSchemaVersion
),
true
);
return
;
}
...
...
@@ -8906,20 +8908,22 @@ void Dbtc::execDI_FCOUNTREF(Signal* signal)
ndbrequire
(
scanptr
.
p
->
scanState
==
ScanRecord
::
WAIT_FRAGMENT_COUNT
);
if
(
apiConnectptr
.
p
->
apiFailState
==
ZTRUE
)
{
jam
();
releaseScanResources
(
scanptr
);
releaseScanResources
(
scanptr
,
true
);
handleApiFailState
(
signal
,
apiConnectptr
.
i
);
return
;
}
//if
abortScanLab
(
signal
,
scanptr
,
errCode
);
abortScanLab
(
signal
,
scanptr
,
errCode
,
true
);
}
//Dbtc::execDI_FCOUNTREF()
void
Dbtc
::
abortScanLab
(
Signal
*
signal
,
ScanRecordPtr
scanptr
,
Uint32
errCode
)
void
Dbtc
::
abortScanLab
(
Signal
*
signal
,
ScanRecordPtr
scanptr
,
Uint32
errCode
,
bool
not_started
)
{
scanTabRefLab
(
signal
,
errCode
);
releaseScanResources
(
scanptr
);
releaseScanResources
(
scanptr
,
not_started
);
}
//Dbtc::abortScanLab()
void
Dbtc
::
releaseScanResources
(
ScanRecordPtr
scanPtr
)
void
Dbtc
::
releaseScanResources
(
ScanRecordPtr
scanPtr
,
bool
not_started
)
{
if
(
apiConnectptr
.
p
->
cachePtr
!=
RNIL
)
{
cachePtr
.
i
=
apiConnectptr
.
p
->
cachePtr
;
...
...
@@ -8931,6 +8935,15 @@ void Dbtc::releaseScanResources(ScanRecordPtr scanPtr)
ptrCheckGuard
(
tcConnectptr
,
ctcConnectFilesize
,
tcConnectRecord
);
releaseTcCon
();
if
(
not_started
)
{
jam
();
ScanFragList
run
(
c_scan_frag_pool
,
scanPtr
.
p
->
m_running_scan_frags
);
ScanFragList
queue
(
c_scan_frag_pool
,
scanPtr
.
p
->
m_queued_scan_frags
);
run
.
release
();
queue
.
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
());
...
...
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