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 + -
显示快捷键?