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

harikrishna pushed a commit to branch FixMaxSecondaryStorageForAccountAndProject
in repository https://gitbox.apache.org/repos/asf/cloudstack.git

commit 178cad4cb93de5b1b87a124620b767b7a45ebf5f
Author: Harikrishna Patnala <[email protected]>
AuthorDate: Fri Jun 24 14:27:04 2022 +0530

    Fix global setting reference for max secondary storage usage based on 
account or project
---
 .../storage/command/TemplateOrVolumePostUploadCommand.java     | 10 +++++-----
 .../src/main/java/com/cloud/storage/VolumeApiServiceImpl.java  |  7 ++++++-
 .../java/com/cloud/template/HypervisorTemplateAdapter.java     |  8 +++++++-
 .../storage/resource/NfsSecondaryStorageResource.java          |  8 ++++----
 4 files changed, 22 insertions(+), 11 deletions(-)

diff --git 
a/core/src/main/java/org/apache/cloudstack/storage/command/TemplateOrVolumePostUploadCommand.java
 
b/core/src/main/java/org/apache/cloudstack/storage/command/TemplateOrVolumePostUploadCommand.java
index 6cba5f2e24..da471954d8 100644
--- 
a/core/src/main/java/org/apache/cloudstack/storage/command/TemplateOrVolumePostUploadCommand.java
+++ 
b/core/src/main/java/org/apache/cloudstack/storage/command/TemplateOrVolumePostUploadCommand.java
@@ -49,7 +49,7 @@ public class TemplateOrVolumePostUploadCommand {
 
     String description;
 
-    private String defaultMaxAccountSecondaryStorage;
+    private String defaultMaxSecondaryStorage;
 
     private long processTimeout;
 
@@ -185,12 +185,12 @@ public class TemplateOrVolumePostUploadCommand {
         this.description = description;
     }
 
-    public void setDefaultMaxAccountSecondaryStorage(String 
defaultMaxAccountSecondaryStorage) {
-        this.defaultMaxAccountSecondaryStorage = 
defaultMaxAccountSecondaryStorage;
+    public void setDefaultMaxSecondaryStorage(String 
defaultMaxSecondaryStorage) {
+        this.defaultMaxSecondaryStorage = defaultMaxSecondaryStorage;
     }
 
-    public String getDefaultMaxAccountSecondaryStorage() {
-        return defaultMaxAccountSecondaryStorage;
+    public String getDefaultMaxSecondaryStorage() {
+        return defaultMaxSecondaryStorage;
     }
 
     public void setAccountId(long accountId) {
diff --git a/server/src/main/java/com/cloud/storage/VolumeApiServiceImpl.java 
b/server/src/main/java/com/cloud/storage/VolumeApiServiceImpl.java
index a14cb373d1..57b6e490f5 100644
--- a/server/src/main/java/com/cloud/storage/VolumeApiServiceImpl.java
+++ b/server/src/main/java/com/cloud/storage/VolumeApiServiceImpl.java
@@ -456,8 +456,13 @@ public class VolumeApiServiceImpl extends ManagerBase 
implements VolumeApiServic
                 //using the existing max upload size configuration
                 
command.setProcessTimeout(NumbersUtil.parseLong(_configDao.getValue("vmware.package.ova.timeout"),
 3600));
                 
command.setMaxUploadSize(_configDao.getValue(Config.MaxUploadVolumeSize.key()));
-                
command.setDefaultMaxAccountSecondaryStorage(_configDao.getValue(Config.DefaultMaxAccountSecondaryStorage.key()));
                 command.setAccountId(vol.getAccountId());
+                Account account = _accountDao.findById(vol.getAccountId());
+                if (account.getType().equals(Account.Type.PROJECT)) {
+                    
command.setDefaultMaxSecondaryStorage(_configDao.getValue(Config.DefaultMaxProjectSecondaryStorage.key()));
+                } else {
+                    
command.setDefaultMaxSecondaryStorage(_configDao.getValue(Config.DefaultMaxAccountSecondaryStorage.key()));
+                }
                 Gson gson = new GsonBuilder().create();
                 String metadata = 
EncryptionUtil.encodeData(gson.toJson(command), key);
                 response.setMetadata(metadata);
diff --git 
a/server/src/main/java/com/cloud/template/HypervisorTemplateAdapter.java 
b/server/src/main/java/com/cloud/template/HypervisorTemplateAdapter.java
index 1cf058d565..f935c140a7 100644
--- a/server/src/main/java/com/cloud/template/HypervisorTemplateAdapter.java
+++ b/server/src/main/java/com/cloud/template/HypervisorTemplateAdapter.java
@@ -398,8 +398,14 @@ public class HypervisorTemplateAdapter extends 
TemplateAdapterBase {
                             
templateOnStore.getDataStore().getRole().toString());
                     //using the existing max template size configuration
                     
payload.setMaxUploadSize(_configDao.getValue(Config.MaxTemplateAndIsoSize.key()));
-                    
payload.setDefaultMaxAccountSecondaryStorage(_configDao.getValue(Config.DefaultMaxAccountSecondaryStorage.key()));
+                    
payload.setDefaultMaxSecondaryStorage(_configDao.getValue(Config.DefaultMaxAccountSecondaryStorage.key()));
                     payload.setAccountId(template.getAccountId());
+                    Account account = 
_accountDao.findById(template.getAccountId());
+                    if (account.getType().equals(Account.Type.PROJECT)) {
+                        
payload.setDefaultMaxSecondaryStorage(_configDao.getValue(Config.DefaultMaxProjectSecondaryStorage.key()));
+                    } else {
+                        
payload.setDefaultMaxSecondaryStorage(_configDao.getValue(Config.DefaultMaxAccountSecondaryStorage.key()));
+                    }
                     payload.setRemoteEndPoint(ep.getPublicAddr());
                     payload.setRequiresHvm(template.requiresHvm());
                     payload.setDescription(template.getDisplayText());
diff --git 
a/services/secondary-storage/server/src/main/java/org/apache/cloudstack/storage/resource/NfsSecondaryStorageResource.java
 
b/services/secondary-storage/server/src/main/java/org/apache/cloudstack/storage/resource/NfsSecondaryStorageResource.java
index a0faddd181..ce688764b4 100644
--- 
a/services/secondary-storage/server/src/main/java/org/apache/cloudstack/storage/resource/NfsSecondaryStorageResource.java
+++ 
b/services/secondary-storage/server/src/main/java/org/apache/cloudstack/storage/resource/NfsSecondaryStorageResource.java
@@ -3275,12 +3275,12 @@ public class NfsSecondaryStorageResource extends 
ServerResourceBase implements S
                 "accountTemplateDirSize: " + accountTemplateDirSize + " 
accountSnapshotDirSize: " + accountSnapshotDirSize + " accountVolumeDirSize: " 
+ accountVolumeDirSize);
 
         int accountDirSizeInGB = getSizeInGB(accountTemplateDirSize + 
accountSnapshotDirSize + accountVolumeDirSize);
-        int defaultMaxAccountSecondaryStorageInGB = 
Integer.parseInt(cmd.getDefaultMaxAccountSecondaryStorage());
+        int defaultMaxSecondaryStorageInGB = 
Integer.parseInt(cmd.getDefaultMaxSecondaryStorage());
 
-        if (defaultMaxAccountSecondaryStorageInGB != 
Resource.RESOURCE_UNLIMITED && (accountDirSizeInGB + contentLengthInGB) > 
defaultMaxAccountSecondaryStorageInGB) {
-            s_logger.error("accountDirSizeInGb: " + accountDirSizeInGB + " 
defaultMaxAccountSecondaryStorageInGB: " + 
defaultMaxAccountSecondaryStorageInGB + " contentLengthInGB:"
+        if (defaultMaxSecondaryStorageInGB != Resource.RESOURCE_UNLIMITED && 
(accountDirSizeInGB + contentLengthInGB) > defaultMaxSecondaryStorageInGB) {
+            s_logger.error("accountDirSizeInGb: " + accountDirSizeInGB + " 
defaultMaxSecondaryStorageInGB: " + defaultMaxSecondaryStorageInGB + " 
contentLengthInGB:"
                     + contentLengthInGB); // extra attention
-            String errorMessage = "Maximum number of resources of type 
secondary_storage for account has exceeded";
+            String errorMessage = "Maximum number of resources of type 
secondary_storage for account/project has exceeded";
             updateStateMapWithError(cmd.getEntityUUID(), errorMessage);
             throw new InvalidParameterValueException(errorMessage);
         }

Reply via email to