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