beegfs/storage/source/net/message/nodes/StorageBenchControlMsgEx.cpp
2025-08-10 01:34:16 +02:00

67 lines
1.9 KiB
C++

#include <app/App.h>
#include <common/net/message/nodes/StorageBenchControlMsgResp.h>
#include <components/benchmarker/StorageBenchOperator.h>
#include <program/Program.h>
#include "StorageBenchControlMsgEx.h"
bool StorageBenchControlMsgEx::processIncoming(ResponseContext& ctx)
{
const char* logContext = "StorageBenchControlMsg incoming";
StorageBenchResultsMap results;
int cmdErrorCode = STORAGEBENCH_ERROR_NO_ERROR;
App* app = Program::getApp();
StorageBenchOperator* storageBench = app->getStorageBenchOperator();
switch(getAction())
{
case StorageBenchAction_START:
{
cmdErrorCode = storageBench->initAndStartStorageBench(&getTargetIDs(), getBlocksize(),
getSize(), getThreads(), getODirect(), getType() );
} break;
case StorageBenchAction_STOP:
{
cmdErrorCode = storageBench->stopBenchmark();
} break;
case StorageBenchAction_STATUS:
{
storageBench->getStatusWithResults(&getTargetIDs(), &results);
cmdErrorCode = STORAGEBENCH_ERROR_NO_ERROR;
} break;
case StorageBenchAction_CLEANUP:
{
cmdErrorCode = storageBench->cleanup(&getTargetIDs());
} break;
default:
{
LogContext(logContext).logErr("unknown action!");
} break;
}
int errorCode;
// check if the last command from the fhgfs_cmd was successful,
// if not send the error code of the command to the fhgfs_cmd
// if it was successful, send the error code of the last run or acutely run of the benchmark
if (cmdErrorCode != STORAGEBENCH_ERROR_NO_ERROR)
{
errorCode = cmdErrorCode;
}
else
{
errorCode = storageBench->getLastRunErrorCode();
}
ctx.sendResponse(
StorageBenchControlMsgResp(storageBench->getStatus(), getAction(),
storageBench->getType(), errorCode, results) );
return true;
}