diff --git a/server/src/com/cloud/agent/manager/AgentManagerImpl.java b/server/src/com/cloud/agent/manager/AgentManagerImpl.java index f21eee499e0..590bd65d93a 100755 --- a/server/src/com/cloud/agent/manager/AgentManagerImpl.java +++ b/server/src/com/cloud/agent/manager/AgentManagerImpl.java @@ -702,8 +702,7 @@ public class AgentManagerImpl implements AgentManager, HandlerFactory, + discoverer.getName()); } if (resources != null) { - for (Map.Entry> entry : resources - .entrySet()) { + for (Map.Entry> entry : resources.entrySet()) { ServerResource resource = entry.getKey(); AgentAttache attache = simulateStart(resource, entry.getValue(), true); @@ -720,8 +719,12 @@ public class AgentManagerImpl implements AgentManager, HandlerFactory, s_logger.warn("Unable to find the server resources at " + url); throw new DiscoveryException("Unable to add the external cluster"); + } catch(Throwable e) { + s_logger.error("Unexpected exception ", e); + throw new DiscoveryException("Unable to add the external cluster due to unhandled exception"); } finally { if (!success) { + _clusterDetailsDao.deleteDetails(clusterId); _clusterDao.remove(clusterId); } } diff --git a/server/src/com/cloud/dc/ClusterDetailsDao.java b/server/src/com/cloud/dc/ClusterDetailsDao.java index a6cd6a34448..7733c7851d4 100644 --- a/server/src/com/cloud/dc/ClusterDetailsDao.java +++ b/server/src/com/cloud/dc/ClusterDetailsDao.java @@ -8,6 +8,7 @@ public interface ClusterDetailsDao extends GenericDao { Map findDetails(long clusterId); void persist(long clusterId, Map details); + void persist(long clusterId, String name, String value); ClusterDetailsVO findDetail(long clusterId, String name); diff --git a/server/src/com/cloud/dc/ClusterDetailsDaoImpl.java b/server/src/com/cloud/dc/ClusterDetailsDaoImpl.java index f5c6be597f1..6a53b11137b 100644 --- a/server/src/com/cloud/dc/ClusterDetailsDaoImpl.java +++ b/server/src/com/cloud/dc/ClusterDetailsDaoImpl.java @@ -74,4 +74,19 @@ public class ClusterDetailsDaoImpl extends GenericDaoBase sc = DetailSearch.create(); + sc.setParameters("clusterId", clusterId); + sc.setParameters("name", name); + expunge(sc); + + ClusterDetailsVO vo = new ClusterDetailsVO(clusterId, name, value); + persist(vo); + txn.commit(); + } + } diff --git a/utils/src/com/cloud/utils/nio/Task.java b/utils/src/com/cloud/utils/nio/Task.java index 57cb97e2912..1340546a21e 100755 --- a/utils/src/com/cloud/utils/nio/Task.java +++ b/utils/src/com/cloud/utils/nio/Task.java @@ -83,8 +83,8 @@ public abstract class Task implements Runnable { public final void run() { try { doTask(this); - } catch (Exception e) { + } catch (Throwable e) { s_logger.warn("Caught the following exception but pushing on", e); - } + } } }