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
b4d323c0
Commit
b4d323c0
authored
Dec 15, 2006
by
jonas@perch.ndb.mysql.com
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
ndb - bug#25059
incorrect handling of commit/ignore error in unique index code
parent
5b16e6bf
Changes
5
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
81 additions
and
13 deletions
+81
-13
ndb/src/kernel/blocks/dbtc/DbtcMain.cpp
ndb/src/kernel/blocks/dbtc/DbtcMain.cpp
+2
-13
ndb/src/ndbapi/NdbTransaction.cpp
ndb/src/ndbapi/NdbTransaction.cpp
+9
-0
ndb/src/ndbapi/Ndbif.cpp
ndb/src/ndbapi/Ndbif.cpp
+1
-0
ndb/test/ndbapi/testIndex.cpp
ndb/test/ndbapi/testIndex.cpp
+65
-0
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 @
b4d323c0
...
...
@@ -5084,7 +5084,7 @@ void Dbtc::execLQHKEYREF(Signal* signal)
ptrAss
(
tcConnectptr
,
tcConnectRecord
);
TcConnectRecord
*
const
regTcPtr
=
tcConnectptr
.
p
;
if
(
regTcPtr
->
tcConnectstate
==
OS_OPERATING
)
{
apiConnectptr
.
i
=
regTcPtr
->
apiConnect
;
Uint32
save
=
apiConnectptr
.
i
=
regTcPtr
->
apiConnect
;
ptrCheckGuard
(
apiConnectptr
,
capiConnectFilesize
,
apiConnectRecord
);
ApiConnectRecord
*
const
regApiPtr
=
apiConnectptr
.
p
;
compare_transid1
=
regApiPtr
->
transid
[
0
]
^
lqhKeyRef
->
transId1
;
...
...
@@ -5195,7 +5195,7 @@ void Dbtc::execLQHKEYREF(Signal* signal)
regApiPtr
->
lqhkeyreqrec
--
;
// Compensate for extra during read
tcKeyRef
->
connectPtr
=
indexOp
;
EXECUTE_DIRECT
(
DBTC
,
GSN_TCKEYREF
,
signal
,
TcKeyRef
::
SignalLength
);
apiConnectptr
.
i
=
regTcPtr
->
apiConnect
;
apiConnectptr
.
i
=
save
;
apiConnectptr
.
p
=
regApiPtr
;
}
else
{
jam
();
...
...
@@ -11880,17 +11880,6 @@ void Dbtc::execTCKEYREF(Signal* signal)
case
(
IOS_INDEX_ACCESS_WAIT_FOR_TRANSID_AI
):
case
(
IOS_INDEX_ACCESS_WAIT_FOR_TCKEYCONF
):
{
jam
();
// If we fail index access for a non-read operation during commit
// we abort transaction
if
(
commitFlg
==
1
)
{
jam
();
releaseIndexOperation
(
regApiPtr
,
indexOp
);
apiConnectptr
.
i
=
indexOp
->
connectionIndex
;
ptrCheckGuard
(
apiConnectptr
,
capiConnectFilesize
,
apiConnectRecord
);
terrorCode
=
tcKeyRef
->
errorCode
;
abortErrorLab
(
signal
);
break
;
}
/**
* Increase count as it will be decreased below...
* (and the code is written to handle failing lookup on "real" table
...
...
ndb/src/ndbapi/NdbTransaction.cpp
View file @
b4d323c0
...
...
@@ -474,6 +474,7 @@ NdbTransaction::executeNoBlobs(ExecType aTypeOfExec,
* This timeout situation can occur if NDB crashes.
*/
ndbout
<<
"This timeout should never occur, execute(..)"
<<
endl
;
theError
.
code
=
4012
;
setOperationErrorCodeAbort
(
4012
);
// Error code for "Cluster Failure"
DBUG_RETURN
(
-
1
);
}
//if
...
...
@@ -1965,6 +1966,14 @@ NdbTransaction::receiveTCINDXCONF(const TcIndxConf * indxConf,
theGlobalCheckpointId
=
tGCI
;
}
else
if
((
tNoComp
>=
tNoSent
)
&&
(
theLastExecOpInList
->
theCommitIndicator
==
1
)){
if
(
m_abortOption
==
AO_IgnoreError
&&
theError
.
code
!=
0
){
/**
* There's always a TCKEYCONF when using IgnoreError
*/
return
-
1
;
}
/**********************************************************************/
// We sent the transaction with Commit flag set and received a CONF with
// no Commit flag set. This is clearly an anomaly.
...
...
ndb/src/ndbapi/Ndbif.cpp
View file @
b4d323c0
...
...
@@ -952,6 +952,7 @@ Ndb::check_send_timeout()
//abort();
#endif
a_con
->
theReleaseOnClose
=
true
;
a_con
->
theError
.
code
=
4012
;
a_con
->
setOperationErrorCodeAbort
(
4012
);
a_con
->
theCommitStatus
=
NdbTransaction
::
NeedAbort
;
a_con
->
theCompletionStatus
=
NdbTransaction
::
CompletedFailure
;
...
...
ndb/test/ndbapi/testIndex.cpp
View file @
b4d323c0
...
...
@@ -1239,7 +1239,64 @@ runBug21384(NDBT_Context* ctx, NDBT_Step* step)
return
NDBT_OK
;
}
int
runBug25059
(
NDBT_Context
*
ctx
,
NDBT_Step
*
step
)
{
Ndb
*
pNdb
=
GETNDB
(
step
);
NdbDictionary
::
Dictionary
*
dict
=
pNdb
->
getDictionary
();
const
NdbDictionary
::
Index
*
idx
=
dict
->
getIndex
(
pkIdxName
,
*
ctx
->
getTab
());
HugoOperations
ops
(
*
ctx
->
getTab
(),
idx
);
int
res
=
NDBT_OK
;
int
loops
=
ctx
->
getNumLoops
();
const
int
rows
=
ctx
->
getNumRecords
();
while
(
res
==
NDBT_OK
&&
loops
--
)
{
ops
.
startTransaction
(
pNdb
);
ops
.
pkReadRecord
(
pNdb
,
10
+
rand
()
%
rows
,
rows
);
int
tmp
;
if
(
tmp
=
ops
.
execute_Commit
(
pNdb
,
AO_IgnoreError
))
{
if
(
tmp
==
4012
)
res
=
NDBT_FAILED
;
else
if
(
ops
.
getTransaction
()
->
getNdbError
().
code
==
4012
)
res
=
NDBT_FAILED
;
}
ops
.
closeTransaction
(
pNdb
);
}
loops
=
ctx
->
getNumLoops
();
while
(
res
==
NDBT_OK
&&
loops
--
)
{
ops
.
startTransaction
(
pNdb
);
ops
.
pkUpdateRecord
(
pNdb
,
10
+
rand
()
%
rows
,
rows
);
int
tmp
;
int
arg
;
switch
(
rand
()
%
2
){
case
0
:
arg
=
AbortOnError
;
break
;
case
1
:
arg
=
AO_IgnoreError
;
ndbout_c
(
"ignore error"
);
break
;
}
if
(
tmp
=
ops
.
execute_Commit
(
pNdb
,
(
AbortOption
)
arg
))
{
if
(
tmp
==
4012
)
res
=
NDBT_FAILED
;
else
if
(
ops
.
getTransaction
()
->
getNdbError
().
code
==
4012
)
res
=
NDBT_FAILED
;
}
ops
.
closeTransaction
(
pNdb
);
}
return
res
;
}
NDBT_TESTSUITE
(
testIndex
);
TESTCASE
(
"CreateAll"
,
...
...
@@ -1564,6 +1621,14 @@ TESTCASE("Bug21384",
FINALIZER
(
createPkIndex_Drop
);
FINALIZER
(
runClearTable
);
}
TESTCASE
(
"Bug25059"
,
"Test that unique indexes and nulls"
){
TC_PROPERTY
(
"LoggedIndexes"
,
(
unsigned
)
0
);
INITIALIZER
(
createPkIndex
);
INITIALIZER
(
runLoadTable
);
STEP
(
runBug25059
);
FINALIZER
(
createPkIndex_Drop
);
}
NDBT_TESTSUITE_END
(
testIndex
);
int
main
(
int
argc
,
const
char
**
argv
){
...
...
ndb/test/run-test/daily-basic-tests.txt
View file @
b4d323c0
...
...
@@ -215,6 +215,10 @@ max-time: 500
cmd: testBasic
args: -n Bug25090 T1
max-time: 500
cmd: testIndex
args: -n Bug25059 -r 3000 T1
# SCAN TESTS
#
max-time: 500
...
...
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