Repository: cloudstack
Updated Branches:
  refs/heads/4.4 33c0d6c7b -> 6b342ffce


CLOUDSTACK-6478: Failed to download Template when having 3 SSVM's in one
zone on Vmware.


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

Branch: refs/heads/4.4
Commit: 65bdf2c9ca6a2d46b9504f8647ec08ffb29f0a89
Parents: 33c0d6c
Author: Min Chen <min.c...@citrix.com>
Authored: Tue Apr 22 19:14:55 2014 -0700
Committer: Daan Hoogland <d...@onecht.net>
Committed: Fri Apr 25 21:26:27 2014 +0200

----------------------------------------------------------------------
 .../cloudstack/storage/RemoteHostEndPoint.java  | 43 +++++++++++++++-----
 1 file changed, 32 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/65bdf2c9/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 34f9c9d..c54430f 100644
--- a/engine/storage/src/org/apache/cloudstack/storage/RemoteHostEndPoint.java
+++ b/engine/storage/src/org/apache/cloudstack/storage/RemoteHostEndPoint.java
@@ -25,8 +25,7 @@ import java.util.concurrent.TimeUnit;
 import javax.inject.Inject;
 
 import org.apache.log4j.Logger;
-import com.cloud.vm.SecondaryStorageVmVO;
-import com.cloud.vm.dao.SecondaryStorageVmDao;
+
 import org.apache.cloudstack.engine.subsystem.api.storage.EndPoint;
 import org.apache.cloudstack.framework.async.AsyncCompletionCallback;
 import org.apache.cloudstack.managed.context.ManagedContextRunnable;
@@ -43,11 +42,15 @@ import com.cloud.exception.AgentUnavailableException;
 import com.cloud.exception.ConnectionException;
 import com.cloud.exception.OperationTimedoutException;
 import com.cloud.host.Host;
+import com.cloud.host.HostVO;
 import com.cloud.host.Status;
+import com.cloud.host.dao.HostDao;
 import com.cloud.hypervisor.HypervisorGuruManager;
 import com.cloud.utils.component.ComponentContext;
 import com.cloud.utils.concurrency.NamedThreadFactory;
 import com.cloud.utils.exception.CloudRuntimeException;
+import com.cloud.vm.SecondaryStorageVmVO;
+import com.cloud.vm.dao.SecondaryStorageVmDao;
 
 public class RemoteHostEndPoint implements EndPoint {
     private static final Logger s_logger = 
Logger.getLogger(RemoteHostEndPoint.class);
@@ -60,6 +63,8 @@ public class RemoteHostEndPoint implements EndPoint {
     protected HypervisorGuruManager _hvGuruMgr;
     @Inject
     protected SecondaryStorageVmDao vmDao;
+    @Inject
+    protected HostDao _hostDao;
     private ScheduledExecutorService executor;
 
     public RemoteHostEndPoint() {
@@ -67,14 +72,14 @@ public class RemoteHostEndPoint implements EndPoint {
     }
 
     private void configure(Host host) {
-        this.hostId = host.getId();
-        this.hostAddress = host.getPrivateIpAddress();
-        this.publicAddress = host.getPublicIpAddress();
+        hostId = host.getId();
+        hostAddress = host.getPrivateIpAddress();
+        publicAddress = host.getPublicIpAddress();
         if (Host.Type.SecondaryStorageVM == host.getType()) {
             String vmName = host.getName();
             SecondaryStorageVmVO ssvm = vmDao.findByInstanceName(vmName);
             if (ssvm != null) {
-                this.publicAddress = ssvm.getPublicIpAddress();
+                publicAddress = ssvm.getPublicIpAddress();
             }
         }
     }
@@ -87,17 +92,25 @@ public class RemoteHostEndPoint implements EndPoint {
 
     @Override
     public String getHostAddr() {
-        return this.hostAddress;
+        return hostAddress;
     }
 
     @Override
     public String getPublicAddr() {
-        return this.publicAddress;
+        return publicAddress;
     }
 
     @Override
     public long getId() {
-        return this.hostId;
+        return hostId;
+    }
+
+    // used when HypervisorGuruManager choose a different host to send command
+    private void setId(long id) {
+        HostVO host = _hostDao.findById(hostId);
+        if (host != null) {
+            configure(host);
+        }
     }
 
     @Override
@@ -105,6 +118,10 @@ public class RemoteHostEndPoint implements EndPoint {
         String errMsg = null;
         try {
             long newHostId = 
_hvGuruMgr.getGuruProcessedCommandTargetHost(hostId, cmd);
+            if (newHostId != hostId) {
+                // update endpoint with new host if changed
+                setId(newHostId);
+            }
             return agentMgr.send(newHostId, cmd);
         } catch (AgentUnavailableException e) {
             errMsg = e.toString();
@@ -126,7 +143,7 @@ public class RemoteHostEndPoint implements EndPoint {
 
         @Override
         public boolean processAnswers(long agentId, long seq, Answer[] 
answers) {
-            this.answer = answers[0];
+            answer = answers[0];
             executor.schedule(this, 10, TimeUnit.SECONDS);
             return true;
         }
@@ -182,7 +199,11 @@ public class RemoteHostEndPoint implements EndPoint {
     @Override
     public void sendMessageAsync(Command cmd, AsyncCompletionCallback<Answer> 
callback) {
         try {
-            long newHostId = 
_hvGuruMgr.getGuruProcessedCommandTargetHost(this.hostId, cmd);
+            long newHostId = 
_hvGuruMgr.getGuruProcessedCommandTargetHost(hostId, cmd);
+            if (newHostId != hostId) {
+                // update endpoint with new host if changed
+                setId(newHostId);
+            }
             if (s_logger.isDebugEnabled()) {
                 s_logger.debug("Sending command " + cmd.toString() + " to 
host: " + newHostId);
             }

Reply via email to