From 07c3dc86b2df474a26e5ba9329c005bc1d7dc8ae Mon Sep 17 00:00:00 2001 From: Fabricio Duarte Date: Mon, 9 Mar 2026 08:23:58 -0300 Subject: [PATCH] [22.0] Consider infinite resources when calculating secondary storage limit for upload operations --- .../command/TemplateOrVolumePostUploadCommand.java | 8 ++++++++ .../main/java/com/cloud/storage/VolumeApiServiceImpl.java | 2 ++ .../com/cloud/template/HypervisorTemplateAdapter.java | 4 ++-- 3 files changed, 12 insertions(+), 2 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 3ac83031eaf..9acfe30bf43 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 @@ -19,6 +19,9 @@ package org.apache.cloudstack.storage.command; +import com.cloud.configuration.Resource; +import org.apache.cloudstack.utils.bytescale.ByteScaleUtils; + public class TemplateOrVolumePostUploadCommand { long entityId; @@ -185,6 +188,11 @@ public class TemplateOrVolumePostUploadCommand { this.description = description; } + public void setDefaultMaxSecondaryStorageInBytes(long defaultMaxSecondaryStorageInBytes) { + this.defaultMaxSecondaryStorageInGB = defaultMaxSecondaryStorageInBytes != Resource.RESOURCE_UNLIMITED ? + ByteScaleUtils.bytesToGibibytes(defaultMaxSecondaryStorageInBytes) : Resource.RESOURCE_UNLIMITED; + } + public void setDefaultMaxSecondaryStorageInGB(long defaultMaxSecondaryStorageInGB) { this.defaultMaxSecondaryStorageInGB = defaultMaxSecondaryStorageInGB; } diff --git a/server/src/main/java/com/cloud/storage/VolumeApiServiceImpl.java b/server/src/main/java/com/cloud/storage/VolumeApiServiceImpl.java index 5023686b248..3fc6183b919 100644 --- a/server/src/main/java/com/cloud/storage/VolumeApiServiceImpl.java +++ b/server/src/main/java/com/cloud/storage/VolumeApiServiceImpl.java @@ -542,7 +542,9 @@ public class VolumeApiServiceImpl extends ManagerBase implements VolumeApiServic Account account = _accountDao.findById(accountId); Domain domain = domainDao.findById(account.getDomainId()); + // one of the two following might have to be removed command.setDefaultMaxSecondaryStorageInGB(_resourceLimitMgr.findCorrectResourceLimitForAccountAndDomain(account, domain, ResourceType.secondary_storage, null)); + command.setDefaultMaxSecondaryStorageInBytes(_resourceLimitMgr.findCorrectResourceLimitForAccountAndDomain(account, domain, ResourceType.secondary_storage, null)); command.setAccountId(accountId); Gson gson = new GsonBuilder().create(); String metadata = EncryptionUtil.encodeData(gson.toJson(command), key); diff --git a/server/src/main/java/com/cloud/template/HypervisorTemplateAdapter.java b/server/src/main/java/com/cloud/template/HypervisorTemplateAdapter.java index 6b173a4eb18..6084987e29c 100644 --- a/server/src/main/java/com/cloud/template/HypervisorTemplateAdapter.java +++ b/server/src/main/java/com/cloud/template/HypervisorTemplateAdapter.java @@ -500,9 +500,9 @@ public class HypervisorTemplateAdapter extends TemplateAdapterBase { boolean dataDiskDeletetionResult = true; List dataDiskTemplates = templateDao.listByParentTemplatetId(template.getId()); if (CollectionUtils.isNotEmpty(dataDiskTemplates)) { - logger.info("Template: {} has Datadisk template(s) associated with it. Delete Datadisk templates before deleting the template", template); + logger.info("Template: {} has Datadisk template(s) associated with it. Delete Datadisk Templates before deleting the Template", template); for (VMTemplateVO dataDiskTemplate : dataDiskTemplates) { - logger.info("Delete Datadisk template: {} from image store: {}", dataDiskTemplate, imageStore); + logger.info("Delete Datadisk Template: {} from image store: {}", dataDiskTemplate, imageStore); AsyncCallFuture future = imageService.deleteTemplateAsync(imageFactory.getTemplate(dataDiskTemplate.getId(), imageStore)); try { TemplateApiResult result = future.get();