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
dcb7fce7
Commit
dcb7fce7
authored
Oct 15, 2007
by
jonas@perch.ndb.mysql.com
Browse files
Options
Browse Files
Download
Plain Diff
Merge perch.ndb.mysql.com:/home/jonas/src/51-simple-read
into perch.ndb.mysql.com:/home/jonas/src/51-ndb
parents
15157cd7
69cce99b
Changes
18
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
18 changed files
with
236 additions
and
201 deletions
+236
-201
mysql-test/suite/ndb/t/disabled.def
mysql-test/suite/ndb/t/disabled.def
+0
-3
storage/ndb/include/kernel/signaldata/TcKeyConf.hpp
storage/ndb/include/kernel/signaldata/TcKeyConf.hpp
+1
-1
storage/ndb/include/ndbapi/NdbOperation.hpp
storage/ndb/include/ndbapi/NdbOperation.hpp
+2
-1
storage/ndb/src/common/debugger/signaldata/TcKeyConf.cpp
storage/ndb/src/common/debugger/signaldata/TcKeyConf.cpp
+2
-2
storage/ndb/src/kernel/blocks/dblqh/Dblqh.hpp
storage/ndb/src/kernel/blocks/dblqh/Dblqh.hpp
+0
-1
storage/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp
storage/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp
+48
-28
storage/ndb/src/kernel/blocks/dbtc/Dbtc.hpp
storage/ndb/src/kernel/blocks/dbtc/Dbtc.hpp
+4
-8
storage/ndb/src/kernel/blocks/dbtc/DbtcMain.cpp
storage/ndb/src/kernel/blocks/dbtc/DbtcMain.cpp
+107
-92
storage/ndb/src/ndbapi/NdbBlob.cpp
storage/ndb/src/ndbapi/NdbBlob.cpp
+1
-1
storage/ndb/src/ndbapi/NdbIndexOperation.cpp
storage/ndb/src/ndbapi/NdbIndexOperation.cpp
+3
-0
storage/ndb/src/ndbapi/NdbOperationDefine.cpp
storage/ndb/src/ndbapi/NdbOperationDefine.cpp
+33
-29
storage/ndb/src/ndbapi/NdbOperationExec.cpp
storage/ndb/src/ndbapi/NdbOperationExec.cpp
+8
-9
storage/ndb/src/ndbapi/NdbReceiver.cpp
storage/ndb/src/ndbapi/NdbReceiver.cpp
+1
-1
storage/ndb/src/ndbapi/NdbScanOperation.cpp
storage/ndb/src/ndbapi/NdbScanOperation.cpp
+1
-0
storage/ndb/src/ndbapi/NdbTransaction.cpp
storage/ndb/src/ndbapi/NdbTransaction.cpp
+3
-3
storage/ndb/test/ndbapi/testBasic.cpp
storage/ndb/test/ndbapi/testBasic.cpp
+13
-22
storage/ndb/test/run-test/daily-basic-tests.txt
storage/ndb/test/run-test/daily-basic-tests.txt
+8
-0
storage/ndb/test/src/HugoOperations.cpp
storage/ndb/test/src/HugoOperations.cpp
+1
-0
No files found.
mysql-test/suite/ndb/t/disabled.def
View file @
dcb7fce7
...
...
@@ -9,9 +9,6 @@
# Do not use any TAB characters for whitespace.
#
##############################################################################
ndb_dd_sql_features : Bug#29102 ndb_dd_sql_features fails in pushbuild
ndb_load : BUG#17233 2006-05-04 tomas failed load data from infile causes mysqld dbug_assert, binlog not flushed
partition_03ndb : BUG#16385 2006-03-24 mikael Partitions: crash when updating a range partitioned NDB table
ndb_partition_error2 : HF is not sure if the test can work as internded on all the platforms
...
...
storage/ndb/include/kernel/signaldata/TcKeyConf.hpp
View file @
dcb7fce7
...
...
@@ -46,7 +46,7 @@ public:
*/
STATIC_CONST
(
StaticLength
=
5
);
STATIC_CONST
(
OperationLength
=
2
);
STATIC_CONST
(
Simple
ReadBit
=
(((
Uint32
)
1
)
<<
31
)
);
STATIC_CONST
(
Dirty
ReadBit
=
(((
Uint32
)
1
)
<<
31
)
);
private:
...
...
storage/ndb/include/ndbapi/NdbOperation.hpp
View file @
dcb7fce7
...
...
@@ -93,8 +93,9 @@ public:
,
LM_CommittedRead
///< Ignore locks, read last committed value
#ifndef DOXYGEN_SHOULD_SKIP_INTERNAL
=
2
,
LM_Dirty
=
2
LM_Dirty
=
2
,
#endif
LM_SimpleRead
=
3
///< Read with shared lock, but release lock directly
};
/**
...
...
storage/ndb/src/common/debugger/signaldata/TcKeyConf.cpp
View file @
dcb7fce7
...
...
@@ -51,11 +51,11 @@ printTCKEYCONF(FILE * output, const Uint32 * theData, Uint32 len, Uint16 receive
(
TcKeyConf
::
getMarkerFlag
(
confInfo
)
==
0
)
?
"false"
:
"true"
);
fprintf
(
output
,
"Operations:
\n
"
);
for
(
i
=
0
;
i
<
noOfOp
;
i
++
)
{
if
(
sig
->
operations
[
i
].
attrInfoLen
>
TcKeyConf
::
Simple
ReadBit
)
if
(
sig
->
operations
[
i
].
attrInfoLen
>
TcKeyConf
::
Dirty
ReadBit
)
fprintf
(
output
,
" apiOperationPtr: H'%.8x, simplereadnode: %u
\n
"
,
sig
->
operations
[
i
].
apiOperationPtr
,
sig
->
operations
[
i
].
attrInfoLen
&
(
~
TcKeyConf
::
Simple
ReadBit
));
sig
->
operations
[
i
].
attrInfoLen
&
(
~
TcKeyConf
::
Dirty
ReadBit
));
else
fprintf
(
output
,
" apiOperationPtr: H'%.8x, attrInfoLen: %u
\n
"
,
...
...
storage/ndb/src/kernel/blocks/dblqh/Dblqh.hpp
View file @
dcb7fce7
...
...
@@ -2025,7 +2025,6 @@ public:
Uint8
reclenAiLqhkey
;
Uint8
m_offset_current_keybuf
;
Uint8
replicaType
;
Uint8
simpleRead
;
Uint8
seqNoReplica
;
Uint8
tcNodeFailrec
;
Uint8
m_disk_table
;
...
...
storage/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp
View file @
dcb7fce7
...
...
@@ -3496,7 +3496,6 @@ void Dblqh::execLQHKEYREQ(Signal* signal)
regTcPtr
->
dirtyOp
=
LqhKeyReq
::
getDirtyFlag
(
Treqinfo
);
regTcPtr
->
opExec
=
LqhKeyReq
::
getInterpretedFlag
(
Treqinfo
);
regTcPtr
->
opSimple
=
LqhKeyReq
::
getSimpleFlag
(
Treqinfo
);
regTcPtr
->
simpleRead
=
op
==
ZREAD
&&
regTcPtr
->
opSimple
;
regTcPtr
->
seqNoReplica
=
LqhKeyReq
::
getSeqNoReplica
(
Treqinfo
);
UintR
TreclenAiLqhkey
=
LqhKeyReq
::
getAIInLqhKeyReq
(
Treqinfo
);
regTcPtr
->
apiVersionNo
=
0
;
...
...
@@ -3513,9 +3512,15 @@ void Dblqh::execLQHKEYREQ(Signal* signal)
regTcPtr
->
lockType
=
op
==
ZREAD_EX
?
ZUPDATE
:
(
Operation_t
)
op
==
ZWRITE
?
ZINSERT
:
(
Operation_t
)
op
;
}
if
(
regTcPtr
->
dirtyOp
)
{
ndbrequire
(
regTcPtr
->
opSimple
);
}
CRASH_INSERTION2
(
5041
,
regTcPtr
->
simpleRead
&&
refToNode
(
signal
->
senderBlockRef
())
!=
cownNodeid
);
CRASH_INSERTION2
(
5041
,
(
op
==
ZREAD
&&
(
regTcPtr
->
opSimple
||
regTcPtr
->
dirtyOp
)
&&
refToNode
(
signal
->
senderBlockRef
())
!=
cownNodeid
));
regTcPtr
->
reclenAiLqhkey
=
TreclenAiLqhkey
;
regTcPtr
->
currReclenAi
=
TreclenAiLqhkey
;
...
...
@@ -3687,8 +3692,8 @@ void Dblqh::execLQHKEYREQ(Signal* signal)
Uint8
TdistKey
=
LqhKeyReq
::
getDistributionKey
(
TtotReclenAi
);
if
((
tfragDistKey
!=
TdistKey
)
&&
(
regTcPtr
->
seqNoReplica
==
0
)
&&
(
regTcPtr
->
dirtyOp
==
ZFALSE
)
&&
(
regTcPtr
->
simpleRead
==
ZFALSE
))
{
(
regTcPtr
->
dirtyOp
==
ZFALSE
)
)
{
/* ----------------------------------------------------------------------
* WE HAVE DIFFERENT OPINION THAN THE DIH THAT STARTED THE TRANSACTION.
* THE REASON COULD BE THAT THIS IS AN OLD DISTRIBUTION WHICH IS NO LONGER
...
...
@@ -4778,7 +4783,18 @@ void Dblqh::tupkeyConfLab(Signal* signal)
TRACE_OP
(
regTcPtr
,
"TUPKEYCONF"
);
if
(
regTcPtr
->
simpleRead
)
{
if
(
readLen
!=
0
)
{
jam
();
/* SET BIT 15 IN REQINFO */
LqhKeyReq
::
setApplicationAddressFlag
(
regTcPtr
->
reqinfo
,
1
);
regTcPtr
->
readlenAi
=
readLen
;
}
//if
if
(
regTcPtr
->
operation
==
ZREAD
&&
(
regTcPtr
->
opSimple
||
regTcPtr
->
dirtyOp
))
{
jam
();
/* ----------------------------------------------------------------------
* THE OPERATION IS A SIMPLE READ.
...
...
@@ -4792,14 +4808,6 @@ void Dblqh::tupkeyConfLab(Signal* signal)
commitContinueAfterBlockedLab
(
signal
);
return
;
}
//if
if
(
readLen
!=
0
)
{
jam
();
/* SET BIT 15 IN REQINFO */
LqhKeyReq
::
setApplicationAddressFlag
(
regTcPtr
->
reqinfo
,
1
);
regTcPtr
->
readlenAi
=
readLen
;
}
//if
regTcPtr
->
totSendlenAi
=
writeLen
;
ndbrequire
(
regTcPtr
->
totSendlenAi
==
regTcPtr
->
currTupAiLen
);
...
...
@@ -5178,12 +5186,15 @@ void Dblqh::packLqhkeyreqLab(Signal* signal)
/* */
/* ------------------------------------------------------------------------- */
sendLqhkeyconfTc
(
signal
,
regTcPtr
->
tcBlockref
);
if
(
regTcPtr
->
dirtyOp
!=
ZTRUE
)
{
if
(
!
(
regTcPtr
->
dirtyOp
||
(
regTcPtr
->
operation
==
ZREAD
&&
regTcPtr
->
opSimple
)))
{
jam
();
regTcPtr
->
transactionState
=
TcConnectionrec
::
PREPARED
;
releaseOprec
(
signal
);
}
else
{
jam
();
/*************************************************************>*/
/* DIRTY WRITES ARE USED IN TWO SITUATIONS. THE FIRST */
/* SITUATION IS WHEN THEY ARE USED TO UPDATE COUNTERS AND*/
...
...
@@ -6406,8 +6417,8 @@ void Dblqh::commitContinueAfterBlockedLab(Signal* signal)
Ptr
<
TcConnectionrec
>
regTcPtr
=
tcConnectptr
;
Ptr
<
Fragrecord
>
regFragptr
=
fragptr
;
Uint32
operation
=
regTcPtr
.
p
->
operation
;
Uint32
simpleRead
=
regTcPtr
.
p
->
simpleRead
;
Uint32
dirtyOp
=
regTcPtr
.
p
->
dirtyOp
;
Uint32
opSimple
=
regTcPtr
.
p
->
opSimple
;
if
(
regTcPtr
.
p
->
activeCreat
!=
Fragrecord
::
AC_IGNORED
)
{
if
(
operation
!=
ZREAD
)
{
TupCommitReq
*
const
tupCommitReq
=
...
...
@@ -6465,20 +6476,29 @@ void Dblqh::commitContinueAfterBlockedLab(Signal* signal)
EXECUTE_DIRECT
(
acc
,
GSN_ACC_COMMITREQ
,
signal
,
1
);
}
if
(
simpleRead
)
{
if
(
dirtyOp
)
{
jam
();
/* ------------------------------------------------------------------------- */
/*THE OPERATION WAS A SIMPLE READ THUS THE COMMIT PHASE IS ONLY NEEDED TO */
/*RELEASE THE LOCKS. AT THIS POINT IN THE CODE THE LOCKS ARE RELEASED AND WE */
/*ARE IN A POSITION TO SEND LQHKEYCONF TO TC. WE WILL ALSO RELEASE ALL */
/*RESOURCES BELONGING TO THIS OPERATION SINCE NO MORE WORK WILL BE */
/*PERFORMED. */
/* ------------------------------------------------------------------------- */
/**
* The dirtyRead does not send anything but TRANSID_AI from LDM
*/
fragptr
=
regFragptr
;
tcConnectptr
=
regTcPtr
;
cleanUp
(
signal
);
return
;
}
//if
}
/**
* The simpleRead will send a LQHKEYCONF
* but have already released the locks
*/
if
(
opSimple
)
{
fragptr
=
regFragptr
;
tcConnectptr
=
regTcPtr
;
packLqhkeyreqLab
(
signal
);
return
;
}
}
}
//if
jamEntry
();
...
...
@@ -7088,7 +7108,7 @@ void Dblqh::abortStateHandlerLab(Signal* signal)
/* ------------------------------------------------------------------------- */
return
;
}
//if
if
(
regTcPtr
->
simpleRead
)
{
if
(
regTcPtr
->
opSimple
)
{
jam
();
/* ------------------------------------------------------------------------- */
/*A SIMPLE READ IS CURRENTLY RELEASING THE LOCKS OR WAITING FOR ACCESS TO */
...
...
@@ -7356,7 +7376,8 @@ void Dblqh::continueAbortLab(Signal* signal)
void
Dblqh
::
continueAfterLogAbortWriteLab
(
Signal
*
signal
)
{
TcConnectionrec
*
const
regTcPtr
=
tcConnectptr
.
p
;
if
(
regTcPtr
->
simpleRead
)
{
if
(
regTcPtr
->
operation
==
ZREAD
&&
regTcPtr
->
dirtyOp
)
{
jam
();
TcKeyRef
*
const
tcKeyRef
=
(
TcKeyRef
*
)
signal
->
getDataPtrSend
();
...
...
@@ -19027,7 +19048,6 @@ Dblqh::execDUMP_STATE_ORD(Signal* signal)
ndbout
<<
" operation = "
<<
tcRec
.
p
->
operation
<<
endl
;
ndbout
<<
" tcNodeFailrec = "
<<
tcRec
.
p
->
tcNodeFailrec
<<
" seqNoReplica = "
<<
tcRec
.
p
->
seqNoReplica
<<
" simpleRead = "
<<
tcRec
.
p
->
simpleRead
<<
endl
;
ndbout
<<
" replicaType = "
<<
tcRec
.
p
->
replicaType
<<
" reclenAiLqhkey = "
<<
tcRec
.
p
->
reclenAiLqhkey
...
...
storage/ndb/src/kernel/blocks/dbtc/Dbtc.hpp
View file @
dcb7fce7
...
...
@@ -786,6 +786,7 @@ public:
UintR
apiConnect
;
/* POINTER TO API CONNECT RECORD */
UintR
nextTcConnect
;
/* NEXT TC RECORD*/
Uint8
dirtyOp
;
Uint8
opSimple
;
Uint8
lastReplicaNo
;
/* NUMBER OF THE LAST REPLICA IN THE OPERATION */
Uint8
noOfNodes
;
/* TOTAL NUMBER OF NODES IN OPERATION */
Uint8
operation
;
/* OPERATION TYPE */
...
...
@@ -886,13 +887,8 @@ public:
Uint8
opExec
;
Uint8
unused
;
Uint8
unused1
;
/**
* IS THE OPERATION A SIMPLE TRANSACTION
* 0 = NO, 1 = YES
*/
Uint8
opSimple
;
//---------------------------------------------------
// Second 16 byte cache line in second 64 byte cache
// line. Diverse use.
...
...
@@ -1464,7 +1460,7 @@ private:
void
releaseAttrinfo
();
void
releaseGcp
(
Signal
*
signal
);
void
releaseKeys
();
void
release
Simple
Read
(
Signal
*
,
ApiConnectRecordPtr
,
TcConnectRecord
*
);
void
release
Dirty
Read
(
Signal
*
,
ApiConnectRecordPtr
,
TcConnectRecord
*
);
void
releaseDirtyWrite
(
Signal
*
signal
);
void
releaseTcCon
();
void
releaseTcConnectFail
(
Signal
*
signal
);
...
...
@@ -1620,7 +1616,7 @@ private:
void
startphase1x010Lab
(
Signal
*
signal
);
void
lqhKeyConf_checkTransactionState
(
Signal
*
signal
,
ApiConnectRecord
*
const
regApiPtr
);
Ptr
<
ApiConnectRecord
>
regApiPtr
);
void
checkDropTab
(
Signal
*
signal
);
...
...
storage/ndb/src/kernel/blocks/dbtc/DbtcMain.cpp
View file @
dcb7fce7
This diff is collapsed.
Click to expand it.
storage/ndb/src/ndbapi/NdbBlob.cpp
View file @
dcb7fce7
...
...
@@ -1141,7 +1141,7 @@ NdbBlob::readTableParts(char* buf, Uint32 part, Uint32 count)
* table tuple does not fully protect blob parts since DBTUP
* commits each tuple separately.
*/
tOp
->
readTuple
()
==
-
1
||
tOp
->
readTuple
(
NdbOperation
::
LM_SimpleRead
)
==
-
1
||
setPartKeyValue
(
tOp
,
part
+
n
)
==
-
1
||
tOp
->
getValue
((
Uint32
)
3
,
buf
)
==
NULL
)
{
setErrorCode
(
tOp
);
...
...
storage/ndb/src/ndbapi/NdbIndexOperation.cpp
View file @
dcb7fce7
...
...
@@ -85,6 +85,9 @@ int NdbIndexOperation::readTuple(NdbOperation::LockMode lm)
case
LM_CommittedRead
:
return
readTuple
();
break
;
case
LM_SimpleRead
:
return
readTuple
();
break
;
default:
return
-
1
;
};
...
...
storage/ndb/src/ndbapi/NdbOperationDefine.cpp
View file @
dcb7fce7
...
...
@@ -131,6 +131,8 @@ NdbOperation::readTuple(NdbOperation::LockMode lm)
case
LM_CommittedRead
:
return
committedRead
();
break
;
case
LM_SimpleRead
:
return
simpleRead
();
default:
return
-
1
;
};
...
...
@@ -185,24 +187,22 @@ NdbOperation::readTupleExclusive()
int
NdbOperation
::
simpleRead
()
{
/**
* Currently/still disabled
*/
return
readTuple
();
#if 0
NdbTransaction
*
tNdbCon
=
theNdbCon
;
int
tErrorLine
=
theErrorLine
;
if
(
theStatus
==
Init
)
{
theStatus
=
OperationDefined
;
theOperationType
=
ReadRequest
;
theSimpleIndicator
=
1
;
theDirtyIndicator
=
0
;
theErrorLine
=
tErrorLine
++
;
theLockMode = LM_Read;
theLockMode
=
LM_SimpleRead
;
m_abortOption
=
AO_IgnoreError
;
tNdbCon
->
theSimpleState
=
0
;
return
0
;
}
else
{
setErrorCode
(
4200
);
return
-
1
;
}
//if
#endif
}
//NdbOperation::simpleRead()
/*****************************************************************************
...
...
@@ -338,28 +338,32 @@ NdbOperation::setReadLockMode(LockMode lockMode)
{
/* We only support changing lock mode for read operations at this time. */
assert
(
theOperationType
==
ReadRequest
||
theOperationType
==
ReadExclusive
);
switch
(
lockMode
)
{
case
LM_CommittedRead
:
theOperationType
=
ReadRequest
;
theSimpleIndicator
=
1
;
theDirtyIndicator
=
1
;
break
;
case
LM_Read
:
theNdbCon
->
theSimpleState
=
0
;
theOperationType
=
ReadRequest
;
theSimpleIndicator
=
0
;
theDirtyIndicator
=
0
;
break
;
case
LM_Exclusive
:
theNdbCon
->
theSimpleState
=
0
;
theOperationType
=
ReadExclusive
;
theSimpleIndicator
=
0
;
theDirtyIndicator
=
0
;
break
;
default:
/* Not supported / invalid. */
assert
(
false
);
switch
(
lockMode
)
{
case
LM_CommittedRead
:
/* TODO, check theNdbCon->theSimpleState */
theOperationType
=
ReadRequest
;
theSimpleIndicator
=
1
;
theDirtyIndicator
=
1
;
break
;
case
LM_SimpleRead
:
/* TODO, check theNdbCon->theSimpleState */
theOperationType
=
ReadRequest
;
theSimpleIndicator
=
1
;
theDirtyIndicator
=
0
;
break
;
case
LM_Read
:
theNdbCon
->
theSimpleState
=
0
;
theOperationType
=
ReadRequest
;
theSimpleIndicator
=
0
;
theDirtyIndicator
=
0
;
break
;
case
LM_Exclusive
:
theNdbCon
->
theSimpleState
=
0
;
theOperationType
=
ReadExclusive
;
theSimpleIndicator
=
0
;
theDirtyIndicator
=
0
;
break
;
default:
/* Not supported / invalid. */
assert
(
false
);
}
theLockMode
=
lockMode
;
}
...
...
storage/ndb/src/ndbapi/NdbOperationExec.cpp
View file @
dcb7fce7
...
...
@@ -175,12 +175,11 @@ NdbOperation::prepareSend(Uint32 aTC_ConnectPtr,
Uint8
tInterpretIndicator
=
theInterpretIndicator
;
Uint8
tNoDisk
=
m_no_disk_flag
;
//-------------------------------------------------------------
// Simple state is set if start and commit is set and it is
// a read request. Otherwise it is set to zero.
//-------------------------------------------------------------
/**
* A dirty read, can not abort the transaction
*/
Uint8
tReadInd
=
(
theOperationType
==
ReadRequest
);
Uint8
t
SimpleState
=
tReadInd
&
tSimple
Indicator
;
Uint8
t
DirtyState
=
tReadInd
&
tDirty
Indicator
;
tcKeyReq
->
transId1
=
tTransId1
;
tcKeyReq
->
transId2
=
tTransId2
;
...
...
@@ -206,8 +205,8 @@ NdbOperation::prepareSend(Uint32 aTC_ConnectPtr,
tcKeyReq
->
setOperationType
(
tReqInfo
,
tOperationType
);
tcKeyReq
->
setKeyLength
(
tReqInfo
,
tTupKeyLen
);
// A
simple
read is always ignore error
abortOption
=
t
Simple
State
?
(
Uint8
)
AO_IgnoreError
:
(
Uint8
)
abortOption
;
// A
dirty
read is always ignore error
abortOption
=
t
Dirty
State
?
(
Uint8
)
AO_IgnoreError
:
(
Uint8
)
abortOption
;
tcKeyReq
->
setAbortOption
(
tReqInfo
,
abortOption
);
m_abortOption
=
abortOption
;
...
...
@@ -549,8 +548,8 @@ NdbOperation::receiveTCKEYREF( NdbApiSignal* aSignal)
theStatus
=
Finished
;
theReceiver
.
m_received_result_length
=
~
0
;
// not
simple
read
if
(
!
(
theOperationType
==
ReadRequest
&&
the
Simple
Indicator
))
// not
dirty
read
if
(
!
(
theOperationType
==
ReadRequest
&&
the
Dirty
Indicator
))
{
theNdbCon
->
OpCompleteFailure
(
this
);
return
-
1
;
...
...
storage/ndb/src/ndbapi/NdbReceiver.cpp
View file @
dcb7fce7
...
...
@@ -283,7 +283,7 @@ NdbReceiver::execTRANSID_AI(const Uint32* aDataPtr, Uint32 aLength)
Uint32
tmp
=
m_received_result_length
+
aLength
;
m_received_result_length
=
tmp
;
return
(
tmp
==
exp
||
(
exp
>
TcKeyConf
::
Simple
ReadBit
)
?
1
:
0
);
return
(
tmp
==
exp
||
(
exp
>
TcKeyConf
::
Dirty
ReadBit
)
?
1
:
0
);
}
int
...
...
storage/ndb/src/ndbapi/NdbScanOperation.cpp
View file @
dcb7fce7
...
...
@@ -237,6 +237,7 @@ NdbScanOperation::setReadLockMode(LockMode lockMode)
lockHoldMode
=
false
;
readCommitted
=
true
;
break
;
case
LM_SimpleRead
:
case
LM_Read
:
lockExcl
=
false
;
lockHoldMode
=
true
;
...
...
storage/ndb/src/ndbapi/NdbTransaction.cpp
View file @
dcb7fce7
...
...
@@ -1787,8 +1787,8 @@ from other transactions.
const
Uint32
tAttrInfoLen
=
*
tPtr
++
;
if
(
tOp
&&
tOp
->
checkMagicNumber
())
{
Uint32
done
=
tOp
->
execTCOPCONF
(
tAttrInfoLen
);
if
(
tAttrInfoLen
>
TcKeyConf
::
Simple
ReadBit
){
Uint32
node
=
tAttrInfoLen
&
(
~
TcKeyConf
::
Simple
ReadBit
);
if
(
tAttrInfoLen
>
TcKeyConf
::
Dirty
ReadBit
){
Uint32
node
=
tAttrInfoLen
&
(
~
TcKeyConf
::
Dirty
ReadBit
);
NdbNodeBitmask
::
set
(
m_db_nodes
,
node
);
if
(
NdbNodeBitmask
::
get
(
m_failed_db_nodes
,
node
)
&&
!
done
)
{
...
...
@@ -2182,7 +2182,7 @@ NdbTransaction::report_node_failure(Uint32 id){
* 4) X X
*/
NdbOperation
*
tmp
=
theFirstExecOpInList
;
const
Uint32
len
=
TcKeyConf
::
Simple
ReadBit
|
id
;
const
Uint32
len
=
TcKeyConf
::
Dirty
ReadBit
|
id
;
Uint32
tNoComp
=
theNoOfOpCompleted
;
Uint32
tNoSent
=
theNoOfOpSent
;
Uint32
count
=
0
;
...
...
storage/ndb/test/ndbapi/testBasic.cpp
View file @
dcb7fce7
...
...
@@ -136,31 +136,13 @@ int runPkRead(NDBT_Context* ctx, NDBT_Step* step){
int
loops
=
ctx
->
getNumLoops
();
int
records
=
ctx
->
getNumRecords
();
int
batchSize
=
ctx
->
getProperty
(
"BatchSize"
,
1
);
int
lm
=
ctx
->
getProperty
(
"LockMode"
,
NdbOperation
::
LM_Read
);
int
i
=
0
;
HugoTransactions
hugoTrans
(
*
ctx
->
getTab
());
while
(
i
<
loops
)
{
g_info
<<
i
<<
": "
;
if
(
hugoTrans
.
pkReadRecords
(
GETNDB
(
step
),
records
,
batchSize
)
!=
NDBT_OK
){
g_info
<<
endl
;
return
NDBT_FAILED
;
}
i
++
;
}
g_info
<<
endl
;
return
NDBT_OK
;
}
int
runPkDirtyRead
(
NDBT_Context
*
ctx
,
NDBT_Step
*
step
){
int
loops
=
ctx
->
getNumLoops
();
int
records
=
ctx
->
getNumRecords
();
int
batchSize
=
ctx
->
getProperty
(
"BatchSize"
,
1
);
int
i
=
0
;
bool
dirty
=
true
;
HugoTransactions
hugoTrans
(
*
ctx
->
getTab
());
while
(
i
<
loops
)
{
g_info
<<
i
<<
": "
;
if
(
hugoTrans
.
pkReadRecords
(
GETNDB
(
step
),
records
,
batchSize
,
NdbOperation
::
LM_CommittedRead
)
!=
NDBT_OK
){
if
(
hugoTrans
.
pkReadRecords
(
GETNDB
(
step
),
records
,
batchSize
,
(
NdbOperation
::
LockMode
)
lm
)
!=
NDBT_OK
){
g_info
<<
endl
;
return
NDBT_FAILED
;
}
...
...
@@ -1552,14 +1534,23 @@ TESTCASE("PkInsert",
}
TESTCASE
(
"PkRead"
,
"Verify that we can insert, read and delete from this table using PK"
){
TC_PROPERTY
(
"LockMode"
,
NdbOperation
::
LM_Read
);
INITIALIZER
(
runLoadTable
);
STEP
(
runPkRead
);
FINALIZER
(
runClearTable
);
}
TESTCASE
(
"PkDirtyRead"
,
"Verify that we can insert, dirty read and delete from this table using PK"
){
TC_PROPERTY
(
"LockMode"
,
NdbOperation
::
LM_Dirty
);
INITIALIZER
(
runLoadTable
);
STEP
(
runPkDirtyRead
);
STEP
(
runPkRead
);
FINALIZER
(
runClearTable
);
}
TESTCASE
(
"PkSimpleRead"
,
"Verify that we can insert, simple read and delete from this table using PK"
){
TC_PROPERTY
(
"LockMode"
,
NdbOperation
::
LM_SimpleRead
);
INITIALIZER
(
runLoadTable
);
STEP
(
runPkRead
);
FINALIZER
(
runClearTable
);
}
TESTCASE
(
"PkUpdate"
,
...
...
storage/ndb/test/run-test/daily-basic-tests.txt
View file @
dcb7fce7
...
...
@@ -63,6 +63,14 @@ max-time: 500
cmd: testBasic
args: -n PkRead
max-time: 500
cmd: testBasic
args: -n PkSimpleRead
max-time: 500
cmd: testBasic
args: -n PkDirtyRead
max-time: 500
cmd: testBasic
args: -n PkUpdate
...
...
storage/ndb/test/src/HugoOperations.cpp
View file @
dcb7fce7
...
...
@@ -93,6 +93,7 @@ int HugoOperations::pkReadRecord(Ndb* pNdb,
case
NdbOperation
:
:
LM_Read
:
case
NdbOperation
:
:
LM_Exclusive
:
case
NdbOperation
:
:
LM_CommittedRead
:
case
NdbOperation
:
:
LM_SimpleRead
:
if
(
idx
&&
idx
->
getType
()
==
NdbDictionary
::
Index
::
OrderedIndex
&&
pIndexScanOp
==
0
)
{
...
...
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