ndb - add abort flag to hugoLoad

parent ed100ff8
...@@ -34,7 +34,8 @@ public: ...@@ -34,7 +34,8 @@ public:
bool allowConstraintViolation = true, bool allowConstraintViolation = true,
int doSleep = 0, int doSleep = 0,
bool oneTrans = false, bool oneTrans = false,
int updateValue = 0); int updateValue = 0,
bool abort = false);
int scanReadRecords(Ndb*, int scanReadRecords(Ndb*,
int records, int records,
......
...@@ -519,7 +519,8 @@ HugoTransactions::loadTable(Ndb* pNdb, ...@@ -519,7 +519,8 @@ HugoTransactions::loadTable(Ndb* pNdb,
bool allowConstraintViolation, bool allowConstraintViolation,
int doSleep, int doSleep,
bool oneTrans, bool oneTrans,
int value){ int value,
bool abort){
int check, a; int check, a;
int retryAttempt = 0; int retryAttempt = 0;
int retryMax = 5; int retryMax = 5;
...@@ -585,10 +586,22 @@ HugoTransactions::loadTable(Ndb* pNdb, ...@@ -585,10 +586,22 @@ HugoTransactions::loadTable(Ndb* pNdb,
if (!oneTrans || (c + batch) >= records) { if (!oneTrans || (c + batch) >= records) {
// closeTrans = true; // closeTrans = true;
closeTrans = false; closeTrans = false;
if (!abort)
{
check = pTrans->execute( Commit ); check = pTrans->execute( Commit );
if(check != -1) if(check != -1)
m_latest_gci = pTrans->getGCI(); m_latest_gci = pTrans->getGCI();
pTrans->restart(); pTrans->restart();
}
else
{
check = pTrans->execute( NoCommit );
if (check != -1)
{
check = pTrans->execute( Rollback );
closeTransaction(pNdb);
}
}
} else { } else {
closeTrans = false; closeTrans = false;
check = pTrans->execute( NoCommit ); check = pTrans->execute( NoCommit );
......
...@@ -31,6 +31,8 @@ int main(int argc, const char** argv){ ...@@ -31,6 +31,8 @@ int main(int argc, const char** argv){
int _batch = 512; int _batch = 512;
int _loops = -1; int _loops = -1;
int _rand = 0; int _rand = 0;
int _onetrans = 0;
int _abort = 0;
const char* db = 0; const char* db = 0;
struct getargs args[] = { struct getargs args[] = {
...@@ -39,7 +41,9 @@ int main(int argc, const char** argv){ ...@@ -39,7 +41,9 @@ int main(int argc, const char** argv){
{ "loops", 'l', arg_integer, &_loops, "Number of loops", "" }, { "loops", 'l', arg_integer, &_loops, "Number of loops", "" },
{ "database", 'd', arg_string, &db, "Database", "" }, { "database", 'd', arg_string, &db, "Database", "" },
{ "usage", '?', arg_flag, &_help, "Print help", "" }, { "usage", '?', arg_flag, &_help, "Print help", "" },
{ "rnd-rows", 0, arg_flag, &_rand, "Rand number of records", "recs" } { "rnd-rows", 0, arg_flag, &_rand, "Rand number of records", "recs" },
{ "one-trans", 0, arg_flag, &_onetrans, "Insert as 1 trans", "" },
{ "abort", 0, arg_integer, &_abort, "Abort probability", "" }
}; };
int num_args = sizeof(args) / sizeof(args[0]); int num_args = sizeof(args) / sizeof(args[0]);
int optind = 0; int optind = 0;
...@@ -92,10 +96,13 @@ int main(int argc, const char** argv){ ...@@ -92,10 +96,13 @@ int main(int argc, const char** argv){
HugoTransactions hugoTrans(*pTab); HugoTransactions hugoTrans(*pTab);
loop: loop:
int rows = (_rand ? rand() % _records : _records); int rows = (_rand ? rand() % _records : _records);
int abort = (rand() % 100) < _abort ? 1 : 0;
if (abort)
ndbout << "load+abort" << endl;
if (hugoTrans.loadTable(&MyNdb, if (hugoTrans.loadTable(&MyNdb,
rows, rows,
_batch, _batch,
true, 0, false, _loops) != 0){ true, 0, _onetrans, _loops, abort) != 0){
return NDBT_ProgramExit(NDBT_FAILED); return NDBT_ProgramExit(NDBT_FAILED);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment