You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by mc...@apache.org on 2013/07/19 01:08:47 UTC

git commit: updated refs/heads/master to e1c17bd

Updated Branches:
  refs/heads/master ca1f8a663 -> e1c17bd85


CLOUDSTACK-3513: add debug message to diagnose copyIso issue on
automation setup where DownloadCommand is never sent.


Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/e1c17bd8
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/e1c17bd8
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/e1c17bd8

Branch: refs/heads/master
Commit: e1c17bd85318d561b8d0f405bcc1e411f659dcae
Parents: ca1f8a6
Author: Min Chen <mi...@citrix.com>
Authored: Thu Jul 18 16:01:32 2013 -0700
Committer: Min Chen <mi...@citrix.com>
Committed: Thu Jul 18 16:08:29 2013 -0700

----------------------------------------------------------------------
 .../storage/image/TemplateServiceImpl.java      | 12 +++++++
 .../cloudstack/storage/RemoteHostEndPoint.java  |  6 +++-
 .../storage/image/BaseImageStoreDriverImpl.java |  9 ++++++
 .../com/cloud/agent/manager/AgentAttache.java   | 34 +++++++++++++-------
 .../cloud/agent/manager/AgentManagerImpl.java   |  3 ++
 .../storage/download/DownloadMonitorImpl.java   |  8 +++--
 6 files changed, 56 insertions(+), 16 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/e1c17bd8/engine/storage/image/src/org/apache/cloudstack/storage/image/TemplateServiceImpl.java
----------------------------------------------------------------------
diff --git a/engine/storage/image/src/org/apache/cloudstack/storage/image/TemplateServiceImpl.java b/engine/storage/image/src/org/apache/cloudstack/storage/image/TemplateServiceImpl.java
index 4a7ef53..9eef399 100644
--- a/engine/storage/image/src/org/apache/cloudstack/storage/image/TemplateServiceImpl.java
+++ b/engine/storage/image/src/org/apache/cloudstack/storage/image/TemplateServiceImpl.java
@@ -572,12 +572,21 @@ public class TemplateServiceImpl implements TemplateService {
         }
 
         TemplateObject tmplForCopy = (TemplateObject)_templateFactory.getTemplate(srcTemplate, destStore);
+        if (s_logger.isDebugEnabled()) {
+            s_logger.debug("Setting source template url to " + url);
+        }
         tmplForCopy.setUrl(url);
 
+        if (s_logger.isDebugEnabled()) {
+            s_logger.debug("Mark template_store_ref entry as Creating");
+        }
         AsyncCallFuture<TemplateApiResult> future = new AsyncCallFuture<TemplateApiResult>();
         DataObject templateOnStore = destStore.create(tmplForCopy);
         templateOnStore.processEvent(Event.CreateOnlyRequested);
 
+        if (s_logger.isDebugEnabled()) {
+            s_logger.debug("Invoke datastore driver createAsync to create template on destination store");
+        }
         TemplateOpContext<TemplateApiResult> context = new TemplateOpContext<TemplateApiResult>(null,
                 (TemplateObject) templateOnStore, future);
         AsyncCallbackDispatcher<TemplateServiceImpl, CreateCmdResult> caller = AsyncCallbackDispatcher.create(this);
@@ -653,6 +662,9 @@ public class TemplateServiceImpl implements TemplateService {
     }
 
     protected Void copyTemplateCrossZoneCallBack(AsyncCallbackDispatcher<TemplateServiceImpl, CreateCmdResult> callback, TemplateOpContext<TemplateApiResult> context) {
+        if (s_logger.isDebugEnabled()) {
+            s_logger.debug("Performing copy template cross zone callback after completion");
+        }
         TemplateInfo destTemplate = context.getTemplate();
         CreateCmdResult result = callback.getResult();
         AsyncCallFuture<TemplateApiResult> future = context.getFuture();

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/e1c17bd8/engine/storage/src/org/apache/cloudstack/storage/RemoteHostEndPoint.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/RemoteHostEndPoint.java b/engine/storage/src/org/apache/cloudstack/storage/RemoteHostEndPoint.java
index cd64ab2..3693813 100644
--- a/engine/storage/src/org/apache/cloudstack/storage/RemoteHostEndPoint.java
+++ b/engine/storage/src/org/apache/cloudstack/storage/RemoteHostEndPoint.java
@@ -43,6 +43,7 @@ import com.cloud.host.Host;
 import com.cloud.host.Status;
 import com.cloud.hypervisor.HypervisorGuruManager;
 import com.cloud.utils.component.ComponentContext;
+import com.cloud.utils.concurrency.NamedThreadFactory;
 import com.cloud.utils.exception.CloudRuntimeException;
 
 public class RemoteHostEndPoint implements EndPoint {
@@ -57,7 +58,7 @@ public class RemoteHostEndPoint implements EndPoint {
     private ScheduledExecutorService executor;
 
     public RemoteHostEndPoint() {
-        executor = Executors.newScheduledThreadPool(10);
+        executor = Executors.newScheduledThreadPool(10, new NamedThreadFactory("RemoteHostEndPoint"));
     }
 
     private void configure(long hostId, String hostAddress, String publicAddress) {
@@ -170,6 +171,9 @@ public class RemoteHostEndPoint implements EndPoint {
     public void sendMessageAsync(Command cmd, AsyncCompletionCallback<Answer> callback) {
         try {
             long newHostId = _hvGuruMgr.getGuruProcessedCommandTargetHost(this.hostId, cmd);
+            if (s_logger.isDebugEnabled()) {
+                s_logger.debug("Sending command " + cmd.toString() + " to host: " + newHostId);
+            }
             agentMgr.send(newHostId, new Commands(cmd), new CmdRunner(callback));
         } catch (AgentUnavailableException e) {
             throw new CloudRuntimeException("Unable to send message", e);

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/e1c17bd8/engine/storage/src/org/apache/cloudstack/storage/image/BaseImageStoreDriverImpl.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/image/BaseImageStoreDriverImpl.java b/engine/storage/src/org/apache/cloudstack/storage/image/BaseImageStoreDriverImpl.java
index f77226d..a415c9f 100644
--- a/engine/storage/src/org/apache/cloudstack/storage/image/BaseImageStoreDriverImpl.java
+++ b/engine/storage/src/org/apache/cloudstack/storage/image/BaseImageStoreDriverImpl.java
@@ -113,15 +113,24 @@ public abstract class BaseImageStoreDriverImpl implements ImageStoreDriver {
         caller.setContext(context);
         if (data.getType() == DataObjectType.TEMPLATE) {
             caller.setCallback(caller.getTarget().createTemplateAsyncCallback(null, null));
+            if (s_logger.isDebugEnabled()) {
+                s_logger.debug("Downloading template to data store " + dataStore.getId());
+            }
             _downloadMonitor.downloadTemplateToStorage(data, caller);
         } else if (data.getType() == DataObjectType.VOLUME) {
             caller.setCallback(caller.getTarget().createVolumeAsyncCallback(null, null));
+            if (s_logger.isDebugEnabled()) {
+                s_logger.debug("Downloading volume to data store " + dataStore.getId());
+            }
             _downloadMonitor.downloadVolumeToStorage(data, caller);
         }
     }
 
     protected Void createTemplateAsyncCallback(AsyncCallbackDispatcher<? extends BaseImageStoreDriverImpl, DownloadAnswer> callback,
             CreateContext<CreateCmdResult> context) {
+        if (s_logger.isDebugEnabled()) {
+            s_logger.debug("Performing image store createTemplate async callback");
+        }
         DownloadAnswer answer = callback.getResult();
         DataObject obj = context.data;
         DataStore store = obj.getDataStore();

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/e1c17bd8/server/src/com/cloud/agent/manager/AgentAttache.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/agent/manager/AgentAttache.java b/server/src/com/cloud/agent/manager/AgentAttache.java
index dbdbd37..2cedc4d 100755
--- a/server/src/com/cloud/agent/manager/AgentAttache.java
+++ b/server/src/com/cloud/agent/manager/AgentAttache.java
@@ -33,7 +33,6 @@ import java.util.concurrent.TimeUnit;
 
 import org.apache.log4j.Logger;
 
-import com.cloud.agent.AgentManager;
 import com.cloud.agent.Listener;
 import com.cloud.agent.api.Answer;
 import com.cloud.agent.api.CheckHealthCommand;
@@ -68,7 +67,7 @@ public abstract class AgentAttache {
     private static final Random                       s_rand                               = new Random(System.currentTimeMillis());
 
     protected static final Comparator<Request> s_reqComparator =
-        new Comparator<Request>() {
+            new Comparator<Request>() {
         @Override
         public int compare(Request o1, Request o2) {
             long seq1 = o1.getSequence();
@@ -84,7 +83,7 @@ public abstract class AgentAttache {
     };
 
     protected static final Comparator<Object> s_seqComparator =
-        new Comparator<Object>() {
+            new Comparator<Object>() {
         @Override
         public int compare(Object o1, Object o2) {
             long seq1 = ((Request) o1).getSequence();
@@ -110,9 +109,9 @@ public abstract class AgentAttache {
     protected AgentManagerImpl _agentMgr;
 
     public final static String[] s_commandsAllowedInMaintenanceMode =
-        new String[] { MaintainCommand.class.toString(), MigrateCommand.class.toString(), StopCommand.class.toString(), CheckVirtualMachineCommand.class.toString(), PingTestCommand.class.toString(), CheckHealthCommand.class.toString(), ReadyCommand.class.toString(), ShutdownCommand.class.toString(), SetupCommand.class.toString(), ClusterSyncCommand.class.toString(), CleanupNetworkRulesCmd.class.toString(), CheckNetworkCommand.class.toString() };
+            new String[] { MaintainCommand.class.toString(), MigrateCommand.class.toString(), StopCommand.class.toString(), CheckVirtualMachineCommand.class.toString(), PingTestCommand.class.toString(), CheckHealthCommand.class.toString(), ReadyCommand.class.toString(), ShutdownCommand.class.toString(), SetupCommand.class.toString(), ClusterSyncCommand.class.toString(), CleanupNetworkRulesCmd.class.toString(), CheckNetworkCommand.class.toString() };
     protected final static String[] s_commandsNotAllowedInConnectingMode =
-        new String[] { StartCommand.class.toString(), CreateCommand.class.toString() };
+            new String[] { StartCommand.class.toString(), CreateCommand.class.toString() };
     static {
         Arrays.sort(s_commandsAllowedInMaintenanceMode);
         Arrays.sort(s_commandsNotAllowedInConnectingMode);
@@ -242,7 +241,7 @@ public abstract class AgentAttache {
     public int getQueueSize() {
         return _requests.size();
     }
-    
+
     public int getNonRecurringListenersSize() {
         List<Listener> nonRecurringListenersList = new ArrayList<Listener>();
         if (_waitForList.isEmpty()) {
@@ -258,7 +257,7 @@ public abstract class AgentAttache {
                     s_logger.debug("Listener is " + entry.getValue() + " waiting on " + entry.getKey());
                     nonRecurringListenersList.add(monitor);
                 }
-           }
+            }
         }
 
         return nonRecurringListenersList.size();
@@ -291,16 +290,16 @@ public abstract class AgentAttache {
                     unregisterListener(seq);
                 }
             }
-            
-            _agentMgr.notifyAnswersToMonitors(_id, seq, answers); 
-            
+
+            _agentMgr.notifyAnswersToMonitors(_id, seq, answers);
+
         } finally {
             // we should always trigger next command execution, even in failure cases - otherwise in exception case all the remaining will be stuck in the sync queue forever
             if (resp.executeInSequence()) {
                 sendNext(seq);
             }
         }
-        
+
         return processed;
     }
 
@@ -338,15 +337,26 @@ public abstract class AgentAttache {
         checkAvailability(req.getCommands());
 
         long seq = req.getSequence();
-        
+        if (s_logger.isDebugEnabled()) {
+            s_logger.debug("Request seq: " + seq);
+        }
+
         if (listener != null) {
             registerListener(seq, listener);
         } else if (s_logger.isDebugEnabled()) {
             s_logger.debug(log(seq, "Routed from " + req.getManagementServerId()));
         }
 
+        if (s_logger.isDebugEnabled()) {
+            s_logger.debug("waiting to send " + seq);
+        }
+
         synchronized(this) {
             try {
+                if (s_logger.isDebugEnabled()) {
+                    s_logger.debug("entering synchronize block for sending " + seq);
+                }
+
                 if (isClosed()) {
                     throw new AgentUnavailableException("The link to the agent has been closed", _id);
                 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/e1c17bd8/server/src/com/cloud/agent/manager/AgentManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/agent/manager/AgentManagerImpl.java b/server/src/com/cloud/agent/manager/AgentManagerImpl.java
index 15cdc0c..edc0d9d 100755
--- a/server/src/com/cloud/agent/manager/AgentManagerImpl.java
+++ b/server/src/com/cloud/agent/manager/AgentManagerImpl.java
@@ -538,6 +538,9 @@ public class AgentManagerImpl extends ManagerBase implements AgentManager, Handl
         }
         Request req = new Request(hostId, _nodeId, cmds, commands.stopOnError(), true);
         req.setSequence(agent.getNextSequence());
+        if (s_logger.isDebugEnabled()) {
+            s_logger.debug("AgentManager sending request");
+        }
         agent.send(req, listener);
         return req.getSequence();
     }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/e1c17bd8/server/src/com/cloud/storage/download/DownloadMonitorImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/storage/download/DownloadMonitorImpl.java b/server/src/com/cloud/storage/download/DownloadMonitorImpl.java
index 2b1aa4e..4918bf5 100755
--- a/server/src/com/cloud/storage/download/DownloadMonitorImpl.java
+++ b/server/src/com/cloud/storage/download/DownloadMonitorImpl.java
@@ -123,7 +123,7 @@ public class DownloadMonitorImpl extends ManagerBase implements DownloadMonitor
         ComponentContext.inject(dl);
         _agentMgr.registerForHostEvents(dl, true, false, false);
 
-       return true;
+        return true;
     }
 
     @Override
@@ -153,7 +153,7 @@ public class DownloadMonitorImpl extends ManagerBase implements DownloadMonitor
             vmTemplateStore = new TemplateDataStoreVO(store.getId(), template.getId(), new Date(), 0,
                     Status.NOT_DOWNLOADED, null, null, "jobid0000", null, template.getUri());
             vmTemplateStore.setDataStoreRole(store.getRole());
-            _vmTemplateStoreDao.persist(vmTemplateStore);
+            vmTemplateStore = _vmTemplateStoreDao.persist(vmTemplateStore);
         } else if ((vmTemplateStore.getJobId() != null) && (vmTemplateStore.getJobId().length() > 2)) {
             downloadJobExists = true;
         }
@@ -176,7 +176,7 @@ public class DownloadMonitorImpl extends ManagerBase implements DownloadMonitor
                 return;
             }
             DownloadListener dl = new DownloadListener(ep, store, template, _timer, this, dcmd,
-                     callback);
+                    callback);
             ComponentContext.inject(dl);  // initialize those auto-wired field in download listener.
             if (downloadJobExists) {
                 // due to handling existing download job issues, we still keep
@@ -184,6 +184,7 @@ public class DownloadMonitorImpl extends ManagerBase implements DownloadMonitor
                 // DownloadListener to use
                 // new ObjectInDataStore.State transition. TODO: fix this later
                 // to be able to remove downloadState from template_store_ref.
+                s_logger.info("found existing download job");
                 dl.setCurrState(vmTemplateStore.getDownloadState());
             }
 
@@ -192,6 +193,7 @@ public class DownloadMonitorImpl extends ManagerBase implements DownloadMonitor
                 old = _listenerTemplateMap.put(vmTemplateStore, dl);
             }
             if (old != null) {
+                s_logger.info("abandon obsolete download listener");
                 old.abandon();
             }