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

📄 testsrbank.cpp

📁 mysql-5.0.22.tar.gz源码包
💻 CPP
字号:
/* Copyright (C) 2003 MySQL AB   This program is free software; you can redistribute it and/or modify   it under the terms of the GNU General Public License as published by   the Free Software Foundation; either version 2 of the License, or   (at your option) any later version.   This program is distributed in the hope that it will be useful,   but WITHOUT ANY WARRANTY; without even the implied warranty of   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the   GNU General Public License for more details.   You should have received a copy of the GNU General Public License   along with this program; if not, write to the Free Software   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */#include <NDBT.hpp>#include <NDBT_Test.hpp>#include <HugoTransactions.hpp>#include <UtilTransactions.hpp>#include <NdbBackup.hpp>#include "bank/Bank.hpp"int runCreateBank(NDBT_Context* ctx, NDBT_Step* step){  Bank bank(ctx->m_cluster_connection);  int overWriteExisting = true;  if (bank.createAndLoadBank(overWriteExisting, 10) != NDBT_OK)    return NDBT_FAILED;  return NDBT_OK;}/** * * SR 0 - normal * SR 1 - shutdown in progress * SR 2 - restart in progress */int runBankTimer(NDBT_Context* ctx, NDBT_Step* step){  int wait = 5; // Max seconds between each "day"  int yield = 1; // Loops before bank returns   ctx->incProperty("ThreadCount");  while (!ctx->isTestStopped())   {    Bank bank(ctx->m_cluster_connection);    while(!ctx->isTestStopped() && ctx->getProperty("SR") <= 1)      if(bank.performIncreaseTime(wait, yield) == NDBT_FAILED)	break;    ndbout_c("runBankTimer is stopped");    ctx->incProperty("ThreadStopped");    if(ctx->getPropertyWait("SR", (Uint32)0))      break;  }  return NDBT_OK;}int runBankTransactions(NDBT_Context* ctx, NDBT_Step* step){  int wait = 0; // Max ms between each transaction  int yield = 1; // Loops before bank returns   ctx->incProperty("ThreadCount");  while (!ctx->isTestStopped())   {    Bank bank(ctx->m_cluster_connection);    while(!ctx->isTestStopped() && ctx->getProperty("SR") <= 1)      if(bank.performTransactions(0, 1) == NDBT_FAILED)	break;        ndbout_c("runBankTransactions is stopped");    ctx->incProperty("ThreadStopped");    if(ctx->getPropertyWait("SR", (Uint32)0))      break;  }  return NDBT_OK;}int runBankGL(NDBT_Context* ctx, NDBT_Step* step){  int yield = 1; // Loops before bank returns   int result = NDBT_OK;  ctx->incProperty("ThreadCount");  while (ctx->isTestStopped() == false)   {    Bank bank(ctx->m_cluster_connection);    while(!ctx->isTestStopped() && ctx->getProperty("SR") <= 1)      if (bank.performMakeGLs(yield) != NDBT_OK)      {	if(ctx->getProperty("SR") != 0)	  break;	ndbout << "bank.performMakeGLs FAILED" << endl;	return NDBT_FAILED;      }        ndbout_c("runBankGL is stopped");    ctx->incProperty("ThreadStopped");    if(ctx->getPropertyWait("SR", (Uint32)0))      break;  }  return NDBT_OK;}int runBankSum(NDBT_Context* ctx, NDBT_Step* step){  Bank bank(ctx->m_cluster_connection);  int wait = 2000; // Max ms between each sum of accounts  int yield = 1; // Loops before bank returns   int result = NDBT_OK;  while (ctx->isTestStopped() == false) {    if (bank.performSumAccounts(wait, yield) != NDBT_OK){      ndbout << "bank.performSumAccounts FAILED" << endl;      result = NDBT_FAILED;    }  }  return result ;}#define CHECK(b) if (!(b)) { \  g_err << "ERR: "<< step->getName() \         << " failed on line " << __LINE__ << endl; \  result = NDBT_FAILED; \  continue; } int runSR(NDBT_Context* ctx, NDBT_Step* step){  int result = NDBT_OK;  int runtime = ctx->getNumLoops();  int sleeptime = ctx->getNumRecords();  NdbRestarter restarter;  bool abort = true;  int timeout = 180;  Uint32 now;  const Uint32 stop = time(0)+ runtime;  while(!ctx->isTestStopped() && ((now= time(0)) < stop) && result == NDBT_OK)  {    ndbout << " -- Sleep " << sleeptime << "s " << endl;    NdbSleep_SecSleep(sleeptime);    ndbout << " -- Shutting down " << endl;    ctx->setProperty("SR", 1);    CHECK(restarter.restartAll(false, true, abort) == 0);    ctx->setProperty("SR", 2);    CHECK(restarter.waitClusterNoStart(timeout) == 0);    Uint32 cnt = ctx->getProperty("ThreadCount");    Uint32 curr= ctx->getProperty("ThreadStopped");    while(curr != cnt)    {      ndbout_c("%d %d", curr, cnt);      NdbSleep_MilliSleep(100);      curr= ctx->getProperty("ThreadStopped");    }    ctx->setProperty("ThreadStopped", (Uint32)0);    CHECK(restarter.startAll() == 0);    CHECK(restarter.waitClusterStarted(timeout) == 0);        ndbout << " -- Validating starts " << endl;    {      int wait = 0;      int yield = 1;      Bank bank(ctx->m_cluster_connection);      if (bank.performSumAccounts(wait, yield) != 0)      {	ndbout << "bank.performSumAccounts FAILED" << endl;	return NDBT_FAILED;      }      if (bank.performValidateAllGLs() != 0)      {	ndbout << "bank.performValidateAllGLs FAILED" << endl;	return NDBT_FAILED;      }    }    ndbout << " -- Validating complete " << endl;    ctx->setProperty("SR", (Uint32)0);    ctx->broadcast();  }  ctx->stopTest();  return NDBT_OK;}int runDropBank(NDBT_Context* ctx, NDBT_Step* step){  Bank bank(ctx->m_cluster_connection);  if (bank.dropBank() != NDBT_OK)    return NDBT_FAILED;  return NDBT_OK;}NDBT_TESTSUITE(testSRBank);TESTCASE("Graceful", 	 " Test that a consistent bank is restored after graceful shutdown\n"	 "1.  Create bank\n"	 "2.  Start bank and let it run\n"	 "3.  Restart ndb and verify consistency\n"	 "4.  Drop bank\n"){  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);  STEP(runSR);}TESTCASE("Abort", 	 " Test that a consistent bank is restored after graceful shutdown\n"	 "1.  Create bank\n"	 "2.  Start bank and let it run\n"	 "3.  Restart ndb and verify consistency\n"	 "4.  Drop bank\n"){  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);  STEP(runSR);  FINALIZER(runDropBank);}NDBT_TESTSUITE_END(testSRBank);int main(int argc, const char** argv){  ndb_init();  return testSRBank.execute(argc, argv);}

⌨️ 快捷键说明

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