diff --git a/src/files/Planner/CompilationSupervisor.h b/src/files/Planner/CompilationSupervisor.h index b757451e..4bc7b44f 100644 --- a/src/files/Planner/CompilationSupervisor.h +++ b/src/files/Planner/CompilationSupervisor.h @@ -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"); } }; \ No newline at end of file diff --git a/src/files/Planner/RunSupervisor.h b/src/files/Planner/RunSupervisor.h index d0823240..c3fdfd7c 100644 --- a/src/files/Planner/RunSupervisor.h +++ b/src/files/Planner/RunSupervisor.h @@ -19,7 +19,8 @@ public: task->printState().getCharArray()); } } - virtual String getStatePrefix() { + + String getStatePrefix() override { return String("Running"); } }; diff --git a/src/files/Planner/RunTask.h b/src/files/Planner/RunTask.h index 31da0c07..8f8da661 100644 --- a/src/files/Planner/RunTask.h +++ b/src/files/Planner/RunTask.h @@ -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"); diff --git a/src/files/Planner/Supervisor.h b/src/files/Planner/Supervisor.h index e3d91d6b..c7f3aea1 100644 --- a/src/files/Planner/Supervisor.h +++ b/src/files/Planner/Supervisor.h @@ -124,9 +124,13 @@ public: Utils::Mkdir(pathRes); string buf; + vector emptyKeys; + vector toDel; + while (activeTasks) { long oldActiveTasks = activeTasks; - vector emptyKeys; + emptyKeys.clear(); + toDel.clear(); //ставим задачи от больших к меньшему по ядрам for (auto& elem : sortedByKernelNeeds) { @@ -156,8 +160,7 @@ public: // очищаем от пустых ключей for (auto& empty : emptyKeys) sortedByKernelNeeds.erase(empty); - - vector toDel; + // проверяем нет ли завершившихся задач for (auto& task : activeTaskSet) { @@ -173,6 +176,7 @@ public: } } + // очищаем завершенные задачи for (auto& del : toDel) activeTaskSet.erase(del); @@ -182,7 +186,7 @@ public: changeState(); - String outFile(pathRes + "/"+getStatePrefix()+"Info.txt"); + String outFile(pathRes + "/" + getStatePrefix() + "Info.txt"); File tmp(outFile, String(buf.c_str())); } void saveState() { diff --git a/src/files/Planner/Utils.h b/src/files/Planner/Utils.h index cb6fbb86..6d6f864e 100644 --- a/src/files/Planner/Utils.h +++ b/src/files/Planner/Utils.h @@ -31,19 +31,23 @@ public: //https://stackoverflow.com/questions/4568681/using-chmod-in-a-c-program static void Chmod(const String& path) { - #if __cplusplus >= 201703L +#if __cplusplus >= 201703L std::filesystem::permissions(path.getCharArray(), std::filesystem::perms::all); - #else +#else String command = "chmod 777 " + String::DQuotes(path); int i=system(command.getCharArray()); printf("chmod 777 '%s' return code = %d\n", path.getCharArray(), i); - #endif +#endif } //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 @@ -52,22 +56,22 @@ public: std::this_thread::sleep_for(timespan); } static void Copy(const String& src, const String& dst) { - #if __cplusplus >= 201703L +#if __cplusplus >= 201703L std::filesystem::copy(src.getCharArray(), dst.getCharArray()); - #else +#else String command = "cp " + String::DQuotes(src) + " " + String::DQuotes(dst); int i = system(command.getCharArray()); printf("cp '%s' return code = %d\n",src.getCharArray(), i); - #endif +#endif } static void CopyDirectory(const String& src, const String& dst) { - #if __cplusplus >= 201703L +#if __cplusplus >= 201703L std::filesystem::copy((src+ "/.").getCharArray(), dst.getCharArray(), std::filesystem::copy_options::recursive); - #else +#else String command = "cp -r " + String::DQuotes(src + "/.") + " " + String::DQuotes(dst); int i = system(command.getCharArray()); printf("cp -r '%s' return code = %d\n",src.getCharArray(),i); - #endif +#endif } static time_t getAbsoluteTime() { return time(NULL);