Исправление клонирования пакетов ДВМ

This commit is contained in:
2024-03-22 23:08:51 +03:00
parent b6b6e2e642
commit 9f1777431c
13 changed files with 250 additions and 169 deletions

View File

@@ -10,6 +10,10 @@ import Visual_DVM_2021.Passes.AddObjectPass;
import java.io.File;
public class AddSapforPackage extends AddObjectPass<SapforPackage> {
@Override
public String getIconPath() {
return "/icons/CreateProject.png";
}
protected File sapfor = null;
//---
//временный вариант. в дальнейшем, следует сделать возможность формирования.(?)

View File

@@ -9,6 +9,8 @@ import GlobalData.Compiler.CompilerType;
import GlobalData.Machine.MachineType;
import GlobalData.Tasks.TaskState;
import GlobalData.User.UserState;
import Repository.Server.ServerCode;
import Repository.Server.ServerExchangeUnit_2021;
import TestingSystem.Common.Group.Group;
import TestingSystem.Common.TasksPackageState;
import TestingSystem.Common.Test.Test;
@@ -19,10 +21,17 @@ import TestingSystem.DVM.DVMTasks.DVMCompilationTask;
import TestingSystem.DVM.DVMTasks.DVMRunTask;
import Visual_DVM_2021.Passes.AddObjectPass;
import Visual_DVM_2021.Passes.PassCode_2021;
import Visual_DVM_2021.Passes.Server.TestingSystemPass;
import java.util.Vector;
public class CloneDVMPackage extends AddObjectPass<DVMPackage> {
DVMPackage src;
Vector<DVMPackage> srcPackages;
Vector<String> inexistingTests;
Vector<String> inexistingConfigurations;
//-
Vector<Integer> src_ids;
Vector<DVMPackage_json> src_jsons;
//-
public CloneDVMPackage() {
super(DVMPackage.class);
}
@@ -34,147 +43,175 @@ public class CloneDVMPackage extends AddObjectPass<DVMPackage> {
protected Database getDb() {
return Global.testingServer.db;
}
protected void createTarget() {
target = new DVMPackage();
target.id = Constants.Nan;
//-
target.sender_name = Current.getAccount().name;
target.sender_address = Current.getAccount().email;
//-
target.machine_name = Current.getMachine().name;
target.machine_address = Current.getMachine().address;
target.machine_port = Current.getMachine().port;
//-
target.user_name = Current.getUser().login;
target.user_password = Current.getUser().password;
target.user_workspace = Current.getUser().workspace;
//--
target.drv = Current.getCompiler().call_command;
target.version = Current.getCompiler().getVersionInfo();
//--
target.kernels = Global.properties.TestingKernels;
target.needsEmail = Global.properties.EmailOnTestingProgress ? 1 : 0;
//--
target.tasksCount = 0;
//--
target.package_json = new DVMPackage_json();
}
protected void CloneTasks(DVMPackage_json src_json, DVMPackage_json dst_json) throws Exception {
for (DVMCompilationTask src_compilationTask : src_json.compilationTasks) {
if (Global.testingServer.db.tests.containsKey(src_compilationTask.test_id)
) {
Group group = Global.testingServer.db.groups.get(src_compilationTask.group_id);
Test test = Global.testingServer.db.tests.get(src_compilationTask.test_id);
//--
DVMCompilationTask compilationTask = new DVMCompilationTask();
//--
compilationTask.group_id = group.id;
compilationTask.group_description = group.description;
compilationTask.language = src_compilationTask.language;
//--
compilationTask.test_id = test.id;
compilationTask.test_description = test.description;
compilationTask.test_type = group.type;
//--
compilationTask.maxtime = src_compilationTask.maxtime;
//--
compilationTask.flags = src_compilationTask.flags;
compilationTask.kernels = 1;
//---
for (DVMRunTask src_runTask : src_compilationTask.runTasks) {
DVMRunTask runTask = new DVMRunTask();
//--
runTask.group_id = group.id;
runTask.group_description = group.description;
runTask.language = src_runTask.language;
//--
runTask.test_id = test.id;
runTask.test_description = test.description;
runTask.test_type = group.type;
//--
runTask.compilation_maxtime = src_runTask.compilation_maxtime;
runTask.compilation_state = TaskState.Waiting;
runTask.maxtime = src_runTask.maxtime;
//--
runTask.cube = src_runTask.cube;
runTask.min_dim = src_runTask.min_dim;
runTask.max_dim = src_runTask.max_dim;
runTask.matrix = src_runTask.matrix;
runTask.environments = src_runTask.environments;
runTask.usr_par = src_runTask.usr_par;
runTask.args = test.args;
//--
runTask.flags = src_runTask.flags;
runTask.kernels = (group.type == TestType.Performance) ? target.kernels :
Math.min(Utils.getMatrixProcessors(src_runTask.matrix), target.kernels);
compilationTask.runTasks.add(runTask);
}
//--
dst_json.compilationTasks.add(compilationTask);
//-
} else {
inexistingTests.add(String.valueOf(src_compilationTask.test_id));
}
}
}
@Override
protected boolean canStart(Object... args) throws Exception {
src = null;
if (!Current.getAccount().CheckRegistered(Log)) {
srcPackages = new Vector<>();
if (!Current.getAccount().CheckRegistered(Log))
return false;
//----
srcPackages = Global.testingServer.db.dvmPackages.getCheckedOrCurrent();
if (srcPackages.isEmpty()){
Log.Writeln_("Не отмечено или не выбрано ни одного пакета DVM");
return false;
}
if (Current.Check(Log, Current.Machine, Current.User, Current.Compiler, Current.DVMPackage)) {
if (!Current.getMachine().type.equals(MachineType.Server)) {
Log.Writeln_("Тестирование поддерживается только на одиночном удалённом сервере.");
return false;
}
if (!Current.getUser().state.equals(UserState.ready_to_work)) {
Log.Writeln_("Пользователь не готов к работе. Выполните инициализацию пользователя!");
return false;
}
if (!Current.getCompiler().type.equals(CompilerType.dvm)) {
Log.Writeln_("Тестирование поддерживается только для DVM компиляторов.");
return false;
}
if (!Current.getCompiler().versionLoaded)
passes.get(PassCode_2021.ShowCompilerVersion).Do(Current.getCompiler(), false);
//-
for (DVMPackage dvmPackage : Global.testingServer.db.dvmPackages.Data.values()) {
if (dvmPackage.state.equals(TasksPackageState.Draft)) {
Log.Writeln_("Может существовать только один пакет, готовящийся к публикации.");
return false;
}
}
//--
src = Current.getDVMPackage();
if (!src.state.equals(TasksPackageState.Done)) {
Log.Writeln_("Возможно повторить только завершенный пакет!");
return false;
}
if (!src.isLoaded())
passes.get(PassCode_2021.DownloadDVMPackage).Do();
if (!src.isLoaded())
return false;
//---->>
target = new DVMPackage();
target.id = Constants.Nan;
//-
target.sender_name = Current.getAccount().name;
target.sender_address = Current.getAccount().email;
//-
target.machine_name = Current.getMachine().name;
target.machine_address = Current.getMachine().address;
target.machine_port = Current.getMachine().port;
//-
target.user_name = Current.getUser().login;
target.user_password = Current.getUser().password;
target.user_workspace = Current.getUser().workspace;
//--
target.drv = Current.getCompiler().call_command;
target.version = Current.getCompiler().getVersionInfo();
//--
target.kernels = Global.properties.TestingKernels;
target.needsEmail = Global.properties.EmailOnTestingProgress ? 1 : 0;
//--
target.tasksCount = 0;
//--
src.readJson();
target.package_json = new DVMPackage_json();
//--
Vector<String> inexistingTests = new Vector<>();
//--
for (DVMCompilationTask src_compilationTask : src.package_json.compilationTasks) {
if (Global.testingServer.db.tests.containsKey(src_compilationTask.test_id)
) {
Group group = Global.testingServer.db.groups.get(src_compilationTask.group_id);
Test test = Global.testingServer.db.tests.get(src_compilationTask.test_id);
//--
DVMCompilationTask compilationTask = new DVMCompilationTask();
//--
compilationTask.group_id = group.id;
compilationTask.group_description = group.description;
compilationTask.language = src_compilationTask.language;
//--
compilationTask.test_id = test.id;
compilationTask.test_description = test.description;
compilationTask.test_type = group.type;
//--
compilationTask.maxtime = src_compilationTask.maxtime;
//--
compilationTask.flags = src_compilationTask.flags;
compilationTask.kernels = 1;
//---
for (DVMRunTask src_runTask : src_compilationTask.runTasks) {
DVMRunTask runTask = new DVMRunTask();
//--
runTask.group_id = group.id;
runTask.group_description = group.description;
runTask.language = src_runTask.language;
//--
runTask.test_id = test.id;
runTask.test_description = test.description;
runTask.test_type = group.type;
//--
runTask.compilation_maxtime = src_runTask.compilation_maxtime;
runTask.compilation_state = TaskState.Waiting;
runTask.maxtime = src_runTask.maxtime;
//--
runTask.cube = src_runTask.cube;
runTask.min_dim = src_runTask.min_dim;
runTask.max_dim = src_runTask.max_dim;
runTask.matrix = src_runTask.matrix;
runTask.environments = src_runTask.environments;
runTask.usr_par = src_runTask.usr_par;
runTask.args = test.args;
//--
runTask.flags = src_runTask.flags;
runTask.kernels = (group.type == TestType.Performance) ? target.kernels :
Math.min(Utils.getMatrixProcessors(src_runTask.matrix), target.kernels);
compilationTask.runTasks.add(runTask);
}
//--
target.package_json.compilationTasks.add(compilationTask);
//-
} else {
inexistingTests.add(String.valueOf(src_compilationTask.test_id));
}
}
///-
//инициализируем идентификаторы задач.
for (DVMCompilationTask compilationTask : target.package_json.compilationTasks) {
//--
compilationTask.id = target.package_json.getMaxTaskId();
//-
for (DVMRunTask runTask : compilationTask.runTasks) {
runTask.id = target.package_json.getMaxTaskId();
runTask.dvmcompilationtask_id = compilationTask.id;
target.tasksCount++;
}
}
//--
for (String test_id: inexistingTests){
System.out.println("Тест "+test_id+" не найден!");
}
return inexistingTests.isEmpty()|| UI.Question(inexistingTests.size()+ " тестов отсутствует. Продолжить");
//-
if (!Current.Check(Log, Current.Machine, Current.User, Current.Compiler))
return false;
//---
if (!Current.getMachine().type.equals(MachineType.Server)) {
Log.Writeln_("Тестирование поддерживается только на одиночном удалённом сервере.");
return false;
}
return false;
if (!Current.getUser().state.equals(UserState.ready_to_work)) {
Log.Writeln_("Пользователь не готов к работе. Выполните инициализацию пользователя!");
return false;
}
if (!Current.getCompiler().type.equals(CompilerType.dvm)) {
Log.Writeln_("Тестирование поддерживается только для DVM компиляторов.");
return false;
}
if (!Current.getCompiler().versionLoaded)
passes.get(PassCode_2021.ShowCompilerVersion).Do(Current.getCompiler(), false);
//-
for (DVMPackage dvmPackage : Global.testingServer.db.dvmPackages.Data.values()) {
if (dvmPackage.state.equals(TasksPackageState.Draft)) {
Log.Writeln_("Может существовать только один пакет, готовящийся к публикации.");
return false;
}
}
//--
src_ids = new Vector<>();
src_jsons = new Vector<>();
for (DVMPackage src : srcPackages) {
if (src.state.equals(TasksPackageState.Draft)) {
Log.Writeln_("Пакет " + Utils.Brackets(src.id) + " является черновиком.");
return false;
}
src_ids.add(src.id);
}
//--
TestingSystemPass getJsonsPass = new TestingSystemPass() {
@Override
public String getDescription() {
return "Получить информацию о задачах исходных пакетов";
}
@Override
protected void ServerAction() throws Exception {
Command(new ServerExchangeUnit_2021(ServerCode.GetDVMPackagesJson, null, src_ids));
src_jsons.addAll((Vector<DVMPackage_json>) response.object);
}
};
if (!getJsonsPass.Do())
return false;
//--
createTarget();
//--
inexistingTests = new Vector<>();
inexistingConfigurations = new Vector<>(); //не нужно.
//--
for (DVMPackage_json srcJson: src_jsons){
CloneTasks(srcJson, target.package_json);
}
///-
//инициализируем идентификаторы задач.
for (DVMCompilationTask compilationTask : target.package_json.compilationTasks) {
//--
compilationTask.id = target.package_json.getMaxTaskId();
//-
for (DVMRunTask runTask : compilationTask.runTasks) {
runTask.id = target.package_json.getMaxTaskId();
runTask.dvmcompilationtask_id = compilationTask.id;
target.tasksCount++;
}
}
//--
for (String test_id : inexistingTests) {
System.out.println("Тест " + test_id + " не найден!");
}
return inexistingTests.isEmpty() || UI.Question(inexistingTests.size() + " тестов отсутствует. Продолжить");
}
@Override
protected void body() throws Exception {

View File

@@ -85,14 +85,12 @@ public class CloneSapforPackage extends AddObjectPass<SapforPackage> {
if (!Current.Check(Log, Current.ServerSapfor))
return false;
//--
if (Global.testingServer.db.sapforPackages.getCheckedCount() > 0) {
srcPackages = Global.testingServer.db.sapforPackages.getCheckedItems();
} else {
if (Current.Check(Log, Current.SapforPackage)) {
srcPackages.add(Current.getSapforPackage());
} else return false;
srcPackages = Global.testingServer.db.sapforPackages.getCheckedOrCurrent();
if (srcPackages.isEmpty()){
Log.Writeln_("Не отмечено или не выбрано ни одного пакета SAPFOR");
return false;
}
//--
// todo изменить чтобы можно было.
for (SapforPackage sapforPackage : Global.testingServer.db.sapforPackages.Data.values()) {
if (sapforPackage.state.equals(TasksPackageState.Draft)) {
Log.Writeln_("Может существовать только один пакет, готовящийся к публикации.");