⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 testoperations.cpp

📁 mysql-5.0.22.tar.gz源码包
💻 CPP
📖 第 1 页 / 共 2 页
字号:
    /**     * 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;}intrunLockUpgrade1(NDBT_Context* ctx, NDBT_Step* step){  // Verify that data in index match   // table data  Ndb* pNdb = GETNDB(step);  HugoOperations hugoOps(*ctx->getTab());  HugoTransactions hugoTrans(*ctx->getTab());  if(hugoTrans.loadTable(pNdb, 1) != 0){    g_err << "Load table failed" << endl;    return NDBT_FAILED;  }  int result= NDBT_OK;  do  {    CHECK(hugoOps.startTransaction(pNdb) == 0);      if(ctx->getProperty("LOCK_UPGRADE", 1) == 1)    {      CHECK(hugoOps.pkReadRecord(pNdb, 0, 1, NdbOperation::LM_Read) == 0);      CHECK(hugoOps.execute_NoCommit(pNdb) == 0);          ctx->setProperty("READ_DONE", 1);      ctx->broadcast();      ndbout_c("wait 2");      ctx->getPropertyWait("READ_DONE", 2);      ndbout_c("wait 2 - done");    }    else    {      ctx->setProperty("READ_DONE", 1);      ctx->broadcast();      ctx->getPropertyWait("READ_DONE", 2);      ndbout_c("wait 2 - done");      CHECK(hugoOps.pkReadRecord(pNdb, 0, 1, NdbOperation::LM_Read) == 0);      CHECK(hugoOps.execute_NoCommit(pNdb) == 0);    }    if(ctx->getProperty("LU_OP", o_INS) == o_INS)    {      CHECK(hugoOps.pkDeleteRecord(pNdb, 0, 1) == 0);      CHECK(hugoOps.pkInsertRecord(pNdb, 0, 1, 2) == 0);    }    else if(ctx->getProperty("LU_OP", o_UPD) == o_UPD)    {      CHECK(hugoOps.pkUpdateRecord(pNdb, 0, 1, 2) == 0);    }     else    {      CHECK(hugoOps.pkDeleteRecord(pNdb, 0, 1) == 0);    }    ctx->setProperty("READ_DONE", 3);    ctx->broadcast();    ndbout_c("before update");    ndbout_c("wait update");    CHECK(hugoOps.execute_Commit(pNdb) == 0);    CHECK(hugoOps.closeTransaction(pNdb) == 0);    CHECK(hugoOps.startTransaction(pNdb) == 0);    CHECK(hugoOps.pkReadRecord(pNdb, 0, 1) == 0);    int res= hugoOps.execute_Commit(pNdb);    if(ctx->getProperty("LU_OP", o_INS) == o_INS)    {      CHECK(res == 0);      CHECK(hugoOps.verifyUpdatesValue(2) == 0);    }    else if(ctx->getProperty("LU_OP", o_UPD) == o_UPD)    {      CHECK(res == 0);      CHECK(hugoOps.verifyUpdatesValue(2) == 0);    }     else    {      CHECK(res == 626);    }      } while(0);    return result;}intrunLockUpgrade2(NDBT_Context* ctx, NDBT_Step* step){  // Verify that data in index match   // table data  Ndb* pNdb = GETNDB(step);  HugoOperations hugoOps(*ctx->getTab());  HugoTransactions hugoTrans(*ctx->getTab());    int result= NDBT_OK;  do  {    CHECK(hugoOps.startTransaction(pNdb) == 0);      ndbout_c("wait 1");    ctx->getPropertyWait("READ_DONE", 1);    ndbout_c("wait 1 - done");    CHECK(hugoOps.pkReadRecord(pNdb, 0, 1, NdbOperation::LM_Read) == 0);    CHECK(hugoOps.execute_NoCommit(pNdb) == 0);    ctx->setProperty("READ_DONE", 2);    ctx->broadcast();    ndbout_c("wait 3");    ctx->getPropertyWait("READ_DONE", 3);    ndbout_c("wait 3 - done");        NdbSleep_MilliSleep(200);    if(ctx->getProperty("LU_COMMIT", (Uint32)0) == 0)    {      CHECK(hugoOps.execute_Commit(pNdb) == 0);    }    else    {      CHECK(hugoOps.execute_Rollback(pNdb) == 0);    }  } while(0);  return result;}intmain(int argc, const char** argv){  ndb_init();  Vector<int> tmp;  generate(tmp, 5);  NDBT_TestSuite ts("testOperations");  for(Uint32 i = 0; i < 12; i++)  {    if(i == 6 || i == 8 || i == 10)      continue;    BaseString name("bug_9749");    name.appfmt("_%d", i);    NDBT_TestCaseImpl1 *pt = new NDBT_TestCaseImpl1(&ts, 						    name.c_str(), "");            pt->setProperty("LOCK_UPGRADE", 1 + (i & 1));    pt->setProperty("LU_OP", 1 + ((i >> 1) % 3));    pt->setProperty("LU_COMMIT", i / 6);    pt->addInitializer(new NDBT_Initializer(pt,					    "runClearTable", 					    runClearTable));        pt->addStep(new NDBT_ParallelStep(pt, 				      "thread1",				      runLockUpgrade1));        pt->addStep(new NDBT_ParallelStep(pt, 				      "thread2",				      runLockUpgrade2));        pt->addFinalizer(new NDBT_Finalizer(pt, 					"runClearTable", 					runClearTable));    ts.addTest(pt);  }  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++){    NDBT_TestCaseImpl1 *pt = new NDBT_TestCaseImpl1(&ts, matrix[i].name, "");        pt->addInitializer(new NDBT_Initializer(pt, 					    "runClearTable", 					    runClearTable));        if(matrix[i].preCond){      pt->addInitializer(new NDBT_Initializer(pt, 					      "runInsertRecord", 					      runInsertRecord));    }        pt->setProperty("op1", matrix[i].op1);    pt->setProperty("res1", matrix[i].res1);    pt->setProperty("val1", matrix[i].val1);    pt->setProperty("op2", matrix[i].op2);    pt->setProperty("res2", matrix[i].res2);    pt->setProperty("val2", matrix[i].val2);    pt->setProperty("res3", matrix[i].res3);    pt->setProperty("val3", matrix[i].val3);    pt->addStep(new NDBT_ParallelStep(pt, 				      matrix[i].name,				      runTwoOperations));    pt->addFinalizer(new NDBT_Finalizer(pt, 					"runClearTable", 					runClearTable));        ts.addTest(pt);  }  return ts.execute(argc, argv);}template class Vector<OPS>;template class Vector<Sequence>;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -