Hi All,
Though the previous approach worked, it had a problem. Every gateway would need
to implement their own user storage tracking mechanism. As discussed earlier
in my previous mail, the better approach would be to establish an SSH
connection with the Storage Resource and track the storage size in Airavata.
After a little debugging and discussions, I found that StorageResourceAdaptor
and AgentAdaptor’s (which uses pooling) are the way to establish a connection
and execute commands on remote machines instead of creating a new
SSHConnection, so my new implementation uses StorageResourceAdaptor to
establish a connection and execute the
du<https://www.geeksforgeeks.org/du-command-linux-examples/#:~:text=du%20command%2C%20short%20for%20disk,space%20on%20hard%20disk%20drive.>
commands to get the size of the user directory.
Questions:
1. Currently, in case of Airavata-Django-Portal, experimentDataDir is always
inside the project directiory which in turn is inside the user directory. Will
the same behavior be followed across all the gateways?
2. I was trying to establish a connection with the gateway using
StorageResourceAdaptor (I believe AgentAdaptor’s are used for compute
resources) but I’m stuck at this step. I was successfully able to create a
connection using AgentAdaptor (only for testing purposes) and execute commands
on it. But I’m not able to do the same with StorageResourceAdaptor.
The only difference I can think of is, here I’m creating a new authToken for
establishing a connection with the Storage resource (and of course deleting it
at the end of execution), and I’m assuming this might be the issue. While
testing with AgentAdaptor, I hardcoded the authToken value that’s already
generated for the Jetstream compute resources, so I’m guessing that might be
the reason why it was working in this case.
This is the error stacktrace that I’ve encountered while executing the
‘executeCommand()’ on StorageResourceAdaptor after initiating it.
2020-08-18 19:31:07,152 [SSH-Pool-Monitor-airavata.host-22222] INFO
o.a.a.h.a.PoolingSSHJClient Current active connections for null @
airavata.host : 22222 are 0 []
2020-08-18 19:31:07,173 [pool-24-thread-6] INFO n.s.s.transport.TransportImpl
Client identity string: SSH-2.0-SSHJ_0.23.0 []
2020-08-18 19:31:07,180 [pool-24-thread-6] INFO n.s.s.transport.TransportImpl
Server identity string: SSH-2.0-OpenSSH_7.2p2 Ubuntu-4ubuntu2.7 []
2020-08-18 19:31:07,488 [pool-24-thread-6] ERROR
o.a.a.a.s.h.AiravataServerHandler net.schmizz.sshj.userauth.UserAuthException:
Exhausted available authentication methods []
org.apache.airavata.agents.api.AgentException:
net.schmizz.sshj.userauth.UserAuthException: Exhausted available authentication
methods
at
org.apache.airavata.helix.adaptor.SSHJAgentAdaptor.executeCommand(SSHJAgentAdaptor.java:190)
at
org.apache.airavata.helix.adaptor.SSHJStorageAdaptor.executeCommand(SSHJStorageAdaptor.java:94)
at
org.apache.airavata.api.server.handler.AiravataServerHandler.validateStorageLimit(AiravataServerHandler.java:726)
at
org.apache.airavata.api.Airavata$Processor$validateStorageLimit.getResult(Airavata.java:18296)
at
org.apache.airavata.api.Airavata$Processor$validateStorageLimit.getResult(Airavata.java:18280)
at
org.apache.thrift.ProcessFunction.process(ProcessFunction.java:39)
at
org.apache.thrift.TBaseProcessor.process(TBaseProcessor.java:39)
at
org.apache.thrift.server.TThreadPoolServer$WorkerProcess.run(TThreadPoolServer.java:286)
at
java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at
java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at java.base/java.lang.Thread.run(Thread.java:834)
Caused by: net.schmizz.sshj.userauth.UserAuthException: Exhausted available
authentication methods
at net.schmizz.sshj.SSHClient.auth(SSHClient.java:231)
at
org.apache.airavata.helix.adaptor.PoolingSSHJClient.createNewSSHClient(PoolingSSHJClient.java:273)
at
org.apache.airavata.helix.adaptor.PoolingSSHJClient.newClientWithSessionValidation(PoolingSSHJClient.java:101)
at
org.apache.airavata.helix.adaptor.PoolingSSHJClient.leaseSSHClient(PoolingSSHJClient.java:141)
at
org.apache.airavata.helix.adaptor.PoolingSSHJClient.startSessionWrapper(PoolingSSHJClient.java:281)
at
org.apache.airavata.helix.adaptor.SSHJAgentAdaptor.executeCommand(SSHJAgentAdaptor.java:173)
... 10 common frames omitted
This<https://github.com/vivekshresta/airavata/commit/2ee51719631490a00b3e8059c136f194538987df#diff-2ee16d33a51ba0c66c57f1847f0d72aeR700>
is the new validation api in AiravataServerHandler I’ve written, where I’m
encountering the issue. How can this be mitigated?
Any help is appreciated.
And on a side note, apart from this, I’ve started working on MFT-portal backend
in developing a new mechanism to track transfers and fetch registered storages.
Regards,
Vivek.