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
70fdfc55
Commit
70fdfc55
authored
Nov 21, 2006
by
jonas@perch.ndb.mysql.com
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
ndb - bug#24447
api disconnect just after SCAN_TABREQ
parent
0cbb309b
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
80 additions
and
3 deletions
+80
-3
ndb/src/kernel/blocks/dbtc/DbtcMain.cpp
ndb/src/kernel/blocks/dbtc/DbtcMain.cpp
+36
-2
ndb/test/ndbapi/testScan.cpp
ndb/test/ndbapi/testScan.cpp
+40
-1
ndb/test/run-test/daily-basic-tests.txt
ndb/test/run-test/daily-basic-tests.txt
+4
-0
No files found.
ndb/src/kernel/blocks/dbtc/DbtcMain.cpp
View file @
70fdfc55
...
...
@@ -8619,6 +8619,20 @@ void Dbtc::execSCAN_TABREQ(Signal* signal)
* IF ANY TO RECEIVE.
**********************************************************/
scanptr
.
p
->
scanState
=
ScanRecord
::
WAIT_AI
;
if
(
ERROR_INSERTED
(
8038
))
{
/**
* Force API_FAILREQ
*/
DisconnectRep
*
const
rep
=
(
DisconnectRep
*
)
signal
->
getDataPtrSend
();
rep
->
nodeId
=
refToNode
(
apiConnectptr
.
p
->
ndbapiBlockref
);
rep
->
err
=
8038
;
EXECUTE_DIRECT
(
CMVMI
,
GSN_DISCONNECT_REP
,
signal
,
2
);
CLEAR_ERROR_INSERT_VALUE
;
}
return
;
SCAN_error_check:
...
...
@@ -8706,6 +8720,7 @@ void Dbtc::initScanrec(ScanRecordPtr scanptr,
jam
();
ScanFragRecPtr
ptr
;
ndbrequire
(
list
.
seize
(
ptr
));
ptr
.
p
->
scanFragState
=
ScanFragRec
::
IDLE
;
ptr
.
p
->
scanRec
=
scanptr
.
i
;
ptr
.
p
->
scanFragId
=
0
;
ptr
.
p
->
m_apiPtr
=
cdata
[
i
];
...
...
@@ -9457,9 +9472,17 @@ Dbtc::close_scan_req(Signal* signal, ScanRecordPtr scanPtr, bool req_received){
ScanRecord
*
scanP
=
scanPtr
.
p
;
ndbrequire
(
scanPtr
.
p
->
scanState
!=
ScanRecord
::
IDLE
);
ScanRecord
::
ScanState
old
=
scanPtr
.
p
->
scanState
;
scanPtr
.
p
->
scanState
=
ScanRecord
::
CLOSING_SCAN
;
scanPtr
.
p
->
m_close_scan_req
=
req_received
;
if
(
old
==
ScanRecord
::
WAIT_FRAGMENT_COUNT
)
{
jam
();
scanPtr
.
p
->
scanState
=
old
;
return
;
// Will continue on execDI_FCOUNTCONF
}
/**
* Queue : Action
* ============= : =================
...
...
@@ -9487,11 +9510,22 @@ Dbtc::close_scan_req(Signal* signal, ScanRecordPtr scanPtr, bool req_received){
ScanFragRecPtr
curr
=
ptr
;
// Remove while iterating...
running
.
next
(
ptr
);
if
(
curr
.
p
->
scanFragState
==
ScanFragRec
::
WAIT_GET_PRIMCONF
){
switch
(
curr
.
p
->
scanFragState
){
case
ScanFragRec
:
:
IDLE
:
jam
();
// real early abort
ndbrequire
(
old
==
ScanRecord
::
WAIT_AI
);
running
.
release
(
curr
);
continue
;
case
ScanFragRec
:
:
WAIT_GET_PRIMCONF
:
jam
();
continue
;
case
ScanFragRec
:
:
LQH_ACTIVE
:
jam
();
break
;
default:
jamLine
(
curr
.
p
->
scanFragState
);
ndbrequire
(
false
);
}
ndbrequire
(
curr
.
p
->
scanFragState
==
ScanFragRec
::
LQH_ACTIVE
);
curr
.
p
->
startFragTimer
(
ctcTimer
);
curr
.
p
->
scanFragState
=
ScanFragRec
::
LQH_ACTIVE
;
...
...
ndb/test/ndbapi/testScan.cpp
View file @
70fdfc55
...
...
@@ -622,7 +622,7 @@ int runRestarter(NDBT_Context* ctx, NDBT_Step* step){
int
nodeId
=
restarter
.
getDbNodeId
(
lastId
);
lastId
=
(
lastId
+
1
)
%
restarter
.
getNumDbNodes
();
if
(
restarter
.
restartOneDbNode
(
nodeId
)
!=
0
){
if
(
restarter
.
restartOneDbNode
(
nodeId
,
false
,
false
,
true
)
!=
0
){
g_err
<<
"Failed to restartNextDbNode"
<<
endl
;
result
=
NDBT_FAILED
;
break
;
...
...
@@ -1080,6 +1080,39 @@ int runScanRestart(NDBT_Context* ctx, NDBT_Step* step){
}
int
runBug24447
(
NDBT_Context
*
ctx
,
NDBT_Step
*
step
){
int
loops
=
1
;
//ctx->getNumLoops();
int
records
=
ctx
->
getNumRecords
();
int
abort
=
ctx
->
getProperty
(
"AbortProb"
,
15
);
NdbRestarter
restarter
;
HugoTransactions
hugoTrans
(
*
ctx
->
getTab
());
int
i
=
0
;
while
(
i
<
loops
&&
!
ctx
->
isTestStopped
())
{
g_info
<<
i
++
<<
": "
;
int
nodeId
=
restarter
.
getRandomNotMasterNodeId
(
rand
());
if
(
nodeId
==
-
1
)
nodeId
=
restarter
.
getMasterNodeId
();
if
(
restarter
.
insertErrorInNode
(
nodeId
,
8038
)
!=
0
)
{
ndbout
<<
"Could not insert error in node="
<<
nodeId
<<
endl
;
return
NDBT_FAILED
;
}
for
(
Uint32
j
=
0
;
i
<
10
;
i
++
)
{
hugoTrans
.
scanReadRecords
(
GETNDB
(
step
),
records
,
abort
,
0
,
NdbOperation
::
LM_CommittedRead
);
}
}
restarter
.
insertErrorInAllNodes
(
0
);
return
NDBT_OK
;
}
NDBT_TESTSUITE
(
testScan
);
TESTCASE
(
"ScanRead"
,
"Verify scan requirement: It should be possible "
\
...
...
@@ -1540,6 +1573,12 @@ TESTCASE("ScanRestart",
STEP
(
runScanRestart
);
FINALIZER
(
runClearTable
);
}
TESTCASE
(
"Bug24447"
,
""
){
INITIALIZER
(
runLoadTable
);
STEP
(
runBug24447
);
FINALIZER
(
runClearTable
);
}
NDBT_TESTSUITE_END
(
testScan
);
int
main
(
int
argc
,
const
char
**
argv
){
...
...
ndb/test/run-test/daily-basic-tests.txt
View file @
70fdfc55
...
...
@@ -438,6 +438,10 @@ max-time: 500
cmd: testScan
args: -l 100 -n Scan-bug8262 T7
max-time: 500
cmd: testScan
args: -n Bug24447 T1
max-time: 500
cmd: testNodeRestart
args: -n Bug15587 T1
...
...
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