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[])
*/