Merge mronstrom@bk-internal.mysql.com:/home/bk/mysql-4.1

into mysql.com:/Users/mikron/mysql-4.1
This commit is contained in:
mronstrom@mysql.com 2004-07-19 14:18:27 +02:00
commit abb093fc4c
3 changed files with 48 additions and 20 deletions

View file

@ -34,7 +34,8 @@ public:
int records,
int batch = 512,
bool allowConstraintViolation = true,
int doSleep = 0);
int doSleep = 0,
bool oneTrans = false);
int scanReadRecords(Ndb*,
int records,
int abort = 0,

View file

@ -29,9 +29,18 @@
* delete should be visible to same transaction
*
*/
int runLoadTable2(NDBT_Context* ctx, NDBT_Step* step)
{
int records = ctx->getNumRecords();
HugoTransactions hugoTrans(*ctx->getTab());
if (hugoTrans.loadTable(GETNDB(step), records, 512, false, 0, true) != 0){
return NDBT_FAILED;
}
return NDBT_OK;
}
int runLoadTable(NDBT_Context* ctx, NDBT_Step* step){
int runLoadTable(NDBT_Context* ctx, NDBT_Step* step)
{
int records = ctx->getNumRecords();
HugoTransactions hugoTrans(*ctx->getTab());
if (hugoTrans.loadTable(GETNDB(step), records) != 0){
@ -1255,6 +1264,11 @@ TESTCASE("MassiveRollback2",
INITIALIZER(runMassiveRollback2);
FINALIZER(runClearTable2);
}
TESTCASE("MassiveTransaction",
"Test very large insert transaction"){
INITIALIZER(runLoadTable2);
FINALIZER(runClearTable2);
}
NDBT_TESTSUITE_END(testBasic);
int main(int argc, const char** argv){

View file

@ -819,12 +819,14 @@ HugoTransactions::loadTable(Ndb* pNdb,
int records,
int batch,
bool allowConstraintViolation,
int doSleep){
int doSleep,
bool oneTrans){
int check;
int retryAttempt = 0;
int retryMax = 5;
NdbConnection *pTrans;
NdbOperation *pOp;
bool first_batch = true;
const int org = batch;
const int cols = tab.getNoOfColumns();
@ -841,7 +843,7 @@ HugoTransactions::loadTable(Ndb* pNdb,
g_info << "|- Inserting records..." << endl;
for (int c=0 ; c<records ; ){
bool closeTrans;
if (retryAttempt >= retryMax){
g_info << "Record " << c << " could not be inserted, has retried "
<< retryAttempt << " times " << endl;
@ -852,6 +854,8 @@ HugoTransactions::loadTable(Ndb* pNdb,
if (doSleep > 0)
NdbSleep_MilliSleep(doSleep);
if (first_batch || !oneTrans) {
first_batch = false;
pTrans = pNdb->startTransaction();
if (pTrans == NULL) {
@ -866,6 +870,7 @@ HugoTransactions::loadTable(Ndb* pNdb,
ERR(err);
return NDBT_FAILED;
}
}
for(int b = 0; b < batch && c+b<records; b++){
@ -894,7 +899,13 @@ HugoTransactions::loadTable(Ndb* pNdb,
}
// Execute the transaction and insert the record
if (!oneTrans || (c + batch) >= records) {
closeTrans = true;
check = pTrans->execute( Commit );
} else {
closeTrans = false;
check = pTrans->execute( NoCommit );
}
if(check == -1 ) {
const NdbError err = pTrans->getNdbError();
pNdb->closeTransaction(pTrans);
@ -938,8 +949,10 @@ HugoTransactions::loadTable(Ndb* pNdb,
}
}
else{
if (closeTrans) {
pNdb->closeTransaction(pTrans);
}
}
// Step to next record
c = c+batch;