diff --git a/server/src/com/cloud/agent/manager/AgentManagerImpl.java b/server/src/com/cloud/agent/manager/AgentManagerImpl.java index fe2681007e5..088e013b6ed 100755 --- a/server/src/com/cloud/agent/manager/AgentManagerImpl.java +++ b/server/src/com/cloud/agent/manager/AgentManagerImpl.java @@ -1233,6 +1233,7 @@ public class AgentManagerImpl implements AgentManager, HandlerFactory { HostVO host = null; if (id != null) { synchronized (_loadingAgents) { + s_logger.debug("Adding to loading agents " + id); _loadingAgents.add(id); } } diff --git a/server/src/com/cloud/agent/manager/ConnectedAgentAttache.java b/server/src/com/cloud/agent/manager/ConnectedAgentAttache.java index 7a8a9cad30e..c838154d26a 100644 --- a/server/src/com/cloud/agent/manager/ConnectedAgentAttache.java +++ b/server/src/com/cloud/agent/manager/ConnectedAgentAttache.java @@ -1,8 +1,8 @@ /** * Copyright (C) 2010 Cloud.com, Inc. All rights reserved. - * + * * This software is licensed under the GNU General Public License v3 or later. - * + * * It is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or any later version. @@ -10,18 +10,18 @@ * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. - * + * * You should have received a copy of the GNU General Public License * along with this program. If not, see . - * + * */ package com.cloud.agent.manager; -import java.nio.channels.ClosedChannelException; - -import org.apache.log4j.Logger; - +import java.nio.channels.ClosedChannelException; + +import org.apache.log4j.Logger; + import com.cloud.agent.transport.Request; import com.cloud.exception.AgentUnavailableException; import com.cloud.host.Status; @@ -32,7 +32,7 @@ import com.cloud.utils.nio.Link; */ public class ConnectedAgentAttache extends AgentAttache { private static final Logger s_logger = Logger.getLogger(ConnectedAgentAttache.class); - + protected Link _link; public ConnectedAgentAttache(final long id, final Link link, boolean maintenance) { @@ -48,12 +48,12 @@ public class ConnectedAgentAttache extends AgentAttache { throw new AgentUnavailableException("Channel is closed", _id); } } - + @Override public synchronized boolean isClosed() { return _link == null; } - + @Override public void disconnect(final Status state) { synchronized (this) { @@ -78,14 +78,18 @@ public class ConnectedAgentAttache extends AgentAttache { return false; } } - + @Override - public void finalize() { - assert _link == null : "Duh...Says you....Forgot to call disconnect()!"; - synchronized(this) { - if (_link != null) { - disconnect(Status.Alert); + protected void finalize() throws Throwable { + try { + assert _link == null : "Duh...Says you....Forgot to call disconnect()!"; + synchronized (this) { + if (_link != null) { + disconnect(Status.Alert); + } } + } finally { + super.finalize(); } } } diff --git a/server/src/com/cloud/agent/manager/DirectAgentAttache.java b/server/src/com/cloud/agent/manager/DirectAgentAttache.java index b4f620b0df9..b8e02242a2f 100644 --- a/server/src/com/cloud/agent/manager/DirectAgentAttache.java +++ b/server/src/com/cloud/agent/manager/DirectAgentAttache.java @@ -1,8 +1,8 @@ /** * Copyright (C) 2010 Cloud.com, Inc. All rights reserved. - * + * * This software is licensed under the GNU General Public License v3 or later. - * + * * It is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or any later version. @@ -10,10 +10,10 @@ * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. - * + * * You should have received a copy of the GNU General Public License * along with this program. If not, see . - * + * */ package com.cloud.agent.manager; @@ -41,9 +41,9 @@ import com.cloud.utils.concurrency.NamedThreadFactory; public class DirectAgentAttache extends AgentAttache { private final static Logger s_logger = Logger.getLogger(DirectAgentAttache.class); - + static ScheduledExecutorService s_executor = Executors.newScheduledThreadPool(100, new NamedThreadFactory("DirectAgent")); - + ServerResource _resource; List> _futures = new ArrayList>(); AgentManagerImpl _mgr; @@ -60,7 +60,7 @@ public class DirectAgentAttache extends AgentAttache { if (s_logger.isDebugEnabled()) { s_logger.debug("Processing disconnect " + _id); } - + for (ScheduledFuture future : _futures) { future.cancel(false); } @@ -85,7 +85,7 @@ public class DirectAgentAttache extends AgentAttache { public synchronized boolean isClosed() { return _resource == null; } - + @Override public void send(Request req) throws AgentUnavailableException { if (s_logger.isDebugEnabled()) { @@ -109,7 +109,7 @@ public class DirectAgentAttache extends AgentAttache { } } } - + @Override public void process(Answer[] answers) { if (answers != null && answers[0] instanceof StartupAnswer) { @@ -119,17 +119,21 @@ public class DirectAgentAttache extends AgentAttache { _futures.add(s_executor.scheduleAtFixedRate(new PingTask(), interval, interval, TimeUnit.SECONDS)); } } - + @Override - protected void finalize() { - assert _resource == null : "Come on now....If you're going to dabble in agent code, you better know how to close out our resources. Ever considered why there's a method called disconnect()?"; - synchronized(this) { - if (_resource != null) { - disconnect(Status.Alert); + protected void finalize() throws Throwable { + try { + assert _resource == null : "Come on now....If you're going to dabble in agent code, you better know how to close out our resources. Ever considered why there's a method called disconnect()?"; + synchronized (this) { + if (_resource != null) { + disconnect(Status.Alert); + } } + } finally { + super.finalize(); } } - + protected class PingTask implements Runnable { @Override public synchronized void run() { @@ -147,7 +151,7 @@ public class DirectAgentAttache extends AgentAttache { s_logger.debug("Ping from " + _id); } long seq = _seq++; - + if (s_logger.isTraceEnabled()) { s_logger.trace("SeqA " + _id + "-" + seq + ": " + new Request(seq, _id, -1, cmd, false).toString()); } @@ -161,15 +165,15 @@ public class DirectAgentAttache extends AgentAttache { } } } - + protected class Task implements Runnable { Request _req; - + public Task(Request req) { _req = req; } - + @Override public void run() { long seq = _req.getSequence(); @@ -177,7 +181,7 @@ public class DirectAgentAttache extends AgentAttache { ServerResource resource = _resource; Command[] cmds = _req.getCommands(); boolean stopOnError = _req.stopOnError(); - + if (s_logger.isDebugEnabled()) { s_logger.debug(log(seq, "Executing request")); } @@ -202,12 +206,12 @@ public class DirectAgentAttache extends AgentAttache { break; } } - + Response resp = new Response(_req, answers.toArray(new Answer[answers.size()])); if (s_logger.isDebugEnabled()) { s_logger.debug(log(seq, "Response Received: ")); } - + processAnswers(seq, resp); } catch (Exception e) { s_logger.warn(log(seq, "Exception caught "), e);