From 9c4964bc1be02b212910f647bcabd725b7b818b6 Mon Sep 17 00:00:00 2001 From: anthony Date: Mon, 16 May 2011 16:54:00 -0700 Subject: [PATCH] fixed merge --- .../agent/api/ComputeChecksumCommand.java | 19 +++++++-------- .../resource/NfsSecondaryStorageResource.java | 2 +- server/src/com/cloud/agent/AgentManager.java | 24 +++++++++++++++++++ .../cloud/agent/manager/AgentManagerImpl.java | 16 +++++++++++++ .../src/com/cloud/vm/UserVmManagerImpl.java | 19 +++++++-------- .../com/cloud/utils/nio/HandlerFactory.java | 2 ++ 6 files changed, 61 insertions(+), 21 deletions(-) diff --git a/api/src/com/cloud/agent/api/ComputeChecksumCommand.java b/api/src/com/cloud/agent/api/ComputeChecksumCommand.java index 3e61d0a1fda..07deee59e0f 100755 --- a/api/src/com/cloud/agent/api/ComputeChecksumCommand.java +++ b/api/src/com/cloud/agent/api/ComputeChecksumCommand.java @@ -17,16 +17,19 @@ */ package com.cloud.agent.api; -public class ComputeChecksumCommand extends Command { - +import com.cloud.agent.api.storage.ssCommand; + + +public class ComputeChecksumCommand extends ssCommand { + + + private String templatePath; public ComputeChecksumCommand() { super(); } - - private String templatePath; - public ComputeChecksumCommand(String templatePath) { - super(); + public ComputeChecksumCommand(String secUrl, String templatePath) { + super(secUrl); this.templatePath = templatePath; } @@ -34,9 +37,5 @@ public class ComputeChecksumCommand extends Command { return templatePath; } - @Override - public boolean executeInSequence() { - return true; - } } diff --git a/core/src/com/cloud/storage/resource/NfsSecondaryStorageResource.java b/core/src/com/cloud/storage/resource/NfsSecondaryStorageResource.java index 72156a04121..e50de93351d 100755 --- a/core/src/com/cloud/storage/resource/NfsSecondaryStorageResource.java +++ b/core/src/com/cloud/storage/resource/NfsSecondaryStorageResource.java @@ -151,7 +151,7 @@ public class NfsSecondaryStorageResource extends ServerResourceBase implements S private Answer execute(ComputeChecksumCommand cmd) { String relativeTemplatePath = cmd.getTemplatePath(); - String parent = _parent; + String parent = getRootDir(cmd); if (relativeTemplatePath.startsWith(File.separator)) { relativeTemplatePath = relativeTemplatePath.substring(1); diff --git a/server/src/com/cloud/agent/AgentManager.java b/server/src/com/cloud/agent/AgentManager.java index b0308d0ad00..73cec7f2d20 100755 --- a/server/src/com/cloud/agent/AgentManager.java +++ b/server/src/com/cloud/agent/AgentManager.java @@ -25,19 +25,27 @@ import com.cloud.agent.api.Answer; import com.cloud.agent.api.Command; import com.cloud.agent.manager.AgentAttache; import com.cloud.agent.manager.Commands; +import com.cloud.api.commands.AddClusterCmd; +import com.cloud.api.commands.AddHostCmd; +import com.cloud.api.commands.AddSecondaryStorageCmd; +import com.cloud.api.commands.DeleteClusterCmd; import com.cloud.api.commands.UpdateHostPasswordCmd; import com.cloud.dc.DataCenterVO; import com.cloud.dc.HostPodVO; import com.cloud.dc.PodCluster; import com.cloud.exception.AgentUnavailableException; +import com.cloud.exception.DiscoveryException; +import com.cloud.exception.InvalidParameterValueException; import com.cloud.exception.OperationTimedoutException; import com.cloud.host.Host; import com.cloud.host.Host.Type; import com.cloud.host.HostStats; +import com.cloud.host.HostVO; import com.cloud.host.Status; import com.cloud.host.Status.Event; import com.cloud.hypervisor.Hypervisor.HypervisorType; import com.cloud.offering.ServiceOffering; +import com.cloud.org.Cluster; import com.cloud.resource.ServerResource; import com.cloud.service.ServiceOfferingVO; import com.cloud.template.VirtualMachineTemplate; @@ -271,4 +279,20 @@ public interface AgentManager extends Manager { HostVO getSSAgent(HostVO ssHost); void updateStatus(HostVO host, Event event); + + List discoverCluster(AddClusterCmd cmd) throws IllegalArgumentException, DiscoveryException; + + Cluster getCluster(Long clusterId); + + Cluster updateCluster(Cluster clusterToUpdate, String clusterType, String hypervisor, String allocationState); + + boolean deleteCluster(DeleteClusterCmd cmd); + + List discoverHosts(Long dcId, Long podId, Long clusterId, String clusterName, String url, String username, String password, String hypervisorType, List hostTags) + throws IllegalArgumentException, DiscoveryException, InvalidParameterValueException; + + + List discoverHosts(com.cloud.api.commands.AddSecondaryStorageCmd cmd) throws IllegalArgumentException, DiscoveryException, InvalidParameterValueException; + + List discoverHosts(AddHostCmd cmd) throws IllegalArgumentException, DiscoveryException, InvalidParameterValueException; } diff --git a/server/src/com/cloud/agent/manager/AgentManagerImpl.java b/server/src/com/cloud/agent/manager/AgentManagerImpl.java index 0fa6aa771b9..8776928ad5f 100755 --- a/server/src/com/cloud/agent/manager/AgentManagerImpl.java +++ b/server/src/com/cloud/agent/manager/AgentManagerImpl.java @@ -19,6 +19,9 @@ package com.cloud.agent.manager; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; +import java.net.URI; +import java.net.URISyntaxException; +import java.net.URLDecoder; import java.nio.channels.ClosedChannelException; import java.util.ArrayList; import java.util.Enumeration; @@ -76,6 +79,10 @@ import com.cloud.agent.transport.Request; import com.cloud.agent.transport.Response; import com.cloud.alert.AlertManager; import com.cloud.api.ApiConstants; +import com.cloud.api.commands.AddClusterCmd; +import com.cloud.api.commands.AddHostCmd; +import com.cloud.api.commands.AddSecondaryStorageCmd; +import com.cloud.api.commands.DeleteClusterCmd; import com.cloud.api.commands.UpdateHostPasswordCmd; import com.cloud.capacity.Capacity; import com.cloud.capacity.CapacityVO; @@ -97,8 +104,11 @@ import com.cloud.dc.dao.HostPodDao; import com.cloud.event.dao.EventDao; import com.cloud.exception.AgentUnavailableException; import com.cloud.exception.ConnectionException; +import com.cloud.exception.DiscoveredWithErrorException; +import com.cloud.exception.DiscoveryException; import com.cloud.exception.InvalidParameterValueException; import com.cloud.exception.OperationTimedoutException; +import com.cloud.exception.PermissionDeniedException; import com.cloud.exception.UnsupportedVersionException; import com.cloud.ha.HighAvailabilityManager; import com.cloud.ha.HighAvailabilityManager.WorkType; @@ -113,11 +123,14 @@ import com.cloud.host.Status.Event; import com.cloud.host.dao.HostDao; import com.cloud.host.dao.HostDetailsDao; import com.cloud.host.dao.HostTagsDao; +import com.cloud.hypervisor.Hypervisor; import com.cloud.hypervisor.Hypervisor.HypervisorType; import com.cloud.hypervisor.kvm.resource.KvmDummyResourceBase; import com.cloud.network.IPAddressVO; import com.cloud.network.dao.IPAddressDao; import com.cloud.offering.ServiceOffering; +import com.cloud.org.Cluster; +import com.cloud.org.Grouping; import com.cloud.resource.Discoverer; import com.cloud.resource.ServerResource; import com.cloud.service.ServiceOfferingVO; @@ -132,13 +145,16 @@ import com.cloud.storage.dao.StoragePoolHostDao; import com.cloud.storage.dao.VMTemplateHostDao; import com.cloud.storage.resource.DummySecondaryStorageResource; import com.cloud.template.VirtualMachineTemplate; +import com.cloud.user.Account; import com.cloud.user.AccountManager; import com.cloud.user.User; +import com.cloud.user.UserContext; import com.cloud.uservm.UserVm; import com.cloud.utils.ActionDelegate; import com.cloud.utils.NumbersUtil; import com.cloud.utils.Pair; import com.cloud.utils.StringUtils; +import com.cloud.utils.UriUtils; import com.cloud.utils.component.Adapters; import com.cloud.utils.component.ComponentLocator; import com.cloud.utils.component.Inject; diff --git a/server/src/com/cloud/vm/UserVmManagerImpl.java b/server/src/com/cloud/vm/UserVmManagerImpl.java index 7217bab5083..8b04f1526ed 100755 --- a/server/src/com/cloud/vm/UserVmManagerImpl.java +++ b/server/src/com/cloud/vm/UserVmManagerImpl.java @@ -1587,17 +1587,16 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager @Override public String getChecksum(Long hostId, String templatePath){ + HostVO ssHost = _hostDao.findById(hostId); + Host.Type type = ssHost.getType(); + if( type != Host.Type.SecondaryStorage && type != Host.Type.LocalSecondaryStorage ) { + return null; + } + String secUrl = ssHost.getStorageUrl(); Answer answer; - try { - answer = _agentMgr.send(hostId, new ComputeChecksumCommand(templatePath)); - if(answer.getResult()) - return answer.getDetails(); - else - return null; - } catch (AgentUnavailableException e) { - s_logger.error("Unable to send ComputeChecksumCommand to " + hostId, e); - } catch (OperationTimedoutException e) { - s_logger.error("Unable to send ComputeChecksumCommand to " + hostId, e); + answer = _agentMgr.sendToSecStorage(ssHost, new ComputeChecksumCommand(secUrl, templatePath)); + if(answer.getResult()) { + return answer.getDetails(); } return null; } diff --git a/utils/src/com/cloud/utils/nio/HandlerFactory.java b/utils/src/com/cloud/utils/nio/HandlerFactory.java index 6b0ea1d913d..5b33dbbef43 100755 --- a/utils/src/com/cloud/utils/nio/HandlerFactory.java +++ b/utils/src/com/cloud/utils/nio/HandlerFactory.java @@ -17,10 +17,12 @@ */ package com.cloud.utils.nio; +import java.util.List; /** * WorkerFactory creates and selects workers. */ public interface HandlerFactory { public Task create(Task.Type type, Link link, byte[] data); + }