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
3edab3e4
Commit
3edab3e4
authored
Feb 05, 2007
by
jonas@eel.(none)
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
ndb - some more hugo abort option fix
parent
35bfea94
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
180 additions
and
3 deletions
+180
-3
storage/ndb/test/src/HugoTransactions.cpp
storage/ndb/test/src/HugoTransactions.cpp
+178
-2
storage/ndb/test/src/UtilTransactions.cpp
storage/ndb/test/src/UtilTransactions.cpp
+2
-1
No files found.
storage/ndb/test/src/HugoTransactions.cpp
View file @
3edab3e4
...
...
@@ -245,6 +245,182 @@ HugoTransactions::scanReadRecords(Ndb* pNdb,
}
}
check
=
pTrans
->
execute
(
NoCommit
,
AbortOnError
);
if
(
check
==
-
1
)
{
const
NdbError
err
=
pTrans
->
getNdbError
();
if
(
err
.
status
==
NdbError
::
TemporaryError
){
ERR
(
err
);
closeTransaction
(
pNdb
);
NdbSleep_MilliSleep
(
50
);
retryAttempt
++
;
continue
;
}
ERR
(
err
);
closeTransaction
(
pNdb
);
return
NDBT_FAILED
;
}
// Abort after 1-100 or 1-records rows
int
ranVal
=
rand
();
int
abortCount
=
ranVal
%
(
records
==
0
?
100
:
records
);
bool
abortTrans
=
false
;
if
(
abort
>
0
){
// Abort if abortCount is less then abortPercent
if
(
abortCount
<
abortPercent
)
abortTrans
=
true
;
}
int
eof
;
int
rows
=
0
;
while
((
eof
=
pOp
->
nextResult
(
true
))
==
0
){
rows
++
;
if
(
calc
.
verifyRowValues
(
&
row
)
!=
0
){
closeTransaction
(
pNdb
);
return
NDBT_FAILED
;
}
if
(
abortCount
==
rows
&&
abortTrans
==
true
){
ndbout
<<
"Scan is aborted"
<<
endl
;
g_info
<<
"Scan is aborted"
<<
endl
;
pOp
->
close
();
if
(
check
==
-
1
)
{
ERR
(
pTrans
->
getNdbError
());
closeTransaction
(
pNdb
);
return
NDBT_FAILED
;
}
closeTransaction
(
pNdb
);
return
NDBT_OK
;
}
}
if
(
eof
==
-
1
)
{
const
NdbError
err
=
pTrans
->
getNdbError
();
if
(
err
.
status
==
NdbError
::
TemporaryError
){
ERR_INFO
(
err
);
closeTransaction
(
pNdb
);
NdbSleep_MilliSleep
(
50
);
switch
(
err
.
code
){
case
488
:
case
245
:
case
490
:
// Too many active scans, no limit on number of retry attempts
break
;
default:
retryAttempt
++
;
}
continue
;
}
ERR
(
err
);
closeTransaction
(
pNdb
);
return
NDBT_FAILED
;
}
closeTransaction
(
pNdb
);
g_info
<<
rows
<<
" rows have been read"
<<
endl
;
if
(
records
!=
0
&&
rows
!=
records
){
g_err
<<
"Check expected number of records failed"
<<
endl
<<
" expected="
<<
records
<<
", "
<<
endl
<<
" read="
<<
rows
<<
endl
;
return
NDBT_FAILED
;
}
return
NDBT_OK
;
}
return
NDBT_FAILED
;
}
#define RESTART_SCAN 99
int
HugoTransactions
::
scanUpdateRecords
(
Ndb
*
pNdb
,
int
records
,
int
abortPercent
,
int
parallelism
){
if
(
m_defaultScanUpdateMethod
==
1
){
return
scanUpdateRecords1
(
pNdb
,
records
,
abortPercent
,
parallelism
);
}
else
if
(
m_defaultScanUpdateMethod
==
2
){
return
scanUpdateRecords2
(
pNdb
,
records
,
abortPercent
,
parallelism
);
}
else
{
return
scanUpdateRecords3
(
pNdb
,
records
,
abortPercent
,
parallelism
);
}
}
// Scan all records exclusive and update
// them one by one
int
HugoTransactions
::
scanUpdateRecords1
(
Ndb
*
pNdb
,
int
records
,
int
abortPercent
,
int
parallelism
){
return
scanUpdateRecords3
(
pNdb
,
records
,
abortPercent
,
1
);
}
// Scan all records exclusive and update
// them batched by asking nextScanResult to
// give us all cached records before fetching new
// records from db
int
HugoTransactions
::
scanUpdateRecords2
(
Ndb
*
pNdb
,
int
records
,
int
abortPercent
,
int
parallelism
){
return
scanUpdateRecords3
(
pNdb
,
records
,
abortPercent
,
parallelism
);
}
int
HugoTransactions
::
scanUpdateRecords3
(
Ndb
*
pNdb
,
int
records
,
int
abortPercent
,
int
parallelism
){
int
retryAttempt
=
0
;
int
check
,
a
;
NdbScanOperation
*
pOp
;
while
(
true
){
restart:
if
(
retryAttempt
++
>=
m_retryMax
){
g_info
<<
"ERROR: has retried this operation "
<<
retryAttempt
<<
" times, failing!"
<<
endl
;
return
NDBT_FAILED
;
}
pTrans
=
pNdb
->
startTransaction
();
if
(
pTrans
==
NULL
)
{
const
NdbError
err
=
pNdb
->
getNdbError
();
ERR
(
err
);
if
(
err
.
status
==
NdbError
::
TemporaryError
){
NdbSleep_MilliSleep
(
50
);
continue
;
}
return
NDBT_FAILED
;
}
pOp
=
getScanOperation
(
pTrans
);
if
(
pOp
==
NULL
)
{
ERR
(
pTrans
->
getNdbError
());
closeTransaction
(
pNdb
);
return
NDBT_FAILED
;
}
if
(
pOp
->
readTuplesExclusive
(
parallelism
)
)
{
ERR
(
pTrans
->
getNdbError
());
closeTransaction
(
pNdb
);
return
NDBT_FAILED
;
}
// Read all attributes from this table
for
(
a
=
0
;
a
<
tab
.
getNoOfColumns
();
a
++
){
if
((
row
.
attributeStore
(
a
)
=
pOp
->
getValue
(
tab
.
getColumn
(
a
)
->
getName
()))
==
NULL
){
ERR
(
pTrans
->
getNdbError
());
closeTransaction
(
pNdb
);
return
NDBT_FAILED
;
}
}
check
=
pTrans
->
execute
(
NoCommit
,
AbortOnError
);
if
(
check
==
-
1
)
{
const
NdbError
err
=
pTrans
->
getNdbError
();
...
...
@@ -541,7 +717,7 @@ HugoTransactions::fillTable(Ndb* pNdb,
}
// Execute the transaction and insert the record
check
=
pTrans
->
execute
(
Commit
,
CommitAsMuchAsPossible
);
check
=
pTrans
->
execute
(
Commit
,
CommitAsMuchAsPossible
);
if
(
check
==
-
1
)
{
const
NdbError
err
=
pTrans
->
getNdbError
();
closeTransaction
(
pNdb
);
...
...
@@ -815,7 +991,7 @@ HugoTransactions::pkUpdateRecords(Ndb* pNdb,
if
(
check
!=
2
)
break
;
if
((
check
=
pTrans
->
execute
(
NoCommit
,
,
AbortOnError
))
!=
0
)
if
((
check
=
pTrans
->
execute
(
NoCommit
,
AbortOnError
))
!=
0
)
break
;
}
if
(
check
!=
1
||
rows_found
!=
batch
)
...
...
storage/ndb/test/src/UtilTransactions.cpp
View file @
3edab3e4
...
...
@@ -1398,7 +1398,8 @@ loop:
ERR
(
err
=
cmp
.
getTransaction
()
->
getNdbError
());
goto
error
;
}
if
(
cmp
.
execute_Commit
(
pNdb
)
!=
NDBT_OK
)
if
(
cmp
.
execute_Commit
(
pNdb
)
!=
NDBT_OK
||
cmp
.
getTransaction
()
->
getNdbError
().
code
)
{
ERR
(
err
=
cmp
.
getTransaction
()
->
getNdbError
());
goto
error
;
...
...
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