Skip to content

Commit fc3cd05

Browse files
DaanHooglanddhslove
authored andcommitted
protect against missing service offering (apache#9235)
* protect agains missing service offering * search removed before assuming none * import * javadoc
1 parent 514d1ec commit fc3cd05

File tree

4 files changed

+28
-8
lines changed

4 files changed

+28
-8
lines changed

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ List<ServiceOfferingVO> createSystemServiceOfferings(String name, String uniqueN
5454

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

57-
ServiceOfferingVO findServiceOfferingByComputeOnlyDiskOffering(long diskOfferingId);
58-
5957
List<ServiceOfferingVO> listByHostTag(String tag);
58+
59+
ServiceOfferingVO findServiceOfferingByComputeOnlyDiskOffering(long diskOfferingId, boolean includingRemoved);
6060
}

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
@@ -282,10 +282,10 @@ public List<ServiceOfferingVO> listPublicByCpuAndMemory(Integer cpus, Integer me
282282
}
283283

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

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
@@ -186,8 +186,8 @@ public VolumeResponse newVolumeResponse(ResponseView view, VolumeJoinVO volume)
186186

187187
if (volume.getDiskOfferingId() > 0) {
188188
DiskOffering computeOnlyDiskOffering = ApiDBUtils.findComputeOnlyDiskOfferingById(volume.getDiskOfferingId());
189-
if (computeOnlyDiskOffering != null) {
190-
ServiceOffering serviceOffering = ApiDBUtils.findServiceOfferingByComputeOnlyDiskOffering(volume.getDiskOfferingId());
189+
ServiceOffering serviceOffering = getServiceOfferingForDiskOffering(volume, computeOnlyDiskOffering);
190+
if (serviceOffering != null) {
191191
volResponse.setServiceOfferingId(String.valueOf(serviceOffering.getId()));
192192
volResponse.setServiceOfferingName(serviceOffering.getName());
193193
volResponse.setServiceOfferingDisplayText(serviceOffering.getDisplayText());
@@ -281,6 +281,26 @@ public VolumeResponse newVolumeResponse(ResponseView view, VolumeJoinVO volume)
281281
return volResponse;
282282
}
283283

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

0 commit comments

Comments
 (0)