fixed and improved

This commit is contained in:
2023-12-05 16:03:42 +03:00
parent 0bd2d3fe36
commit 5e229fcb68
5 changed files with 34 additions and 20 deletions

View File

@@ -8,6 +8,7 @@ public:
CompilationSupervisor() {
this->init("compilationTasks", 4);
}
CompilationTask* getTaskById(long task_id) {
for (long i = 0; i < getLength(); ++i) {
CompilationTask* task = get(i);
@@ -16,7 +17,8 @@ public:
}
return NULL;
}
virtual String getStatePrefix() {
String getStatePrefix() override {
return String("Compilation");
}
};

View File

@@ -19,7 +19,8 @@ public:
task->printState().getCharArray());
}
}
virtual String getStatePrefix() {
String getStatePrefix() override {
return String("Running");
}
};

View File

@@ -11,7 +11,7 @@ class RunTask : public Task {
String args;
CompilationTask* parent;
public:
virtual void print() const {
void print() const override {
printf("id=%ld; maxtime=%d; testcompilationtask_id=%ld; matrix=%s; environments=%s; usr_par=%s; args=%s kernels=%d\n",
id,
maxtime,
@@ -60,7 +60,7 @@ public:
setKernels(lines->get(offset + 7));
}
virtual String getLaunchScriptText() {
String getLaunchScriptText() override {
String modules = userWorkspace + "/modules";
String starterCall = modules + "/starter";
String launcherCall = modules + "/launcher";
@@ -77,7 +77,8 @@ public:
String::DQuotes("killall -SIGKILL " + binary_name) + " " +
dvm_start;
}
virtual void prepareWorkspace() {
void prepareWorkspace() override {
String binary_src = parent->getWorkspace() + "/0";
String binary_dst = workspace + "/" + binary_name;
Utils::Copy(binary_src, binary_dst);
@@ -86,14 +87,16 @@ public:
File parFile = File(parPath, usr_par);
}
}
virtual String getStartCommand() {
String getStartCommand() override {
String res = workspace + "/run";
if (!environments.isEmpty())
res = environments + " " + res;
printf("START %ld: %s\n", id, res.getCharArray());
return res;
}
virtual String copyResults(const String& pathRes) {
String copyResults(const String& pathRes) override {
String resultPath = Task::copyResults(pathRes);
if (Utils::Exists(workspace + "/sts.gz+")) {
String stsPath(resultPath + "/statistic.txt");

View File

@@ -124,9 +124,13 @@ public:
Utils::Mkdir(pathRes);
string buf;
vector<int> emptyKeys;
vector<T*> toDel;
while (activeTasks) {
long oldActiveTasks = activeTasks;
vector<int> emptyKeys;
emptyKeys.clear();
toDel.clear();
//ставим задачи от больших к меньшему по ядрам
for (auto& elem : sortedByKernelNeeds) {
@@ -157,7 +161,6 @@ public:
for (auto& empty : emptyKeys)
sortedByKernelNeeds.erase(empty);
vector<T*> toDel;
// проверяем нет ли завершившихся задач
for (auto& task : activeTaskSet)
{
@@ -173,6 +176,7 @@ public:
}
}
// очищаем завершенные задачи
for (auto& del : toDel)
activeTaskSet.erase(del);

View File

@@ -42,8 +42,12 @@ public:
//https://stackoverflow.com/questions/230062/whats-the-best-way-to-check-if-a-file-exists-in-c
static bool Exists(const String& path) {
#if __cplusplus >= 201703L
return std::filesystem::exists(path.getCharArray());
#else
struct stat buffer;
return (stat(path.getCharArray(), &buffer) == 0);
#endif
}
//in seconds