This is an automated email from the ASF dual-hosted git repository.

yasithdev pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/airavata.git


The following commit(s) were added to refs/heads/master by this push:
     new 2a034e79c8 fix(storage-service): delete files over SFTP instead of 
shell rm (#654)
2a034e79c8 is described below

commit 2a034e79c83ec683bfe12f7e4886525f44d27615
Author: Yasith Jayawardana <[email protected]>
AuthorDate: Tue Jun 9 02:27:40 2026 -0400

    fix(storage-service): delete files over SFTP instead of shell rm (#654)
    
    UserStorageService.deleteFile ran "rm -f <path>" via adaptor.executeCommand,
    but the SFTP storage adaptor does not support command execution, so every 
file
    delete failed with "Command execution not supported on storage resources".
    Add a deleteFile to the storage adaptor (SFTP rm) and call it, mirroring how
    deleteDir already uses deleteDirectory (SFTP rmdir).
    
    Validated live: uploading then deleting a file now succeeds (the file is 
gone).
---
 .../org/apache/airavata/compute/util/SSHJStorageAdaptor.java     | 9 +++++++++
 .../org/apache/airavata/interfaces/StorageResourceAdaptor.java   | 2 ++
 .../org/apache/airavata/storage/grpc/UserStorageGrpcService.java | 2 +-
 3 files changed, 12 insertions(+), 1 deletion(-)

diff --git 
a/airavata-api/compute-service/src/main/java/org/apache/airavata/compute/util/SSHJStorageAdaptor.java
 
b/airavata-api/compute-service/src/main/java/org/apache/airavata/compute/util/SSHJStorageAdaptor.java
index 1582e915e7..b2fe0bc6df 100644
--- 
a/airavata-api/compute-service/src/main/java/org/apache/airavata/compute/util/SSHJStorageAdaptor.java
+++ 
b/airavata-api/compute-service/src/main/java/org/apache/airavata/compute/util/SSHJStorageAdaptor.java
@@ -194,6 +194,15 @@ public class SSHJStorageAdaptor implements 
StorageResourceAdaptor {
         }
     }
 
+    @Override
+    public void deleteFile(String path) throws AgentException {
+        try (SFTPClient sftp = openSftp()) {
+            sftp.rm(path);
+        } catch (Exception e) {
+            throw new AgentException("Failed to delete file: " + path, e);
+        }
+    }
+
     @Override
     public void uploadFile(String localFile, String remoteFile) throws 
AgentException {
         try (SFTPClient sftp = openSftp()) {
diff --git 
a/airavata-api/src/main/java/org/apache/airavata/interfaces/StorageResourceAdaptor.java
 
b/airavata-api/src/main/java/org/apache/airavata/interfaces/StorageResourceAdaptor.java
index bbc90773ae..c5805d11af 100644
--- 
a/airavata-api/src/main/java/org/apache/airavata/interfaces/StorageResourceAdaptor.java
+++ 
b/airavata-api/src/main/java/org/apache/airavata/interfaces/StorageResourceAdaptor.java
@@ -43,6 +43,8 @@ public interface StorageResourceAdaptor extends AgentAdaptor {
 
     public void deleteDirectory(String path) throws AgentException;
 
+    public void deleteFile(String path) throws AgentException;
+
     public List<String> listDirectory(String path) throws AgentException;
 
     public Boolean doesFileExist(String filePath) throws AgentException;
diff --git 
a/airavata-api/storage-service/src/main/java/org/apache/airavata/storage/grpc/UserStorageGrpcService.java
 
b/airavata-api/storage-service/src/main/java/org/apache/airavata/storage/grpc/UserStorageGrpcService.java
index d2d06486c5..9c73d3d4de 100644
--- 
a/airavata-api/storage-service/src/main/java/org/apache/airavata/storage/grpc/UserStorageGrpcService.java
+++ 
b/airavata-api/storage-service/src/main/java/org/apache/airavata/storage/grpc/UserStorageGrpcService.java
@@ -276,7 +276,7 @@ public class UserStorageGrpcService extends 
UserStorageServiceGrpc.UserStorageSe
         try {
             StorageResourceAdaptor adaptor = 
getStorageAdaptor(request.getStorageResourceId());
             String path = resolvePath(request.getPath(), 
request.getStorageResourceId());
-            adaptor.executeCommand("rm -f " + path, "/");
+            adaptor.deleteFile(path);
             observer.onNext(Empty.getDefaultInstance());
             observer.onCompleted();
         } catch (Exception e) {

Reply via email to