diff --git a/api/src/com/cloud/exception/DiscoveredWithErrorException.java b/api/src/com/cloud/exception/DiscoveredWithErrorException.java new file mode 100644 index 00000000000..6af3d386d3a --- /dev/null +++ b/api/src/com/cloud/exception/DiscoveredWithErrorException.java @@ -0,0 +1,16 @@ +package com.cloud.exception; + +import com.cloud.utils.SerialVersionUID; + +public class DiscoveredWithErrorException extends DiscoveryException { + + private static final long serialVersionUID = SerialVersionUID.DiscoveredWithErrorException; + + public DiscoveredWithErrorException(String msg) { + this(msg, null); + } + + public DiscoveredWithErrorException(String msg, Throwable cause) { + super(msg, cause); + } +} diff --git a/core/src/com/cloud/hypervisor/xen/resource/XenServerConnectionPool.java b/core/src/com/cloud/hypervisor/xen/resource/XenServerConnectionPool.java index f9cef812e14..6e8097824e7 100644 --- a/core/src/com/cloud/hypervisor/xen/resource/XenServerConnectionPool.java +++ b/core/src/com/cloud/hypervisor/xen/resource/XenServerConnectionPool.java @@ -298,7 +298,7 @@ public class XenServerConnectionPool { } - public String getMasterIp(String ip, String username, String password) { + public String getMasterIp(String ip, String username, String password) throws XenAPIException { Connection slaveConn = null; try{ slaveConn = new Connection(getURL(ip), 10); @@ -312,6 +312,9 @@ public class XenServerConnectionPool { Host master = pr.master; masterIp = master.getAddress(slaveConn); return masterIp; + }catch(Types.SessionAuthenticationFailed e){ + s_logger.debug("Failed to slave local login to " + ip + " due to " + e.toString()); + throw e; }catch ( Exception e){ s_logger.debug("Failed to slave local login to " + ip + " due to " + e.toString()); } finally { diff --git a/server/src/com/cloud/agent/manager/AgentManagerImpl.java b/server/src/com/cloud/agent/manager/AgentManagerImpl.java index b26289c6ebf..ebf434b9288 100755 --- a/server/src/com/cloud/agent/manager/AgentManagerImpl.java +++ b/server/src/com/cloud/agent/manager/AgentManagerImpl.java @@ -106,6 +106,7 @@ import com.cloud.deploy.DeploymentPlanner.ExcludeList; import com.cloud.event.dao.EventDao; import com.cloud.exception.AgentUnavailableException; import com.cloud.exception.ConnectionException; +import com.cloud.exception.DiscoveredWithErrorException; import com.cloud.exception.DiscoveryException; import com.cloud.exception.InsufficientServerCapacityException; import com.cloud.exception.InvalidParameterValueException; @@ -970,7 +971,9 @@ public class AgentManagerImpl implements AgentManager, HandlerFactory, ResourceS try { resources = discoverer.find(dcId, podId, clusterId, uri, username, password); - } catch (Exception e) { + } catch (DiscoveredWithErrorException e){ + throw e; + }catch (Exception e) { s_logger.info("Exception in host discovery process with discoverer: " + discoverer.getName() + ", skip to another discoverer if there is any"); diff --git a/server/src/com/cloud/hypervisor/kvm/discoverer/KvmServerDiscoverer.java b/server/src/com/cloud/hypervisor/kvm/discoverer/KvmServerDiscoverer.java index bc039041f92..540a70e049e 100644 --- a/server/src/com/cloud/hypervisor/kvm/discoverer/KvmServerDiscoverer.java +++ b/server/src/com/cloud/hypervisor/kvm/discoverer/KvmServerDiscoverer.java @@ -40,6 +40,7 @@ import com.cloud.configuration.Config; import com.cloud.configuration.dao.ConfigurationDao; import com.cloud.dc.ClusterVO; import com.cloud.dc.dao.ClusterDao; +import com.cloud.exception.DiscoveredWithErrorException; import com.cloud.exception.DiscoveryException; import com.cloud.host.Host; import com.cloud.host.HostVO; @@ -157,7 +158,7 @@ public class KvmServerDiscoverer extends DiscovererBase implements Discoverer, sshConnection.connect(null, 60000, 60000); if (!sshConnection.authenticateWithPassword(username, password)) { s_logger.debug("Failed to authenticate"); - return null; + throw new DiscoveredWithErrorException("Authetication error"); } if (!SSHCmdHelper.sshExecuteCmd(sshConnection, "lsmod|grep kvm >& /dev/null", 3)) { @@ -198,7 +199,9 @@ public class KvmServerDiscoverer extends DiscovererBase implements Discoverer, details.put("guid", guidWithTail); return resources; - } catch (Exception e) { + } catch (DiscoveredWithErrorException e){ + throw e; + }catch (Exception e) { String msg = " can't setup agent, due to " + e.toString() + " - " + e.getMessage(); s_logger.warn(msg); } finally { diff --git a/server/src/com/cloud/hypervisor/xen/discoverer/XcpServerDiscoverer.java b/server/src/com/cloud/hypervisor/xen/discoverer/XcpServerDiscoverer.java index 2da7594de01..3df1d63a095 100644 --- a/server/src/com/cloud/hypervisor/xen/discoverer/XcpServerDiscoverer.java +++ b/server/src/com/cloud/hypervisor/xen/discoverer/XcpServerDiscoverer.java @@ -46,6 +46,7 @@ import com.cloud.dc.ClusterVO; import com.cloud.dc.dao.ClusterDao; import com.cloud.exception.AgentUnavailableException; import com.cloud.exception.ConnectionException; +import com.cloud.exception.DiscoveredWithErrorException; import com.cloud.exception.DiscoveryException; import com.cloud.exception.OperationTimedoutException; import com.cloud.host.HostEnvironment; @@ -290,9 +291,8 @@ public class XcpServerDiscoverer extends DiscovererBase implements Discoverer, L resource.start(); resources.put(resource, details); } - } catch (SessionAuthenticationFailed e) { - s_logger.warn("Authentication error", e); - return null; + } catch (SessionAuthenticationFailed e) { + throw new DiscoveredWithErrorException("Authetication error"); } catch (XenAPIException e) { s_logger.warn("XenAPI exception", e); return null; diff --git a/utils/src/com/cloud/utils/SerialVersionUID.java b/utils/src/com/cloud/utils/SerialVersionUID.java index a1a578fbd67..90be224df8c 100755 --- a/utils/src/com/cloud/utils/SerialVersionUID.java +++ b/utils/src/com/cloud/utils/SerialVersionUID.java @@ -62,4 +62,5 @@ public interface SerialVersionUID { public static final long sshException = Base | 0x22; public static final long HttpCallException = Base | 0x23; public static final long VirtualMachineMigrationException = Base | 0x24; + public static final long DiscoveredWithErrorException = Base | 0x25; }