Доделал Planner. Для компиляции тоже заменил старый Do на DoWithSchedule
Добавил сохранение в архив задач на компиляцию. Закомментирова info txt который почему то в архив клался пустым, вместо него кладу в архив файлы TaskState и total_time. Адаптировал анализ под распаковку архива. При сохранении в бд, удаляю задачи на компиляцию.
This commit is contained in:
20
.idea/workspace.xml
generated
20
.idea/workspace.xml
generated
@@ -8,20 +8,14 @@
|
|||||||
<component name="ChangeListManager">
|
<component name="ChangeListManager">
|
||||||
<list default="true" id="e42177c3-2328-4b27-8a01-35779b2beb99" name="Default Changelist" comment="">
|
<list default="true" id="e42177c3-2328-4b27-8a01-35779b2beb99" name="Default Changelist" comment="">
|
||||||
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
|
||||||
<change beforePath="$PROJECT_DIR$/Planner/Array.h" beforeDir="false" />
|
<change beforePath="$PROJECT_DIR$/src/GlobalData/Tasks/TaskState.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/GlobalData/Tasks/TaskState.java" afterDir="false" />
|
||||||
<change beforePath="$PROJECT_DIR$/Planner/CompilationSupervisor.h" beforeDir="false" />
|
<change beforePath="$PROJECT_DIR$/src/TestingSystem/Common/TestingServer.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/TestingSystem/Common/TestingServer.java" afterDir="false" />
|
||||||
<change beforePath="$PROJECT_DIR$/Planner/CompilationTask.h" beforeDir="false" />
|
<change beforePath="$PROJECT_DIR$/src/TestingSystem/DVM/TestsSupervisor_2022.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/TestingSystem/DVM/TestsSupervisor_2022.java" afterDir="false" />
|
||||||
<change beforePath="$PROJECT_DIR$/Planner/File.h" beforeDir="false" />
|
|
||||||
<change beforePath="$PROJECT_DIR$/Planner/Global.h" beforeDir="false" />
|
|
||||||
<change beforePath="$PROJECT_DIR$/Planner/Planner.cpp" beforeDir="false" />
|
|
||||||
<change beforePath="$PROJECT_DIR$/Planner/RunSupervisor.h" beforeDir="false" />
|
|
||||||
<change beforePath="$PROJECT_DIR$/Planner/RunTask.h" beforeDir="false" />
|
|
||||||
<change beforePath="$PROJECT_DIR$/Planner/String.h" beforeDir="false" />
|
|
||||||
<change beforePath="$PROJECT_DIR$/Planner/Supervisor.h" beforeDir="false" />
|
|
||||||
<change beforePath="$PROJECT_DIR$/Planner/Task.h" beforeDir="false" />
|
|
||||||
<change beforePath="$PROJECT_DIR$/Planner/Text.h" beforeDir="false" />
|
|
||||||
<change beforePath="$PROJECT_DIR$/Planner/Utils.h" beforeDir="false" />
|
|
||||||
<change beforePath="$PROJECT_DIR$/src/Visual_DVM_2021/Passes/All/RemoteInitialiseUser.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/Visual_DVM_2021/Passes/All/RemoteInitialiseUser.java" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/src/Visual_DVM_2021/Passes/All/RemoteInitialiseUser.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/Visual_DVM_2021/Passes/All/RemoteInitialiseUser.java" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/src/files/Planner/Planner.cpp" beforeDir="false" afterPath="$PROJECT_DIR$/src/files/Planner/Planner.cpp" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/src/files/Planner/RunTask.h" beforeDir="false" afterPath="$PROJECT_DIR$/src/files/Planner/RunTask.h" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/src/files/Planner/Supervisor.h" beforeDir="false" afterPath="$PROJECT_DIR$/src/files/Planner/Supervisor.h" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/src/files/Planner/Task.h" beforeDir="false" afterPath="$PROJECT_DIR$/src/files/Planner/Task.h" afterDir="false" />
|
||||||
</list>
|
</list>
|
||||||
<option name="SHOW_DIALOG" value="false" />
|
<option name="SHOW_DIALOG" value="false" />
|
||||||
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
||||||
|
|||||||
@@ -67,7 +67,7 @@ public enum TaskState implements StatusEnum {
|
|||||||
case Canceled:
|
case Canceled:
|
||||||
return "отменена";
|
return "отменена";
|
||||||
case InternalError:
|
case InternalError:
|
||||||
return "внутренняя ошибка";
|
return "отсутствует файл состояния";
|
||||||
case WrongTestFormat:
|
case WrongTestFormat:
|
||||||
return "неверный формат";
|
return "неверный формат";
|
||||||
case FailedToQueue:
|
case FailedToQueue:
|
||||||
|
|||||||
@@ -402,11 +402,11 @@ public class TestingServer extends RepositoryServer<TestsDatabase> {
|
|||||||
public void UpdateTestTasks() throws Exception {
|
public void UpdateTestTasks() throws Exception {
|
||||||
Vector<TestCompilationTask> compilationTasks = (Vector<TestCompilationTask>) request.object;
|
Vector<TestCompilationTask> compilationTasks = (Vector<TestCompilationTask>) request.object;
|
||||||
account_db.BeginTransaction();
|
account_db.BeginTransaction();
|
||||||
|
//сами задачи на компиляцию не сохраняем. незачем.
|
||||||
for (TestCompilationTask compilationTask : compilationTasks) {
|
for (TestCompilationTask compilationTask : compilationTasks) {
|
||||||
compilationTask.ChangeDate = new Date().getTime();
|
account_db.Delete(compilationTask);
|
||||||
account_db.Update(compilationTask);
|
|
||||||
for (TestRunTask runTask : compilationTask.runTasks) {
|
for (TestRunTask runTask : compilationTask.runTasks) {
|
||||||
compilationTask.ChangeDate = new Date().getTime();
|
runTask.ChangeDate = new Date().getTime();
|
||||||
account_db.Update(runTask);
|
account_db.Update(runTask);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ import TestingSystem.DVM.Tasks.TestRunTask;
|
|||||||
import TestingSystem.DVM.Tasks.TestTask;
|
import TestingSystem.DVM.Tasks.TestTask;
|
||||||
import TestingSystem.DVM.TasksPackage.TasksPackage;
|
import TestingSystem.DVM.TasksPackage.TasksPackage;
|
||||||
import TestingSystem.DVM.TasksPackage.TasksPackageState;
|
import TestingSystem.DVM.TasksPackage.TasksPackageState;
|
||||||
|
import Visual_DVM_2021.Passes.All.UnzipFolderPass;
|
||||||
import com.jcraft.jsch.ChannelSftp;
|
import com.jcraft.jsch.ChannelSftp;
|
||||||
import javafx.util.Pair;
|
import javafx.util.Pair;
|
||||||
import org.apache.commons.io.FileUtils;
|
import org.apache.commons.io.FileUtils;
|
||||||
@@ -37,7 +38,6 @@ public class TestsSupervisor_2022 {
|
|||||||
connection = connection_in;
|
connection = connection_in;
|
||||||
tasksPackage = tasksPackage_in;
|
tasksPackage = tasksPackage_in;
|
||||||
compilationTasks = tasks_in;
|
compilationTasks = tasks_in;
|
||||||
planner.Print(getClass().getSimpleName() + ": найдено задач на компиляцию: " + compilationTasks.size());
|
|
||||||
packageRemoteWorkspace = new RemoteFile(tasksPackage.user_workspace + "/tests", String.valueOf(tasksPackage.id), true);
|
packageRemoteWorkspace = new RemoteFile(tasksPackage.user_workspace + "/tests", String.valueOf(tasksPackage.id), true);
|
||||||
packageLocalWorkspace = new File(Global.PackagesDirectory, String.valueOf(tasksPackage.id));
|
packageLocalWorkspace = new File(Global.PackagesDirectory, String.valueOf(tasksPackage.id));
|
||||||
}
|
}
|
||||||
@@ -170,53 +170,12 @@ public class TestsSupervisor_2022 {
|
|||||||
}
|
}
|
||||||
public void DownloadResults() throws Exception {
|
public void DownloadResults() throws Exception {
|
||||||
Utils.CheckDirectory(packageLocalWorkspace);
|
Utils.CheckDirectory(packageLocalWorkspace);
|
||||||
for (TestCompilationTask testCompilationTask : compilationTasks) {
|
RemoteFile remote_results_archive = new RemoteFile(packageRemoteWorkspace.full_name, "results.zip");
|
||||||
//------------>>>
|
File results_archive = new File(packageLocalWorkspace, "results.zip");
|
||||||
if (TryDownloadTask(testCompilationTask)) {
|
if (connection.Exists(packageRemoteWorkspace.full_name, "results.zip")) {
|
||||||
for (TestRunTask testRunTask : testCompilationTask.runTasks) {
|
connection.getSingleFile(remote_results_archive, results_archive, 0);
|
||||||
TryDownloadTask(testRunTask);
|
UnzipFolderPass unzipFolderPass = new UnzipFolderPass();
|
||||||
}
|
unzipFolderPass.Do(results_archive.getAbsolutePath(), packageLocalWorkspace.getAbsolutePath(), false);
|
||||||
} else {
|
|
||||||
//задача на компиляцию не состоялась. значит и все ее задачи на запуск тоже.
|
|
||||||
for (TestRunTask testRunTask : testCompilationTask.runTasks) {
|
|
||||||
testRunTask.state = TaskState.Canceled;
|
|
||||||
planner.UpdateTask(testRunTask);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
//--->>>>>>>>>
|
|
||||||
}
|
|
||||||
}
|
|
||||||
public boolean TryDownloadTask(TestTask testTask) throws Exception {
|
|
||||||
if (
|
|
||||||
!testTask.state.equals(TaskState.ResultsDownloaded) &&
|
|
||||||
!testTask.state.equals(TaskState.Canceled)
|
|
||||||
) {
|
|
||||||
File taskLocalWorkspace = Paths.get(packageLocalWorkspace.getAbsolutePath(), String.valueOf(testTask.id)).toFile();
|
|
||||||
RemoteFile taskRemoteWorkspace = new RemoteFile(packageRemoteWorkspace.full_name, String.valueOf(testTask.id));
|
|
||||||
Utils.CheckDirectory(taskLocalWorkspace);
|
|
||||||
if (connection.Exists(packageRemoteWorkspace.full_name, String.valueOf(testTask.id))) {
|
|
||||||
CheckTaskFile(taskRemoteWorkspace, taskLocalWorkspace, Constants.out_file);
|
|
||||||
CheckTaskFile(taskRemoteWorkspace, taskLocalWorkspace, Constants.err_file);
|
|
||||||
CheckTaskFile(taskRemoteWorkspace, taskLocalWorkspace, Constants.time_file);
|
|
||||||
CheckTaskFile(taskRemoteWorkspace, taskLocalWorkspace, "TaskState");
|
|
||||||
if (testTask instanceof TestRunTask)
|
|
||||||
CheckTaskFile(taskRemoteWorkspace, taskLocalWorkspace, "sts.gz+");
|
|
||||||
testTask.state = TaskState.ResultsDownloaded;
|
|
||||||
planner.UpdateTask(testTask);
|
|
||||||
return true;
|
|
||||||
} else {
|
|
||||||
testTask.state = TaskState.Canceled;
|
|
||||||
planner.UpdateTask(testTask);
|
|
||||||
return false;
|
|
||||||
//нет раб пространства. значит задача не выполнялась.
|
|
||||||
}
|
|
||||||
} else return true;
|
|
||||||
}
|
|
||||||
public void CheckTaskFile(RemoteFile taskRemoteWorkspace, File taskLocalWorkspace, String fileName) throws Exception {
|
|
||||||
RemoteFile rFile = new RemoteFile(taskRemoteWorkspace.full_name, fileName);
|
|
||||||
File lFile = Paths.get(taskLocalWorkspace.getAbsolutePath(), fileName).toFile();
|
|
||||||
if (connection.Exists(taskRemoteWorkspace.full_name, fileName)) {
|
|
||||||
connection.getSingleFile(rFile, lFile, 0);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
public void AnalyseResults() throws Exception {
|
public void AnalyseResults() throws Exception {
|
||||||
@@ -226,7 +185,6 @@ public class TestsSupervisor_2022 {
|
|||||||
for (TestCompilationTask testCompilationTask : compilationTasks) {
|
for (TestCompilationTask testCompilationTask : compilationTasks) {
|
||||||
ct_count++;
|
ct_count++;
|
||||||
if (CheckTask(testCompilationTask)) {
|
if (CheckTask(testCompilationTask)) {
|
||||||
// planner.UpdateTask(testCompilationTask);
|
|
||||||
for (TestRunTask testRunTask : testCompilationTask.runTasks) {
|
for (TestRunTask testRunTask : testCompilationTask.runTasks) {
|
||||||
rt_count++;
|
rt_count++;
|
||||||
testRunTask.compilation_state = testCompilationTask.state;
|
testRunTask.compilation_state = testCompilationTask.state;
|
||||||
@@ -237,7 +195,6 @@ public class TestsSupervisor_2022 {
|
|||||||
} else {
|
} else {
|
||||||
CheckTask(testRunTask);
|
CheckTask(testRunTask);
|
||||||
}
|
}
|
||||||
// planner.UpdateTask(testRunTask);
|
|
||||||
if (testRunTask.state.equals(TaskState.Finished)) {
|
if (testRunTask.state.equals(TaskState.Finished)) {
|
||||||
//анализ задачи на запуск.
|
//анализ задачи на запуск.
|
||||||
List<String> output_lines = Arrays.asList(testRunTask.output.split("\n"));
|
List<String> output_lines = Arrays.asList(testRunTask.output.split("\n"));
|
||||||
@@ -261,55 +218,33 @@ public class TestsSupervisor_2022 {
|
|||||||
testRunTask.progress = results.getValue();
|
testRunTask.progress = results.getValue();
|
||||||
testRunTask.CleanTime = Utils.parseCleanTime(testRunTask.output);
|
testRunTask.CleanTime = Utils.parseCleanTime(testRunTask.output);
|
||||||
}
|
}
|
||||||
File local_sts_text = Utils.getTempFileName("sts_text");
|
|
||||||
Vector<ChannelSftp.LsEntry> files = connection.sftpChannel.ls(testRunTask.remote_workspace);
|
|
||||||
for (ChannelSftp.LsEntry file : files) {
|
|
||||||
if (file.getFilename().equals("sts.gz+")) {
|
|
||||||
RemoteFile remote_sts = new RemoteFile(
|
|
||||||
testRunTask.remote_workspace, file.getFilename(), false);
|
|
||||||
RemoteFile remote_sts_text = new RemoteFile(
|
|
||||||
testRunTask.remote_workspace, "statistic.txt", false);
|
|
||||||
try {
|
|
||||||
connection.ShellCommand(Utils.DQuotes(tasksPackage.dvm_drv) + " pa " +
|
|
||||||
Utils.DQuotes(remote_sts.full_name) + " " + Utils.DQuotes(remote_sts_text.full_name));
|
|
||||||
connection.getSingleFile(remote_sts_text, local_sts_text, 10240);
|
|
||||||
} catch (Exception ex) {
|
|
||||||
ex.printStackTrace();
|
|
||||||
}
|
|
||||||
if (local_sts_text.exists()) {
|
|
||||||
try {
|
|
||||||
testRunTask.statistic = FileUtils.readFileToString(local_sts_text, Charset.defaultCharset());
|
|
||||||
} catch (Exception e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
//planner.UpdateTask(testRunTask);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
System.out.println("ct_count=" + ct_count + " rt count=" + rt_count);
|
System.out.println("ct_count=" + ct_count + " rt count=" + rt_count);
|
||||||
//теперь обновить их единым списком.
|
//теперь обновить их единым списком, и удалить задачи на компиляцию.
|
||||||
planner.ServerCommand(ServerCode.UpdateTestTasks, compilationTasks);
|
planner.ServerCommand(ServerCode.UpdateTestTasks, compilationTasks);
|
||||||
|
|
||||||
}
|
}
|
||||||
public boolean CheckTask(TestTask testTask) throws Exception {
|
public boolean CheckTask(TestTask testTask) throws Exception {
|
||||||
if (testTask.state.equals(TaskState.ResultsDownloaded)) {
|
File taskWorkspace = Paths.get(packageLocalWorkspace.getAbsolutePath(), "results", String.valueOf(testTask.id)).toFile();
|
||||||
File taskWorkspace = Paths.get(packageLocalWorkspace.getAbsolutePath(), String.valueOf(testTask.id)).toFile();
|
if (taskWorkspace.exists()) {
|
||||||
System.out.println("id=" + testTask.id + ": path=" + taskWorkspace.getAbsolutePath());
|
System.out.println("id=" + testTask.id + ": path=" + taskWorkspace.getAbsolutePath());
|
||||||
File stateFile = Paths.get(taskWorkspace.getAbsolutePath(), "TaskState").toFile();
|
File stateFile = new File(taskWorkspace, "TaskState");
|
||||||
File outFile = Paths.get(taskWorkspace.getAbsolutePath(), Constants.out_file).toFile();
|
File outFile = new File(taskWorkspace, Constants.out_file);
|
||||||
File errFile = Paths.get(taskWorkspace.getAbsolutePath(), Constants.err_file).toFile();
|
File errFile = new File(taskWorkspace.getAbsolutePath(), Constants.err_file);
|
||||||
File timeFile = Paths.get(taskWorkspace.getAbsolutePath(), Constants.time_file).toFile();
|
File timeFile = new File(taskWorkspace.getAbsolutePath(), Constants.time_file);
|
||||||
|
File stsFile = new File(taskWorkspace.getAbsolutePath(), "statistic.txt");
|
||||||
if (outFile.exists())
|
if (outFile.exists())
|
||||||
testTask.output = FileUtils.readFileToString(outFile);
|
testTask.output = FileUtils.readFileToString(outFile);
|
||||||
if (errFile.exists())
|
if (errFile.exists())
|
||||||
testTask.errors = FileUtils.readFileToString(errFile);
|
testTask.errors = FileUtils.readFileToString(errFile);
|
||||||
if (timeFile.exists())
|
if (timeFile.exists())
|
||||||
testTask.Time = Double.parseDouble(Utils.ReadAllText(timeFile));
|
testTask.Time = Double.parseDouble(Utils.ReadAllText(timeFile));
|
||||||
|
if ((testTask instanceof TestRunTask) && stsFile.exists()) {
|
||||||
|
TestRunTask testRunTask = (TestRunTask) testTask;
|
||||||
|
testRunTask.statistic = FileUtils.readFileToString(stsFile);
|
||||||
|
}
|
||||||
if (stateFile.exists()) {
|
if (stateFile.exists()) {
|
||||||
String stateText = FileUtils.readFileToString(stateFile, Charset.defaultCharset()).replace("\n", "");
|
String stateText = FileUtils.readFileToString(stateFile, Charset.defaultCharset()).replace("\n", "");
|
||||||
testTask.state = TaskState.valueOf(stateText);
|
testTask.state = TaskState.valueOf(stateText);
|
||||||
@@ -319,3 +254,4 @@ public class TestsSupervisor_2022 {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
package Visual_DVM_2021.Passes.All;
|
package Visual_DVM_2021.Passes.All;
|
||||||
import Common.Current;
|
import Common.Current;
|
||||||
import Common.UI.UI;
|
|
||||||
import Common.Utils.Utils;
|
import Common.Utils.Utils;
|
||||||
import GlobalData.RemoteFile.RemoteFile;
|
import GlobalData.RemoteFile.RemoteFile;
|
||||||
import Visual_DVM_2021.Passes.SSH.CurrentConnectionPass;
|
import Visual_DVM_2021.Passes.SSH.CurrentConnectionPass;
|
||||||
@@ -63,7 +62,6 @@ public class RemoteInitialiseUser extends CurrentConnectionPass<String> {
|
|||||||
Files.copy(i, local_p.toPath(), StandardCopyOption.REPLACE_EXISTING);
|
Files.copy(i, local_p.toPath(), StandardCopyOption.REPLACE_EXISTING);
|
||||||
putSingleFile(local_p.getAbsolutePath(), p);
|
putSingleFile(local_p.getAbsolutePath(), p);
|
||||||
}
|
}
|
||||||
UI.Info("+");
|
|
||||||
//-------------------------------------
|
//-------------------------------------
|
||||||
ShowMessage1("Сборка модулей...");
|
ShowMessage1("Сборка модулей...");
|
||||||
//канал на исполнение независим, поэтому переход в папку отдельный
|
//канал на исполнение независим, поэтому переход в папку отдельный
|
||||||
|
|||||||
@@ -124,7 +124,7 @@ int main(int argc, char ** argv)
|
|||||||
printf(">>>>\n");
|
printf(">>>>\n");
|
||||||
CompilationSupervisor * compilationSupervisor = new CompilationSupervisor();
|
CompilationSupervisor * compilationSupervisor = new CompilationSupervisor();
|
||||||
printf("%ld\n", compilationSupervisor->getLength());
|
printf("%ld\n", compilationSupervisor->getLength());
|
||||||
compilationSupervisor->Do();
|
compilationSupervisor->DoWithSchedule(maxKernels);
|
||||||
|
|
||||||
RunSupervisor * runSupervisor = new RunSupervisor(compilationSupervisor);
|
RunSupervisor * runSupervisor = new RunSupervisor(compilationSupervisor);
|
||||||
printf("%ld\n", runSupervisor->getLength());
|
printf("%ld\n", runSupervisor->getLength());
|
||||||
|
|||||||
@@ -93,18 +93,12 @@ public:
|
|||||||
printf("START %ld: %s\n", id, res.getCharArray());
|
printf("START %ld: %s\n", id, res.getCharArray());
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
virtual String copyResults(const String& pathRes) {
|
||||||
virtual void copyResults(const String& pathRes) {
|
String resultPath = Task::copyResults(pathRes);
|
||||||
String resultPath(packageWorkspace + "/" + pathRes + "/" + getId());
|
|
||||||
|
|
||||||
Utils::Mkdir(resultPath);
|
|
||||||
|
|
||||||
Utils::Copy(workspace + "/out.txt", resultPath + "/out.txt");
|
|
||||||
Utils::Copy(workspace + "/err.txt", resultPath + "/err.txt");
|
|
||||||
|
|
||||||
if (Utils::Exists(workspace + "/sts.gz+")) {
|
if (Utils::Exists(workspace + "/sts.gz+")) {
|
||||||
String dvm_start = String::DQuotes(dvm_drv) + " pa " + String::DQuotes(String(getId()) + "/sts.gz+") + " " + String::DQuotes(resultPath + "/statistic.txt");
|
String dvm_start = String::DQuotes(dvm_drv) + " pa " + String::DQuotes(String(getId()) + "/sts.gz+") + " " + String::DQuotes(resultPath + "/statistic.txt");
|
||||||
system(dvm_start.getCharArray());
|
system(dvm_start.getCharArray());
|
||||||
}
|
}
|
||||||
|
return resultPath;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -60,7 +60,6 @@ public:
|
|||||||
delete packedTasks;
|
delete packedTasks;
|
||||||
delete lines;
|
delete lines;
|
||||||
}
|
}
|
||||||
|
|
||||||
void changeState() {
|
void changeState() {
|
||||||
switch (this->state) {
|
switch (this->state) {
|
||||||
case WorkspacesCreation:
|
case WorkspacesCreation:
|
||||||
@@ -81,60 +80,8 @@ public:
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Do() {
|
|
||||||
saveState();
|
|
||||||
long activeCount = 0;
|
|
||||||
//todo обязательно убрать отладочную печать.
|
|
||||||
printf("tasks count = %ld\n", this->getLength());
|
|
||||||
while (this->state != End) {
|
|
||||||
// printf("state=%d\n", this->state);
|
|
||||||
// printf("max=%d; busy=%d; free=%d\n", maxKernels, busyKernels, freeKernels);
|
|
||||||
activeCount = 0;
|
|
||||||
for (long i = 0; i < this->getLength(); ++i) {
|
|
||||||
T* task = this->get(i);
|
|
||||||
switch (this->state) {
|
|
||||||
case WorkspacesCreation:
|
|
||||||
if (task->getState() == Waiting) {
|
|
||||||
activeCount++;
|
|
||||||
task->createWorkspace();
|
|
||||||
task->setState(WorkspaceCreated);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case Preparation:
|
|
||||||
if (task->getState() == WorkspaceCreated) {
|
|
||||||
activeCount++;
|
|
||||||
task->prepareWorkspace();
|
|
||||||
task->createLaunchScript();
|
|
||||||
task->setState(WorkspaceReady);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case Execution:
|
|
||||||
if (task->getState() == WorkspaceReady) {
|
|
||||||
activeCount++;
|
|
||||||
task->Start();
|
|
||||||
}
|
|
||||||
else if (task->getState() == Running) {
|
|
||||||
activeCount++;
|
|
||||||
task->Check();
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
// printf("id = %ld; state = %d\n", task->getId(), task->getState());
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// printf("active count = %d\n", activeCount);
|
|
||||||
if (activeCount == 0)
|
|
||||||
changeState();
|
|
||||||
Utils::Sleep(2);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void DoWithSchedule(int maxKernels) {
|
void DoWithSchedule(int maxKernels) {
|
||||||
saveState();
|
saveState();
|
||||||
|
|
||||||
// подготовка тестов
|
// подготовка тестов
|
||||||
while (this->state != Execution) {
|
while (this->state != Execution) {
|
||||||
for (auto& task : this->getElements()) {
|
for (auto& task : this->getElements()) {
|
||||||
@@ -179,7 +126,7 @@ public:
|
|||||||
|
|
||||||
String pathRes("results");
|
String pathRes("results");
|
||||||
Utils::Mkdir(pathRes);
|
Utils::Mkdir(pathRes);
|
||||||
string buf;
|
//string buf;
|
||||||
|
|
||||||
while (activeTasks) {
|
while (activeTasks) {
|
||||||
long oldActiveTasks = activeTasks;
|
long oldActiveTasks = activeTasks;
|
||||||
@@ -227,7 +174,7 @@ public:
|
|||||||
busyKernels -= task->getKernels();
|
busyKernels -= task->getKernels();
|
||||||
printf(" done task with %d kernels and id %ld\n", task->getKernels(), task->getId());
|
printf(" done task with %d kernels and id %ld\n", task->getKernels(), task->getId());
|
||||||
|
|
||||||
buf += to_string(task->getId()) + " " + string(task->printState().getCharArray()) + " " + to_string(task->getTotalTime()) + "\n";
|
//buf += to_string(task->getId()) + " " + string(task->printState().getCharArray()) + " " + to_string(task->getTotalTime()) + "\n";
|
||||||
task->copyResults(pathRes);
|
task->copyResults(pathRes);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@@ -240,8 +187,8 @@ public:
|
|||||||
|
|
||||||
changeState();
|
changeState();
|
||||||
|
|
||||||
String outFile(pathRes + "/info.txt");
|
//String outFile(pathRes + "/info.txt");
|
||||||
File tmp(outFile, String(buf.c_str()));
|
//File tmp(outFile, String(buf.c_str()));
|
||||||
|
|
||||||
Utils::ZipFolder(pathRes, pathRes + ".zip");
|
Utils::ZipFolder(pathRes, pathRes + ".zip");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -198,5 +198,13 @@ public:
|
|||||||
File tmp(stateFile, printState());
|
File tmp(stateFile, printState());
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void copyResults(const String& path) { }
|
virtual String copyResults(const String& pathRes) {
|
||||||
|
String resultPath(packageWorkspace + "/" + pathRes + "/" + getId());
|
||||||
|
Utils::Mkdir(resultPath);
|
||||||
|
Utils::Copy(workspace + "/TaskState", resultPath + "/TaskState");
|
||||||
|
Utils::Copy(workspace + "/out.txt", resultPath + "/out.txt");
|
||||||
|
Utils::Copy(workspace + "/err.txt", resultPath + "/err.txt");
|
||||||
|
Utils::Copy(workspace + "/total_time", resultPath + "/total_time");
|
||||||
|
return resultPath;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user