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);
}