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

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


The following commit(s) were added to refs/heads/4.18 by this push:
     new fdb23dae40f server: Use max secondary storage defined on the account 
during upload  (#7441)
fdb23dae40f is described below

commit fdb23dae40fc7a2dcbcbc9d31c026fb29d6f0aa1
Author: João Jandre <[email protected]>
AuthorDate: Thu Aug 10 06:39:40 2023 -0300

    server: Use max secondary storage defined on the account during upload  
(#7441)
---
 .../main/java/com/cloud/user/ResourceLimitService.java |  9 +++++++++
 .../cloud/resourcelimit/ResourceLimitManagerImpl.java  | 12 ++++++++++++
 .../java/com/cloud/storage/VolumeApiServiceImpl.java   | 18 +++++++++++-------
 .../com/cloud/template/HypervisorTemplateAdapter.java  | 16 ++++++++--------
 .../com/cloud/vpc/MockResourceLimitManagerImpl.java    |  5 +++++
 5 files changed, 45 insertions(+), 15 deletions(-)

diff --git a/api/src/main/java/com/cloud/user/ResourceLimitService.java 
b/api/src/main/java/com/cloud/user/ResourceLimitService.java
index 41b2c8135cf..f2d87a4390d 100644
--- a/api/src/main/java/com/cloud/user/ResourceLimitService.java
+++ b/api/src/main/java/com/cloud/user/ResourceLimitService.java
@@ -117,6 +117,15 @@ public interface ResourceLimitService {
      */
     public long findDefaultResourceLimitForDomain(ResourceType resourceType);
 
+    /**
+     * Finds the resource limit for a specified account, domain and type.
+     *
+     * @param domain
+     * @param type
+     * @return resource limit
+     */
+    public long findCorrectResourceLimitForAccountAndDomain(Account account, 
Domain domain, ResourceType type);
+
     /**
      * Increments the resource count
      *
diff --git 
a/server/src/main/java/com/cloud/resourcelimit/ResourceLimitManagerImpl.java 
b/server/src/main/java/com/cloud/resourcelimit/ResourceLimitManagerImpl.java
index 288315d5b62..dda224124fb 100644
--- a/server/src/main/java/com/cloud/resourcelimit/ResourceLimitManagerImpl.java
+++ b/server/src/main/java/com/cloud/resourcelimit/ResourceLimitManagerImpl.java
@@ -547,6 +547,18 @@ public class ResourceLimitManagerImpl extends ManagerBase 
implements ResourceLim
         return resourceLimit;
     }
 
+    @Override
+    public long findCorrectResourceLimitForAccountAndDomain(Account account, 
Domain domain, ResourceType type) {
+        long maxSecondaryStorageForAccount = 
findCorrectResourceLimitForAccount(account, type);
+        long maxSecondaryStorageForDomain = 
findCorrectResourceLimitForDomain(domain, type);
+
+        if (maxSecondaryStorageForDomain == Resource.RESOURCE_UNLIMITED || 
maxSecondaryStorageForAccount == Resource.RESOURCE_UNLIMITED) {
+            return Math.max(maxSecondaryStorageForDomain, 
maxSecondaryStorageForAccount);
+        }
+
+        return Math.min(maxSecondaryStorageForDomain, 
maxSecondaryStorageForAccount);
+    }
+
     @Override
     @DB
     public void checkResourceLimit(final Account account, final ResourceType 
type, long... count) throws ResourceAllocationException {
diff --git a/server/src/main/java/com/cloud/storage/VolumeApiServiceImpl.java 
b/server/src/main/java/com/cloud/storage/VolumeApiServiceImpl.java
index e03942edc59..69f455d4774 100644
--- a/server/src/main/java/com/cloud/storage/VolumeApiServiceImpl.java
+++ b/server/src/main/java/com/cloud/storage/VolumeApiServiceImpl.java
@@ -34,6 +34,7 @@ import java.util.concurrent.ExecutionException;
 
 import javax.inject.Inject;
 
+import com.cloud.domain.dao.DomainDao;
 import org.apache.cloudstack.api.ApiConstants.IoDriverPolicy;
 import org.apache.cloudstack.api.ApiErrorCode;
 import org.apache.cloudstack.api.InternalIdentity;
@@ -331,6 +332,9 @@ public class VolumeApiServiceImpl extends ManagerBase 
implements VolumeApiServic
     @Inject
     protected SnapshotHelper snapshotHelper;
 
+    @Inject
+    protected DomainDao domainDao;
+
     @Inject
     protected ProjectManager projectManager;
     @Inject
@@ -486,13 +490,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.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());
-                }
+
+                long accountId = vol.getAccountId();
+                Account account = _accountDao.findById(accountId);
+                Domain domain = domainDao.findById(account.getDomainId());
+
+                
command.setDefaultMaxSecondaryStorageInGB(_resourceLimitMgr.findCorrectResourceLimitForAccountAndDomain(account,
 domain, ResourceType.secondary_storage));
+                command.setAccountId(accountId);
                 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 2204e5a78b0..f5c19ecff1d 100644
--- a/server/src/main/java/com/cloud/template/HypervisorTemplateAdapter.java
+++ b/server/src/main/java/com/cloud/template/HypervisorTemplateAdapter.java
@@ -28,6 +28,7 @@ import java.util.stream.Collectors;
 
 import javax.inject.Inject;
 
+import com.cloud.domain.Domain;
 import org.apache.cloudstack.agent.directdownload.CheckUrlAnswer;
 import org.apache.cloudstack.agent.directdownload.CheckUrlCommand;
 import org.apache.cloudstack.annotation.AnnotationService;
@@ -93,7 +94,6 @@ 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;
@@ -402,13 +402,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.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());
-                    }
+
+                    Long accountId = template.getAccountId();
+                    Account account = _accountDao.findById(accountId);
+                    Domain domain = _domainDao.findById(account.getDomainId());
+
+                    
payload.setDefaultMaxSecondaryStorageInGB(_resourceLimitMgr.findCorrectResourceLimitForAccountAndDomain(account,
 domain, ResourceType.secondary_storage));
+                    payload.setAccountId(accountId);
                     payload.setRemoteEndPoint(ep.getPublicAddr());
                     payload.setRequiresHvm(template.requiresHvm());
                     payload.setDescription(template.getDisplayText());
diff --git 
a/server/src/test/java/com/cloud/vpc/MockResourceLimitManagerImpl.java 
b/server/src/test/java/com/cloud/vpc/MockResourceLimitManagerImpl.java
index 1d1da5331d9..9b091dedc21 100644
--- a/server/src/test/java/com/cloud/vpc/MockResourceLimitManagerImpl.java
+++ b/server/src/test/java/com/cloud/vpc/MockResourceLimitManagerImpl.java
@@ -93,6 +93,11 @@ public class MockResourceLimitManagerImpl extends 
ManagerBase implements Resourc
         return 0;
     }
 
+    @Override
+    public long findCorrectResourceLimitForAccountAndDomain(Account account, 
Domain domain, ResourceType type) {
+        return 0;
+    }
+
     /* (non-Javadoc)
      * @see com.cloud.user.ResourceLimitService#incrementResourceCount(long, 
com.cloud.configuration.Resource.ResourceType, java.lang.Long[])
      */

Reply via email to