asyncfiletest.cpp

来自「MySQL数据库开发源码 值得一看哦」· C++ 代码 · 共 696 行 · 第 1/2 页

CPP
696
字号
}int writeSyncFile( int fileNum, int pagenum){  AsyncFile* file = openFiles[fileNum];#ifdef TESTDEBUG  ndbout << "writeFile" << fileNum <<": "<<pagenum<<", " << file->fileName().c_str() << endl;#endif  Request *request = theRequestPool->get();  request->action = Request::writeSync;  request->error = 0;  request->set(NDBFS_REF, pagenum, fileNum);  request->file = openFiles[fileNum];  // Write only one page, choose the correct page for each file using fileNum  request->par.readWrite.pages[0].buf = &WritePages[fileNum][0];  request->par.readWrite.pages[0].size = PAGESIZE;  request->par.readWrite.pages[0].offset = pagenum * PAGESIZE;  request->par.readWrite.numberOfPages = 1;    if (!forward(file,request)) {     // Something went wrong     ndbout << "Could not forward write request" << endl;     theRequestPool->put(request);     return 1;  }  return 0;}int readFile( int fileNum, int pagenum){  AsyncFile* file = openFiles[fileNum];#ifdef TESTDEBUG  ndbout << "readFile" << fileNum <<": "<<pagenum<<", " << file->fileName().c_str() << endl;#endif  Request *request = theRequestPool->get();  request->action = Request::read;  request->error = 0;  request->set(NDBFS_REF, pagenum, fileNum);  request->file = openFiles[fileNum];  // Read only one page, choose the correct page for each file using fileNum  request->par.readWrite.pages[0].buf = &ReadPages[fileNum][0];  request->par.readWrite.pages[0].size = PAGESIZE;  request->par.readWrite.pages[0].offset = pagenum * PAGESIZE;  request->par.readWrite.numberOfPages = 1;    if (!forward(file,request)) {     // Something went wrong     ndbout << "Could not forward read request" << endl;     theRequestPool->put(request);     return 1;  }  return 0;}int openFileWait(){  int openedFiles = 0;  while (openedFiles < numberOfFiles)    {      Request* request = theReportChannel->readChannel();      if (request) 	{	  if (request->action == Request::open)	    {	      	      if (request->error ==0)		{#ifdef TESTDEBUG  	          ndbout << "Opened file " << request->file->fileName().c_str() << endl;#endif		  openFiles[request->theFilePointer] = request->file;		}	      else		{		  ndbout << "error while opening file" << endl;		  exit(1);		}	      theRequestPool->put(request);	      openedFiles++;	    }	  else	    {	      ndbout << "Unexpected request received" << endl;	    }	}      else	{	  ndbout << "Nothing read from theReportChannel" << endl;	}    }  return 0;}int closeFileWait(){  int closedFiles = 0;  while (closedFiles < numberOfFiles)    {      Request* request = theReportChannel->readChannel();      if (request) 	{	  if (request->action == Request::close || request->action == Request::closeRemove)	    {	      	      if (request->error ==0)		{#ifdef TESTDEBUG  	          ndbout << "Closed file " << request->file->fileName().c_str() << endl;#endif		  openFiles[request->theFilePointer] = NULL;		  files->put(request->file);		}	      else		{		  ndbout << "error while closing file" << endl;		  exit(1);		}	      theRequestPool->put(request);	      closedFiles++;	    }	  else	    {	      ndbout << "Unexpected request received" << endl;	    }	}      else	{	  ndbout << "Nothing read from theReportChannel" << endl;	}    }  return 0;}int writeFileWait(){  Request* request = theReportChannel->readChannel();  if (request)     {      if (request->action == Request::write)	{	      	  if (request->error == 0)	    {#ifdef TESTDEBUG	      ndbout << "writeFileWait"<<request->theFilePointer<<", " << request->theUserPointer<<" "<< request->file->fileName().c_str() << endl;#endif	    }	  else	    {	      ndbout << "error while writing file, error=" << request->error << endl;	      exit(1);	    }	  theRequestPool->put(request);	}      else	{	  ndbout << "Unexpected request received" << endl;	}    }  else    {      ndbout << "Nothing read from theReportChannel" << endl;    }  return 0;}int writeSyncFileWait(){  Request* request = theReportChannel->readChannel();  if (request)     {      if (request->action == Request::writeSync)	{	      	  if (request->error == 0)	    {#ifdef TESTDEBUG	      ndbout << "writeFileWait"<<request->theFilePointer<<", " << request->theUserPointer<<" "<< request->file->fileName().c_str() << endl;#endif	    }	  else	    {	      ndbout << "error while writing file" << endl;	      exit(1);	    }	  theRequestPool->put(request);	}      else	{	  ndbout << "Unexpected request received" << endl;	}    }  else    {      ndbout << "Nothing read from theReportChannel" << endl;    }  return 0;}int readFileWait(){  Request* request = theReportChannel->readChannel();  if (request)     {      if (request->action == Request::read)	{	      	  if (request->error == 0)	    {#ifdef TESTDEBUG	      ndbout << "readFileWait"<<request->theFilePointer<<", " << request->theUserPointer<<" "<< request->file->fileName().c_str() << endl;#endif	      if (memcmp(&(ReadPages[request->theFilePointer][0]), &(WritePages[request->theFilePointer][0]), PAGESIZE)!=0) 		{		  ndbout <<"Verification error!" << endl;		  for (int i = 0; i < PAGESIZE; i++ ){		    ndbout <<" Compare Page " <<  i << " : " << ReadPages[request->theFilePointer][i] <<", " <<WritePages[request->theFilePointer][i] << endl;;		    if( ReadPages[request->theFilePointer][i] !=WritePages[request->theFilePointer][i])				      exit(1);		       }		}			    }	  else	    {	      ndbout << "error while reading file" << endl;	      exit(1);	    }	  theRequestPool->put(request);	}      else	{	  ndbout << "Unexpected request received" << endl;	}    }  else    {      ndbout << "Nothing read from theReportChannel" << endl;    }  return 0;}int readArguments(int argc, const char** argv){  int i = 1;  while (argc > 1)  {    if (strcmp(argv[i], "-n") == 0)    {      numberOfFiles = atoi(argv[i+1]);      if ((numberOfFiles < 1) || (numberOfFiles > MAXFILES))      {	ndbout << "Wrong number of files, default = "<<DEFAULT_NUM_FILES << endl;	  numberOfFiles = DEFAULT_NUM_FILES;      }    }    else if (strcmp(argv[i], "-r") == 0)    {      numberOfRequests = atoi(argv[i+1]);      if ((numberOfRequests < 1) || (numberOfRequests > MAXREQUESTS))      {	ndbout << "Wrong number of requests, default = "<<DEFAULT_NUM_REQUESTS << endl;	  numberOfRequests = DEFAULT_NUM_REQUESTS;      }    }    else if (strcmp(argv[i], "-s") == 0)    {      fileSize = atoi(argv[i+1]);      if ((fileSize < 1) || (fileSize > MAXFILESIZE))      {	ndbout << "Wrong number of 8k pages, default = "<<DEFAULT_FILESIZE << endl;	  fileSize = DEFAULT_FILESIZE;      }    }    else if (strcmp(argv[i], "-l") == 0)    {      numberOfIterations = atoi(argv[i+1]);      if ((numberOfIterations < 1))      {	ndbout << "Wrong number of iterations, default = 1" << endl;	numberOfIterations = 1;      }    }    else if (strcmp(argv[i], "-remove") == 0)    {      removeFiles = 1;      argc++;      i--;    }    else if (strcmp(argv[i], "-reverse") == 0)    {      ndbout << "Writing files reversed" << endl;      writeFilesReverse = 1;      argc++;      i--;    }    argc -= 2;    i = i + 2;  }    if ((fileSize % numberOfRequests)!= 0)    {    numberOfRequests = numberOfRequests - (fileSize % numberOfRequests);    ndbout <<"numberOfRequest must be modulo of filesize" << endl;    ndbout << "New numberOfRequest="<<numberOfRequests<<endl;    }  return 0;}// Needed for linking...void ErrorReporter::handleError(ErrorCategory type, int messageID,                                const char* problemData, const char* objRef, NdbShutdownType stype){  ndbout << "ErrorReporter::handleError activated" << endl;  ndbout << "type= " << type << endl;   ndbout << "messageID= " << messageID << endl;  ndbout << "problemData= " << problemData << endl;  ndbout << "objRef= " << objRef << endl;  exit(1);}void ErrorReporter::handleAssert(const char* message, const char* file, int line){  ndbout << "ErrorReporter::handleAssert activated" << endl;  ndbout << "message= " << message << endl;  ndbout << "file= " << file << endl;  ndbout << "line= " << line << endl;  exit(1);}GlobalData globalData;Signal::Signal(){}

⌨️ 快捷键说明

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