Min,
You added a setId on an object,
+ private void setId(long id) {
+ HostVO host = _hostDao.findById(hostId);
+ if (host != null) {
+ configure(host);
+ }
}
But nowhere in the method you set the Id on the object. Is This really
what is intended?
regards,
Daan
On Wed, Apr 23, 2014 at 4:23 AM, <[email protected]> wrote:
> Repository: cloudstack
> Updated Branches:
> refs/heads/4.4-forward be10b32b2 -> f3e9c84cd
>
>
> 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/f3e9c84c
> Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/f3e9c84c
> Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/f3e9c84c
>
> Branch: refs/heads/4.4-forward
> Commit: f3e9c84cddbc0ab7b89f8000dd0db42ba1570d28
> Parents: be10b32
> Author: Min Chen <[email protected]>
> Authored: Tue Apr 22 19:14:55 2014 -0700
> Committer: Min Chen <[email protected]>
> Committed: Tue Apr 22 19:14:55 2014 -0700
>
> ----------------------------------------------------------------------
> .../cloudstack/storage/RemoteHostEndPoint.java | 43 +++++++++++++++-----
> 1 file changed, 32 insertions(+), 11 deletions(-)
> ----------------------------------------------------------------------
>
>
> http://git-wip-us.apache.org/repos/asf/cloudstack/blob/f3e9c84c/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);
> }
>
--
Daan