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

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


The following commit(s) were added to refs/heads/4.17 by this push:
     new 089e9647f1 Fix global setting reference for max secondary storage 
(#6496)
089e9647f1 is described below

commit 089e9647f1411cffb0d93a364155bcddafcde00c
Author: Harikrishna <[email protected]>
AuthorDate: Thu Jun 30 11:42:58 2022 +0530

    Fix global setting reference for max secondary storage (#6496)
    
    * Fix global setting reference for max secondary storage usage based on 
account or project
    
    * Changed a variable naming
    
    * Replaced config enum usage with configkey class for global settings
    
    * Fixed grammar mistake
    
    * Fixed code smells
---
 .../main/java/com/cloud/user/ResourceLimitService.java   |  6 +++++-
 .../command/TemplateOrVolumePostUploadCommand.java       | 10 +++++-----
 server/src/main/java/com/cloud/configuration/Config.java | 16 ----------------
 .../cloud/resourcelimit/ResourceLimitManagerImpl.java    |  6 +++---
 .../java/com/cloud/storage/VolumeApiServiceImpl.java     |  7 ++++++-
 .../com/cloud/template/HypervisorTemplateAdapter.java    |  8 +++++++-
 .../storage/resource/NfsSecondaryStorageResource.java    |  8 ++++----
 7 files changed, 30 insertions(+), 31 deletions(-)

diff --git a/api/src/main/java/com/cloud/user/ResourceLimitService.java 
b/api/src/main/java/com/cloud/user/ResourceLimitService.java
index 2df9b037e3..886cd23c63 100644
--- a/api/src/main/java/com/cloud/user/ResourceLimitService.java
+++ b/api/src/main/java/com/cloud/user/ResourceLimitService.java
@@ -27,7 +27,11 @@ import org.apache.cloudstack.framework.config.ConfigKey;
 
 public interface ResourceLimitService {
 
-    static final ConfigKey<Long> ResourceCountCheckInterval = new 
ConfigKey<Long>("Advanced", Long.class, "resourcecount.check.interval", "300",
+    static final ConfigKey<Long> MaxAccountSecondaryStorage = new 
ConfigKey<>("Account Defaults", Long.class, "max.account.secondary.storage", 
"400",
+            "The default maximum secondary storage space (in GiB) that can be 
used for an account", false);
+    static final ConfigKey<Long> MaxProjectSecondaryStorage = new 
ConfigKey<>("Project Defaults", Long.class, "max.project.secondary.storage", 
"400",
+            "The default maximum secondary storage space (in GiB) that can be 
used for a project", false);
+    static final ConfigKey<Long> ResourceCountCheckInterval = new 
ConfigKey<>("Advanced", Long.class, "resourcecount.check.interval", "300",
             "Time (in seconds) to wait before running resource recalculation 
and fixing task. Default is 300 seconds, Setting this to 0 disables execution 
of the task", false);
 
     /**
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..3ac83031ea 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 long defaultMaxSecondaryStorageInGB;
 
     private long processTimeout;
 
@@ -185,12 +185,12 @@ public class TemplateOrVolumePostUploadCommand {
         this.description = description;
     }
 
-    public void setDefaultMaxAccountSecondaryStorage(String 
defaultMaxAccountSecondaryStorage) {
-        this.defaultMaxAccountSecondaryStorage = 
defaultMaxAccountSecondaryStorage;
+    public void setDefaultMaxSecondaryStorageInGB(long 
defaultMaxSecondaryStorageInGB) {
+        this.defaultMaxSecondaryStorageInGB = defaultMaxSecondaryStorageInGB;
     }
 
-    public String getDefaultMaxAccountSecondaryStorage() {
-        return defaultMaxAccountSecondaryStorage;
+    public long getDefaultMaxSecondaryStorageInGB() {
+        return defaultMaxSecondaryStorageInGB;
     }
 
     public void setAccountId(long accountId) {
diff --git a/server/src/main/java/com/cloud/configuration/Config.java 
b/server/src/main/java/com/cloud/configuration/Config.java
index 3f04bad944..1fedad4306 100644
--- a/server/src/main/java/com/cloud/configuration/Config.java
+++ b/server/src/main/java/com/cloud/configuration/Config.java
@@ -1361,14 +1361,6 @@ public enum Config {
             "200",
             "The default maximum primary storage space (in GiB) that can be 
used for an account",
             null),
-    DefaultMaxAccountSecondaryStorage(
-            "Account Defaults",
-            ManagementServer.class,
-            Long.class,
-            "max.account.secondary.storage",
-            "400",
-            "The default maximum secondary storage space (in GiB) that can be 
used for an account",
-            null),
 
     //disabling lb as cluster sync does not work with distributed cluster
     SubDomainNetworkAccess(
@@ -1497,14 +1489,6 @@ public enum Config {
             "200",
             "The default maximum primary storage space (in GiB) that can be 
used for an project",
             null),
-    DefaultMaxProjectSecondaryStorage(
-            "Project Defaults",
-            ManagementServer.class,
-            Long.class,
-            "max.project.secondary.storage",
-            "400",
-            "The default maximum secondary storage space (in GiB) that can be 
used for an project",
-            null),
 
     ProjectInviteRequired(
             "Project Defaults",
diff --git 
a/server/src/main/java/com/cloud/resourcelimit/ResourceLimitManagerImpl.java 
b/server/src/main/java/com/cloud/resourcelimit/ResourceLimitManagerImpl.java
index 7245802617..5991d53563 100644
--- a/server/src/main/java/com/cloud/resourcelimit/ResourceLimitManagerImpl.java
+++ b/server/src/main/java/com/cloud/resourcelimit/ResourceLimitManagerImpl.java
@@ -226,7 +226,7 @@ public class ResourceLimitManagerImpl extends ManagerBase 
implements ResourceLim
             projectResourceLimitMap.put(Resource.ResourceType.cpu, 
Long.parseLong(_configDao.getValue(Config.DefaultMaxProjectCpus.key())));
             projectResourceLimitMap.put(Resource.ResourceType.memory, 
Long.parseLong(_configDao.getValue(Config.DefaultMaxProjectMemory.key())));
             projectResourceLimitMap.put(Resource.ResourceType.primary_storage, 
Long.parseLong(_configDao.getValue(Config.DefaultMaxProjectPrimaryStorage.key())));
-            
projectResourceLimitMap.put(Resource.ResourceType.secondary_storage, 
Long.parseLong(_configDao.getValue(Config.DefaultMaxProjectSecondaryStorage.key())));
+            
projectResourceLimitMap.put(Resource.ResourceType.secondary_storage, 
MaxProjectSecondaryStorage.value());
 
             accountResourceLimitMap.put(Resource.ResourceType.public_ip, 
Long.parseLong(_configDao.getValue(Config.DefaultMaxAccountPublicIPs.key())));
             accountResourceLimitMap.put(Resource.ResourceType.snapshot, 
Long.parseLong(_configDao.getValue(Config.DefaultMaxAccountSnapshots.key())));
@@ -238,7 +238,7 @@ public class ResourceLimitManagerImpl extends ManagerBase 
implements ResourceLim
             accountResourceLimitMap.put(Resource.ResourceType.cpu, 
Long.parseLong(_configDao.getValue(Config.DefaultMaxAccountCpus.key())));
             accountResourceLimitMap.put(Resource.ResourceType.memory, 
Long.parseLong(_configDao.getValue(Config.DefaultMaxAccountMemory.key())));
             accountResourceLimitMap.put(Resource.ResourceType.primary_storage, 
Long.parseLong(_configDao.getValue(Config.DefaultMaxAccountPrimaryStorage.key())));
-            
accountResourceLimitMap.put(Resource.ResourceType.secondary_storage, 
Long.parseLong(_configDao.getValue(Config.DefaultMaxAccountSecondaryStorage.key())));
+            
accountResourceLimitMap.put(Resource.ResourceType.secondary_storage, 
MaxAccountSecondaryStorage.value());
 
             domainResourceLimitMap.put(Resource.ResourceType.public_ip, 
Long.parseLong(_configDao.getValue(Config.DefaultMaxDomainPublicIPs.key())));
             domainResourceLimitMap.put(Resource.ResourceType.snapshot, 
Long.parseLong(_configDao.getValue(Config.DefaultMaxDomainSnapshots.key())));
@@ -1100,7 +1100,7 @@ public class ResourceLimitManagerImpl extends ManagerBase 
implements ResourceLim
 
     @Override
     public ConfigKey<?>[] getConfigKeys() {
-        return new ConfigKey<?>[] {ResourceCountCheckInterval};
+        return new ConfigKey<?>[] {ResourceCountCheckInterval, 
MaxAccountSecondaryStorage, MaxProjectSecondaryStorage};
     }
 
     protected class ResourceCountCheckTask extends ManagedContextRunnable {
diff --git a/server/src/main/java/com/cloud/storage/VolumeApiServiceImpl.java 
b/server/src/main/java/com/cloud/storage/VolumeApiServiceImpl.java
index a14cb373d1..e6726f6977 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.setDefaultMaxSecondaryStorageInGB(ResourceLimitService.MaxProjectSecondaryStorage.value());
+                } else {
+                    
command.setDefaultMaxSecondaryStorageInGB(ResourceLimitService.MaxAccountSecondaryStorage.value());
+                }
                 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..b7e449dcd7 100644
--- a/server/src/main/java/com/cloud/template/HypervisorTemplateAdapter.java
+++ b/server/src/main/java/com/cloud/template/HypervisorTemplateAdapter.java
@@ -93,6 +93,7 @@ import com.cloud.storage.dao.VMTemplateZoneDao;
 import com.cloud.storage.download.DownloadMonitor;
 import com.cloud.template.VirtualMachineTemplate.State;
 import com.cloud.user.Account;
+import com.cloud.user.ResourceLimitService;
 import com.cloud.utils.Pair;
 import com.cloud.utils.UriUtils;
 import com.cloud.utils.db.DB;
@@ -398,8 +399,13 @@ 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.setAccountId(template.getAccountId());
+                    Account account = 
_accountDao.findById(template.getAccountId());
+                    if (account.getType().equals(Account.Type.PROJECT)) {
+                        
payload.setDefaultMaxSecondaryStorageInGB(ResourceLimitService.MaxProjectSecondaryStorage.value());
+                    } else {
+                        
payload.setDefaultMaxSecondaryStorageInGB(ResourceLimitService.MaxAccountSecondaryStorage.value());
+                    }
                     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..231eacc568 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());
+        long defaultMaxSecondaryStorageInGB = 
cmd.getDefaultMaxSecondaryStorageInGB();
 
-        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