You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@airavata.apache.org by GitBox <gi...@apache.org> on 2020/08/28 04:04:24 UTC

[GitHub] [airavata] vivekshresta commented on a change in pull request #260: Airavata 3348 final cut

vivekshresta commented on a change in pull request #260:
URL: https://github.com/apache/airavata/pull/260#discussion_r478818511



##########
File path: airavata-api/airavata-api-server/src/main/java/org/apache/airavata/api/server/handler/AiravataServerHandler.java
##########
@@ -692,6 +695,80 @@ public String generateAndRegisterSSHKeys(AuthzToken authzToken, String descripti
         }
     }
 
+    @Override
+    public void validateStorageLimit(AuthzToken authzToken, ExperimentModel experiment, String storageResourceId)
+            throws InvalidRequestException, AiravataClientException, AiravataSystemException, TException {
+        String gatewayId = authzToken.getClaimsMap().get(Constants.GATEWAY_ID);
+        RegistryService.Client regClient = registryClientPool.getResource();
+        try {
+            StoragePreference storagePreference = regClient.getGatewayStoragePreference(gatewayId, storageResourceId);
+            if(storagePreference.getUserStorageQuota() == 0)
+                return; //quota isn't configured
+
+            String groupResourceProfileId = experiment.getUserConfigurationData().getGroupResourceProfileId();
+            if (groupResourceProfileId == null) {
+                logger.error("Experiment not configured with a Group Resource Profile: {}", experiment.getExperimentId());
+                AiravataSystemException exception = new AiravataSystemException(AiravataErrorType.INTERNAL_ERROR);
+                exception.setMessage("Experiment not configured with a Group Resource Profile: " + experiment.getExperimentId());
+                throw exception;
+            }
+
+            GatewayResourceProfile gatewayResourceProfile = regClient.getGatewayResourceProfile(gatewayId);
+            String token;
+            if(isValid(storagePreference.getResourceSpecificCredentialStoreToken()))
+                token = storagePreference.getResourceSpecificCredentialStoreToken();
+            else
+                token = gatewayResourceProfile.getCredentialStoreToken();
+
+            StorageResourceAdaptor adaptor = AdaptorSupportImpl.getInstance().fetchStorageAdaptor(
+                    gatewayId,
+                    storageResourceId,
+                    DataMovementProtocol.SCP,
+                    token,
+                    storagePreference.getLoginUserName());
+            String experimentDataDir = experiment.getUserConfigurationData().getExperimentDataDir();
+            String userDirectory = getUserDirectory(experimentDataDir);
+
+            //shouldn't retrieve size in giga bytes since the du -s command rounds off the value to a higher bound.
+            CommandOutput output = adaptor.executeCommand("du -sm", userDirectory);
+            if(!output.getStdError().isEmpty()) {
+                logger.error("The experiment data directory + " + experimentDataDir + " configured on the experiment is wrong.");
+                AiravataSystemException exception = new AiravataSystemException(AiravataErrorType.INTERNAL_ERROR);
+                exception.setMessage("The experiment data directory + " + experimentDataDir + " configured on the experiment is wrong.");
+                throw exception;
+            }
+
+            double userDirectorySize = Double.parseDouble(output.getStdOut().substring(0, output.getStdOut().length() - 2).trim())/1024.0;

Review comment:
       > And do you think that the output format is same for all operating systems (Linux)? If not, your algorithm might be wrong
   
   Did not know about such a use case. Will test it and update it if necessary.




----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org