Skip to content

Commit ed86dc9

Browse files
authored
protect against missing service offering (#9235)
* protect agains missing service offering * search removed before assuming none * import * javadoc
1 parent 8d02e5f commit ed86dc9

File tree

4 files changed

+27
-7
lines changed

4 files changed

+27
-7
lines changed

engine/schema/src/main/java/com/cloud/service/dao/ServiceOfferingDao.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,5 +54,5 @@ List<ServiceOfferingVO> createSystemServiceOfferings(String name, String uniqueN
5454

5555
List<ServiceOfferingVO> listPublicByCpuAndMemory(Integer cpus, Integer memory);
5656

57-
ServiceOfferingVO findServiceOfferingByComputeOnlyDiskOffering(long diskOfferingId);
57+
ServiceOfferingVO findServiceOfferingByComputeOnlyDiskOffering(long diskOfferingId, boolean includingRemoved);
5858
}

engine/schema/src/main/java/com/cloud/service/dao/ServiceOfferingDaoImpl.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -284,10 +284,10 @@ public List<ServiceOfferingVO> listPublicByCpuAndMemory(Integer cpus, Integer me
284284
}
285285

286286
@Override
287-
public ServiceOfferingVO findServiceOfferingByComputeOnlyDiskOffering(long diskOfferingId) {
287+
public ServiceOfferingVO findServiceOfferingByComputeOnlyDiskOffering(long diskOfferingId, boolean includingRemoved) {
288288
SearchCriteria<ServiceOfferingVO> sc = SearchComputeOfferingByComputeOnlyDiskOffering.create();
289289
sc.setParameters("disk_offering_id", diskOfferingId);
290-
List<ServiceOfferingVO> vos = listBy(sc);
290+
List<ServiceOfferingVO> vos = includingRemoved ? listIncludingRemovedBy(sc) : listBy(sc);
291291
if (vos.size() == 0) {
292292
return null;
293293
}

server/src/main/java/com/cloud/api/ApiDBUtils.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1109,8 +1109,8 @@ public static DiskOfferingVO findDiskOfferingById(Long diskOfferingId) {
11091109
return null;
11101110
}
11111111

1112-
public static ServiceOfferingVO findServiceOfferingByComputeOnlyDiskOffering(Long diskOfferingId) {
1113-
ServiceOfferingVO off = s_serviceOfferingDao.findServiceOfferingByComputeOnlyDiskOffering(diskOfferingId);
1112+
public static ServiceOfferingVO findServiceOfferingByComputeOnlyDiskOffering(Long diskOfferingId, boolean includingRemoved) {
1113+
ServiceOfferingVO off = s_serviceOfferingDao.findServiceOfferingByComputeOnlyDiskOffering(diskOfferingId, includingRemoved);
11141114
return off;
11151115
}
11161116
public static DomainVO findDomainById(Long domainId) {

server/src/main/java/com/cloud/api/query/dao/VolumeJoinDaoImpl.java

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -188,8 +188,8 @@ public VolumeResponse newVolumeResponse(ResponseView view, VolumeJoinVO volume)
188188

189189
if (volume.getDiskOfferingId() > 0) {
190190
DiskOffering computeOnlyDiskOffering = ApiDBUtils.findComputeOnlyDiskOfferingById(volume.getDiskOfferingId());
191-
if (computeOnlyDiskOffering != null) {
192-
ServiceOffering serviceOffering = ApiDBUtils.findServiceOfferingByComputeOnlyDiskOffering(volume.getDiskOfferingId());
191+
ServiceOffering serviceOffering = getServiceOfferingForDiskOffering(volume, computeOnlyDiskOffering);
192+
if (serviceOffering != null) {
193193
volResponse.setServiceOfferingId(String.valueOf(serviceOffering.getId()));
194194
volResponse.setServiceOfferingName(serviceOffering.getName());
195195
volResponse.setServiceOfferingDisplayText(serviceOffering.getDisplayText());
@@ -283,6 +283,26 @@ public VolumeResponse newVolumeResponse(ResponseView view, VolumeJoinVO volume)
283283
return volResponse;
284284
}
285285

286+
/**
287+
* gets the {@see ServiceOffering} for the {@see Volume} with {@see DiskOffering}
288+
* It will first try existing ones
289+
* If not found it will try to get a removed one
290+
*
291+
* @param volume
292+
* @param computeOnlyDiskOffering
293+
* @return the resulting offering or null
294+
*/
295+
private static ServiceOffering getServiceOfferingForDiskOffering(VolumeJoinVO volume, DiskOffering computeOnlyDiskOffering) {
296+
ServiceOffering serviceOffering = null;
297+
if (computeOnlyDiskOffering != null) {
298+
serviceOffering = ApiDBUtils.findServiceOfferingByComputeOnlyDiskOffering(volume.getDiskOfferingId(), false);
299+
}
300+
if (serviceOffering == null) {
301+
serviceOffering = ApiDBUtils.findServiceOfferingByComputeOnlyDiskOffering(volume.getDiskOfferingId(), true);
302+
}
303+
return serviceOffering;
304+
}
305+
286306
@Override
287307
public VolumeResponse setVolumeResponse(ResponseView view, VolumeResponse volData, VolumeJoinVO vol) {
288308
long tag_id = vol.getTagId();

0 commit comments

Comments
 (0)