This is an automated email from the ASF dual-hosted git repository.
lahirujayathilake pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/airavata-portals.git
The following commit(s) were added to refs/heads/main by this push:
new 4e157ea33 support the input/output storage resources
4e157ea33 is described below
commit 4e157ea330c32879ca5f15809281c527f1e316c5
Author: lahiruj <[email protected]>
AuthorDate: Thu Oct 30 17:50:44 2025 -0400
support the input/output storage resources
---
.../airavata_django_portal_sdk/experiment_util/api.py | 13 +++++++++++--
.../airavata_django_portal_sdk/user_storage/api.py | 16 ++++++++++++++++
.../static/django_airavata_api/js/models/ProcessModel.js | 3 ++-
.../js/models/UserConfigurationData.js | 3 ++-
.../django_airavata/settings_local.py.sample | 2 ++
5 files changed, 33 insertions(+), 4 deletions(-)
diff --git
a/airavata-django-portal-sdk/airavata_django_portal_sdk/experiment_util/api.py
b/airavata-django-portal-sdk/airavata_django_portal_sdk/experiment_util/api.py
index 8965adc85..df0886dbb 100644
---
a/airavata-django-portal-sdk/airavata_django_portal_sdk/experiment_util/api.py
+++
b/airavata-django-portal-sdk/airavata_django_portal_sdk/experiment_util/api.py
@@ -74,8 +74,17 @@ def clone(request, experiment_id):
def _set_storage_id_and_data_dir(request, experiment):
- # Storage ID
- experiment.userConfigurationData.storageId =
user_storage.get_default_storage_resource_id(request)
+ # Storage IDs - set both input and output storage resource IDs
+ # Default to the same storage resource ID for both input and output
+ default_storage_id = user_storage.get_default_storage_resource_id(request)
+
+ # Backward compatibility: if old storageId exists but new fields don't
+ if hasattr(experiment.userConfigurationData, 'storageId') and
experiment.userConfigurationData.storageId:
+ default_storage_id = experiment.userConfigurationData.storageId
+
+ experiment.userConfigurationData.inputStorageResourceId =
default_storage_id
+ experiment.userConfigurationData.outputStorageResourceId =
default_storage_id
+
# Create experiment dir and set it on model
if not experiment.userConfigurationData.experimentDataDir:
project = request.airavata_client.getProject(
diff --git
a/airavata-django-portal-sdk/airavata_django_portal_sdk/user_storage/api.py
b/airavata-django-portal-sdk/airavata_django_portal_sdk/user_storage/api.py
index dff6a4933..0aceac35a 100644
--- a/airavata-django-portal-sdk/airavata_django_portal_sdk/user_storage/api.py
+++ b/airavata-django-portal-sdk/airavata_django_portal_sdk/user_storage/api.py
@@ -74,6 +74,22 @@ def get_default_storage_resource_id(request):
return backend.resource_id
+def get_default_input_storage_resource_id(request):
+ """
+ Get the default input storage resource ID.
+ Defaults to the same storage as the default storage resource.
+ """
+ return get_default_storage_resource_id(request)
+
+
+def get_default_output_storage_resource_id(request):
+ """
+ Get the default output storage resource ID.
+ Defaults to the same storage as the default storage resource.
+ """
+ return get_default_storage_resource_id(request)
+
+
def save(request, path, file, name=None, content_type=None,
storage_resource_id=None, experiment_id=None):
"""
Save file in path in the user's storage and return DataProduct. If
diff --git
a/airavata-django-portal/django_airavata/apps/api/static/django_airavata_api/js/models/ProcessModel.js
b/airavata-django-portal/django_airavata/apps/api/static/django_airavata_api/js/models/ProcessModel.js
index 8b289720c..a93d9163b 100644
---
a/airavata-django-portal/django_airavata/apps/api/static/django_airavata_api/js/models/ProcessModel.js
+++
b/airavata-django-portal/django_airavata/apps/api/static/django_airavata_api/js/models/ProcessModel.js
@@ -55,7 +55,8 @@ const FIELDS = [
"gatewayExecutionId",
"enableEmailNotification",
"emailAddresses",
- "storageResourceId",
+ "inputStorageResourceId",
+ "outputStorageResourceId",
"userDn",
"generateCert",
"experimentDataDir",
diff --git
a/airavata-django-portal/django_airavata/apps/api/static/django_airavata_api/js/models/UserConfigurationData.js
b/airavata-django-portal/django_airavata/apps/api/static/django_airavata_api/js/models/UserConfigurationData.js
index 26215df86..61bf84a9b 100644
---
a/airavata-django-portal/django_airavata/apps/api/static/django_airavata_api/js/models/UserConfigurationData.js
+++
b/airavata-django-portal/django_airavata/apps/api/static/django_airavata_api/js/models/UserConfigurationData.js
@@ -33,7 +33,8 @@ const FIELDS = [
type: "boolean",
default: false,
},
- "storageId",
+ "inputStorageResourceId",
+ "outputStorageResourceId",
"experimentDataDir",
{
name: "useUserCRPref",
diff --git a/airavata-django-portal/django_airavata/settings_local.py.sample
b/airavata-django-portal/django_airavata/settings_local.py.sample
index d823c6dba..b731df1a2 100644
--- a/airavata-django-portal/django_airavata/settings_local.py.sample
+++ b/airavata-django-portal/django_airavata/settings_local.py.sample
@@ -89,6 +89,8 @@ USER_STORAGES = {
'default': {
'BACKEND':
'airavata_django_portal_sdk.user_storage.backends.DjangoFileSystemProvider',
'STORAGE_RESOURCE_ID': '...',
+ # Note: This storage resource ID will be used for both
inputStorageResourceId
+ # and outputStorageResourceId when experiments are created/launched.
'OPTIONS': {
'directory': '/tmp/experiment-data-dir',
}