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
4143a189
Commit
4143a189
authored
Feb 03, 2005
by
joreland@mysql.com
Browse files
Options
Browse Files
Download
Plain Diff
merge
parents
41e70c83
443e8be7
Changes
11
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
524 additions
and
130 deletions
+524
-130
mysql-test/mysql-test-run.sh
mysql-test/mysql-test-run.sh
+3
-0
mysql-test/t/ndb_autodiscover.test
mysql-test/t/ndb_autodiscover.test
+5
-5
mysql-test/t/ndb_restore.test
mysql-test/t/ndb_restore.test
+3
-3
ndb/include/ndbapi/NdbTransaction.hpp
ndb/include/ndbapi/NdbTransaction.hpp
+2
-0
ndb/src/kernel/blocks/dbacc/DbaccMain.cpp
ndb/src/kernel/blocks/dbacc/DbaccMain.cpp
+2
-1
ndb/test/include/HugoOperations.hpp
ndb/test/include/HugoOperations.hpp
+2
-0
ndb/test/include/NDBT_Test.hpp
ndb/test/include/NDBT_Test.hpp
+3
-1
ndb/test/ndbapi/testOperations.cpp
ndb/test/ndbapi/testOperations.cpp
+369
-0
ndb/test/src/HugoOperations.cpp
ndb/test/src/HugoOperations.cpp
+11
-0
ndb/test/src/HugoTransactions.cpp
ndb/test/src/HugoTransactions.cpp
+116
-116
ndb/test/src/NDBT_Test.cpp
ndb/test/src/NDBT_Test.cpp
+8
-4
No files found.
mysql-test/mysql-test-run.sh
View file @
4143a189
...
@@ -500,6 +500,7 @@ export MASTER_MYPORT MASTER_MYPORT1 SLAVE_MYPORT MYSQL_TCP_PORT MASTER_MYSOCK MA
...
@@ -500,6 +500,7 @@ export MASTER_MYPORT MASTER_MYPORT1 SLAVE_MYPORT MYSQL_TCP_PORT MASTER_MYSOCK MA
NDBCLUSTER_BASE_PORT
=
`
expr
$NDBCLUSTER_PORT
+ 2
`
NDBCLUSTER_BASE_PORT
=
`
expr
$NDBCLUSTER_PORT
+ 2
`
NDBCLUSTER_OPTS
=
"--port=
$NDBCLUSTER_PORT
--port-base=
$NDBCLUSTER_BASE_PORT
--data-dir=
$MYSQL_TEST_DIR
/var --ndb_mgm-extra-opts=
$NDB_MGM_EXTRA_OPTS
--ndb_mgmd-extra-opts=
$NDB_MGMD_EXTRA_OPTS
--ndbd-extra-opts=
$NDBD_EXTRA_OPTS
"
NDBCLUSTER_OPTS
=
"--port=
$NDBCLUSTER_PORT
--port-base=
$NDBCLUSTER_BASE_PORT
--data-dir=
$MYSQL_TEST_DIR
/var --ndb_mgm-extra-opts=
$NDB_MGM_EXTRA_OPTS
--ndb_mgmd-extra-opts=
$NDB_MGMD_EXTRA_OPTS
--ndbd-extra-opts=
$NDBD_EXTRA_OPTS
"
NDB_BACKUP_DIR
=
$MYSQL_TEST_DIR
/var/ndbcluster-
$NDBCLUSTER_PORT
NDB_BACKUP_DIR
=
$MYSQL_TEST_DIR
/var/ndbcluster-
$NDBCLUSTER_PORT
NDB_TOOLS_OUTPUT
=
$MYSQL_TEST_DIR
/var/log/ndb_tools.log
if
[
x
$SOURCE_DIST
=
x1
]
;
then
if
[
x
$SOURCE_DIST
=
x1
]
;
then
MY_BASEDIR
=
$MYSQL_TEST_DIR
MY_BASEDIR
=
$MYSQL_TEST_DIR
...
@@ -700,6 +701,7 @@ export CLIENT_BINDIR MYSQL_CLIENT_TEST CHARSETSDIR
...
@@ -700,6 +701,7 @@ export CLIENT_BINDIR MYSQL_CLIENT_TEST CHARSETSDIR
export
NDB_TOOLS_DIR
export
NDB_TOOLS_DIR
export
NDB_MGM
export
NDB_MGM
export
NDB_BACKUP_DIR
export
NDB_BACKUP_DIR
export
NDB_TOOLS_OUTPUT
export
PURIFYOPTIONS
export
PURIFYOPTIONS
MYSQL_TEST_ARGS
=
"--no-defaults --socket=
$MASTER_MYSOCK
--database=
$DB
\
MYSQL_TEST_ARGS
=
"--no-defaults --socket=
$MASTER_MYSOCK
--database=
$DB
\
...
@@ -1071,6 +1073,7 @@ start_ndbcluster()
...
@@ -1071,6 +1073,7 @@ start_ndbcluster()
{
{
if
[
!
-z
"
$USE_NDBCLUSTER
"
]
if
[
!
-z
"
$USE_NDBCLUSTER
"
]
then
then
rm
-f
$NDB_TOOLS_OUTPUT
if
[
-z
"
$USE_RUNNING_NDBCLUSTER
"
]
if
[
-z
"
$USE_RUNNING_NDBCLUSTER
"
]
then
then
echo
"Starting ndbcluster"
echo
"Starting ndbcluster"
...
...
mysql-test/t/ndb_autodiscover.test
View file @
4143a189
...
@@ -199,7 +199,7 @@ insert into t4 values (1, "Automatic");
...
@@ -199,7 +199,7 @@ insert into t4 values (1, "Automatic");
select
*
from
t4
;
select
*
from
t4
;
# Remove the table from NDB
# Remove the table from NDB
system
exec
$NDB_TOOLS_DIR
/
ndb_drop_table
--
no
-
defaults
-
d
test
t4
>
/
dev
/
null
;
system
exec
$NDB_TOOLS_DIR
/
ndb_drop_table
--
no
-
defaults
-
d
test
t4
>
>
$NDB_TOOLS_OUTPUT
;
#
#
# Test that correct error is returned
# Test that correct error is returned
...
@@ -230,7 +230,7 @@ select * from t4;
...
@@ -230,7 +230,7 @@ select * from t4;
flush
tables
;
flush
tables
;
# Remove the table from NDB
# Remove the table from NDB
system
exec
$NDB_TOOLS_DIR
/
ndb_drop_table
--
no
-
defaults
-
d
test
t4
>
/
dev
/
null
;
system
exec
$NDB_TOOLS_DIR
/
ndb_drop_table
--
no
-
defaults
-
d
test
t4
>
>
$NDB_TOOLS_OUTPUT
;
SHOW
TABLES
;
SHOW
TABLES
;
...
@@ -264,8 +264,8 @@ insert into t8 values (8, "myisam table 8");
...
@@ -264,8 +264,8 @@ insert into t8 values (8, "myisam table 8");
insert
into
t9
values
(
9
);
insert
into
t9
values
(
9
);
# Remove t3, t5 from NDB
# Remove t3, t5 from NDB
system
exec
$NDB_TOOLS_DIR
/
ndb_drop_table
--
no
-
defaults
-
d
test
t3
>
/
dev
/
null
;
system
exec
$NDB_TOOLS_DIR
/
ndb_drop_table
--
no
-
defaults
-
d
test
t3
>
>
$NDB_TOOLS_OUTPUT
;
system
exec
$NDB_TOOLS_DIR
/
ndb_drop_table
--
no
-
defaults
-
d
test
t5
>
/
dev
/
null
;
system
exec
$NDB_TOOLS_DIR
/
ndb_drop_table
--
no
-
defaults
-
d
test
t5
>
>
$NDB_TOOLS_OUTPUT
;
# Remove t6, t7 from disk
# Remove t6, t7 from disk
system
rm
var
/
master
-
data
/
test
/
t6
.
frm
>
/
dev
/
null
;
system
rm
var
/
master
-
data
/
test
/
t6
.
frm
>
/
dev
/
null
;
system
rm
var
/
master
-
data
/
test
/
t7
.
frm
>
/
dev
/
null
;
system
rm
var
/
master
-
data
/
test
/
t7
.
frm
>
/
dev
/
null
;
...
@@ -498,4 +498,4 @@ create table t10 (
...
@@ -498,4 +498,4 @@ create table t10 (
insert
into
t10
values
(
1
,
'kalle'
);
insert
into
t10
values
(
1
,
'kalle'
);
--
exec
$NDB_TOOLS_DIR
/
ndb_drop_table
--
no
-
defaults
-
d
test
`$NDB_TOOLS_DIR/ndb_show_tables --no-defaults | grep BLOB`
>
/
dev
/
null
2
>&
1
||
true
--
exec
$NDB_TOOLS_DIR
/
ndb_drop_table
--
no
-
defaults
-
d
test
`$NDB_TOOLS_DIR/ndb_show_tables --no-defaults | grep BLOB`
>
>
$NDB_TOOLS_OUTPUT
2
>&
1
||
true
mysql-test/t/ndb_restore.test
View file @
4143a189
...
@@ -142,10 +142,10 @@ create table t8_c engine=ndbcluster as select * from t8;
...
@@ -142,10 +142,10 @@ create table t8_c engine=ndbcluster as select * from t8;
create
table
t9_c
engine
=
ndbcluster
as
select
*
from
t9
;
create
table
t9_c
engine
=
ndbcluster
as
select
*
from
t9
;
--
exec
$NDB_MGM
--
no
-
defaults
-
e
"start backup"
>
/
dev
/
null
--
exec
$NDB_MGM
--
no
-
defaults
-
e
"start backup"
>
>
$NDB_TOOLS_OUTPUT
drop
table
t1_c
,
t2_c
,
t3_c
,
t4_c
,
t5_c
,
t6_c
,
t7_c
,
t8_c
,
t9_c
;
drop
table
t1_c
,
t2_c
,
t3_c
,
t4_c
,
t5_c
,
t6_c
,
t7_c
,
t8_c
,
t9_c
;
--
exec
$NDB_TOOLS_DIR
/
ndb_restore
--
no
-
defaults
-
b
1
-
n
1
-
m
-
r
--
print
--
print_meta
$NDB_BACKUP_DIR
/
BACKUP
/
BACKUP
-
1
>
/
tmp
/
ndb_restore
.
out
--
exec
$NDB_TOOLS_DIR
/
ndb_restore
--
no
-
defaults
-
b
1
-
n
1
-
m
-
r
--
print
--
print_meta
$NDB_BACKUP_DIR
/
BACKUP
/
BACKUP
-
1
>
>
$NDB_TOOLS_OUTPUT
--
exec
$NDB_TOOLS_DIR
/
ndb_restore
--
no
-
defaults
-
b
1
-
n
2
-
r
--
print
--
print_meta
$NDB_BACKUP_DIR
/
BACKUP
/
BACKUP
-
1
>
/
tmp
/
ndb_restore
.
out
--
exec
$NDB_TOOLS_DIR
/
ndb_restore
--
no
-
defaults
-
b
1
-
n
2
-
r
--
print
--
print_meta
$NDB_BACKUP_DIR
/
BACKUP
/
BACKUP
-
1
>
>
$NDB_TOOLS_OUTPUT
show
tables
;
show
tables
;
...
...
ndb/include/ndbapi/NdbTransaction.hpp
View file @
4143a189
...
@@ -804,6 +804,8 @@ private:
...
@@ -804,6 +804,8 @@ private:
void
remove_list
(
NdbOperation
*&
head
,
NdbOperation
*
);
void
remove_list
(
NdbOperation
*&
head
,
NdbOperation
*
);
void
define_scan_op
(
NdbIndexScanOperation
*
);
void
define_scan_op
(
NdbIndexScanOperation
*
);
friend
class
HugoOperations
;
};
};
#ifndef DOXYGEN_SHOULD_SKIP_INTERNAL
#ifndef DOXYGEN_SHOULD_SKIP_INTERNAL
...
...
ndb/src/kernel/blocks/dbacc/DbaccMain.cpp
View file @
4143a189
...
@@ -4385,7 +4385,8 @@ void Dbacc::commitOperation(Signal* signal)
...
@@ -4385,7 +4385,8 @@ void Dbacc::commitOperation(Signal* signal)
Uint32
tmp2Olq
;
Uint32
tmp2Olq
;
if
((
operationRecPtr
.
p
->
commitDeleteCheckFlag
==
ZFALSE
)
&&
if
((
operationRecPtr
.
p
->
commitDeleteCheckFlag
==
ZFALSE
)
&&
(
operationRecPtr
.
p
->
operation
!=
ZSCAN_OP
))
{
(
operationRecPtr
.
p
->
operation
!=
ZSCAN_OP
)
&&
(
operationRecPtr
.
p
->
operation
!=
ZREAD
))
{
jam
();
jam
();
/* This method is used to check whether the end result of the transaction
/* This method is used to check whether the end result of the transaction
will be to delete the tuple. In this case all operation will be marked
will be to delete the tuple. In this case all operation will be marked
...
...
ndb/test/include/HugoOperations.hpp
View file @
4143a189
...
@@ -33,6 +33,8 @@ public:
...
@@ -33,6 +33,8 @@ public:
int
closeTransaction
(
Ndb
*
);
int
closeTransaction
(
Ndb
*
);
NdbTransaction
*
getTransaction
();
NdbTransaction
*
getTransaction
();
void
refresh
();
void
refresh
();
void
setTransactionId
(
Uint64
);
int
pkInsertRecord
(
Ndb
*
,
int
pkInsertRecord
(
Ndb
*
,
int
recordNo
,
int
recordNo
,
...
...
ndb/test/include/NDBT_Test.hpp
View file @
4143a189
...
@@ -191,7 +191,7 @@ public:
...
@@ -191,7 +191,7 @@ public:
NDBT_TestCase
(
NDBT_TestSuite
*
psuite
,
NDBT_TestCase
(
NDBT_TestSuite
*
psuite
,
const
char
*
name
,
const
char
*
name
,
const
char
*
comment
);
const
char
*
comment
);
virtual
~
NDBT_TestCase
(){}
virtual
~
NDBT_TestCase
()
{}
// This is the default executor of a test case
// This is the default executor of a test case
// When a test case is executed it will need to be suplied with a number of
// When a test case is executed it will need to be suplied with a number of
...
@@ -228,6 +228,8 @@ protected:
...
@@ -228,6 +228,8 @@ protected:
void
stopTimer
(
NDBT_Context
*
);
void
stopTimer
(
NDBT_Context
*
);
void
printTimer
(
NDBT_Context
*
);
void
printTimer
(
NDBT_Context
*
);
BaseString
_name
;
BaseString
_comment
;
const
char
*
name
;
const
char
*
name
;
const
char
*
comment
;
const
char
*
comment
;
NDBT_TestSuite
*
suite
;
NDBT_TestSuite
*
suite
;
...
...
ndb/test/ndbapi/testOperations.cpp
View file @
4143a189
...
@@ -98,6 +98,15 @@ OperationTestCase matrix[] = {
...
@@ -98,6 +98,15 @@ OperationTestCase matrix[] = {
result = NDBT_FAILED; \
result = NDBT_FAILED; \
break; }
break; }
#define C3(b) if (!(b)) { \
g_err << "ERR: "<< step->getName() \
<< " failed on line " << __LINE__ << endl; \
abort(); return NDBT_FAILED; }
#define C3(b) if (!(b)) { \
g_err << "ERR: failed on line " << __LINE__ << endl; \
return NDBT_FAILED; }
int
int
runOp
(
HugoOperations
&
hugoOps
,
runOp
(
HugoOperations
&
hugoOps
,
Ndb
*
pNdb
,
Ndb
*
pNdb
,
...
@@ -228,11 +237,369 @@ runClearTable(NDBT_Context* ctx, NDBT_Step* step){
...
@@ -228,11 +237,369 @@ runClearTable(NDBT_Context* ctx, NDBT_Step* step){
return
NDBT_OK
;
return
NDBT_OK
;
}
}
enum
OPS
{
o_DONE
=
0
,
o_INS
=
1
,
o_UPD
=
2
,
o_DEL
=
3
};
typedef
Vector
<
OPS
>
Sequence
;
static
bool
valid
(
const
Sequence
&
s
)
{
if
(
s
.
size
()
==
0
)
return
false
;
for
(
size_t
i
=
1
;
i
<
s
.
size
();
i
++
)
{
switch
(
s
[
i
]){
case
o_INS
:
if
(
s
[
i
-
1
]
!=
o_DEL
)
return
false
;
break
;
case
o_UPD
:
case
o_DEL
:
if
(
s
[
i
-
1
]
==
o_DEL
)
return
false
;
break
;
case
o_DONE
:
return
true
;
}
}
return
true
;
}
static
NdbOut
&
operator
<<
(
NdbOut
&
out
,
const
Sequence
&
s
)
{
out
<<
"[ "
;
for
(
size_t
i
=
0
;
i
<
s
.
size
();
i
++
)
{
switch
(
s
[
i
]){
case
o_INS
:
out
<<
"INS "
;
break
;
case
o_DEL
:
out
<<
"DEL "
;
break
;
case
o_UPD
:
out
<<
"UPD "
;
break
;
case
o_DONE
:
abort
();
}
}
out
<<
"]"
;
return
out
;
}
static
void
generate
(
Sequence
&
out
,
int
no
)
{
while
(
no
&
3
)
{
out
.
push_back
((
OPS
)(
no
&
3
));
no
>>=
2
;
}
}
static
void
generate
(
Vector
<
int
>&
out
,
size_t
len
)
{
int
max
=
1
;
while
(
len
)
{
max
<<=
2
;
len
--
;
}
len
=
1
;
for
(
int
i
=
0
;
i
<
max
;
i
++
)
{
Sequence
tmp
;
generate
(
tmp
,
i
);
if
(
tmp
.
size
()
>=
len
&&
valid
(
tmp
))
{
out
.
push_back
(
i
);
len
=
tmp
.
size
();
}
else
{
//ndbout << "DISCARD: " << tmp << endl;
}
}
}
static
const
Uint32
DUMMY
=
0
;
static
const
Uint32
ROW
=
1
;
int
verify_other
(
NDBT_Context
*
ctx
,
Ndb
*
pNdb
,
int
seq
,
OPS
latest
,
bool
initial_row
,
bool
commit
)
{
Uint32
no_wait
=
NdbOperation
::
LM_CommittedRead
*
ctx
->
getProperty
(
"NoWait"
,
(
Uint32
)
1
);
for
(
size_t
j
=
no_wait
;
j
<
3
;
j
++
)
{
HugoOperations
other
(
*
ctx
->
getTab
());
C3
(
other
.
startTransaction
(
pNdb
)
==
0
);
C3
(
other
.
pkReadRecord
(
pNdb
,
ROW
,
1
,
(
NdbOperation
::
LockMode
)
j
)
==
0
);
int
tmp
=
other
.
execute_Commit
(
pNdb
);
if
(
seq
==
0
){
if
(
j
==
NdbOperation
::
LM_CommittedRead
)
{
C3
(
initial_row
?
tmp
==
0
&&
other
.
verifyUpdatesValue
(
0
)
==
0
:
tmp
==
626
);
}
else
{
C3
(
tmp
==
266
);
}
}
else
if
(
commit
)
{
switch
(
latest
){
case
o_INS
:
case
o_UPD
:
C3
(
tmp
==
0
&&
other
.
verifyUpdatesValue
(
seq
)
==
0
);
break
;
case
o_DEL
:
C3
(
tmp
==
626
);
break
;
case
o_DONE
:
abort
();
}
}
else
{
// rollback
C3
(
initial_row
?
tmp
==
0
&&
other
.
verifyUpdatesValue
(
0
)
==
0
:
tmp
==
626
);
}
}
return
NDBT_OK
;
}
int
verify_savepoint
(
NDBT_Context
*
ctx
,
Ndb
*
pNdb
,
int
seq
,
OPS
latest
,
Uint64
transactionId
)
{
bool
initial_row
=
(
seq
==
0
)
&&
latest
==
o_INS
;
for
(
size_t
j
=
0
;
j
<
3
;
j
++
)
{
const
NdbOperation
::
LockMode
lm
=
(
NdbOperation
::
LockMode
)
j
;
HugoOperations
same
(
*
ctx
->
getTab
());
C3
(
same
.
startTransaction
(
pNdb
)
==
0
);
same
.
setTransactionId
(
transactionId
);
// Cheat
/**
* Increase savepoint to <em>k</em>
*/
for
(
size_t
l
=
1
;
l
<=
seq
;
l
++
)
{
C3
(
same
.
pkReadRecord
(
pNdb
,
DUMMY
,
1
,
lm
)
==
0
);
// Read dummy row
C3
(
same
.
execute_NoCommit
(
pNdb
)
==
0
);
g_info
<<
"savepoint: "
<<
l
<<
endl
;
}
g_info
<<
"op("
<<
seq
<<
"): "
<<
" lock mode "
<<
lm
<<
endl
;
C3
(
same
.
pkReadRecord
(
pNdb
,
ROW
,
1
,
lm
)
==
0
);
// Read real row
int
tmp
=
same
.
execute_Commit
(
pNdb
);
if
(
seq
==
0
)
{
if
(
initial_row
)
{
C3
(
tmp
==
0
&&
same
.
verifyUpdatesValue
(
0
)
==
0
);
}
else
{
C3
(
tmp
==
626
);
}
}
else
{
switch
(
latest
){
case
o_INS
:
case
o_UPD
:
C3
(
tmp
==
0
&&
same
.
verifyUpdatesValue
(
seq
)
==
0
);
break
;
case
o_DEL
:
C3
(
tmp
==
626
);
break
;
case
o_DONE
:
abort
();
}
}
}
return
NDBT_OK
;
}
int
runOperations
(
NDBT_Context
*
ctx
,
NDBT_Step
*
step
)
{
int
tmp
;
Ndb
*
pNdb
=
GETNDB
(
step
);
Uint32
seqNo
=
ctx
->
getProperty
(
"Sequence"
,
(
Uint32
)
0
);
Uint32
commit
=
ctx
->
getProperty
(
"Commit"
,
(
Uint32
)
1
);
if
(
seqNo
==
0
)
{
return
NDBT_FAILED
;
}
Sequence
seq
;
generate
(
seq
,
seqNo
);
{
// Dummy row
HugoOperations
hugoOps
(
*
ctx
->
getTab
());
C3
(
hugoOps
.
startTransaction
(
pNdb
)
==
0
);
C3
(
hugoOps
.
pkInsertRecord
(
pNdb
,
DUMMY
,
1
,
0
)
==
0
);
C3
(
hugoOps
.
execute_Commit
(
pNdb
)
==
0
);
}
const
bool
initial_row
=
(
seq
[
0
]
!=
o_INS
);
if
(
initial_row
)
{
HugoOperations
hugoOps
(
*
ctx
->
getTab
());
C3
(
hugoOps
.
startTransaction
(
pNdb
)
==
0
);
C3
(
hugoOps
.
pkInsertRecord
(
pNdb
,
ROW
,
1
,
0
)
==
0
);
C3
(
hugoOps
.
execute_Commit
(
pNdb
)
==
0
);
}
HugoOperations
trans1
(
*
ctx
->
getTab
());
C3
(
trans1
.
startTransaction
(
pNdb
)
==
0
);
for
(
size_t
i
=
0
;
i
<
seq
.
size
();
i
++
)
{
/**
* Perform operation
*/
switch
(
seq
[
i
]){
case
o_INS
:
C3
(
trans1
.
pkInsertRecord
(
pNdb
,
ROW
,
1
,
i
+
1
)
==
0
);
break
;
case
o_UPD
:
C3
(
trans1
.
pkUpdateRecord
(
pNdb
,
ROW
,
1
,
i
+
1
)
==
0
);
break
;
case
o_DEL
:
C3
(
trans1
.
pkDeleteRecord
(
pNdb
,
ROW
,
1
)
==
0
);
break
;
case
o_DONE
:
abort
();
}
C3
(
trans1
.
execute_NoCommit
(
pNdb
)
==
0
);
/**
* Verify other transaction
*/
if
(
verify_other
(
ctx
,
pNdb
,
0
,
seq
[
0
],
initial_row
,
commit
)
!=
NDBT_OK
)
return
NDBT_FAILED
;
/**
* Verify savepoint read
*/
Uint64
transactionId
=
trans1
.
getTransaction
()
->
getTransactionId
();
for
(
size_t
k
=
0
;
k
<=
i
+
1
;
k
++
)
{
if
(
verify_savepoint
(
ctx
,
pNdb
,
k
,
k
>
0
?
seq
[
k
-
1
]
:
initial_row
?
o_INS
:
o_DONE
,
transactionId
)
!=
NDBT_OK
)
return
NDBT_FAILED
;
}
}
if
(
commit
)
{
C3
(
trans1
.
execute_Commit
(
pNdb
)
==
0
);
}
else
{
C3
(
trans1
.
execute_Rollback
(
pNdb
)
==
0
);
}
if
(
verify_other
(
ctx
,
pNdb
,
seq
.
size
(),
seq
.
back
(),
initial_row
,
commit
)
!=
NDBT_OK
)
return
NDBT_FAILED
;
return
NDBT_OK
;
}
int
int
main
(
int
argc
,
const
char
**
argv
){
main
(
int
argc
,
const
char
**
argv
){
ndb_init
();
ndb_init
();
Vector
<
int
>
tmp
;
generate
(
tmp
,
5
);
NDBT_TestSuite
ts
(
"testOperations"
);
NDBT_TestSuite
ts
(
"testOperations"
);
for
(
size_t
i
=
0
;
i
<
tmp
.
size
();
i
++
)
{
BaseString
name
;
Sequence
s
;
generate
(
s
,
tmp
[
i
]);
for
(
size_t
j
=
0
;
j
<
s
.
size
();
j
++
){
switch
(
s
[
j
]){
case
o_INS
:
name
.
append
(
"_INS"
);
break
;
case
o_DEL
:
name
.
append
(
"_DEL"
);
break
;
case
o_UPD
:
name
.
append
(
"_UPD"
);
break
;
case
o_DONE
:
abort
();
}
}
BaseString
n1
;
n1
.
append
(
name
);
n1
.
append
(
"_COMMIT"
);
NDBT_TestCaseImpl1
*
pt
=
new
NDBT_TestCaseImpl1
(
&
ts
,
n1
.
c_str
()
+
1
,
""
);
pt
->
setProperty
(
"Sequence"
,
tmp
[
i
]);
pt
->
addInitializer
(
new
NDBT_Initializer
(
pt
,
"runClearTable"
,
runClearTable
));
pt
->
addStep
(
new
NDBT_ParallelStep
(
pt
,
"run"
,
runOperations
));
pt
->
addFinalizer
(
new
NDBT_Finalizer
(
pt
,
"runClearTable"
,
runClearTable
));
ts
.
addTest
(
pt
);
name
.
append
(
"_ABORT"
);
pt
=
new
NDBT_TestCaseImpl1
(
&
ts
,
name
.
c_str
()
+
1
,
""
);
pt
->
setProperty
(
"Sequence"
,
tmp
[
i
]);
pt
->
setProperty
(
"Commit"
,
(
Uint32
)
0
);
pt
->
addInitializer
(
new
NDBT_Initializer
(
pt
,
"runClearTable"
,
runClearTable
));
pt
->
addStep
(
new
NDBT_ParallelStep
(
pt
,
"run"
,
runOperations
));
pt
->
addFinalizer
(
new
NDBT_Finalizer
(
pt
,
"runClearTable"
,
runClearTable
));
ts
.
addTest
(
pt
);
}
for
(
Uint32
i
=
0
;
i
<
sizeof
(
matrix
)
/
sizeof
(
matrix
[
0
]);
i
++
){
for
(
Uint32
i
=
0
;
i
<
sizeof
(
matrix
)
/
sizeof
(
matrix
[
0
]);
i
++
){
NDBT_TestCaseImpl1
*
pt
=
new
NDBT_TestCaseImpl1
(
&
ts
,
matrix
[
i
].
name
,
""
);
NDBT_TestCaseImpl1
*
pt
=
new
NDBT_TestCaseImpl1
(
&
ts
,
matrix
[
i
].
name
,
""
);
...
@@ -270,3 +637,5 @@ main(int argc, const char** argv){
...
@@ -270,3 +637,5 @@ main(int argc, const char** argv){
return
ts
.
execute
(
argc
,
argv
);
return
ts
.
execute
(
argc
,
argv
);
}
}
template
class
Vector
<
OPS
>;
template
class
Vector
<
Sequence
>;
ndb/test/src/HugoOperations.cpp
View file @
4143a189
...
@@ -45,6 +45,13 @@ int HugoOperations::setTransaction(NdbTransaction* new_trans){
...
@@ -45,6 +45,13 @@ int HugoOperations::setTransaction(NdbTransaction* new_trans){
return
NDBT_OK
;
return
NDBT_OK
;
}
}
void
HugoOperations
::
setTransactionId
(
Uint64
id
){
if
(
pTrans
!=
NULL
){
pTrans
->
setTransactionId
(
id
);
}
}
int
HugoOperations
::
closeTransaction
(
Ndb
*
pNdb
){
int
HugoOperations
::
closeTransaction
(
Ndb
*
pNdb
){
if
(
pTrans
!=
NULL
){
if
(
pTrans
!=
NULL
){
...
@@ -369,6 +376,10 @@ HugoOperations::HugoOperations(const NdbDictionary::Table& _tab,
...
@@ -369,6 +376,10 @@ HugoOperations::HugoOperations(const NdbDictionary::Table& _tab,
HugoOperations
::~
HugoOperations
(){
HugoOperations
::~
HugoOperations
(){
deallocRows
();
deallocRows
();
if
(
pTrans
!=
NULL
){
pTrans
->
close
();
pTrans
=
NULL
;
}
}
}
...
...
ndb/test/src/HugoTransactions.cpp
View file @
4143a189
This diff is collapsed.
Click to expand it.
ndb/test/src/NDBT_Test.cpp
View file @
4143a189
...
@@ -330,13 +330,17 @@ NDBT_Finalizer::NDBT_Finalizer(NDBT_TestCase* ptest,
...
@@ -330,13 +330,17 @@ NDBT_Finalizer::NDBT_Finalizer(NDBT_TestCase* ptest,
NDBT_TestCase
::
NDBT_TestCase
(
NDBT_TestSuite
*
psuite
,
NDBT_TestCase
::
NDBT_TestCase
(
NDBT_TestSuite
*
psuite
,
const
char
*
pname
,
const
char
*
pname
,
const
char
*
pcomment
)
:
const
char
*
pcomment
)
:
name
(
pname
)
,
name
(
strdup
(
pname
))
,
comment
(
pcomment
),
comment
(
strdup
(
pcomment
)),
suite
(
psuite
){
suite
(
psuite
)
{
_name
.
assign
(
pname
);
_comment
.
assign
(
pcomment
);
name
=
_name
.
c_str
();
comment
=
_comment
.
c_str
();
assert
(
suite
!=
NULL
);
assert
(
suite
!=
NULL
);
}
}
NDBT_TestCaseImpl1
::
NDBT_TestCaseImpl1
(
NDBT_TestSuite
*
psuite
,
NDBT_TestCaseImpl1
::
NDBT_TestCaseImpl1
(
NDBT_TestSuite
*
psuite
,
const
char
*
pname
,
const
char
*
pname
,
const
char
*
pcomment
)
:
const
char
*
pcomment
)
:
...
...
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