mirror of
https://github.com/MariaDB/server.git
synced 2025-01-18 04:53:01 +01:00
Merge tulin@bk-internal.mysql.com:/home/bk/mysql-4.1-ndb
into poseidon.(none):/home/tomas/mysql-4.1-ndb
This commit is contained in:
commit
f401d7da87
8 changed files with 109 additions and 103 deletions
|
@ -357,7 +357,7 @@ main(int argc, const char** argv)
|
|||
}
|
||||
}
|
||||
clearConsumers();
|
||||
return 1;
|
||||
return 0;
|
||||
} // main
|
||||
|
||||
template class Vector<BackupConsumer*>;
|
||||
|
|
|
@ -156,7 +156,14 @@ int Bank::performTransactionImpl1(int fromAccountId,
|
|||
|
||||
int check;
|
||||
|
||||
// Ok, all clear to do the transaction
|
||||
Uint64 transId;
|
||||
if (getNextTransactionId(transId) != NDBT_OK){
|
||||
return NDBT_FAILED;
|
||||
}
|
||||
|
||||
NdbConnection* pTrans = m_ndb.startTransaction();
|
||||
|
||||
if( pTrans == NULL ) {
|
||||
const NdbError err = m_ndb.getNdbError();
|
||||
if (err.status == NdbError::TemporaryError){
|
||||
|
@ -167,6 +174,13 @@ int Bank::performTransactionImpl1(int fromAccountId,
|
|||
return NDBT_FAILED;
|
||||
}
|
||||
|
||||
Uint64 currTime;
|
||||
if (prepareGetCurrTimeOp(pTrans, currTime) != NDBT_OK){
|
||||
ERR(pTrans->getNdbError());
|
||||
m_ndb.closeTransaction(pTrans);
|
||||
return NDBT_FAILED;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check balance on from account
|
||||
*/
|
||||
|
@ -205,29 +219,6 @@ int Bank::performTransactionImpl1(int fromAccountId,
|
|||
return NDBT_FAILED;
|
||||
}
|
||||
|
||||
check = pTrans->execute(NoCommit);
|
||||
if( check == -1 ) {
|
||||
const NdbError err = pTrans->getNdbError();
|
||||
m_ndb.closeTransaction(pTrans);
|
||||
if (err.status == NdbError::TemporaryError){
|
||||
ERR(err);
|
||||
return NDBT_TEMPORARY;
|
||||
}
|
||||
ERR(err);
|
||||
return NDBT_FAILED;
|
||||
}
|
||||
|
||||
Uint32 balanceFrom = balanceFromRec->u_32_value();
|
||||
// ndbout << "balanceFrom: " << balanceFrom << endl;
|
||||
|
||||
if (((Int64)balanceFrom - amount) < 0){
|
||||
m_ndb.closeTransaction(pTrans);
|
||||
//ndbout << "Not enough funds" << endl;
|
||||
return NOT_ENOUGH_FUNDS;
|
||||
}
|
||||
|
||||
Uint32 fromAccountType = fromAccountTypeRec->u_32_value();
|
||||
|
||||
/**
|
||||
* Read balance on to account
|
||||
*/
|
||||
|
@ -278,21 +269,22 @@ int Bank::performTransactionImpl1(int fromAccountId,
|
|||
return NDBT_FAILED;
|
||||
}
|
||||
|
||||
|
||||
Uint32 balanceFrom = balanceFromRec->u_32_value();
|
||||
// ndbout << "balanceFrom: " << balanceFrom << endl;
|
||||
|
||||
if (((Int64)balanceFrom - amount) < 0){
|
||||
m_ndb.closeTransaction(pTrans);
|
||||
//ndbout << "Not enough funds" << endl;
|
||||
return NOT_ENOUGH_FUNDS;
|
||||
}
|
||||
|
||||
Uint32 fromAccountType = fromAccountTypeRec->u_32_value();
|
||||
|
||||
Uint32 balanceTo = balanceToRec->u_32_value();
|
||||
// ndbout << "balanceTo: " << balanceTo << endl;
|
||||
Uint32 toAccountType = toAccountTypeRec->u_32_value();
|
||||
|
||||
// Ok, all clear to do the transaction
|
||||
Uint64 transId;
|
||||
if (getNextTransactionId(transId) != NDBT_OK){
|
||||
return NDBT_FAILED;
|
||||
}
|
||||
|
||||
Uint64 currTime;
|
||||
if (getCurrTime(currTime) != NDBT_OK){
|
||||
return NDBT_FAILED;
|
||||
}
|
||||
|
||||
/**
|
||||
* Update balance on from account
|
||||
*/
|
||||
|
@ -1989,29 +1981,7 @@ int Bank::readSystemValue(SystemValueId sysValId, Uint64 & value){
|
|||
return NDBT_FAILED;
|
||||
}
|
||||
|
||||
NdbOperation* pOp = pTrans->getNdbOperation("SYSTEM_VALUES");
|
||||
if (pOp == NULL) {
|
||||
ERR(pTrans->getNdbError());
|
||||
m_ndb.closeTransaction(pTrans);
|
||||
return NDBT_FAILED;
|
||||
}
|
||||
|
||||
check = pOp->readTuple();
|
||||
if( check == -1 ) {
|
||||
ERR(pTrans->getNdbError());
|
||||
m_ndb.closeTransaction(pTrans);
|
||||
return NDBT_FAILED;
|
||||
}
|
||||
|
||||
check = pOp->equal("SYSTEM_VALUES_ID", sysValId);
|
||||
if( check == -1 ) {
|
||||
ERR(pTrans->getNdbError());
|
||||
m_ndb.closeTransaction(pTrans);
|
||||
return NDBT_FAILED;
|
||||
}
|
||||
|
||||
NdbRecAttr* valueRec = pOp->getValue("VALUE");
|
||||
if( valueRec ==NULL ) {
|
||||
if (prepareReadSystemValueOp(pTrans, sysValId, value) != NDBT_OK) {
|
||||
ERR(pTrans->getNdbError());
|
||||
m_ndb.closeTransaction(pTrans);
|
||||
return NDBT_FAILED;
|
||||
|
@ -2024,13 +1994,38 @@ int Bank::readSystemValue(SystemValueId sysValId, Uint64 & value){
|
|||
return NDBT_FAILED;
|
||||
}
|
||||
|
||||
value = valueRec->u_64_value();
|
||||
|
||||
m_ndb.closeTransaction(pTrans);
|
||||
return NDBT_OK;
|
||||
|
||||
}
|
||||
|
||||
int Bank::prepareReadSystemValueOp(NdbConnection* pTrans, SystemValueId sysValId, Uint64 & value){
|
||||
|
||||
int check;
|
||||
|
||||
NdbOperation* pOp = pTrans->getNdbOperation("SYSTEM_VALUES");
|
||||
if (pOp == NULL) {
|
||||
return NDBT_FAILED;
|
||||
}
|
||||
|
||||
check = pOp->readTuple();
|
||||
if( check == -1 ) {
|
||||
return NDBT_FAILED;
|
||||
}
|
||||
|
||||
check = pOp->equal("SYSTEM_VALUES_ID", sysValId);
|
||||
if( check == -1 ) {
|
||||
return NDBT_FAILED;
|
||||
}
|
||||
|
||||
NdbRecAttr* valueRec = pOp->getValue("VALUE", (char *)&value);
|
||||
if( valueRec == NULL ) {
|
||||
return NDBT_FAILED;
|
||||
}
|
||||
|
||||
return NDBT_OK;
|
||||
}
|
||||
|
||||
int Bank::writeSystemValue(SystemValueId sysValId, Uint64 value){
|
||||
|
||||
int check;
|
||||
|
@ -2307,6 +2302,10 @@ int Bank::getCurrTime(Uint64 &time){
|
|||
return readSystemValue(CurrentTime, time);
|
||||
}
|
||||
|
||||
int Bank::prepareGetCurrTimeOp(NdbConnection *pTrans, Uint64 &time){
|
||||
return prepareReadSystemValueOp(pTrans, CurrentTime, time);
|
||||
}
|
||||
|
||||
|
||||
int Bank::performSumAccounts(int maxSleepBetweenSums, int yield){
|
||||
if (init() != NDBT_OK)
|
||||
|
|
|
@ -29,7 +29,7 @@ public:
|
|||
|
||||
Bank();
|
||||
|
||||
int createAndLoadBank(bool overWrite);
|
||||
int createAndLoadBank(bool overWrite, int num_accounts=10);
|
||||
int dropBank();
|
||||
|
||||
int performTransactions(int maxSleepBetweenTrans = 20, int yield=0);
|
||||
|
@ -118,6 +118,9 @@ private:
|
|||
int incCurrTime(Uint64 &value);
|
||||
int getCurrTime(Uint64 &time);
|
||||
|
||||
int prepareReadSystemValueOp(NdbConnection*, SystemValueId sysValId, Uint64 &time);
|
||||
int prepareGetCurrTimeOp(NdbConnection*, Uint64 &time);
|
||||
|
||||
int createTables();
|
||||
int createTable(const char* tabName);
|
||||
|
||||
|
|
|
@ -53,7 +53,7 @@ int Bank::getNumAccountTypes(){
|
|||
return accountTypesSize;
|
||||
}
|
||||
|
||||
int Bank::createAndLoadBank(bool ovrWrt){
|
||||
int Bank::createAndLoadBank(bool ovrWrt, int num_accounts){
|
||||
|
||||
m_ndb.init();
|
||||
if (m_ndb.waitUntilReady() != 0)
|
||||
|
@ -78,7 +78,7 @@ int Bank::createAndLoadBank(bool ovrWrt){
|
|||
if (loadAccountType() != NDBT_OK)
|
||||
return NDBT_FAILED;
|
||||
|
||||
if (loadAccount(10) != NDBT_OK)
|
||||
if (loadAccount(num_accounts) != NDBT_OK)
|
||||
return NDBT_FAILED;
|
||||
|
||||
if (loadSystemValues() != NDBT_OK)
|
||||
|
|
|
@ -215,7 +215,7 @@ int runDropTable(NDBT_Context* ctx, NDBT_Step* step){
|
|||
int runCreateBank(NDBT_Context* ctx, NDBT_Step* step){
|
||||
Bank bank;
|
||||
int overWriteExisting = true;
|
||||
if (bank.createAndLoadBank(overWriteExisting) != NDBT_OK)
|
||||
if (bank.createAndLoadBank(overWriteExisting, 10) != NDBT_OK)
|
||||
return NDBT_FAILED;
|
||||
return NDBT_OK;
|
||||
}
|
||||
|
@ -428,6 +428,15 @@ TESTCASE("BackupBank",
|
|||
INITIALIZER(runCreateBank);
|
||||
STEP(runBankTimer);
|
||||
STEP(runBankTransactions);
|
||||
STEP(runBankTransactions);
|
||||
STEP(runBankTransactions);
|
||||
STEP(runBankTransactions);
|
||||
STEP(runBankTransactions);
|
||||
STEP(runBankTransactions);
|
||||
STEP(runBankTransactions);
|
||||
STEP(runBankTransactions);
|
||||
STEP(runBankTransactions);
|
||||
STEP(runBankTransactions);
|
||||
STEP(runBankGL);
|
||||
// TODO STEP(runBankSum);
|
||||
STEP(runBackupBank);
|
||||
|
|
|
@ -1006,3 +1006,18 @@ max-time: 1500
|
|||
cmd: testSystemRestart
|
||||
args: -n SR2 T7
|
||||
|
||||
max-time: 1500
|
||||
cmd: testSystemRestart
|
||||
args: -n SR_UNDO T1
|
||||
|
||||
max-time: 1500
|
||||
cmd: testSystemRestart
|
||||
args: -n SR_UNDO T6
|
||||
|
||||
max-time: 1500
|
||||
cmd: testSystemRestart
|
||||
args: -n SR_UNDO T7
|
||||
|
||||
max-time: 1500
|
||||
cmd: testSystemRestart
|
||||
args: -n SR_UNDO T8
|
||||
|
|
|
@ -26,10 +26,10 @@ max-time: 600
|
|||
cmd: atrt-testBackup
|
||||
args: -n BackupOne T1 T6 T3 I3
|
||||
|
||||
#max-time: 600
|
||||
#cmd: testBackup
|
||||
#args: -n BackupBank T6
|
||||
#
|
||||
max-time: 1000
|
||||
cmd: testBackup
|
||||
args: -n BackupBank T6
|
||||
|
||||
#
|
||||
# MGMAPI AND MGSRV
|
||||
#
|
||||
|
@ -41,21 +41,6 @@ args: -n SingleUserMode T1
|
|||
#
|
||||
# SYSTEM RESTARTS
|
||||
#
|
||||
max-time: 1500
|
||||
cmd: testSystemRestart
|
||||
args: -n SR_UNDO T1
|
||||
|
||||
max-time: 1500
|
||||
cmd: testSystemRestart
|
||||
args: -n SR_UNDO T6
|
||||
|
||||
max-time: 1500
|
||||
cmd: testSystemRestart
|
||||
args: -n SR_UNDO T7
|
||||
|
||||
max-time: 1500
|
||||
cmd: testSystemRestart
|
||||
args: -n SR_UNDO T8
|
||||
|
||||
max-time: 1500
|
||||
cmd: testSystemRestart
|
||||
|
|
|
@ -140,14 +140,16 @@ NdbBackup::execRestore(bool _restore_data,
|
|||
*/
|
||||
|
||||
snprintf(buf, buf_len,
|
||||
"scp %s:%s/BACKUP/BACKUP-%d/* .",
|
||||
"scp %s:%s/BACKUP/BACKUP-%d/BACKUP-%d*.%d.* .",
|
||||
host, path,
|
||||
_backup_id);
|
||||
_backup_id,
|
||||
_backup_id,
|
||||
_node_id);
|
||||
|
||||
ndbout << "buf: "<< buf <<endl;
|
||||
int res = system(buf);
|
||||
|
||||
ndbout << "res: " << res << endl;
|
||||
ndbout << "scp res: " << res << endl;
|
||||
|
||||
snprintf(buf, 255, "%sndb_restore -c \"host=%s\" -n %d -b %d %s %s .",
|
||||
#if 1
|
||||
|
@ -164,7 +166,7 @@ NdbBackup::execRestore(bool _restore_data,
|
|||
ndbout << "buf: "<< buf <<endl;
|
||||
res = system(buf);
|
||||
|
||||
ndbout << "res: " << res << endl;
|
||||
ndbout << "ndb_restore res: " << res << endl;
|
||||
|
||||
return res;
|
||||
|
||||
|
@ -180,21 +182,14 @@ NdbBackup::restore(unsigned _backup_id){
|
|||
return -1;
|
||||
|
||||
int res;
|
||||
if ( ndbNodes.size() == 1) {
|
||||
// restore metadata and data in one call
|
||||
|
||||
// restore metadata first and data for first node
|
||||
res = execRestore(true, true, ndbNodes[0].node_id, _backup_id);
|
||||
} else {
|
||||
assert(ndbNodes.size() > 1);
|
||||
|
||||
// restore metadata first
|
||||
res = execRestore(false, true, ndbNodes[0].node_id, _backup_id);
|
||||
|
||||
|
||||
// Restore data once for each node
|
||||
for(size_t i = 0; i < ndbNodes.size(); i++){
|
||||
for(size_t i = 1; i < ndbNodes.size(); i++){
|
||||
res = execRestore(true, false, ndbNodes[i].node_id, _backup_id);
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue