This is an automated email from the ASF dual-hosted git repository.
lahirujayathilake pushed a commit to branch cybershuttle-staging
in repository https://gitbox.apache.org/repos/asf/airavata.git
The following commit(s) were added to refs/heads/cybershuttle-staging by this
push:
new 27eb9e84f0 Use StoragePath from Properties in AgentManagementHandler
27eb9e84f0 is described below
commit 27eb9e84f04c881df460b91745918f6b162a6df1
Author: Yasith Jayawardana <[email protected]>
AuthorDate: Mon Mar 31 23:49:20 2025 -0400
Use StoragePath from Properties in AgentManagementHandler
* hardcode path in agentmanagementhandler.java
* fix bug in agentmanagementhandler paths
---
.../service/handlers/AgentManagementHandler.java | 28 +++++++------
.../service/models/LaunchAgentRequest.java | 9 +++++
.../service/services/AiravataService.java | 46 +++++++++++-----------
.../src/main/resources/application.yml | 1 +
modules/agent-framework/airavata-agent/.gitignore | 1 +
.../deployments/jupyterhub/data/allen-v1 | 1 +
.../deployments/jupyterhub/data/functional-network | 1 +
.../deployments/jupyterhub/data/md_demo/.gitignore | 2 +
8 files changed, 54 insertions(+), 35 deletions(-)
diff --git
a/modules/agent-framework/agent-service/src/main/java/org/apache/airavata/agent/connection/service/handlers/AgentManagementHandler.java
b/modules/agent-framework/agent-service/src/main/java/org/apache/airavata/agent/connection/service/handlers/AgentManagementHandler.java
index a4b3613da5..f4e6bbb3b1 100644
---
a/modules/agent-framework/agent-service/src/main/java/org/apache/airavata/agent/connection/service/handlers/AgentManagementHandler.java
+++
b/modules/agent-framework/agent-service/src/main/java/org/apache/airavata/agent/connection/service/handlers/AgentManagementHandler.java
@@ -15,6 +15,7 @@ import org.apache.airavata.model.experiment.ExperimentType;
import org.apache.airavata.model.experiment.UserConfigurationDataModel;
import org.apache.airavata.model.process.ProcessModel;
import
org.apache.airavata.model.scheduling.ComputationalResourceSchedulingModel;
+import org.apache.airavata.model.security.AuthzToken;
import org.apache.thrift.TException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -22,6 +23,7 @@ import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.io.File;
+import java.nio.file.Paths;
import java.util.List;
import java.util.UUID;
import java.util.stream.Collectors;
@@ -36,6 +38,9 @@ public class AgentManagementHandler {
@Value("${airavata.storageResourceId}")
private String storageResourceId;
+ @Value("${airavata.storagePath}")
+ private String storagePath;
+
public AgentManagementHandler(AiravataService airavataService,
ClusterApplicationConfig clusterApplicationConfig) {
this.airavataService = airavataService;
this.clusterApplicationConfig = clusterApplicationConfig;
@@ -120,14 +125,18 @@ public class AgentManagementHandler {
Airavata.Client airavataClient = airavataService.airavata();
String experimentName = req.getExperimentName();
- String projectId =
airavataService.extractDefaultProjectId(airavataClient); // TODO should be
configurable
+ String projectName = req.getProjectName() != null ?
req.getProjectName() : "Default Project";
+ String projectDir = projectName.replace(" ", "_");
+ String projectId = airavataService.getProjectId(airavataClient,
projectName);
+ AuthzToken authzToken = UserContext.authzToken();
+ String userName = UserContext.username();
+ String gatewayId = UserContext.gatewayId();
String appInterfaceId =
clusterApplicationConfig.getApplicationInterfaceIdByCluster(req.getApplicationInterfaceName());
-
ExperimentModel experimentModel = new ExperimentModel();
experimentModel.setExperimentName(experimentName);
experimentModel.setProjectId(projectId);
- experimentModel.setUserName(UserContext.username());
- experimentModel.setGatewayId(UserContext.gatewayId());
+ experimentModel.setUserName(userName);
+ experimentModel.setGatewayId(gatewayId);
experimentModel.setExecutionId(appInterfaceId);
ComputationalResourceSchedulingModel
computationalResourceSchedulingModel = new
ComputationalResourceSchedulingModel();
@@ -147,16 +156,13 @@ public class AgentManagementHandler {
userConfigurationDataModel.setAiravataAutoSchedule(false);
userConfigurationDataModel.setOverrideManualScheduledParams(false);
userConfigurationDataModel.setStorageId(storageResourceId);
- userConfigurationDataModel.setExperimentDataDir(UserContext.username()
- .concat(File.separator)
- .concat(projectId)
- .concat(File.separator)
- .concat(experimentName));
+ String experimentDataDir = Paths.get(storagePath, gatewayId, userName,
projectDir, experimentName).toString();
+ userConfigurationDataModel.setExperimentDataDir(experimentDataDir);
userConfigurationDataModel.setGroupResourceProfileId(groupCompResourcePref.getGroupResourceProfileId());
experimentModel.setUserConfigurationData(userConfigurationDataModel);
- List<InputDataObjectType> applicationInputs =
airavataClient.getApplicationInputs(UserContext.authzToken(), appInterfaceId);
+ List<InputDataObjectType> applicationInputs =
airavataClient.getApplicationInputs(authzToken, appInterfaceId);
List<InputDataObjectType> experimentInputs = applicationInputs.stream()
.peek(input -> {
if ("agent_id".equals(input.getName())) {
@@ -169,7 +175,7 @@ public class AgentManagementHandler {
.collect(Collectors.toList());
experimentModel.setExperimentInputs(experimentInputs);
-
experimentModel.setExperimentOutputs(airavataClient.getApplicationOutputs(UserContext.authzToken(),
appInterfaceId));
+
experimentModel.setExperimentOutputs(airavataClient.getApplicationOutputs(authzToken,
appInterfaceId));
experimentModel.setExperimentType(ExperimentType.SINGLE_APPLICATION);
LOGGER.info("Generated the experiment: {}",
experimentModel.getExperimentId());
diff --git
a/modules/agent-framework/agent-service/src/main/java/org/apache/airavata/agent/connection/service/models/LaunchAgentRequest.java
b/modules/agent-framework/agent-service/src/main/java/org/apache/airavata/agent/connection/service/models/LaunchAgentRequest.java
index edbb00c9f2..cb12e7fd17 100644
---
a/modules/agent-framework/agent-service/src/main/java/org/apache/airavata/agent/connection/service/models/LaunchAgentRequest.java
+++
b/modules/agent-framework/agent-service/src/main/java/org/apache/airavata/agent/connection/service/models/LaunchAgentRequest.java
@@ -5,6 +5,7 @@ import org.apache.commons.lang3.StringUtils;
public class LaunchAgentRequest {
private String experimentName;
+ private String projectName;
private String remoteCluster;
private String group;
@@ -81,4 +82,12 @@ public class LaunchAgentRequest {
public String getApplicationInterfaceName() {
return remoteCluster + (StringUtils.isNotBlank(group) ? ("_" + group)
: "");
}
+
+ public String getProjectName() {
+ return projectName;
+ }
+
+ public void setProjectName(String projectName) {
+ this.projectName = projectName;
+ }
}
diff --git
a/modules/agent-framework/agent-service/src/main/java/org/apache/airavata/agent/connection/service/services/AiravataService.java
b/modules/agent-framework/agent-service/src/main/java/org/apache/airavata/agent/connection/service/services/AiravataService.java
index c9db4da7ae..85adb15b89 100644
---
a/modules/agent-framework/agent-service/src/main/java/org/apache/airavata/agent/connection/service/services/AiravataService.java
+++
b/modules/agent-framework/agent-service/src/main/java/org/apache/airavata/agent/connection/service/services/AiravataService.java
@@ -48,29 +48,27 @@ public class AiravataService {
}
}
- public String extractDefaultProjectId(Airavata.Client airavataClient)
throws TException {
- int limit = 10;
- int offset = 0;
-
- while (true) {
- List<Project> userProjects =
airavataClient.getUserProjects(UserContext.authzToken(),
UserContext.gatewayId(), UserContext.username(), limit, offset);
-
- // Check for the "Default Project"
- Optional<Project> defaultProject = userProjects.stream()
- .filter(project -> "Default
Project".equals(project.getName()))
- .findFirst();
-
- if (defaultProject.isPresent()) {
- return defaultProject.get().getProjectID();
- }
- if (userProjects.size() < limit) {
- break;
- }
- offset += limit;
- }
-
- throw new RuntimeException("Could not find a Default project for the
user: " + UserContext.username());
- }
+ public String getProjectId(Airavata.Client airavataClient, String
projectName) throws TException {
+ int limit = 10;
+ int offset = 0;
+
+ while (true) {
+ List<Project> userProjects =
airavataClient.getUserProjects(UserContext.authzToken(),
UserContext.gatewayId(), UserContext.username(), limit, offset);
+ Optional<Project> defaultProject = userProjects.stream()
+ .filter(project -> projectName.equals(project.getName()))
+ .findFirst();
+
+ if (defaultProject.isPresent()) {
+ return defaultProject.get().getProjectID();
+ }
+ if (userProjects.size() < limit) {
+ break;
+ }
+ offset += limit;
+ }
+
+ throw new RuntimeException("Could not find project: " + projectName + "
for the user: " + UserContext.username());
+ }
public GroupComputeResourcePreference
extractGroupComputeResourcePreference(Airavata.Client airavataClient, String
group, String remoteCluster) throws TException {
List<GroupResourceProfile> groupResourceList =
airavataClient.getGroupResourceList(UserContext.authzToken(),
UserContext.gatewayId());
@@ -87,7 +85,7 @@ public class AiravataService {
public List<String> getUserExperimentIDs(Airavata.Client airavataClient)
throws TException {
int limit = 100;
- Map<ExperimentSearchFields, String> filters =
Map.of(ExperimentSearchFields.PROJECT_ID,
extractDefaultProjectId(airavataClient));
+ Map<ExperimentSearchFields, String> filters =
Map.of(ExperimentSearchFields.PROJECT_ID, getProjectId(airavataClient, "Default
Project"));
return Stream.iterate(0, offset -> offset + limit)
.map(offset -> {
diff --git
a/modules/agent-framework/agent-service/src/main/resources/application.yml
b/modules/agent-framework/agent-service/src/main/resources/application.yml
index 6f810f668b..cca313f82f 100644
--- a/modules/agent-framework/agent-service/src/main/resources/application.yml
+++ b/modules/agent-framework/agent-service/src/main/resources/application.yml
@@ -31,6 +31,7 @@ airavata:
truststore:
path: CHANGE_ME
storageResourceId: gf4.ucs.indiana.edu_61552681-96f0-462a-a36c-a62a010bffc6
+ storagePath: /var/www/portals/gateway-user-data
cluster:
applicationInterfaceId:
expanse: AiravataAgent_f4313e4d-20c2-4bf6-bff1-8aa0f0b0c1d6
diff --git a/modules/agent-framework/airavata-agent/.gitignore
b/modules/agent-framework/airavata-agent/.gitignore
index d9d9766141..72c213c17e 100644
--- a/modules/agent-framework/airavata-agent/.gitignore
+++ b/modules/agent-framework/airavata-agent/.gitignore
@@ -3,3 +3,4 @@
go.sum
*.egg-info
*.ipynb_checkpoints
+*.sif
\ No newline at end of file
diff --git a/modules/agent-framework/deployments/jupyterhub/data/allen-v1
b/modules/agent-framework/deployments/jupyterhub/data/allen-v1
new file mode 160000
index 0000000000..d8cdffa3c2
--- /dev/null
+++ b/modules/agent-framework/deployments/jupyterhub/data/allen-v1
@@ -0,0 +1 @@
+Subproject commit d8cdffa3c2df9f419aedf6f44947cdf321f11e3a
diff --git
a/modules/agent-framework/deployments/jupyterhub/data/functional-network
b/modules/agent-framework/deployments/jupyterhub/data/functional-network
new file mode 160000
index 0000000000..569bef67c2
--- /dev/null
+++ b/modules/agent-framework/deployments/jupyterhub/data/functional-network
@@ -0,0 +1 @@
+Subproject commit 569bef67c2381f366f34b32a348deb146911c58e
diff --git
a/modules/agent-framework/deployments/jupyterhub/data/md_demo/.gitignore
b/modules/agent-framework/deployments/jupyterhub/data/md_demo/.gitignore
new file mode 100644
index 0000000000..7006ced0e5
--- /dev/null
+++ b/modules/agent-framework/deployments/jupyterhub/data/md_demo/.gitignore
@@ -0,0 +1,2 @@
+auth.state
+plan*.json
\ No newline at end of file