From 5b4b5960235587e7c300860316bc62eec6e62d49 Mon Sep 17 00:00:00 2001 From: Likitha Shetty Date: Wed, 1 Aug 2012 14:15:18 +0530 Subject: [PATCH] CS-15771. ec2-run-instances fails with error "Unable to find service offering by id". Add a check in EC2Engine to verify if the service offering returned by CloudStack has not been deleted. Reviewed by: Prachi --- .../bridge/persist/dao/CloudStackSvcOfferingDao.java | 9 ++++----- .../com/cloud/bridge/service/core/ec2/EC2Engine.java | 8 ++++++-- .../stack/models/CloudStackServiceOffering.hbm.xml | 3 +++ .../stack/models/CloudStackServiceOffering.java | 12 ++++++++++++ 4 files changed, 25 insertions(+), 7 deletions(-) diff --git a/awsapi/src/com/cloud/bridge/persist/dao/CloudStackSvcOfferingDao.java b/awsapi/src/com/cloud/bridge/persist/dao/CloudStackSvcOfferingDao.java index 96c6ec721e7..922d5e1da42 100644 --- a/awsapi/src/com/cloud/bridge/persist/dao/CloudStackSvcOfferingDao.java +++ b/awsapi/src/com/cloud/bridge/persist/dao/CloudStackSvcOfferingDao.java @@ -15,10 +15,10 @@ */ package com.cloud.bridge.persist.dao; +import java.util.List; import org.apache.log4j.Logger; import com.cloud.bridge.persist.EntityDao; -import com.cloud.stack.models.CloudStackConfiguration; import com.cloud.stack.models.CloudStackServiceOffering; @@ -29,10 +29,9 @@ public class CloudStackSvcOfferingDao extends EntityDao getSvcOfferingByName( String name ){ + return queryEntities("from CloudStackServiceOffering where name=?", new Object[] {name}); + } public CloudStackServiceOffering getSvcOfferingById( String id ){ return queryEntity("from CloudStackServiceOffering where id=?", new Object[] {id}); diff --git a/awsapi/src/com/cloud/bridge/service/core/ec2/EC2Engine.java b/awsapi/src/com/cloud/bridge/service/core/ec2/EC2Engine.java index fd54eb4d61f..449eaecee5a 100644 --- a/awsapi/src/com/cloud/bridge/service/core/ec2/EC2Engine.java +++ b/awsapi/src/com/cloud/bridge/service/core/ec2/EC2Engine.java @@ -1775,8 +1775,12 @@ public class EC2Engine { if (null == instanceType) instanceType = "m1.small"; CloudStackSvcOfferingDao dao = new CloudStackSvcOfferingDao(); - return dao.getSvcOfferingByName(instanceType); - + List svcOfferingList = dao.getSvcOfferingByName(instanceType); + for (CloudStackServiceOffering svcOffering : svcOfferingList) { + if (svcOffering.getRemoved() == null) + return svcOffering; + } + return null; } catch(Exception e) { logger.error( "Error while retrieving ServiceOffering information by name - ", e); throw new EC2ServiceException(ServerError.InternalError, e.getMessage()); diff --git a/awsapi/src/com/cloud/stack/models/CloudStackServiceOffering.hbm.xml b/awsapi/src/com/cloud/stack/models/CloudStackServiceOffering.hbm.xml index f3c5d4d17f3..e9c73b82434 100644 --- a/awsapi/src/com/cloud/stack/models/CloudStackServiceOffering.hbm.xml +++ b/awsapi/src/com/cloud/stack/models/CloudStackServiceOffering.hbm.xml @@ -11,6 +11,9 @@ + + + diff --git a/awsapi/src/com/cloud/stack/models/CloudStackServiceOffering.java b/awsapi/src/com/cloud/stack/models/CloudStackServiceOffering.java index 9dde25a553a..e3df1aaed8d 100644 --- a/awsapi/src/com/cloud/stack/models/CloudStackServiceOffering.java +++ b/awsapi/src/com/cloud/stack/models/CloudStackServiceOffering.java @@ -57,6 +57,8 @@ public class CloudStackServiceOffering { private String systemVmType; @SerializedName(ApiConstants.TAGS) private String tags; + @SerializedName(ApiConstants.REMOVED) + private String removed; /** * @@ -196,4 +198,14 @@ public class CloudStackServiceOffering { return tags; } + /** + * @return the removed + */ + public String getRemoved() { + return removed; + } + + public void setRemoved(String removed) { + this.removed = removed; + } }