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 <d...@onecht.net>
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();

Reply via email to