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
83b4c04a
Commit
83b4c04a
authored
Feb 06, 2008
by
jonas@perch.ndb.mysql.com
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
ndb - bug#34216
testcases
parent
b1e97c86
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
279 additions
and
13 deletions
+279
-13
storage/ndb/src/kernel/blocks/ERROR_codes.txt
storage/ndb/src/kernel/blocks/ERROR_codes.txt
+7
-2
storage/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp
storage/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp
+6
-0
storage/ndb/src/kernel/blocks/dbtc/DbtcMain.cpp
storage/ndb/src/kernel/blocks/dbtc/DbtcMain.cpp
+4
-1
storage/ndb/src/kernel/blocks/dbtup/DbtupCommit.cpp
storage/ndb/src/kernel/blocks/dbtup/DbtupCommit.cpp
+1
-1
storage/ndb/test/ndbapi/testNodeRestart.cpp
storage/ndb/test/ndbapi/testNodeRestart.cpp
+253
-9
storage/ndb/test/run-test/daily-basic-tests.txt
storage/ndb/test/run-test/daily-basic-tests.txt
+8
-0
No files found.
storage/ndb/src/kernel/blocks/ERROR_codes.txt
View file @
83b4c04a
...
...
@@ -3,10 +3,10 @@ Next NDBCNTR 1002
Next NDBFS 2000
Next DBACC 3002
Next DBTUP 4029
Next DBLQH 50
47
Next DBLQH 50
50
Next DBDICT 6008
Next DBDIH 7195
Next DBTC 805
4
Next DBTC 805
8
Next CMVMI 9000
Next BACKUP 10038
Next DBUTIL 11002
...
...
@@ -263,6 +263,9 @@ Delay execution of ABORTCONF signal 2 seconds to generate time-out.
8053: Crash in timeOutFoundLab, state CS_WAIT_COMMIT_CONF
5048: Crash in execCOMMIT
5049: SET_ERROR_INSERT_VALUE(5048)
ERROR CODES FOR TESTING TIME-OUT HANDLING IN DBTC
-------------------------------------------------
...
...
@@ -319,6 +322,8 @@ ABORT OF TCKEYREQ
8038 : Simulate API disconnect just after SCAN_TAB_REQ
8057 : Send only 1 COMMIT per timeslice
8052 : Simulate failure of TransactionBufferMemory allocation for OI lookup
8051 : Simulate failure of allocation for saveINDXKEYINFO
...
...
storage/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp
View file @
83b4c04a
...
...
@@ -5959,6 +5959,12 @@ void Dblqh::execCOMMIT(Signal* signal)
TcConnectionrec
*
const
regTcPtr
=
tcConnectptr
.
p
;
TRACE_OP
(
regTcPtr
,
"COMMIT"
);
CRASH_INSERTION
(
5048
);
if
(
ERROR_INSERTED
(
5049
))
{
SET_ERROR_INSERT_VALUE
(
5048
);
}
commitReqLab
(
signal
,
gci
);
return
;
...
...
storage/ndb/src/kernel/blocks/dbtc/DbtcMain.cpp
View file @
83b4c04a
...
...
@@ -4495,7 +4495,7 @@ void Dbtc::commit020Lab(Signal* signal)
if
(
localTcConnectptr
.
i
!=
RNIL
)
{
Tcount
=
Tcount
+
1
;
if
(
Tcount
<
16
)
{
if
(
Tcount
<
16
&&
!
ERROR_INSERTED
(
8057
)
)
{
ptrCheckGuard
(
localTcConnectptr
,
TtcConnectFilesize
,
localTcConnectRecord
);
jam
();
...
...
@@ -4514,6 +4514,9 @@ void Dbtc::commit020Lab(Signal* signal)
}
//if
}
else
{
jam
();
if
(
ERROR_INSERTED
(
8057
))
CLEAR_ERROR_INSERT_VALUE
;
regApiPtr
->
apiConnectstate
=
CS_COMMIT_SENT
;
return
;
}
//if
...
...
storage/ndb/src/kernel/blocks/dbtup/DbtupCommit.cpp
View file @
83b4c04a
...
...
@@ -486,7 +486,7 @@ void Dbtup::execTUP_COMMITREQ(Signal* signal)
*/
fix_commit_order
(
regOperPtr
);
}
ndbassert
(
regOperPtr
.
p
->
is_first_operation
());
//
ndbassert(regOperPtr.p->is_first_operation());
regFragPtr
.
i
=
regOperPtr
.
p
->
fragmentPtr
;
trans_state
=
get_trans_state
(
regOperPtr
.
p
);
...
...
storage/ndb/test/ndbapi/testNodeRestart.cpp
View file @
83b4c04a
...
...
@@ -23,6 +23,7 @@
#include <signaldata/DumpStateOrd.hpp>
#include <Bitmask.hpp>
#include <RefConvert.hpp>
#include <NdbEnv.h>
int
runLoadTable
(
NDBT_Context
*
ctx
,
NDBT_Step
*
step
){
...
...
@@ -121,15 +122,57 @@ int runPkReadUntilStopped(NDBT_Context* ctx, NDBT_Step* step){
int
runPkUpdateUntilStopped
(
NDBT_Context
*
ctx
,
NDBT_Step
*
step
){
int
result
=
NDBT_OK
;
int
records
=
ctx
->
getNumRecords
();
int
multiop
=
ctx
->
getProperty
(
"MULTI_OP"
,
1
);
Ndb
*
pNdb
=
GETNDB
(
step
);
int
i
=
0
;
HugoTransactions
hugoTrans
(
*
ctx
->
getTab
());
while
(
ctx
->
isTestStopped
()
==
false
)
{
HugoOperations
hugoOps
(
*
ctx
->
getTab
());
while
(
ctx
->
isTestStopped
()
==
false
)
{
g_info
<<
i
<<
": "
;
int
rows
=
(
rand
()
%
records
)
+
1
;
int
batch
=
(
rand
()
%
rows
)
+
1
;
if
(
hugoTrans
.
pkUpdateRecords
(
GETNDB
(
step
),
rows
,
batch
)
!=
0
){
return
NDBT_FAILED
;
int
batch
=
(
rand
()
%
records
)
+
1
;
int
row
=
rand
()
%
records
;
if
(
batch
>
25
)
batch
=
25
;
if
(
row
+
batch
>
records
)
batch
=
records
-
row
;
if
(
hugoOps
.
startTransaction
(
pNdb
)
!=
0
)
goto
err
;
if
(
hugoOps
.
pkUpdateRecord
(
pNdb
,
row
,
batch
,
rand
())
!=
0
)
goto
err
;
for
(
int
j
=
1
;
j
<
multiop
;
j
++
)
{
if
(
hugoOps
.
execute_NoCommit
(
pNdb
)
!=
0
)
goto
err
;
if
(
hugoOps
.
pkUpdateRecord
(
pNdb
,
row
,
batch
,
rand
())
!=
0
)
goto
err
;
}
if
(
hugoOps
.
execute_Commit
(
pNdb
)
!=
0
)
goto
err
;
hugoOps
.
closeTransaction
(
pNdb
);
continue
;
err:
NdbConnection
*
pCon
=
hugoOps
.
getTransaction
();
if
(
pCon
==
0
)
continue
;
NdbError
error
=
pCon
->
getNdbError
();
hugoOps
.
closeTransaction
(
pNdb
);
if
(
error
.
status
==
NdbError
::
TemporaryError
){
NdbSleep_MilliSleep
(
50
);
continue
;
}
return
NDBT_FAILED
;
i
++
;
}
return
result
;
...
...
@@ -230,7 +273,7 @@ int runRestarter(NDBT_Context* ctx, NDBT_Step* step){
return
NDBT_OK
;
}
if
(
restarter
.
waitClusterStarted
(
60
)
!=
0
){
if
(
restarter
.
waitClusterStarted
()
!=
0
){
g_err
<<
"Cluster failed to start"
<<
endl
;
return
NDBT_FAILED
;
}
...
...
@@ -241,13 +284,27 @@ int runRestarter(NDBT_Context* ctx, NDBT_Step* step){
int
id
=
lastId
%
restarter
.
getNumDbNodes
();
int
nodeId
=
restarter
.
getDbNodeId
(
id
);
ndbout
<<
"Restart node "
<<
nodeId
<<
endl
;
if
(
restarter
.
restartOneDbNode
(
nodeId
,
false
,
fals
e
,
true
)
!=
0
){
if
(
restarter
.
restartOneDbNode
(
nodeId
,
false
,
tru
e
,
true
)
!=
0
){
g_err
<<
"Failed to restartNextDbNode"
<<
endl
;
result
=
NDBT_FAILED
;
break
;
}
if
(
restarter
.
waitClusterStarted
(
60
)
!=
0
){
if
(
restarter
.
waitNodesNoStart
(
&
nodeId
,
1
))
{
g_err
<<
"Failed to waitNodesNoStart"
<<
endl
;
result
=
NDBT_FAILED
;
break
;
}
if
(
restarter
.
startNodes
(
&
nodeId
,
1
))
{
g_err
<<
"Failed to start node"
<<
endl
;
result
=
NDBT_FAILED
;
break
;
}
if
(
restarter
.
waitClusterStarted
()
!=
0
){
g_err
<<
"Cluster failed to start"
<<
endl
;
result
=
NDBT_FAILED
;
break
;
...
...
@@ -1883,6 +1940,178 @@ runBug32160(NDBT_Context* ctx, NDBT_Step* step)
return
NDBT_OK
;
}
int
runBug34216
(
NDBT_Context
*
ctx
,
NDBT_Step
*
step
)
{
int
result
=
NDBT_OK
;
int
loops
=
ctx
->
getNumLoops
();
NdbRestarter
restarter
;
int
i
=
0
;
int
lastId
=
0
;
HugoOperations
hugoOps
(
*
ctx
->
getTab
());
int
records
=
ctx
->
getNumRecords
();
Ndb
*
pNdb
=
GETNDB
(
step
);
if
(
restarter
.
getNumDbNodes
()
<
2
)
{
ctx
->
stopTest
();
return
NDBT_OK
;
}
if
(
restarter
.
waitClusterStarted
()
!=
0
){
g_err
<<
"Cluster failed to start"
<<
endl
;
return
NDBT_FAILED
;
}
char
buf
[
100
];
const
char
*
off
=
NdbEnv_GetEnv
(
"NDB_ERR_OFFSET"
,
buf
,
sizeof
(
buf
));
int
offset
=
off
?
atoi
(
off
)
:
0
;
while
(
i
<
loops
&&
result
!=
NDBT_FAILED
&&
!
ctx
->
isTestStopped
())
{
int
id
=
lastId
%
restarter
.
getNumDbNodes
();
int
nodeId
=
restarter
.
getDbNodeId
(
id
);
int
err
=
5048
+
((
i
+
offset
)
%
2
);
int
val2
[]
=
{
DumpStateOrd
::
CmvmiSetRestartOnErrorInsert
,
1
};
if
(
hugoOps
.
startTransaction
(
pNdb
)
!=
0
)
goto
err
;
nodeId
=
hugoOps
.
getTransaction
()
->
getConnectedNodeId
();
ndbout
<<
"Restart node "
<<
nodeId
<<
" "
<<
err
<<
endl
;
if
(
restarter
.
dumpStateOneNode
(
nodeId
,
val2
,
2
))
return
NDBT_FAILED
;
if
(
restarter
.
insertErrorInNode
(
nodeId
,
err
)
!=
0
){
g_err
<<
"Failed to restartNextDbNode"
<<
endl
;
result
=
NDBT_FAILED
;
break
;
}
if
(
restarter
.
insertErrorInNode
(
nodeId
,
8057
)
!=
0
)
{
g_err
<<
"Failed to insert error 8057"
<<
endl
;
result
=
NDBT_FAILED
;
break
;
}
int
rows
=
1
;
int
batch
=
1
;
int
row
=
(
records
-
rows
)
?
rand
()
%
(
records
-
rows
)
:
0
;
if
(
hugoOps
.
pkUpdateRecord
(
pNdb
,
row
,
batch
,
rand
())
!=
0
)
goto
err
;
for
(
int
l
=
1
;
l
<
5
;
l
++
)
{
if
(
hugoOps
.
execute_NoCommit
(
pNdb
)
!=
0
)
goto
err
;
if
(
hugoOps
.
pkUpdateRecord
(
pNdb
,
row
,
batch
,
rand
())
!=
0
)
goto
err
;
}
hugoOps
.
execute_Commit
(
pNdb
);
hugoOps
.
closeTransaction
(
pNdb
);
if
(
restarter
.
waitNodesNoStart
(
&
nodeId
,
1
))
{
g_err
<<
"Failed to waitNodesNoStart"
<<
endl
;
result
=
NDBT_FAILED
;
break
;
}
if
(
restarter
.
startNodes
(
&
nodeId
,
1
))
{
g_err
<<
"Failed to startNodes"
<<
endl
;
result
=
NDBT_FAILED
;
break
;
}
if
(
restarter
.
waitClusterStarted
()
!=
0
){
g_err
<<
"Cluster failed to start"
<<
endl
;
result
=
NDBT_FAILED
;
break
;
}
lastId
++
;
i
++
;
}
ctx
->
stopTest
();
return
result
;
err:
return
NDBT_FAILED
;
}
int
runNF_commit
(
NDBT_Context
*
ctx
,
NDBT_Step
*
step
)
{
int
result
=
NDBT_OK
;
int
loops
=
ctx
->
getNumLoops
();
NdbRestarter
restarter
;
if
(
restarter
.
getNumDbNodes
()
<
2
)
{
ctx
->
stopTest
();
return
NDBT_OK
;
}
if
(
restarter
.
waitClusterStarted
()
!=
0
){
g_err
<<
"Cluster failed to start"
<<
endl
;
return
NDBT_FAILED
;
}
int
i
=
0
;
while
(
i
<
loops
&&
result
!=
NDBT_FAILED
&&
!
ctx
->
isTestStopped
())
{
int
nodeId
=
restarter
.
getDbNodeId
(
rand
()
%
restarter
.
getNumDbNodes
());
int
err
=
5048
;
ndbout
<<
"Restart node "
<<
nodeId
<<
" "
<<
err
<<
endl
;
int
val2
[]
=
{
DumpStateOrd
::
CmvmiSetRestartOnErrorInsert
,
1
};
if
(
restarter
.
dumpStateOneNode
(
nodeId
,
val2
,
2
))
return
NDBT_FAILED
;
if
(
restarter
.
insertErrorInNode
(
nodeId
,
err
)
!=
0
){
g_err
<<
"Failed to restartNextDbNode"
<<
endl
;
result
=
NDBT_FAILED
;
break
;
}
if
(
restarter
.
waitNodesNoStart
(
&
nodeId
,
1
))
{
g_err
<<
"Failed to waitNodesNoStart"
<<
endl
;
result
=
NDBT_FAILED
;
break
;
}
if
(
restarter
.
startNodes
(
&
nodeId
,
1
))
{
g_err
<<
"Failed to startNodes"
<<
endl
;
result
=
NDBT_FAILED
;
break
;
}
if
(
restarter
.
waitClusterStarted
()
!=
0
){
g_err
<<
"Cluster failed to start"
<<
endl
;
result
=
NDBT_FAILED
;
break
;
}
i
++
;
}
ctx
->
stopTest
();
return
result
;
}
NDBT_TESTSUITE
(
testNodeRestart
);
TESTCASE
(
"NoLoad"
,
"Test that one node at a time can be stopped and then restarted "
\
...
...
@@ -2255,6 +2484,21 @@ TESTCASE("Bug29364", ""){
TESTCASE
(
"Bug32160"
,
""
){
INITIALIZER
(
runBug32160
);
}
TESTCASE
(
"Bug34216"
,
""
){
INITIALIZER
(
runCheckAllNodesStarted
);
INITIALIZER
(
runLoadTable
);
STEP
(
runBug34216
);
FINALIZER
(
runClearTable
);
}
TESTCASE
(
"mixedmultiop"
,
""
){
TC_PROPERTY
(
"MULTI_OP"
,
5
);
INITIALIZER
(
runCheckAllNodesStarted
);
INITIALIZER
(
runLoadTable
);
STEP
(
runNF_commit
);
STEP
(
runPkUpdateUntilStopped
);
STEP
(
runPkUpdateUntilStopped
);
FINALIZER
(
runClearTable
);
}
NDBT_TESTSUITE_END
(
testNodeRestart
);
int
main
(
int
argc
,
const
char
**
argv
){
...
...
storage/ndb/test/run-test/daily-basic-tests.txt
View file @
83b4c04a
...
...
@@ -1050,3 +1050,11 @@ max-time: 300
cmd: test_event
args: -n Bug33793 T1
max-time: 600
cmd: testNodeRestart
args: --nologging -n Bug34216 -l 10 T1 I3 D2
max-time: 1200
cmd: testNodeRestart
args: -n mixedmultiop -l 10 T1 I2 I3 D2
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