This is an automated email from the ASF dual-hosted git repository. machristie pushed a commit to branch airavata-v2-refactoring in repository https://gitbox.apache.org/repos/asf/airavata.git
commit e9e8a82c4d81fe2d59a6b137833ffb615529ad6b Author: Marcus Christie <[email protected]> AuthorDate: Thu Jun 1 14:12:44 2023 -0400 Test and fixes for storing RunConfiguration --- .../apis/db/entity/RunConfigurationEntity.java | 65 ++++++++++++++++++++ .../db/entity/backend/ComputeBackendEntity.java | 1 - .../apis/db/entity/backend/EC2BackendEntity.java | 2 - .../apis/db/entity/backend/LocalBackendEntity.java | 2 - .../db/entity/backend/ServerBackendEntity.java | 6 +- .../apis/handlers/ExecutionHandlerTest.java | 69 +++++++++++++++++++++- .../src/main/proto/execution/experiment_stub.proto | 2 + 7 files changed, 138 insertions(+), 9 deletions(-) diff --git a/modules/airavata-apis/airavata-apis-server/src/main/java/org/apache/airavata/apis/db/entity/RunConfigurationEntity.java b/modules/airavata-apis/airavata-apis-server/src/main/java/org/apache/airavata/apis/db/entity/RunConfigurationEntity.java index e5b132cd8d..16ea643656 100644 --- a/modules/airavata-apis/airavata-apis-server/src/main/java/org/apache/airavata/apis/db/entity/RunConfigurationEntity.java +++ b/modules/airavata-apis/airavata-apis-server/src/main/java/org/apache/airavata/apis/db/entity/RunConfigurationEntity.java @@ -1,6 +1,9 @@ package org.apache.airavata.apis.db.entity; import org.apache.airavata.apis.db.entity.backend.ComputeBackendEntity; +import org.apache.airavata.apis.db.entity.backend.EC2BackendEntity; +import org.apache.airavata.apis.db.entity.backend.LocalBackendEntity; +import org.apache.airavata.apis.db.entity.backend.ServerBackendEntity; import org.hibernate.annotations.GenericGenerator; import javax.persistence.*; @@ -55,4 +58,66 @@ public class RunConfigurationEntity { public void setDataMovementConfigs(List<DataMovementConfigurationEntity> dataMovementConfigs) { this.dataMovementConfigs = dataMovementConfigs; } + + public ComputeBackendEntity getComputeBackend() { + return computeBackend; + } + + public void setComputeBackend(ComputeBackendEntity computeBackend) { + this.computeBackend = computeBackend; + } + + /* + * Helper getters/setters for mapping from/to protobuf messages + */ + + public ServerBackendEntity getServer() { + return computeBackend instanceof ServerBackendEntity ? (ServerBackendEntity) computeBackend : null; + } + + public void setServer(ServerBackendEntity serverBackendEntity) { + this.computeBackend = serverBackendEntity; + } + + public EC2BackendEntity getEc2() { + return computeBackend instanceof EC2BackendEntity ? (EC2BackendEntity) computeBackend : null; + } + + public void setEc2(EC2BackendEntity ec2BackendEntity) { + this.computeBackend = ec2BackendEntity; + } + + public LocalBackendEntity getLocal() { + return computeBackend instanceof LocalBackendEntity ? (LocalBackendEntity) computeBackend : null; + } + + public void setLocal(LocalBackendEntity localBackendEntity) { + this.computeBackend = localBackendEntity; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((runConfigId == null) ? 0 : runConfigId.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + RunConfigurationEntity other = (RunConfigurationEntity) obj; + if (runConfigId == null) { + if (other.runConfigId != null) + return false; + } else if (!runConfigId.equals(other.runConfigId)) + return false; + return true; + } + } diff --git a/modules/airavata-apis/airavata-apis-server/src/main/java/org/apache/airavata/apis/db/entity/backend/ComputeBackendEntity.java b/modules/airavata-apis/airavata-apis-server/src/main/java/org/apache/airavata/apis/db/entity/backend/ComputeBackendEntity.java index 4939dc49f5..83d6b2c5e7 100644 --- a/modules/airavata-apis/airavata-apis-server/src/main/java/org/apache/airavata/apis/db/entity/backend/ComputeBackendEntity.java +++ b/modules/airavata-apis/airavata-apis-server/src/main/java/org/apache/airavata/apis/db/entity/backend/ComputeBackendEntity.java @@ -6,7 +6,6 @@ import javax.persistence.*; @Entity @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) -@DiscriminatorColumn(name = "backend_type") public abstract class ComputeBackendEntity { @Id diff --git a/modules/airavata-apis/airavata-apis-server/src/main/java/org/apache/airavata/apis/db/entity/backend/EC2BackendEntity.java b/modules/airavata-apis/airavata-apis-server/src/main/java/org/apache/airavata/apis/db/entity/backend/EC2BackendEntity.java index cdfde29b15..5fb599e8f4 100644 --- a/modules/airavata-apis/airavata-apis-server/src/main/java/org/apache/airavata/apis/db/entity/backend/EC2BackendEntity.java +++ b/modules/airavata-apis/airavata-apis-server/src/main/java/org/apache/airavata/apis/db/entity/backend/EC2BackendEntity.java @@ -1,11 +1,9 @@ package org.apache.airavata.apis.db.entity.backend; import javax.persistence.Column; -import javax.persistence.DiscriminatorValue; import javax.persistence.Entity; @Entity -@DiscriminatorValue("EC2") public class EC2BackendEntity extends ComputeBackendEntity { @Column diff --git a/modules/airavata-apis/airavata-apis-server/src/main/java/org/apache/airavata/apis/db/entity/backend/LocalBackendEntity.java b/modules/airavata-apis/airavata-apis-server/src/main/java/org/apache/airavata/apis/db/entity/backend/LocalBackendEntity.java index f129ea7165..78060d4727 100644 --- a/modules/airavata-apis/airavata-apis-server/src/main/java/org/apache/airavata/apis/db/entity/backend/LocalBackendEntity.java +++ b/modules/airavata-apis/airavata-apis-server/src/main/java/org/apache/airavata/apis/db/entity/backend/LocalBackendEntity.java @@ -1,11 +1,9 @@ package org.apache.airavata.apis.db.entity.backend; import javax.persistence.Column; -import javax.persistence.DiscriminatorValue; import javax.persistence.Entity; @Entity -@DiscriminatorValue("LOCAL") public class LocalBackendEntity extends ComputeBackendEntity { diff --git a/modules/airavata-apis/airavata-apis-server/src/main/java/org/apache/airavata/apis/db/entity/backend/ServerBackendEntity.java b/modules/airavata-apis/airavata-apis-server/src/main/java/org/apache/airavata/apis/db/entity/backend/ServerBackendEntity.java index e5e3646da2..ddde970def 100644 --- a/modules/airavata-apis/airavata-apis-server/src/main/java/org/apache/airavata/apis/db/entity/backend/ServerBackendEntity.java +++ b/modules/airavata-apis/airavata-apis-server/src/main/java/org/apache/airavata/apis/db/entity/backend/ServerBackendEntity.java @@ -3,10 +3,12 @@ package org.apache.airavata.apis.db.entity.backend; import org.apache.airavata.apis.db.entity.backend.iface.SCPInterfaceEntity; import org.apache.airavata.apis.db.entity.backend.iface.SSHInterfaceEntity; -import javax.persistence.*; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.JoinColumn; +import javax.persistence.OneToOne; @Entity -@DiscriminatorValue("SERVER") public class ServerBackendEntity extends ComputeBackendEntity { diff --git a/modules/airavata-apis/airavata-apis-server/src/test/java/org/apache/airavata/apis/handlers/ExecutionHandlerTest.java b/modules/airavata-apis/airavata-apis-server/src/test/java/org/apache/airavata/apis/handlers/ExecutionHandlerTest.java index b27f11da57..aef1cbc210 100644 --- a/modules/airavata-apis/airavata-apis-server/src/test/java/org/apache/airavata/apis/handlers/ExecutionHandlerTest.java +++ b/modules/airavata-apis/airavata-apis-server/src/test/java/org/apache/airavata/apis/handlers/ExecutionHandlerTest.java @@ -2,17 +2,26 @@ package org.apache.airavata.apis.handlers; import org.apache.airavata.api.execution.ExperimentRegisterRequest; import org.apache.airavata.api.execution.ExperimentRegisterResponse; -import org.apache.airavata.api.execution.stubs.Experiment; +import org.apache.airavata.api.execution.stubs.*; +import org.apache.airavata.apis.db.entity.ApplicationRunInfoEntity; +import org.apache.airavata.apis.db.entity.DataMovementConfigurationEntity; import org.apache.airavata.apis.db.entity.ExperimentEntity; +import org.apache.airavata.apis.db.entity.RunConfigurationEntity; +import org.apache.airavata.apis.db.entity.application.ApplicationEntity; +import org.apache.airavata.apis.db.entity.backend.ComputeBackendEntity; +import org.apache.airavata.apis.db.entity.backend.ServerBackendEntity; +import org.apache.airavata.apis.db.entity.data.InDataMovementEntity; import org.apache.airavata.apis.db.repository.ExperimentRepository; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.transaction.annotation.Transactional; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; @SpringBootTest +@Transactional public class ExecutionHandlerTest { @Autowired @@ -24,11 +33,39 @@ public class ExecutionHandlerTest { @Test void testExperimentMapping() { + // TODO: ec2 + // TODO: local + ServerBackend serverBackend = ServerBackend.newBuilder() + .setHostName("server-hostname") + .build(); + Application application = Application.newBuilder() + .setName("test-application") + .build(); + ApplicationRunInfo applicationRunInfo = ApplicationRunInfo.newBuilder() + .setApplication(application) + .build(); + FileLocation sourceLocation = FileLocation.newBuilder() + .setStorageId("source-location-storage-id") + .build(); + InDataMovement inDataMovement = InDataMovement.newBuilder() + .setInputIndex(1) + .setSourceLocation(sourceLocation) + .build(); + DataMovementConfiguration dataMovementConfiguration = DataMovementConfiguration.newBuilder() + .addInMovements(inDataMovement) + .build(); + RunConfiguration runConfiguration = RunConfiguration.newBuilder() + .setServer(serverBackend) + .setAppRunInfo(applicationRunInfo) + .addDataMovementConfigs(dataMovementConfiguration) + .build(); Experiment experiment = Experiment.newBuilder() .setCreationTime(System.currentTimeMillis()) .setDescription("Sample Exp") .setExperimentName("Exp Name") .setGatewayId("gateway-id") + .setProjectId("project-id") + .addRunConfigs(runConfiguration) .build(); ExperimentRegisterRequest experimentRegisterRequest = ExperimentRegisterRequest.newBuilder() @@ -45,6 +82,34 @@ public class ExecutionHandlerTest { assertEquals(experiment.getDescription(), experimentEntity.getDescription()); assertEquals(experiment.getExperimentName(), experimentEntity.getExperimentName()); assertEquals(experiment.getGatewayId(), experimentEntity.getGatewayId()); - } + assertEquals(experiment.getProjectId(), experimentEntity.getProjectId()); + + // RunConfiguration + assertEquals(experiment.getRunConfigsCount(), experimentEntity.getRunConfigs().size()); + RunConfigurationEntity runConfigEntity = experimentEntity.getRunConfigs().get(0); + + // ComputeBackend + ComputeBackendEntity computeBackendEntity = runConfigEntity.getComputeBackend(); + assertTrue(computeBackendEntity instanceof ServerBackendEntity); + ServerBackendEntity serverBackendEntity = (ServerBackendEntity) computeBackendEntity; + assertEquals(serverBackend.getHostName(), serverBackendEntity.getHostName()); + // ApplicationRunInfo + ApplicationRunInfoEntity applicationRunInfoEntity = runConfigEntity.getAppRunInfo(); + ApplicationEntity applicationEntity = applicationRunInfoEntity.getApplication(); + assertEquals(application.getName(), applicationEntity.getName()); + + // DataMovementConfiguration + assertEquals(runConfiguration.getDataMovementConfigsCount(), runConfigEntity.getDataMovementConfigs().size()); + DataMovementConfigurationEntity dataMovementConfigurationEntity = runConfigEntity.getDataMovementConfigs() + .get(0); + assertEquals(dataMovementConfiguration.getInMovementsCount(), + dataMovementConfigurationEntity.getInMovements().size()); + + // InDataMovement + InDataMovementEntity inDataMovementEntity = dataMovementConfigurationEntity.getInMovements().iterator().next(); + assertEquals(inDataMovement.getInputIndex(), inDataMovementEntity.getInputIndex()); + assertEquals(inDataMovement.getSourceLocation().getStorageId(), + inDataMovementEntity.getSourceLocation().getStorageId()); + } } diff --git a/modules/airavata-apis/airavata-apis-stub/src/main/proto/execution/experiment_stub.proto b/modules/airavata-apis/airavata-apis-stub/src/main/proto/execution/experiment_stub.proto index ab2aeca56f..3da863c02a 100644 --- a/modules/airavata-apis/airavata-apis-stub/src/main/proto/execution/experiment_stub.proto +++ b/modules/airavata-apis/airavata-apis-stub/src/main/proto/execution/experiment_stub.proto @@ -18,6 +18,8 @@ syntax = "proto3"; option java_multiple_files = true; +// dozer-proto3 requires the package name to be specified with option java_package +option java_package="org.apache.airavata.api.execution.stubs"; package org.apache.airavata.api.execution.stubs; message CommandLineInput {
