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',
         }

Reply via email to