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
46c627f3
Commit
46c627f3
authored
Jul 20, 2005
by
unknown
Browse files
Options
Browse Files
Download
Plain Diff
Merge joreland@bk-internal.mysql.com:/home/bk/mysql-4.1
into mysql.com:/home/jonas/src/mysql-4.1-push
parents
21038e65
5aac38c0
Changes
20
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
20 changed files
with
552 additions
and
342 deletions
+552
-342
ndb/include/kernel/signaldata/AlterTable.hpp
ndb/include/kernel/signaldata/AlterTable.hpp
+2
-1
ndb/include/kernel/signaldata/DictTabInfo.hpp
ndb/include/kernel/signaldata/DictTabInfo.hpp
+1
-0
ndb/include/kernel/signaldata/DropTable.hpp
ndb/include/kernel/signaldata/DropTable.hpp
+2
-1
ndb/include/ndbapi/NdbDictionary.hpp
ndb/include/ndbapi/NdbDictionary.hpp
+1
-0
ndb/src/kernel/blocks/backup/Backup.cpp
ndb/src/kernel/blocks/backup/Backup.cpp
+38
-7
ndb/src/kernel/blocks/dbacc/DbaccMain.cpp
ndb/src/kernel/blocks/dbacc/DbaccMain.cpp
+18
-1
ndb/src/kernel/blocks/dbdict/Dbdict.cpp
ndb/src/kernel/blocks/dbdict/Dbdict.cpp
+216
-93
ndb/src/kernel/blocks/dbdict/Dbdict.hpp
ndb/src/kernel/blocks/dbdict/Dbdict.hpp
+8
-3
ndb/src/kernel/blocks/ndbfs/AsyncFile.cpp
ndb/src/kernel/blocks/ndbfs/AsyncFile.cpp
+3
-1
ndb/src/kernel/blocks/ndbfs/MemoryChannel.hpp
ndb/src/kernel/blocks/ndbfs/MemoryChannel.hpp
+11
-3
ndb/src/ndbapi/NdbDictionaryImpl.cpp
ndb/src/ndbapi/NdbDictionaryImpl.cpp
+1
-0
ndb/src/ndbapi/ndberror.c
ndb/src/ndbapi/ndberror.c
+2
-0
ndb/test/include/HugoOperations.hpp
ndb/test/include/HugoOperations.hpp
+14
-0
ndb/test/ndbapi/testBackup.cpp
ndb/test/ndbapi/testBackup.cpp
+64
-0
ndb/test/ndbapi/testNdbApi.cpp
ndb/test/ndbapi/testNdbApi.cpp
+70
-221
ndb/test/run-test/daily-basic-tests.txt
ndb/test/run-test/daily-basic-tests.txt
+4
-0
ndb/test/run-test/ndb-autotest.sh
ndb/test/run-test/ndb-autotest.sh
+3
-3
ndb/test/src/HugoOperations.cpp
ndb/test/src/HugoOperations.cpp
+87
-4
ndb/tools/drop_index.cpp
ndb/tools/drop_index.cpp
+4
-4
ndb/tools/listTables.cpp
ndb/tools/listTables.cpp
+3
-0
No files found.
ndb/include/kernel/signaldata/AlterTable.hpp
View file @
46c627f3
...
...
@@ -128,7 +128,8 @@ public:
RecordTooBig
=
738
,
InvalidPrimaryKeySize
=
739
,
NullablePrimaryKey
=
740
,
UnsupportedChange
=
741
UnsupportedChange
=
741
,
BackupInProgress
=
762
};
private:
...
...
ndb/include/kernel/signaldata/DictTabInfo.hpp
View file @
46c627f3
...
...
@@ -209,6 +209,7 @@ public:
StateBuilding
=
2
,
StateDropping
=
3
,
StateOnline
=
4
,
StateBackup
=
5
,
StateBroken
=
9
};
...
...
ndb/include/kernel/signaldata/DropTable.hpp
View file @
46c627f3
...
...
@@ -57,7 +57,8 @@ public:
NoSuchTable
=
709
,
InvalidTableVersion
=
241
,
DropInProgress
=
283
,
NoDropTableRecordAvailable
=
1229
NoDropTableRecordAvailable
=
1229
,
BackupInProgress
=
761
};
};
...
...
ndb/include/ndbapi/NdbDictionary.hpp
View file @
46c627f3
...
...
@@ -118,6 +118,7 @@ public:
StateBuilding
=
2
,
///< Building, not yet usable
StateDropping
=
3
,
///< Offlining or dropping, not usable
StateOnline
=
4
,
///< Online, usable
StateBackup
=
5
,
///< Online, being backuped, usable
StateBroken
=
9
///< Broken, should be dropped and re-created
};
...
...
ndb/src/kernel/blocks/backup/Backup.cpp
View file @
46c627f3
...
...
@@ -921,7 +921,6 @@ Backup::execUTIL_SEQUENCE_REF(Signal* signal)
jamEntry
();
UtilSequenceRef
*
utilRef
=
(
UtilSequenceRef
*
)
signal
->
getDataPtr
();
ptr
.
i
=
utilRef
->
senderData
;
ndbrequire
(
ptr
.
i
==
RNIL
);
c_backupPool
.
getPtr
(
ptr
);
ndbrequire
(
ptr
.
p
->
masterData
.
gsn
==
GSN_UTIL_SEQUENCE_REQ
);
sendBackupRef
(
signal
,
ptr
,
BackupRef
::
SequenceFailure
);
...
...
@@ -2418,10 +2417,16 @@ Backup::execLIST_TABLES_CONF(Signal* signal)
jam
();
Uint32
tableId
=
ListTablesConf
::
getTableId
(
conf
->
tableData
[
i
]);
Uint32
tableType
=
ListTablesConf
::
getTableType
(
conf
->
tableData
[
i
]);
Uint32
state
=
ListTablesConf
::
getTableState
(
conf
->
tableData
[
i
]);
if
(
!
DictTabInfo
::
isTable
(
tableType
)
&&
!
DictTabInfo
::
isIndex
(
tableType
)){
jam
();
continue
;
}
//if
if
(
state
!=
DictTabInfo
::
StateOnline
)
{
jam
();
continue
;
}
//if
TablePtr
tabPtr
;
ptr
.
p
->
tables
.
seize
(
tabPtr
);
if
(
tabPtr
.
i
==
RNIL
)
{
...
...
@@ -2791,10 +2796,19 @@ Backup::execGET_TABINFO_CONF(Signal* signal)
TablePtr
tmp
=
tabPtr
;
ptr
.
p
->
tables
.
next
(
tabPtr
);
if
(
DictTabInfo
::
isIndex
(
tmp
.
p
->
tableType
)){
if
(
DictTabInfo
::
isIndex
(
tmp
.
p
->
tableType
))
{
jam
();
ptr
.
p
->
tables
.
release
(
tmp
);
}
else
{
jam
();
signal
->
theData
[
0
]
=
tmp
.
p
->
tableId
;
signal
->
theData
[
1
]
=
1
;
// lock
EXECUTE_DIRECT
(
DBDICT
,
GSN_BACKUP_FRAGMENT_REQ
,
signal
,
2
);
}
if
(
tabPtr
.
i
==
RNIL
)
{
jam
();
...
...
@@ -3575,7 +3589,7 @@ Backup::backupFragmentRef(Signal * signal, BackupFilePtr filePtr)
ref
->
backupId
=
ptr
.
p
->
backupId
;
ref
->
backupPtr
=
ptr
.
i
;
ref
->
nodeId
=
getOwnNodeId
();
ref
->
errorCode
=
p
tr
.
p
->
errorCode
;
ref
->
errorCode
=
fileP
tr
.
p
->
errorCode
;
sendSignal
(
ptr
.
p
->
masterRef
,
GSN_BACKUP_FRAGMENT_REF
,
signal
,
BackupFragmentRef
::
SignalLength
,
JBB
);
}
...
...
@@ -3836,6 +3850,8 @@ Backup::execTRIG_ATTRINFO(Signal* signal) {
!
buf
.
getWritePtr
(
&
dst
,
trigPtr
.
p
->
maxRecordSize
))
{
jam
();
Uint32
save
[
TrigAttrInfo
::
StaticLength
];
memcpy
(
save
,
signal
->
getDataPtr
(),
4
*
TrigAttrInfo
::
StaticLength
);
BackupRecordPtr
ptr
;
c_backupPool
.
getPtr
(
ptr
,
trigPtr
.
p
->
backupPtr
);
trigPtr
.
p
->
errorCode
=
AbortBackupOrd
::
LogBufferFull
;
...
...
@@ -3846,6 +3862,8 @@ Backup::execTRIG_ATTRINFO(Signal* signal) {
ord
->
senderData
=
ptr
.
i
;
sendSignal
(
ptr
.
p
->
masterRef
,
GSN_ABORT_BACKUP_ORD
,
signal
,
AbortBackupOrd
::
SignalLength
,
JBB
);
memcpy
(
signal
->
getDataPtrSend
(),
save
,
4
*
TrigAttrInfo
::
StaticLength
);
return
;
}
//if
...
...
@@ -3995,6 +4013,17 @@ Backup::execSTOP_BACKUP_REQ(Signal* signal)
gcp
->
StopGCP
=
htonl
(
stopGCP
-
1
);
filePtr
.
p
->
operation
.
dataBuffer
.
updateWritePtr
(
gcpSz
);
}
{
TablePtr
tabPtr
;
for
(
ptr
.
p
->
tables
.
first
(
tabPtr
);
tabPtr
.
i
!=
RNIL
;
ptr
.
p
->
tables
.
next
(
tabPtr
))
{
signal
->
theData
[
0
]
=
tabPtr
.
p
->
tableId
;
signal
->
theData
[
1
]
=
0
;
// unlock
EXECUTE_DIRECT
(
DBDICT
,
GSN_BACKUP_FRAGMENT_REQ
,
signal
,
2
);
}
}
closeFiles
(
signal
,
ptr
);
}
...
...
@@ -4338,6 +4367,11 @@ Backup::cleanup(Signal* signal, BackupRecordPtr ptr)
}
//if
tabPtr
.
p
->
triggerIds
[
j
]
=
ILLEGAL_TRIGGER_ID
;
}
//for
{
signal
->
theData
[
0
]
=
tabPtr
.
p
->
tableId
;
signal
->
theData
[
1
]
=
0
;
// unlock
EXECUTE_DIRECT
(
DBDICT
,
GSN_BACKUP_FRAGMENT_REQ
,
signal
,
2
);
}
}
//for
BackupFilePtr
filePtr
;
...
...
@@ -4352,9 +4386,6 @@ Backup::cleanup(Signal* signal, BackupRecordPtr ptr)
}
//for
ptr
.
p
->
files
.
release
();
ptr
.
p
->
tables
.
release
();
ptr
.
p
->
triggers
.
release
();
ptr
.
p
->
tables
.
release
();
ptr
.
p
->
triggers
.
release
();
ptr
.
p
->
pages
.
release
();
...
...
ndb/src/kernel/blocks/dbacc/DbaccMain.cpp
View file @
46c627f3
...
...
@@ -6198,7 +6198,24 @@ Uint32 Dbacc::executeNextOperation(Signal* signal)
sendSignal
(
operationRecPtr
.
p
->
userblockref
,
GSN_ACCKEYREF
,
signal
,
2
,
JBB
);
return
operationRecPtr
.
p
->
elementIsDisappeared
;
}
//if
}
//if
}
else
if
(
operationRecPtr
.
p
->
operation
==
ZWRITE
)
{
jam
();
operationRecPtr
.
p
->
operation
=
ZINSERT
;
if
(
operationRecPtr
.
p
->
prevParallelQue
!=
RNIL
)
{
OperationrecPtr
prevOpPtr
;
jam
();
prevOpPtr
.
i
=
operationRecPtr
.
p
->
prevParallelQue
;
ptrCheckGuard
(
prevOpPtr
,
coprecsize
,
operationrec
);
if
(
prevOpPtr
.
p
->
operation
!=
ZDELETE
)
{
jam
();
operationRecPtr
.
p
->
operation
=
ZUPDATE
;
}
}
}
if
(
operationRecPtr
.
p
->
operation
==
ZSCAN_OP
&&
!
operationRecPtr
.
p
->
isAccLockReq
)
{
jam
();
...
...
ndb/src/kernel/blocks/dbdict/Dbdict.cpp
View file @
46c627f3
This diff is collapsed.
Click to expand it.
ndb/src/kernel/blocks/dbdict/Dbdict.hpp
View file @
46c627f3
...
...
@@ -149,8 +149,6 @@ public:
/** Pointer to last attribute in table */
Uint32
lastAttribute
;
/* Temporary record used during add/drop table */
Uint32
myConnect
;
#ifdef HAVE_TABLE_REORG
/* Second table used by this table (for table reorg) */
Uint32
secondTable
;
...
...
@@ -174,7 +172,8 @@ public:
CHECKED
=
3
,
DEFINED
=
4
,
PREPARE_DROPPING
=
5
,
DROPPING
=
6
DROPPING
=
6
,
BACKUP_ONGOING
=
7
};
TabState
tabState
;
...
...
@@ -502,6 +501,8 @@ private:
void
execBUILDINDXCONF
(
Signal
*
signal
);
void
execBUILDINDXREF
(
Signal
*
signal
);
void
execBACKUP_FRAGMENT_REQ
(
Signal
*
);
// Util signals used by Event code
void
execUTIL_PREPARE_CONF
(
Signal
*
signal
);
void
execUTIL_PREPARE_REF
(
Signal
*
signal
);
...
...
@@ -894,6 +895,8 @@ private:
Uint32
m_errorCode
;
void
setErrorCode
(
Uint32
c
){
if
(
m_errorCode
==
0
)
m_errorCode
=
c
;}
MutexHandle2
<
BACKUP_DEFINE_MUTEX
>
m_define_backup_mutex
;
/**
* When sending stuff around
...
...
@@ -1908,6 +1911,7 @@ private:
bool
getIsFailed
(
Uint32
nodeId
)
const
;
void
dropTable_backup_mutex_locked
(
Signal
*
signal
,
Uint32
,
Uint32
);
void
dropTableRef
(
Signal
*
signal
,
DropTableReq
*
,
DropTableRef
::
ErrorCode
);
void
printTables
();
// For debugging only
int
handleAlterTab
(
AlterTabReq
*
req
,
...
...
@@ -1918,6 +1922,7 @@ private:
Uint32
changeMask
,
Uint32
tableId
,
CreateTableRecord
*
regAlterTabPtr
);
void
alterTable_backup_mutex_locked
(
Signal
*
signal
,
Uint32
,
Uint32
);
void
alterTableRef
(
Signal
*
signal
,
AlterTableReq
*
,
AlterTableRef
::
ErrorCode
,
ParseDictTabInfoRecord
*
parseRecord
=
NULL
);
...
...
ndb/src/kernel/blocks/ndbfs/AsyncFile.cpp
View file @
46c627f3
...
...
@@ -226,7 +226,9 @@ AsyncFile::run()
abort
();
break
;
}
//switch
theReportTo
->
writeChannel
(
request
);
// No need to signal as ndbfs only uses tryRead
theReportTo
->
writeChannelNoSignal
(
request
);
}
//while
}
//AsyncFile::run()
...
...
ndb/src/kernel/blocks/ndbfs/MemoryChannel.hpp
View file @
46c627f3
...
...
@@ -84,7 +84,8 @@ public:
MemoryChannel
(
int
size
=
256
);
virtual
~
MemoryChannel
(
);
virtual
void
writeChannel
(
T
*
t
);
void
writeChannel
(
T
*
t
);
void
writeChannelNoSignal
(
T
*
t
);
T
*
readChannel
();
T
*
tryReadChannel
();
...
...
@@ -127,6 +128,15 @@ template <class T> void MemoryChannel<T>::writeChannel( T *t)
NdbCondition_Signal
(
theConditionPtr
);
}
template
<
class
T
>
void
MemoryChannel
<
T
>::
writeChannelNoSignal
(
T
*
t
)
{
NdbMutex_Lock
(
theMutexPtr
);
if
(
full
(
theWriteIndex
,
theReadIndex
)
||
theChannel
==
NULL
)
abort
();
theChannel
[
theWriteIndex
]
=
t
;
++
theWriteIndex
;
NdbMutex_Unlock
(
theMutexPtr
);
}
template
<
class
T
>
T
*
MemoryChannel
<
T
>::
readChannel
()
{
...
...
@@ -149,8 +159,6 @@ template <class T> T* MemoryChannel<T>::tryReadChannel()
{
T
*
tmp
=
0
;
NdbMutex_Lock
(
theMutexPtr
);
NdbCondition_WaitTimeout
(
theConditionPtr
,
theMutexPtr
,
0
);
if
(
!
empty
(
theWriteIndex
,
theReadIndex
)
)
{
tmp
=
theChannel
[
theReadIndex
];
...
...
ndb/src/ndbapi/NdbDictionaryImpl.cpp
View file @
46c627f3
...
...
@@ -1150,6 +1150,7 @@ objectStateMapping[] = {
{
DictTabInfo
::
StateBuilding
,
NdbDictionary
::
Object
::
StateBuilding
},
{
DictTabInfo
::
StateDropping
,
NdbDictionary
::
Object
::
StateDropping
},
{
DictTabInfo
::
StateOnline
,
NdbDictionary
::
Object
::
StateOnline
},
{
DictTabInfo
::
StateBackup
,
NdbDictionary
::
Object
::
StateBackup
},
{
DictTabInfo
::
StateBroken
,
NdbDictionary
::
Object
::
StateBroken
},
{
-
1
,
-
1
}
};
...
...
ndb/src/ndbapi/ndberror.c
View file @
46c627f3
...
...
@@ -312,6 +312,8 @@ ErrorBundle ErrorCodes[] = {
{
742
,
SE
,
"Unsupported attribute type in index"
},
{
743
,
SE
,
"Unsupported character set in table or index"
},
{
744
,
SE
,
"Character string is invalid for given character set"
},
{
761
,
SE
,
"Unable to drop table as backup is in progress"
},
{
762
,
SE
,
"Unable to alter table as backup is in progress"
},
{
241
,
SE
,
"Invalid schema object version"
},
{
283
,
SE
,
"Table is being dropped"
},
{
284
,
SE
,
"Table not defined in transaction coordinator"
},
...
...
ndb/test/include/HugoOperations.hpp
View file @
46c627f3
...
...
@@ -38,6 +38,11 @@ public:
int
numRecords
=
1
,
int
updatesValue
=
0
);
int
pkWriteRecord
(
Ndb
*
,
int
recordNo
,
int
numRecords
=
1
,
int
updatesValue
=
0
);
int
pkReadRecord
(
Ndb
*
,
int
recordNo
,
int
numRecords
=
1
,
...
...
@@ -88,6 +93,10 @@ public:
NdbScanOperation
::
LM_CommittedRead
,
int
numRecords
=
1
);
int
execute_async
(
Ndb
*
,
ExecType
,
AbortOption
=
AbortOnError
);
int
wait_async
(
Ndb
*
,
int
timeout
=
-
1
);
protected:
void
allocRows
(
int
rows
);
void
deallocRows
();
...
...
@@ -102,6 +111,11 @@ protected:
Vector
<
RsPair
>
m_executed_result_sets
;
NdbConnection
*
pTrans
;
int
m_async_reply
;
int
m_async_return
;
friend
void
HugoOperations_async_callback
(
int
,
NdbConnection
*
,
void
*
);
void
callback
(
int
res
,
NdbConnection
*
);
};
#endif
ndb/test/ndbapi/testBackup.cpp
View file @
46c627f3
...
...
@@ -138,6 +138,61 @@ int runBackupOne(NDBT_Context* ctx, NDBT_Step* step){
return
NDBT_OK
;
}
int
runBackupLoop
(
NDBT_Context
*
ctx
,
NDBT_Step
*
step
){
NdbBackup
backup
(
GETNDB
(
step
)
->
getNodeId
()
+
1
);
unsigned
backupId
=
0
;
int
loops
=
ctx
->
getNumLoops
();
while
(
!
ctx
->
isTestStopped
()
&&
loops
--
)
{
if
(
backup
.
start
(
backupId
)
==
-
1
)
{
sleep
(
1
);
loops
++
;
}
else
{
sleep
(
3
);
}
}
ctx
->
stopTest
();
return
NDBT_OK
;
}
int
runDDL
(
NDBT_Context
*
ctx
,
NDBT_Step
*
step
){
Ndb
*
pNdb
=
GETNDB
(
step
);
NdbDictionary
::
Dictionary
*
pDict
=
pNdb
->
getDictionary
();
const
int
tables
=
NDBT_Tables
::
getNumTables
();
while
(
!
ctx
->
isTestStopped
())
{
const
int
tab_no
=
rand
()
%
(
tables
);
NdbDictionary
::
Table
tab
=
*
NDBT_Tables
::
getTable
(
tab_no
);
BaseString
name
=
tab
.
getName
();
name
.
appfmt
(
"-%d"
,
step
->
getStepNo
());
tab
.
setName
(
name
.
c_str
());
if
(
pDict
->
createTable
(
tab
)
==
0
)
{
HugoTransactions
hugoTrans
(
*
pDict
->
getTable
(
name
.
c_str
()));
if
(
hugoTrans
.
loadTable
(
pNdb
,
10000
)
!=
0
){
return
NDBT_FAILED
;
}
while
(
pDict
->
dropTable
(
tab
.
getName
())
!=
0
&&
pDict
->
getNdbError
().
code
!=
4009
)
g_err
<<
pDict
->
getNdbError
()
<<
endl
;
sleep
(
1
);
}
}
return
NDBT_OK
;
}
int
runRestartInitial
(
NDBT_Context
*
ctx
,
NDBT_Step
*
step
){
NdbRestarter
restarter
;
...
...
@@ -417,6 +472,15 @@ TESTCASE("BackupOne",
VERIFIER
(
runVerifyOne
);
FINALIZER
(
runClearTable
);
}
TESTCASE
(
"BackupDDL"
,
"Test that backup and restore works on with DDL ongoing
\n
"
"1. Backups and DDL (create,drop,table.index)"
){
INITIALIZER
(
runLoadTable
);
STEP
(
runBackupLoop
);
STEP
(
runDDL
);
STEP
(
runDDL
);
FINALIZER
(
runClearTable
);
}
TESTCASE
(
"BackupBank"
,
"Test that backup and restore works during transaction load
\n
"
" by backing up the bank"
...
...
ndb/test/ndbapi/testNdbApi.cpp
View file @
46c627f3
...
...
@@ -1049,6 +1049,8 @@ int runCheckGetNdbErrorOperation(NDBT_Context* ctx, NDBT_Step* step){
return
result
;
}
#define C2(x) { int _x= (x); if(_x == 0) return NDBT_FAILED; }
int
runBug_11133
(
NDBT_Context
*
ctx
,
NDBT_Step
*
step
){
int
result
=
NDBT_OK
;
const
NdbDictionary
::
Table
*
pTab
=
ctx
->
getTab
();
...
...
@@ -1056,228 +1058,76 @@ int runBug_11133(NDBT_Context* ctx, NDBT_Step* step){
HugoOperations
hugoOps
(
*
pTab
);
Ndb
*
pNdb
=
GETNDB
(
step
);
Uint32
lm
;
NdbConnection
*
pCon
=
pNdb
->
startTransaction
();
if
(
pCon
==
NULL
){
pNdb
->
closeTransaction
(
pCon
);
return
NDBT_FAILED
;
}
NdbOperation
*
pOp
=
pCon
->
getNdbOperation
(
pTab
->
getName
());
if
(
pOp
==
NULL
){
ERR
(
pCon
->
getNdbError
());
pNdb
->
closeTransaction
(
pCon
);
return
NDBT_FAILED
;
}
if
(
pOp
->
readTuple
(
NdbOperation
::
LM_Exclusive
)
!=
0
){
pNdb
->
closeTransaction
(
pCon
);
ERR
(
pOp
->
getNdbError
());
return
NDBT_FAILED
;
}
for
(
int
a
=
0
;
a
<
pTab
->
getNoOfColumns
();
a
++
){
if
(
pTab
->
getColumn
(
a
)
->
getPrimaryKey
()
==
true
){
if
(
hugoOps
.
equalForAttr
(
pOp
,
a
,
1
)
!=
0
){
ERR
(
pCon
->
getNdbError
());
pNdb
->
closeTransaction
(
pCon
);
return
NDBT_FAILED
;
}
}
}
for
(
int
a
=
0
;
a
<
pTab
->
getNoOfColumns
();
a
++
){
if
(
pTab
->
getColumn
(
a
)
->
getPrimaryKey
()
!=
true
){
if
(
pOp
->
getValue
(
pTab
->
getColumn
(
a
)
->
getName
())
==
NULL
)
{
ERR
(
pCon
->
getNdbError
());
pNdb
->
closeTransaction
(
pCon
);
return
NDBT_FAILED
;
}
}
}
int
check
=
pCon
->
execute
(
NoCommit
);
if
(
check
==
0
){
ndbout
<<
"execute worked"
<<
endl
;
}
else
{
ERR
(
pCon
->
getNdbError
());
result
=
NDBT_FAILED
;
}
pOp
=
pCon
->
getNdbOperation
(
pTab
->
getName
());
if
(
pOp
==
NULL
){
ERR
(
pCon
->
getNdbError
());
pNdb
->
closeTransaction
(
pCon
);
return
NDBT_FAILED
;
}
if
(
pOp
->
deleteTuple
()
!=
0
){
pNdb
->
closeTransaction
(
pCon
);
ERR
(
pOp
->
getNdbError
());
return
NDBT_FAILED
;
}
for
(
int
a
=
0
;
a
<
pTab
->
getNoOfColumns
();
a
++
){
if
(
pTab
->
getColumn
(
a
)
->
getPrimaryKey
()
==
true
){
if
(
hugoOps
.
equalForAttr
(
pOp
,
a
,
1
)
!=
0
){
ERR
(
pCon
->
getNdbError
());
pNdb
->
closeTransaction
(
pCon
);
return
NDBT_FAILED
;
}
}
}
check
=
pCon
->
execute
(
NoCommit
);
if
(
check
==
0
){
ndbout
<<
"execute worked"
<<
endl
;
}
else
{
ERR
(
pCon
->
getNdbError
());
result
=
NDBT_FAILED
;
}
pOp
=
pCon
->
getNdbOperation
(
pTab
->
getName
());
if
(
pOp
==
NULL
){
ERR
(
pCon
->
getNdbError
());
pNdb
->
closeTransaction
(
pCon
);
return
NDBT_FAILED
;
}
if
(
pOp
->
writeTuple
()
!=
0
){
pNdb
->
closeTransaction
(
pCon
);
ERR
(
pOp
->
getNdbError
());
return
NDBT_FAILED
;
}
for
(
int
a
=
0
;
a
<
pTab
->
getNoOfColumns
();
a
++
){
if
(
pTab
->
getColumn
(
a
)
->
getPrimaryKey
()
==
true
){
if
(
hugoOps
.
equalForAttr
(
pOp
,
a
,
1
)
!=
0
){
ERR
(
pCon
->
getNdbError
());
pNdb
->
closeTransaction
(
pCon
);
return
NDBT_FAILED
;
}
}
}
for
(
int
a
=
0
;
a
<
pTab
->
getNoOfColumns
();
a
++
){
if
(
pTab
->
getColumn
(
a
)
->
getPrimaryKey
()
!=
true
){
if
(
hugoOps
.
setValueForAttr
(
pOp
,
a
,
1
,
1
)
!=
0
)
{
ERR
(
pCon
->
getNdbError
());
pNdb
->
closeTransaction
(
pCon
);
return
NDBT_FAILED
;
}
}
}
check
=
pCon
->
execute
(
NoCommit
);
if
(
check
==
0
){
ndbout
<<
"execute worked"
<<
endl
;
}
else
{
ERR
(
pCon
->
getNdbError
());
result
=
NDBT_FAILED
;
}
pOp
=
pCon
->
getNdbOperation
(
pTab
->
getName
());
if
(
pOp
==
NULL
){
ERR
(
pCon
->
getNdbError
());
pNdb
->
closeTransaction
(
pCon
);
return
NDBT_FAILED
;
}
if
(
pOp
->
writeTuple
()
!=
0
){
pNdb
->
closeTransaction
(
pCon
);
ERR
(
pOp
->
getNdbError
());
return
NDBT_FAILED
;
}
for
(
int
a
=
0
;
a
<
pTab
->
getNoOfColumns
();
a
++
){
if
(
pTab
->
getColumn
(
a
)
->
getPrimaryKey
()
==
true
){
if
(
hugoOps
.
equalForAttr
(
pOp
,
a
,
1
)
!=
0
){
ERR
(
pCon
->
getNdbError
());
pNdb
->
closeTransaction
(
pCon
);
return
NDBT_FAILED
;
}
}
}
for
(
int
a
=
0
;
a
<
pTab
->
getNoOfColumns
();
a
++
){
if
(
pTab
->
getColumn
(
a
)
->
getPrimaryKey
()
!=
true
){
if
(
hugoOps
.
setValueForAttr
(
pOp
,
a
,
1
,
1
)
!=
0
)
{
ERR
(
pCon
->
getNdbError
());
pNdb
->
closeTransaction
(
pCon
);
return
NDBT_FAILED
;
}
}
}
check
=
pCon
->
execute
(
NoCommit
);
if
(
check
==
0
){
ndbout
<<
"execute worked"
<<
endl
;
}
else
{
ERR
(
pCon
->
getNdbError
());
result
=
NDBT_FAILED
;
}
check
=
pCon
->
execute
(
Rollback
);
if
(
check
==
0
){
ndbout
<<
"execute worked"
<<
endl
;
}
else
{
ERR
(
pCon
->
getNdbError
());
result
=
NDBT_FAILED
;
}
pCon
->
close
();
C2
(
hugoOps
.
startTransaction
(
pNdb
)
==
0
);
C2
(
hugoOps
.
pkInsertRecord
(
pNdb
,
0
,
1
)
==
0
);
C2
(
hugoOps
.
execute_NoCommit
(
pNdb
)
==
0
);
C2
(
hugoOps
.
pkDeleteRecord
(
pNdb
,
0
,
1
)
==
0
);
C2
(
hugoOps
.
execute_NoCommit
(
pNdb
)
==
0
);
C2
(
hugoOps
.
pkWriteRecord
(
pNdb
,
0
,
1
)
==
0
);
C2
(
hugoOps
.
execute_NoCommit
(
pNdb
)
==
0
);
C2
(
hugoOps
.
pkWriteRecord
(
pNdb
,
0
,
1
)
==
0
);
C2
(
hugoOps
.
execute_NoCommit
(
pNdb
)
==
0
);
C2
(
hugoOps
.
pkDeleteRecord
(
pNdb
,
0
,
1
)
==
0
);
C2
(
hugoOps
.
execute_Commit
(
pNdb
)
==
0
);
C2
(
hugoOps
.
closeTransaction
(
pNdb
)
==
0
);
C2
(
hugoOps
.
startTransaction
(
pNdb
)
==
0
);
C2
(
hugoOps
.
pkInsertRecord
(
pNdb
,
0
,
1
)
==
0
);
C2
(
hugoOps
.
execute_NoCommit
(
pNdb
)
==
0
);
C2
(
hugoOps
.
pkWriteRecord
(
pNdb
,
0
,
1
)
==
0
);
C2
(
hugoOps
.
execute_NoCommit
(
pNdb
)
==
0
);
C2
(
hugoOps
.
pkWriteRecord
(
pNdb
,
0
,
1
)
==
0
);
C2
(
hugoOps
.
execute_NoCommit
(
pNdb
)
==
0
);
C2
(
hugoOps
.
pkDeleteRecord
(
pNdb
,
0
,
1
)
==
0
);
C2
(
hugoOps
.
execute_Commit
(
pNdb
)
==
0
);
C2
(
hugoOps
.
closeTransaction
(
pNdb
)
==
0
);
C2
(
hugoOps
.
startTransaction
(
pNdb
)
==
0
);
C2
(
hugoOps
.
pkInsertRecord
(
pNdb
,
0
,
1
)
==
0
);
C2
(
hugoOps
.
execute_Commit
(
pNdb
)
==
0
);
C2
(
hugoOps
.
closeTransaction
(
pNdb
)
==
0
);
C2
(
hugoOps
.
startTransaction
(
pNdb
)
==
0
);
C2
(
hugoOps
.
pkReadRecord
(
pNdb
,
0
,
1
,
NdbOperation
::
LM_Exclusive
)
==
0
);
C2
(
hugoOps
.
execute_NoCommit
(
pNdb
)
==
0
);
C2
(
hugoOps
.
pkDeleteRecord
(
pNdb
,
0
,
1
)
==
0
);
C2
(
hugoOps
.
execute_NoCommit
(
pNdb
)
==
0
);
C2
(
hugoOps
.
pkWriteRecord
(
pNdb
,
0
,
1
)
==
0
);
C2
(
hugoOps
.
execute_NoCommit
(
pNdb
)
==
0
);
C2
(
hugoOps
.
pkWriteRecord
(
pNdb
,
0
,
1
)
==
0
);
C2
(
hugoOps
.
execute_NoCommit
(
pNdb
)
==
0
);
C2
(
hugoOps
.
pkDeleteRecord
(
pNdb
,
0
,
1
)
==
0
);
C2
(
hugoOps
.
execute_Commit
(
pNdb
)
==
0
);
C2
(
hugoOps
.
closeTransaction
(
pNdb
)
==
0
);
Ndb
ndb2
(
"TEST_DB"
);
C2
(
ndb2
.
init
()
==
0
);
C2
(
ndb2
.
waitUntilReady
()
==
0
);
HugoOperations
hugoOps2
(
*
pTab
);
C2
(
hugoOps
.
startTransaction
(
pNdb
)
==
0
);
C2
(
hugoOps
.
pkInsertRecord
(
pNdb
,
0
,
1
)
==
0
);
C2
(
hugoOps
.
execute_NoCommit
(
pNdb
)
==
0
);
C2
(
hugoOps2
.
startTransaction
(
&
ndb2
)
==
0
);
C2
(
hugoOps2
.
pkWriteRecord
(
&
ndb2
,
0
,
1
)
==
0
);
C2
(
hugoOps2
.
execute_async
(
&
ndb2
,
NoCommit
)
==
0
);
C2
(
hugoOps
.
execute_Commit
(
pNdb
)
==
0
);
C2
(
hugoOps2
.
wait_async
(
&
ndb2
)
==
0
);
C2
(
hugoOps
.
closeTransaction
(
pNdb
)
==
0
);
C2
(
hugoOps2
.
closeTransaction
(
&
ndb2
)
==
0
);
C2
(
hugoOps
.
startTransaction
(
pNdb
)
==
0
);
C2
(
hugoOps
.
pkDeleteRecord
(
pNdb
,
0
,
1
)
==
0
);
C2
(
hugoOps
.
execute_NoCommit
(
pNdb
)
==
0
);
C2
(
hugoOps2
.
startTransaction
(
&
ndb2
)
==
0
);
C2
(
hugoOps2
.
pkWriteRecord
(
&
ndb2
,
0
,
1
)
==
0
);
C2
(
hugoOps2
.
execute_async
(
&
ndb2
,
NoCommit
)
==
0
);
C2
(
hugoOps
.
execute_Commit
(
pNdb
)
==
0
);
C2
(
hugoOps2
.
wait_async
(
&
ndb2
)
==
0
);
C2
(
hugoOps
.
closeTransaction
(
pNdb
)
==
0
);
C2
(
hugoOps2
.
closeTransaction
(
&
ndb2
)
==
0
);
pCon
=
pNdb
->
startTransaction
();
if
(
pCon
==
NULL
){
pNdb
->
closeTransaction
(
pCon
);
return
NDBT_FAILED
;
}
pOp
=
pCon
->
getNdbOperation
(
pTab
->
getName
());
if
(
pOp
==
NULL
){
ERR
(
pCon
->
getNdbError
());
pNdb
->
closeTransaction
(
pCon
);
return
NDBT_FAILED
;
}
if
(
pOp
->
writeTuple
()
!=
0
){
pNdb
->
closeTransaction
(
pCon
);
ERR
(
pOp
->
getNdbError
());
return
NDBT_FAILED
;
}
for
(
int
a
=
0
;
a
<
pTab
->
getNoOfColumns
();
a
++
){
if
(
pTab
->
getColumn
(
a
)
->
getPrimaryKey
()
==
true
){
if
(
hugoOps
.
equalForAttr
(
pOp
,
a
,
1
)
!=
0
){
ERR
(
pCon
->
getNdbError
());
pNdb
->
closeTransaction
(
pCon
);
return
NDBT_FAILED
;
}
}
}
for
(
int
a
=
0
;
a
<
pTab
->
getNoOfColumns
();
a
++
){
if
(
pTab
->
getColumn
(
a
)
->
getPrimaryKey
()
!=
true
){
if
(
hugoOps
.
setValueForAttr
(
pOp
,
a
,
1
,
1
)
!=
0
)
{
ERR
(
pCon
->
getNdbError
());
pNdb
->
closeTransaction
(
pCon
);
return
NDBT_FAILED
;
}
}
}
check
=
pCon
->
execute
(
Commit
);
if
(
check
==
0
){
ndbout
<<
"execute worked"
<<
endl
;
}
else
{
ERR
(
pCon
->
getNdbError
());
result
=
NDBT_FAILED
;
}
return
result
;
}
...
...
@@ -1359,7 +1209,6 @@ TESTCASE("ReadWithoutGetValue",
}
TESTCASE
(
"Bug_11133"
,
"Test ReadEx-Delete-Write
\n
"
){
INITIALIZER
(
runLoadTable
);
INITIALIZER
(
runBug_11133
);
FINALIZER
(
runClearTable
);
}
...
...
ndb/test/run-test/daily-basic-tests.txt
View file @
46c627f3
...
...
@@ -54,6 +54,10 @@ max-time: 600
cmd: atrt-testBackup
args: -n BackupOne T1 T6 T3 I3
max-time: 600
cmd: atrt-testBackup
args: -n BackupDDL T1
# BASIC FUNCTIONALITY
max-time: 500
cmd: testBasic
...
...
ndb/test/run-test/ndb-autotest.sh
View file @
46c627f3
...
...
@@ -84,7 +84,7 @@ fi
for
i
in
$vars
do
t
=
`
echo echo
\\
$$
i
`
if
[
-z
`
eval
$t
`
]
if
[
-z
"
`
eval
$t
`
"
]
then
echo
"Invalid config:
$conf
, variable
$i
is not set"
exit
...
...
@@ -301,8 +301,8 @@ choose_conf(){
echo
"
$test_dir
/conf-
$1
.txt"
else
echo
"Unable to find conf file looked for"
1>&2
echo
"
$testdir
/conf-
$1
-
$HOST
.txt and"
1>&2
echo
"
$testdir
/conf-
$1
.txt"
1>&2
echo
"
$test
_
dir
/conf-
$1
-
$HOST
.txt and"
1>&2
echo
"
$test
_
dir
/conf-
$1
.txt"
1>&2
exit
fi
}
...
...
ndb/test/src/HugoOperations.cpp
View file @
46c627f3
...
...
@@ -16,7 +16,6 @@
#include <HugoOperations.hpp>
int
HugoOperations
::
startTransaction
(
Ndb
*
pNdb
){
if
(
pTrans
!=
NULL
){
...
...
@@ -199,6 +198,48 @@ int HugoOperations::pkInsertRecord(Ndb* pNdb,
return
NDBT_OK
;
}
int
HugoOperations
::
pkWriteRecord
(
Ndb
*
pNdb
,
int
recordNo
,
int
numRecords
,
int
updatesValue
){
int
a
,
check
;
for
(
int
r
=
0
;
r
<
numRecords
;
r
++
){
NdbOperation
*
pOp
=
pTrans
->
getNdbOperation
(
tab
.
getName
());
if
(
pOp
==
NULL
)
{
ERR
(
pTrans
->
getNdbError
());
return
NDBT_FAILED
;
}
check
=
pOp
->
writeTuple
();
if
(
check
==
-
1
)
{
ERR
(
pTrans
->
getNdbError
());
return
NDBT_FAILED
;
}
// Define primary keys
for
(
a
=
0
;
a
<
tab
.
getNoOfColumns
();
a
++
){
if
(
tab
.
getColumn
(
a
)
->
getPrimaryKey
()
==
true
){
if
(
equalForAttr
(
pOp
,
a
,
r
+
recordNo
)
!=
0
){
ERR
(
pTrans
->
getNdbError
());
return
NDBT_FAILED
;
}
}
}
// Define attributes to update
for
(
a
=
0
;
a
<
tab
.
getNoOfColumns
();
a
++
){
if
(
tab
.
getColumn
(
a
)
->
getPrimaryKey
()
==
false
){
if
(
setValueForAttr
(
pOp
,
a
,
recordNo
+
r
,
updatesValue
)
!=
0
){
ERR
(
pTrans
->
getNdbError
());
return
NDBT_FAILED
;
}
}
}
}
return
NDBT_OK
;
}
int
HugoOperations
::
pkDeleteRecord
(
Ndb
*
pNdb
,
int
recordNo
,
int
numRecords
){
...
...
@@ -399,16 +440,58 @@ int HugoOperations::execute_Rollback(Ndb* pNdb){
return
NDBT_OK
;
}
void
HugoOperations_async_callback
(
int
res
,
NdbConnection
*
pCon
,
void
*
ho
)
{
((
HugoOperations
*
)
ho
)
->
callback
(
res
,
pCon
);
}
void
HugoOperations
::
callback
(
int
res
,
NdbConnection
*
pCon
)
{
assert
(
pCon
==
pTrans
);
m_async_reply
=
1
;
m_async_return
=
res
;
}
int
HugoOperations
::
execute_async
(
Ndb
*
pNdb
,
ExecType
et
,
AbortOption
eao
){
m_async_reply
=
0
;
pTrans
->
executeAsynchPrepare
(
et
,
HugoOperations_async_callback
,
this
,
eao
);
pNdb
->
sendPreparedTransactions
();
return
NDBT_OK
;
}
int
HugoOperations
::
wait_async
(
Ndb
*
pNdb
,
int
timeout
)
{
pNdb
->
pollNdb
(
1000
);
if
(
m_async_reply
)
{
return
m_async_return
;
}
ndbout_c
(
"wait returned nothing..."
);
return
-
1
;
}
HugoOperations
::
HugoOperations
(
const
NdbDictionary
::
Table
&
_tab
)
:
UtilTransactions
(
_tab
),
calc
(
_tab
),
pTrans
(
NULL
)
{
pTrans
(
NULL
)
{
}
HugoOperations
::~
HugoOperations
(){
deallocRows
();
if
(
pTrans
!=
NULL
){
if
(
pTrans
!=
NULL
)
{
pTrans
->
close
();
pTrans
=
NULL
;
}
...
...
ndb/tools/drop_index.cpp
View file @
46c627f3
...
...
@@ -35,7 +35,7 @@ static struct my_option my_long_options[] =
static
void
usage
()
{
char
desc
[]
=
"
<indexname>
+
\n
"
\
"
[<table> <index>]
+
\n
"
\
"This program will drop index(es) in Ndb
\n
"
;
ndb_std_print_version
();
my_print_help
(
my_long_options
);
...
...
@@ -73,10 +73,10 @@ int main(int argc, char** argv){
ndbout
<<
"Waiting for ndb to become ready..."
<<
endl
;
int
res
=
0
;
for
(
int
i
=
0
;
i
<
argc
;
i
++
){
ndbout
<<
"Dropping index "
<<
argv
[
i
]
<<
"..."
;
for
(
int
i
=
0
;
i
+
1
<
argc
;
i
+=
2
){
ndbout
<<
"Dropping index "
<<
argv
[
i
]
<<
"/"
<<
argv
[
i
+
1
]
<<
"..."
;
int
tmp
;
if
((
tmp
=
MyNdb
.
getDictionary
()
->
dropIndex
(
argv
[
i
],
0
))
!=
0
){
if
((
tmp
=
MyNdb
.
getDictionary
()
->
dropIndex
(
argv
[
i
+
1
],
argv
[
i
]
))
!=
0
){
ndbout
<<
endl
<<
MyNdb
.
getDictionary
()
->
getNdbError
()
<<
endl
;
res
=
tmp
;
}
else
{
...
...
ndb/tools/listTables.cpp
View file @
46c627f3
...
...
@@ -131,6 +131,9 @@ list(const char * tabname,
case
NdbDictionary
:
:
Object
::
StateOnline
:
strcpy
(
state
,
"Online"
);
break
;
case
NdbDictionary
:
:
Object
::
StateBackup
:
strcpy
(
state
,
"Backup"
);
break
;
case
NdbDictionary
:
:
Object
::
StateBroken
:
strcpy
(
state
,
"Broken"
);
break
;
...
...
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