in ptest/src/Program.cc [422:543]
static void runSingleTask(int taskId)
{
taskResult result;
TaskResultVector &resultVec = totalResults[taskId];
std::string key = get_task_key(taskId);
std::string fileName = get_task_fileName(taskId);
std::stringstream ss;
auto startTime = std::chrono::system_clock::now();
int64_t taskMinTransferDurationMs = 0x7FFFFFFF;
int64_t taskMaxTransferDurationMs = -1;
int64_t taskAvgTrasnferDurationMs = -1;
int64_t taskTransferSize = 0;
int64_t taskTransferDurationMs = 0;
int taskSucessCnt = 0;
int taskFailCnt = 0;
ClientConfiguration conf;
auto rateLimiter = std::make_shared<DefaultRateLimiter>();
if (Config::SpeedKBPerSec > 0) {
rateLimiter->setRate(Config::SpeedKBPerSec);
conf.sendRateLimiter = rateLimiter;
conf.recvRateLimiter = rateLimiter;
}
OssClient client(Config::Endpoint, Config::AccessKeyId, Config::AccessKeySecret, conf);
if (Config::LoopTimes == 0)
{
Config::Persistent = true;
}
ss.str();
ss << "\n++++ START " << Config::Command <<
" : taskID=" << taskId <<
", LocalFile=" << fileName <<
", RemoteKey=" << key <<
", StartTime=" << to_datetime_string(startTime) << std::endl;
log_msg(std::cout, ss.str());
int runIndex = 1;
//while ((runIndex <= Config::LoopTimes) || Config::Persistent)
while (!is_test_done(runIndex, startTime))
{
if (Config::Command == "upload") {
result = upload(client, key, fileName);
}
else if (Config::Command == "upload_resumable") {
result = upload_resumable(client, key, fileName);
}
else if (Config::Command == "upload_async") {
result = upload_async(client, key, fileName);
}
else if (Config::Command == "upload_multipart") {
result = upload_multipart(client, key, fileName);
}
else if (Config::Command == "download") {
result = download(client, key, fileName);
}
else if (Config::Command == "download_resumable") {
result = download_resumable(client, key, fileName);
}
else if (Config::Command == "download_async") {
result = download_async(client, key, fileName);
}
else {
std::cout << "The Command Type Error " << Config::Command << std::endl;
Config::PrintHelp();
break;
}
if (result.success) {
int64_t trasnferDuration = (std::chrono::duration_cast<std::chrono::milliseconds>(result.stopTimePoint - result.startTimePoint)).count();
taskTransferSize += result.transferSize;
taskTransferDurationMs += trasnferDuration;
taskSucessCnt += 1;
taskMinTransferDurationMs = std::min(trasnferDuration, taskMinTransferDurationMs);
taskMaxTransferDurationMs = std::max(trasnferDuration, taskMaxTransferDurationMs);
}
else {
taskFailCnt += 1;
}
if (Config::DumpDetail || Config::PrintPercentile) {
result.taskId = taskId;
result.seqNum = runIndex;
resultVec.push_back(result);
}
runIndex++;
}
if (taskSucessCnt > 0) {
taskAvgTrasnferDurationMs = taskTransferDurationMs / taskSucessCnt;
}
double taskTransferRateMBPerS = ((double)taskTransferSize / 1024.0f / 1024.0f) / ((double)taskTransferDurationMs / 1000.0f);
ss.str("");
ss << "\n---- STOP " << Config::Command <<
" : taskID=" << taskId <<
", LocalFile=" << fileName <<
", RemoteKey=" << key <<
", StopTime=" << to_datetime_string(result.stopTimePoint) << " " <<
", runTimes=" << runIndex <<
", OK=" << taskSucessCnt <<
", NG=" << taskFailCnt << std::setiosflags(std::ios::fixed) << std::setprecision(2) <<
", AvgTransferRate="<< taskTransferRateMBPerS << " MB / S" <<
", Latency(min,max,avg)=(" << taskMinTransferDurationMs << "," << taskMaxTransferDurationMs << "," << taskAvgTrasnferDurationMs << ") Ms"<< std::endl;
log_msg(std::cout, ss.str());
{
std::unique_lock<std::mutex> lck(updateMtx);
totalTransferSize += taskTransferSize;
totalTransferDurationMS += taskTransferDurationMs;
totalSucessCnt += taskSucessCnt;
totalFailCnt += taskFailCnt;
minTransferDurationMS = std::min(minTransferDurationMS, taskMinTransferDurationMs);
maxTransferDurationMS = std::max(maxTransferDurationMS, taskMaxTransferDurationMs);
}
}