This is an automated email from the ASF dual-hosted git repository.
sureshanaparti pushed a commit to branch 4.19
in repository https://gitbox.apache.org/repos/asf/cloudstack.git
The following commit(s) were added to refs/heads/4.19 by this push:
new ed86dc973b1 protect against missing service offering (#9235)
ed86dc973b1 is described below
commit ed86dc973b15fde5687502ffc29b1ddaa8536e0e
Author: dahn <[email protected]>
AuthorDate: Fri Jun 14 11:55:46 2024 +0200
protect against missing service offering (#9235)
* protect agains missing service offering
* search removed before assuming none
* import
* javadoc
---
.../com/cloud/service/dao/ServiceOfferingDao.java | 2 +-
.../cloud/service/dao/ServiceOfferingDaoImpl.java | 4 ++--
server/src/main/java/com/cloud/api/ApiDBUtils.java | 4 ++--
.../com/cloud/api/query/dao/VolumeJoinDaoImpl.java | 24 ++++++++++++++++++++--
4 files changed, 27 insertions(+), 7 deletions(-)
diff --git
a/engine/schema/src/main/java/com/cloud/service/dao/ServiceOfferingDao.java
b/engine/schema/src/main/java/com/cloud/service/dao/ServiceOfferingDao.java
index e2fc5b49ae8..3b6fa8fa103 100644
--- a/engine/schema/src/main/java/com/cloud/service/dao/ServiceOfferingDao.java
+++ b/engine/schema/src/main/java/com/cloud/service/dao/ServiceOfferingDao.java
@@ -54,5 +54,5 @@ public interface ServiceOfferingDao extends
GenericDao<ServiceOfferingVO, Long>
List<ServiceOfferingVO> listPublicByCpuAndMemory(Integer cpus, Integer
memory);
- ServiceOfferingVO findServiceOfferingByComputeOnlyDiskOffering(long
diskOfferingId);
+ ServiceOfferingVO findServiceOfferingByComputeOnlyDiskOffering(long
diskOfferingId, boolean includingRemoved);
}
diff --git
a/engine/schema/src/main/java/com/cloud/service/dao/ServiceOfferingDaoImpl.java
b/engine/schema/src/main/java/com/cloud/service/dao/ServiceOfferingDaoImpl.java
index 5c8e4993829..ef6d4e71989 100644
---
a/engine/schema/src/main/java/com/cloud/service/dao/ServiceOfferingDaoImpl.java
+++
b/engine/schema/src/main/java/com/cloud/service/dao/ServiceOfferingDaoImpl.java
@@ -284,10 +284,10 @@ public class ServiceOfferingDaoImpl extends
GenericDaoBase<ServiceOfferingVO, Lo
}
@Override
- public ServiceOfferingVO findServiceOfferingByComputeOnlyDiskOffering(long
diskOfferingId) {
+ public ServiceOfferingVO findServiceOfferingByComputeOnlyDiskOffering(long
diskOfferingId, boolean includingRemoved) {
SearchCriteria<ServiceOfferingVO> sc =
SearchComputeOfferingByComputeOnlyDiskOffering.create();
sc.setParameters("disk_offering_id", diskOfferingId);
- List<ServiceOfferingVO> vos = listBy(sc);
+ List<ServiceOfferingVO> vos = includingRemoved ?
listIncludingRemovedBy(sc) : listBy(sc);
if (vos.size() == 0) {
return null;
}
diff --git a/server/src/main/java/com/cloud/api/ApiDBUtils.java
b/server/src/main/java/com/cloud/api/ApiDBUtils.java
index 97ecd982f53..c45e60f8dd5 100644
--- a/server/src/main/java/com/cloud/api/ApiDBUtils.java
+++ b/server/src/main/java/com/cloud/api/ApiDBUtils.java
@@ -1109,8 +1109,8 @@ public class ApiDBUtils {
return null;
}
- public static ServiceOfferingVO
findServiceOfferingByComputeOnlyDiskOffering(Long diskOfferingId) {
- ServiceOfferingVO off =
s_serviceOfferingDao.findServiceOfferingByComputeOnlyDiskOffering(diskOfferingId);
+ public static ServiceOfferingVO
findServiceOfferingByComputeOnlyDiskOffering(Long diskOfferingId, boolean
includingRemoved) {
+ ServiceOfferingVO off =
s_serviceOfferingDao.findServiceOfferingByComputeOnlyDiskOffering(diskOfferingId,
includingRemoved);
return off;
}
public static DomainVO findDomainById(Long domainId) {
diff --git
a/server/src/main/java/com/cloud/api/query/dao/VolumeJoinDaoImpl.java
b/server/src/main/java/com/cloud/api/query/dao/VolumeJoinDaoImpl.java
index e309a7534a3..1060fd840b5 100644
--- a/server/src/main/java/com/cloud/api/query/dao/VolumeJoinDaoImpl.java
+++ b/server/src/main/java/com/cloud/api/query/dao/VolumeJoinDaoImpl.java
@@ -188,8 +188,8 @@ public class VolumeJoinDaoImpl extends
GenericDaoBaseWithTagInformation<VolumeJo
if (volume.getDiskOfferingId() > 0) {
DiskOffering computeOnlyDiskOffering =
ApiDBUtils.findComputeOnlyDiskOfferingById(volume.getDiskOfferingId());
- if (computeOnlyDiskOffering != null) {
- ServiceOffering serviceOffering =
ApiDBUtils.findServiceOfferingByComputeOnlyDiskOffering(volume.getDiskOfferingId());
+ ServiceOffering serviceOffering =
getServiceOfferingForDiskOffering(volume, computeOnlyDiskOffering);
+ if (serviceOffering != null) {
volResponse.setServiceOfferingId(String.valueOf(serviceOffering.getId()));
volResponse.setServiceOfferingName(serviceOffering.getName());
volResponse.setServiceOfferingDisplayText(serviceOffering.getDisplayText());
@@ -283,6 +283,26 @@ public class VolumeJoinDaoImpl extends
GenericDaoBaseWithTagInformation<VolumeJo
return volResponse;
}
+ /**
+ * gets the {@see ServiceOffering} for the {@see Volume} with {@see
DiskOffering}
+ * It will first try existing ones
+ * If not found it will try to get a removed one
+ *
+ * @param volume
+ * @param computeOnlyDiskOffering
+ * @return the resulting offering or null
+ */
+ private static ServiceOffering
getServiceOfferingForDiskOffering(VolumeJoinVO volume, DiskOffering
computeOnlyDiskOffering) {
+ ServiceOffering serviceOffering = null;
+ if (computeOnlyDiskOffering != null) {
+ serviceOffering =
ApiDBUtils.findServiceOfferingByComputeOnlyDiskOffering(volume.getDiskOfferingId(),
false);
+ }
+ if (serviceOffering == null) {
+ serviceOffering =
ApiDBUtils.findServiceOfferingByComputeOnlyDiskOffering(volume.getDiskOfferingId(),
true);
+ }
+ return serviceOffering;
+ }
+
@Override
public VolumeResponse setVolumeResponse(ResponseView view, VolumeResponse
volData, VolumeJoinVO vol) {
long tag_id = vol.getTagId();