diff --git a/ovm/src/com/cloud/ovm/hypervisor/OvmDiscoverer.java b/ovm/src/com/cloud/ovm/hypervisor/OvmDiscoverer.java index 59b5d4b7e34..6c5e4a97552 100755 --- a/ovm/src/com/cloud/ovm/hypervisor/OvmDiscoverer.java +++ b/ovm/src/com/cloud/ovm/hypervisor/OvmDiscoverer.java @@ -32,6 +32,8 @@ import com.cloud.resource.ResourceStateAdapter; import com.cloud.resource.ServerResource; import com.cloud.resource.UnableDeleteHostException; import com.cloud.utils.component.Inject; +import com.cloud.utils.db.SearchCriteria; +import com.cloud.utils.db.SearchCriteria2; import com.cloud.utils.exception.CloudRuntimeException; import com.cloud.utils.ssh.SSHCmdHelper; @@ -64,6 +66,14 @@ public class OvmDiscoverer extends DiscovererBase implements Discoverer, Resourc return super.stop(); } + private boolean checkIfExisted(String guid) { + SearchCriteria2 sc = SearchCriteria2.create(HostVO.class, Long.class); + sc.addAnd(sc.getEntity().getGuid(), SearchCriteria.Op.EQ, guid); + sc.addAnd(sc.getEntity().getHypervisorType(), SearchCriteria.Op.EQ, HypervisorType.Ovm); + List hosts = sc.list(); + return !hosts.isEmpty(); + } + @Override public Map> find(long dcId, Long podId, Long clusterId, URI url, String username, @@ -110,6 +120,11 @@ public class OvmDiscoverer extends DiscovererBase implements Discoverer, Resourc String hostIp = ia.getHostAddress(); String guid = UUID.nameUUIDFromBytes(hostIp.getBytes()).toString(); + if (checkIfExisted(guid)) { + throw new CloudRuntimeException("The host " + hostIp + " has been added before"); + } + + s_logger.debug("Ovm discover is going to disover host having guid " + guid); ClusterVO clu = _clusterDao.findById(clusterId); if (clu.getGuid() == null) {