diff --git a/api/src/org/apache/cloudstack/affinity/AffinityGroupService.java b/api/src/org/apache/cloudstack/affinity/AffinityGroupService.java index 7423c4864d5..1b30e58d92f 100644 --- a/api/src/org/apache/cloudstack/affinity/AffinityGroupService.java +++ b/api/src/org/apache/cloudstack/affinity/AffinityGroupService.java @@ -73,4 +73,6 @@ public interface AffinityGroupService { UserVm updateVMAffinityGroups(Long vmId, List affinityGroupIds); + boolean isAffinityGroupProcessorAvailable(String affinityGroupType); + } diff --git a/client/tomcatconf/applicationContext.xml.in b/client/tomcatconf/applicationContext.xml.in index c717b560a1c..e6c578c5a9a 100644 --- a/client/tomcatconf/applicationContext.xml.in +++ b/client/tomcatconf/applicationContext.xml.in @@ -900,7 +900,9 @@ - + + + diff --git a/server/src/com/cloud/vm/UserVmManagerImpl.java b/server/src/com/cloud/vm/UserVmManagerImpl.java index 79e7f5ae6fc..53316b85158 100755 --- a/server/src/com/cloud/vm/UserVmManagerImpl.java +++ b/server/src/com/cloud/vm/UserVmManagerImpl.java @@ -38,6 +38,7 @@ import org.apache.log4j.Logger; import com.cloud.server.ConfigurationServer; import org.apache.cloudstack.acl.ControlledEntity.ACLType; import org.apache.cloudstack.acl.SecurityChecker.AccessType; +import org.apache.cloudstack.affinity.AffinityGroupService; import org.apache.cloudstack.affinity.AffinityGroupVO; import org.apache.cloudstack.affinity.dao.AffinityGroupDao; import org.apache.cloudstack.affinity.dao.AffinityGroupVMMapDao; @@ -418,6 +419,8 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Use DedicatedResourceDao _dedicatedDao; @Inject ConfigurationServer _configServer; + @Inject + AffinityGroupService _affinityGroupService; protected ScheduledExecutorService _executor = null; protected int _expungeInterval; @@ -2494,7 +2497,10 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Use for (Long affinityGroupId : affinityGroupIdList) { AffinityGroupVO ag = _affinityGroupDao.findById(affinityGroupId); if (ag == null) { - throw new InvalidParameterValueException("Unable to find affinity group by id " + affinityGroupId); + throw new InvalidParameterValueException("Unable to find affinity group " + ag); + } else if (!_affinityGroupService.isAffinityGroupProcessorAvailable(ag.getType())) { + throw new InvalidParameterValueException("Affinity group type is not supported for group: " + ag + + " ,type: " + ag.getType() + " , Please try again after removing the affinity group"); } else { // verify permissions _accountMgr.checkAccess(caller, null, true, owner, ag); diff --git a/server/src/org/apache/cloudstack/affinity/AffinityGroupServiceImpl.java b/server/src/org/apache/cloudstack/affinity/AffinityGroupServiceImpl.java index 52112792d14..ad43581bbe7 100644 --- a/server/src/org/apache/cloudstack/affinity/AffinityGroupServiceImpl.java +++ b/server/src/org/apache/cloudstack/affinity/AffinityGroupServiceImpl.java @@ -80,6 +80,16 @@ public class AffinityGroupServiceImpl extends ManagerBase implements AffinityGro @Inject private UserVmDao _userVmDao; + protected List _affinityProcessors; + + public List getAffinityGroupProcessors() { + return _affinityProcessors; + } + + public void setAffinityGroupProcessors(List affinityProcessors) { + this._affinityProcessors = affinityProcessors; + } + @Override @ActionEvent(eventType = EventTypes.EVENT_AFFINITY_GROUP_CREATE, eventDescription = "Creating Affinity Group", create = true) public AffinityGroup createAffinityGroup(String account, Long domainId, String affinityGroupName, @@ -359,4 +369,14 @@ public class AffinityGroupServiceImpl extends ManagerBase implements AffinityGro } + @Override + public boolean isAffinityGroupProcessorAvailable(String affinityGroupType) { + for (AffinityGroupProcessor processor : _affinityProcessors) { + if (affinityGroupType != null && affinityGroupType.equals(processor.getType())) { + return true; + } + } + return false; + } + }