You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by ed...@apache.org on 2013/01/15 03:04:55 UTC
[9/44] Revert "Merge remote-tracking branch 'origin/javelin' into
javelin"
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/110465b5/server/src/com/cloud/resource/ResourceManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/resource/ResourceManagerImpl.java b/server/src/com/cloud/resource/ResourceManagerImpl.java
index cbcdccb..592a7ad 100755
--- a/server/src/com/cloud/resource/ResourceManagerImpl.java
+++ b/server/src/com/cloud/resource/ResourceManagerImpl.java
@@ -20,7 +20,6 @@ import java.net.URI;
import java.net.URISyntaxException;
import java.net.URLDecoder;
import java.util.ArrayList;
-import java.util.Enumeration;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
@@ -32,16 +31,20 @@ import javax.ejb.Local;
import javax.inject.Inject;
import javax.naming.ConfigurationException;
+import org.apache.cloudstack.api.ApiConstants;
import org.apache.cloudstack.api.command.admin.cluster.AddClusterCmd;
+import org.apache.cloudstack.api.command.admin.cluster.DeleteClusterCmd;
+import org.apache.cloudstack.api.command.admin.host.AddHostCmd;
+import org.apache.cloudstack.api.command.admin.host.AddSecondaryStorageCmd;
+import org.apache.cloudstack.api.command.admin.host.CancelMaintenanceCmd;
+import org.apache.cloudstack.api.command.admin.host.PrepareForMaintenanceCmd;
+import org.apache.cloudstack.api.command.admin.host.ReconnectHostCmd;
+import org.apache.cloudstack.api.command.admin.host.UpdateHostCmd;
+import org.apache.cloudstack.api.command.admin.host.UpdateHostPasswordCmd;
+import org.apache.cloudstack.api.command.admin.storage.AddS3Cmd;
import org.apache.cloudstack.api.command.admin.storage.ListS3sCmd;
import org.apache.cloudstack.api.command.admin.swift.AddSwiftCmd;
-import org.apache.cloudstack.api.command.admin.cluster.DeleteClusterCmd;
-import org.apache.cloudstack.api.command.admin.host.*;
import org.apache.cloudstack.api.command.admin.swift.ListSwiftsCmd;
-import org.apache.cloudstack.api.command.admin.storage.AddS3Cmd;
-import com.cloud.storage.S3;
-import com.cloud.storage.S3VO;
-import com.cloud.storage.s3.S3Manager;
import org.apache.log4j.Logger;
import org.springframework.stereotype.Component;
@@ -59,12 +62,7 @@ import com.cloud.agent.api.UpdateHostPasswordCommand;
import com.cloud.agent.manager.AgentAttache;
import com.cloud.agent.manager.allocator.PodAllocator;
import com.cloud.agent.transport.Request;
-import org.apache.cloudstack.api.ApiConstants;
import com.cloud.api.ApiDBUtils;
-import org.apache.cloudstack.api.command.admin.host.AddHostCmd;
-import org.apache.cloudstack.api.command.admin.host.CancelMaintenanceCmd;
-import org.apache.cloudstack.api.command.admin.host.PrepareForMaintenanceCmd;
-import org.apache.cloudstack.api.command.admin.host.UpdateHostCmd;
import com.cloud.capacity.Capacity;
import com.cloud.capacity.CapacityVO;
import com.cloud.capacity.dao.CapacityDao;
@@ -112,6 +110,8 @@ import com.cloud.org.Grouping.AllocationState;
import com.cloud.org.Managed;
import com.cloud.service.ServiceOfferingVO;
import com.cloud.storage.GuestOSCategoryVO;
+import com.cloud.storage.S3;
+import com.cloud.storage.S3VO;
import com.cloud.storage.StorageManager;
import com.cloud.storage.StoragePool;
import com.cloud.storage.StoragePoolHostVO;
@@ -125,6 +125,7 @@ import com.cloud.storage.dao.GuestOSCategoryDao;
import com.cloud.storage.dao.StoragePoolDao;
import com.cloud.storage.dao.StoragePoolHostDao;
import com.cloud.storage.dao.VMTemplateDao;
+import com.cloud.storage.s3.S3Manager;
import com.cloud.storage.secondary.SecondaryStorageVmManager;
import com.cloud.storage.swift.SwiftManager;
import com.cloud.template.VirtualMachineTemplate;
@@ -135,7 +136,6 @@ import com.cloud.user.UserContext;
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.Manager;
import com.cloud.utils.db.DB;
import com.cloud.utils.db.SearchCriteria;
@@ -219,7 +219,7 @@ public class ResourceManagerImpl implements ResourceManager, ResourceService, Ma
// @com.cloud.utils.component.Inject(adapter = PodAllocator.class)
@Inject
protected List<PodAllocator> _podAllocators = null;
-
+
@Inject
protected VMTemplateDao _templateDao;
@Inject
@@ -236,9 +236,9 @@ public class ResourceManagerImpl implements ResourceManager, ResourceService, Ma
@PostConstruct
public void init() {
- // TODO initialize pod allocators here instead
+ // TODO initialize pod allocators here instead
}
-
+
private void insertListener(Integer event, ResourceListener listener) {
List<ResourceListener> lst = _lifeCycleListeners.get(event);
if (lst == null) {
@@ -510,10 +510,10 @@ public class ResourceManagerImpl implements ResourceManager, ResourceService, Ma
@Override
public Discoverer getMatchingDiscover(Hypervisor.HypervisorType hypervisorType) {
- for(Discoverer discoverer : _discoverers) {
+ for(Discoverer discoverer : _discoverers) {
if (discoverer.getHypervisorType() == hypervisorType)
return discoverer;
- }
+ }
return null;
}
@@ -1629,7 +1629,7 @@ public class ResourceManagerImpl implements ResourceManager, ResourceService, Ma
}
}
}
-
+
if (s_logger.isDebugEnabled()) {
new Request(-1l, -1l, cmds, true, false).logD("Startup request from directly connected host: ", true);
}
@@ -1670,7 +1670,7 @@ public class ResourceManagerImpl implements ResourceManager, ResourceService, Ma
}
}
}
-
+
if (tempHost != null) {
/* Change agent status to Alert */
_agentMgr.agentStatusTransitTo(tempHost, Status.Event.AgentDisconnected, _nodeId);
@@ -2179,7 +2179,7 @@ public class ResourceManagerImpl implements ResourceManager, ResourceService, Ma
@Override
public Pair<HostPodVO, Long> findPod(VirtualMachineTemplate template, ServiceOfferingVO offering, DataCenterVO dc, long accountId, Set<Long> avoids) {
- for(PodAllocator allocator : _podAllocators) {
+ for(PodAllocator allocator : _podAllocators) {
final Pair<HostPodVO, Long> pod = allocator.allocateTo(template, offering, dc, accountId, avoids);
if (pod != null) {
return pod;
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/110465b5/server/src/com/cloud/server/CloudStackComponentComposer.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/server/CloudStackComponentComposer.java b/server/src/com/cloud/server/CloudStackComponentComposer.java
new file mode 100644
index 0000000..ae06325
--- /dev/null
+++ b/server/src/com/cloud/server/CloudStackComponentComposer.java
@@ -0,0 +1,184 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+package com.cloud.server;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.annotation.PostConstruct;
+import javax.inject.Inject;
+
+import org.springframework.stereotype.Component;
+
+import com.cloud.agent.AgentManager;
+import com.cloud.alert.AlertManagerImpl;
+import com.cloud.api.query.QueryManagerImpl;
+import com.cloud.async.AsyncJobManager;
+import com.cloud.async.SyncQueueManager;
+import com.cloud.capacity.CapacityManagerImpl;
+import com.cloud.cluster.ClusterFenceManagerImpl;
+import com.cloud.cluster.ClusterManagerImpl;
+import com.cloud.configuration.ConfigurationManager;
+import com.cloud.consoleproxy.ConsoleProxyManager;
+import com.cloud.dao.EntityManagerImpl;
+import com.cloud.ha.HighAvailabilityManager;
+import com.cloud.hypervisor.HypervisorGuruManagerImpl;
+import com.cloud.keystore.KeystoreManager;
+import com.cloud.maint.UpgradeManagerImpl;
+import com.cloud.network.ExternalLoadBalancerUsageManager;
+import com.cloud.network.NetworkManagerImpl;
+import com.cloud.network.StorageNetworkManager;
+import com.cloud.network.as.AutoScaleManagerImpl;
+import com.cloud.network.firewall.FirewallManagerImpl;
+import com.cloud.network.lb.LoadBalancingRulesManagerImpl;
+import com.cloud.network.router.VpcVirtualNetworkApplianceManager;
+import com.cloud.network.rules.RulesManagerImpl;
+import com.cloud.network.security.SecurityGroupManagerImpl2;
+import com.cloud.network.vpc.NetworkACLManagerImpl;
+import com.cloud.network.vpc.VpcManagerImpl;
+import com.cloud.network.vpn.RemoteAccessVpnManagerImpl;
+import com.cloud.network.vpn.Site2SiteVpnManagerImpl;
+import com.cloud.projects.ProjectManagerImpl;
+import com.cloud.resource.ResourceManagerImpl;
+import com.cloud.resourcelimit.ResourceLimitManagerImpl;
+import com.cloud.storage.OCFS2Manager;
+import com.cloud.storage.StorageManagerImpl;
+import com.cloud.storage.download.DownloadMonitor;
+import com.cloud.storage.s3.S3Manager;
+import com.cloud.storage.secondary.SecondaryStorageManagerImpl;
+import com.cloud.storage.snapshot.SnapshotManagerImpl;
+import com.cloud.storage.snapshot.SnapshotSchedulerImpl;
+import com.cloud.storage.swift.SwiftManager;
+import com.cloud.storage.upload.UploadMonitor;
+import com.cloud.tags.TaggedResourceManagerImpl;
+import com.cloud.template.TemplateManagerImpl;
+import com.cloud.user.AccountManagerImpl;
+import com.cloud.user.DomainManagerImpl;
+import com.cloud.utils.component.Manager;
+import com.cloud.vm.UserVmManagerImpl;
+import com.cloud.vm.VirtualMachineManager;
+
+@Component
+public class CloudStackComponentComposer {
+ // @Inject CheckPointManagerImpl _checkPointMgr;
+ @Inject ClusterManagerImpl _clusterMgr;
+ @Inject ClusterFenceManagerImpl _clusterFenceMgr;
+ @Inject AgentManager _AgentMgr;
+ @Inject SyncQueueManager _sycnQueueMgr;
+ @Inject AsyncJobManager _jobMgr;
+ @Inject ConfigurationManager _confMgr;
+ @Inject AccountManagerImpl _accountMgr;
+ @Inject DomainManagerImpl _domainMgr;
+ @Inject ResourceLimitManagerImpl _resLimitMgr;
+ @Inject NetworkManagerImpl _networkMgr;
+ @Inject DownloadMonitor _downloadMonitor;
+ @Inject UploadMonitor _uploadMonitor;
+ @Inject KeystoreManager _ksMgr;
+ @Inject SecondaryStorageManagerImpl _ssMgr;
+ @Inject UserVmManagerImpl _userVmMgr;
+ @Inject UpgradeManagerImpl _upgradeMgr;
+ @Inject StorageManagerImpl _storageMgr;
+ @Inject AlertManagerImpl _alertMgr;
+ @Inject TemplateManagerImpl _tmplMgr;
+ @Inject SnapshotManagerImpl _snpahsotMgr;
+ @Inject SnapshotSchedulerImpl _snapshotScheduleMgr;
+ @Inject SecurityGroupManagerImpl2 _sgMgr;
+ @Inject EntityManagerImpl _entityMgr;
+ @Inject LoadBalancingRulesManagerImpl _lbRuleMgr;
+ @Inject AutoScaleManagerImpl _asMgr;
+ @Inject RulesManagerImpl _rulesMgr;
+ @Inject RemoteAccessVpnManagerImpl _acVpnMgr;
+ @Inject CapacityManagerImpl _capacityMgr;
+ @Inject VirtualMachineManager _vmMgr;
+ @Inject HypervisorGuruManagerImpl _hvGuruMgr;
+ @Inject ResourceManagerImpl _resMgr;
+ @Inject OCFS2Manager _ocfsMgr;
+ @Inject FirewallManagerImpl _fwMgr;
+ @Inject ConsoleProxyManager _cpMgr;
+ @Inject ProjectManagerImpl _prjMgr;
+ @Inject SwiftManager _swiftMgr;
+ @Inject S3Manager _s3Mgr;
+ @Inject StorageNetworkManager _storageNetworkMgr;
+ @Inject ExternalLoadBalancerUsageManager _extlbUsageMgr;
+ @Inject HighAvailabilityManager _haMgr;
+ @Inject VpcManagerImpl _vpcMgr;
+ @Inject VpcVirtualNetworkApplianceManager _vpcNetApplianceMgr;
+ @Inject NetworkACLManagerImpl _networkAclMgr;
+ @Inject TaggedResourceManagerImpl _taggedResMgr;
+ @Inject Site2SiteVpnManagerImpl _s2sVpnMgr;
+ @Inject QueryManagerImpl _queryMgr;
+
+ List<Manager> _managers = new ArrayList<Manager>();
+
+ public CloudStackComponentComposer() {
+ }
+
+ @PostConstruct
+ void init() {
+ // _managers.add(_checkPointMgr);
+ _managers.add(_clusterMgr);
+ _managers.add(_clusterFenceMgr);
+ _managers.add(_AgentMgr);
+ _managers.add(_sycnQueueMgr);
+ _managers.add(_jobMgr);
+ _managers.add(_confMgr);
+ _managers.add(_accountMgr);
+ _managers.add(_domainMgr);
+ _managers.add(_resLimitMgr);
+ _managers.add(_networkMgr);
+ _managers.add(_downloadMonitor);
+ _managers.add(_uploadMonitor);
+ _managers.add(_ksMgr);
+ _managers.add(_ssMgr);
+ _managers.add(_userVmMgr);
+ _managers.add(_upgradeMgr);
+ _managers.add(_storageMgr);
+ _managers.add(_alertMgr);
+ _managers.add(_tmplMgr);
+ _managers.add(_snpahsotMgr);
+ _managers.add(_snapshotScheduleMgr);
+ _managers.add(_sgMgr);
+ _managers.add(_entityMgr);
+ _managers.add(_lbRuleMgr);
+ _managers.add(_asMgr);
+ _managers.add(_rulesMgr);
+ _managers.add(_acVpnMgr);
+ _managers.add(_capacityMgr);
+ _managers.add(_vmMgr);
+ _managers.add(_hvGuruMgr);
+ _managers.add(_resMgr);
+ _managers.add(_ocfsMgr);
+ _managers.add(_fwMgr);
+ _managers.add(_cpMgr);
+ _managers.add(_prjMgr);
+ _managers.add(_swiftMgr);
+ _managers.add(_s3Mgr);
+ _managers.add(_storageNetworkMgr);
+ _managers.add(_extlbUsageMgr);
+ _managers.add(_haMgr);
+ _managers.add(_vpcMgr);
+ _managers.add(_vpcNetApplianceMgr);
+ _managers.add(_networkAclMgr);
+ _managers.add(_taggedResMgr);
+ _managers.add(_s2sVpnMgr);
+ _managers.add(_queryMgr);
+ }
+
+ public List<Manager> getManagers() {
+ return _managers;
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/110465b5/server/src/com/cloud/server/ConfigurationServerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/server/ConfigurationServerImpl.java b/server/src/com/cloud/server/ConfigurationServerImpl.java
index 4b4d8df..77de9bb 100755
--- a/server/src/com/cloud/server/ConfigurationServerImpl.java
+++ b/server/src/com/cloud/server/ConfigurationServerImpl.java
@@ -287,7 +287,7 @@ public class ConfigurationServerImpl implements ConfigurationServer {
_identityDao.initializeDefaultUuid("user_ip_address");
_identityDao.initializeDefaultUuid("counter");
}
- */
+ */
private String getMountParent() {
return getEnvironmentProperty("mount.parent");
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/110465b5/server/src/com/cloud/server/ManagementServerExtImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/server/ManagementServerExtImpl.java b/server/src/com/cloud/server/ManagementServerExtImpl.java
index 03e50eb..ed05395 100644
--- a/server/src/com/cloud/server/ManagementServerExtImpl.java
+++ b/server/src/com/cloud/server/ManagementServerExtImpl.java
@@ -32,8 +32,8 @@ import com.cloud.domain.dao.DomainDao;
import com.cloud.exception.InvalidParameterValueException;
import com.cloud.exception.PermissionDeniedException;
import com.cloud.projects.Project;
+import com.cloud.utils.PropertiesUtil;
import org.apache.cloudstack.api.response.UsageTypeResponse;
-import org.springframework.stereotype.Component;
import com.cloud.usage.UsageJobVO;
import com.cloud.usage.UsageTypes;
@@ -48,7 +48,6 @@ import com.cloud.utils.db.Filter;
import com.cloud.utils.db.SearchCriteria;
import com.cloud.utils.db.Transaction;
-@Component
public class ManagementServerExtImpl extends ManagementServerImpl implements ManagementServerExt {
@Inject private AccountDao _accountDao;
@Inject private DomainDao _domainDao;
@@ -209,8 +208,9 @@ public class ManagementServerExtImpl extends ManagementServerImpl implements Man
}
@Override
- public String[] getPropertiesFiles() {
- return new String[] { "commands.properties", "commands-ext.properties" };
+ public Map<String, String> getProperties() {
+ return PropertiesUtil.processConfigFile(new String[]
+ { "commands.properties", "commands-ext.properties" });
}
private Date computeAdjustedTime(Date initialDate, TimeZone targetTZ, boolean adjustToDayStart) {
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/110465b5/server/src/com/cloud/server/ManagementServerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/server/ManagementServerImpl.java b/server/src/com/cloud/server/ManagementServerImpl.java
index 60bab00..65501e3 100755
--- a/server/src/com/cloud/server/ManagementServerImpl.java
+++ b/server/src/com/cloud/server/ManagementServerImpl.java
@@ -58,7 +58,6 @@ import org.apache.cloudstack.api.command.admin.pod.ListPodsByCmd;
import org.apache.cloudstack.api.command.admin.resource.ListAlertsCmd;
import org.apache.cloudstack.api.command.admin.resource.ListCapacityCmd;
import org.apache.cloudstack.api.command.admin.resource.UploadCustomCertificateCmd;
-import org.apache.cloudstack.api.command.admin.storage.ListStoragePoolsCmd;
import org.apache.cloudstack.api.command.admin.systemvm.DestroySystemVmCmd;
import org.apache.cloudstack.api.command.admin.systemvm.ListSystemVMsCmd;
import org.apache.cloudstack.api.command.admin.systemvm.RebootSystemVmCmd;
@@ -86,7 +85,6 @@ import org.apache.cloudstack.api.command.user.zone.ListZonesByCmd;
import org.apache.cloudstack.api.response.ExtractResponse;
import org.apache.commons.codec.binary.Base64;
import org.apache.log4j.Logger;
-import org.springframework.stereotype.Component;
import com.cloud.agent.AgentManager;
import com.cloud.agent.api.GetVncPortAnswer;
@@ -186,7 +184,6 @@ import com.cloud.storage.GuestOsCategory;
import com.cloud.storage.Storage;
import com.cloud.storage.Storage.ImageFormat;
import com.cloud.storage.StorageManager;
-import com.cloud.storage.StoragePool;
import com.cloud.storage.StoragePoolVO;
import com.cloud.storage.Upload;
import com.cloud.storage.Upload.Mode;
@@ -223,6 +220,7 @@ import com.cloud.utils.EnumUtils;
import com.cloud.utils.NumbersUtil;
import com.cloud.utils.Pair;
import com.cloud.utils.PasswordGenerator;
+import com.cloud.utils.PropertiesUtil;
import com.cloud.utils.Ternary;
import com.cloud.utils.component.Adapter;
import com.cloud.utils.component.ComponentContext;
@@ -381,8 +379,14 @@ public class ManagementServerImpl implements ManagementServer {
S3Manager _s3Mgr;
@Inject
- ComponentContext _placeholder; // create a dependency to ComponentContext so that it can be loaded beforehead
-
+ ComponentContext _forceContextRef; // create a dependency to ComponentContext so that it can be loaded beforehead
+
+ @Inject
+ EventUtils _forceEventUtilsRef;
+
+ @Inject
+ CloudStackComponentComposer _componentRegistry;
+
private final ScheduledExecutorService _eventExecutor = Executors.newScheduledThreadPool(1, new NamedThreadFactory("EventChecker"));
private KeystoreManager _ksMgr;
@@ -393,7 +397,7 @@ public class ManagementServerImpl implements ManagementServer {
@Inject List<UserAuthenticator> _userAuthenticators;
private String _hashKey = null;
-
+
public ManagementServerImpl() {
}
@@ -448,12 +452,11 @@ public class ManagementServerImpl implements ManagementServer {
Map<String, GenericDaoBase> daos = ComponentContext.getApplicationContext().getBeansOfType(
GenericDaoBase.class);
+ Map<String, Object> params = new HashMap<String, Object>();
for (GenericDaoBase dao : daos.values()) {
try {
s_logger.info("Starting dao " + ComponentContext.getTargetClass(dao).getName());
-
- // TODO
- // dao.configure(dao.getClass().getSimpleName(), params);
+ dao.configure(dao.getClass().getSimpleName(), params);
} catch (Exception e) {
s_logger.error("Problems with running checker:" + ComponentContext.getTargetClass(dao).getName(), e);
System.exit(1);
@@ -462,12 +465,8 @@ public class ManagementServerImpl implements ManagementServer {
}
private void startManagers() {
- @SuppressWarnings("rawtypes")
- Map<String, Manager> managers = ComponentContext.getApplicationContext().getBeansOfType(
- Manager.class);
-
- Map<String, Object> params = new HashMap<String, Object>();
- for(Manager manager : managers.values()) {
+ Map<String, Object> params = new HashMap<String, Object>();
+ for(Manager manager : _componentRegistry.getManagers()) {
s_logger.info("Start manager: " + ComponentContext.getTargetClass(manager).getName() + "...");
try {
if(!manager.configure(manager.getClass().getSimpleName(), params)) {
@@ -2392,8 +2391,9 @@ public class ManagementServerImpl implements ManagementServer {
}
@Override
- public String[] getPropertiesFiles() {
- return new String[] { "commands.properties" };
+ public Map<String, String> getProperties() {
+ return PropertiesUtil.processConfigFile(new String[]
+ { "commands.properties" });
}
protected class EventPurgeTask implements Runnable {
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/110465b5/server/src/com/cloud/servlet/CloudStartupServlet.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/servlet/CloudStartupServlet.java b/server/src/com/cloud/servlet/CloudStartupServlet.java
index de133ab..bbcf353 100755
--- a/server/src/com/cloud/servlet/CloudStartupServlet.java
+++ b/server/src/com/cloud/servlet/CloudStartupServlet.java
@@ -27,7 +27,6 @@ import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
import org.apache.log4j.xml.DOMConfigurator;
-import com.cloud.api.ApiServer;
import com.cloud.exception.InvalidParameterValueException;
import com.cloud.server.ConfigurationServer;
import com.cloud.server.ManagementServer;
@@ -42,17 +41,14 @@ public class CloudStartupServlet extends HttpServlet implements ServletContextLi
@Override
public void init() throws ServletException {
- initLog4j();
-
- // Save Configuration Values
- ConfigurationServer c = ComponentContext.getCompanent(ConfigurationServer.class);
+ initLog4j();
+ ConfigurationServer c = (ConfigurationServer)ComponentContext.getComponent(ConfigurationServer.Name);
try {
c.persistDefaultValues();
-
- ManagementServer ms = ComponentContext.getCompanent(ManagementServer.class);
+ ManagementServer ms = (ManagementServer)ComponentContext.getComponent(ManagementServer.Name);
ms.startup();
ms.enableAdminUser("password");
- ApiServer.initApiServer(ms.getPropertiesFiles());
+ //ApiServer.initApiServer();
} catch (InvalidParameterValueException ipve) {
s_logger.error("Exception starting management server ", ipve);
throw new ServletException (ipve.getMessage());
@@ -75,18 +71,18 @@ public class CloudStartupServlet extends HttpServlet implements ServletContextLi
@Override
public void contextDestroyed(ServletContextEvent sce) {
}
-
+
private void initLog4j() {
- File file = PropertiesUtil.findConfigFile("log4j-cloud.xml");
- if (file != null) {
- s_logger.info("log4j configuration found at " + file.getAbsolutePath());
- DOMConfigurator.configureAndWatch(file.getAbsolutePath());
- } else {
- file = PropertiesUtil.findConfigFile("log4j-cloud.properties");
- if (file != null) {
- s_logger.info("log4j configuration found at " + file.getAbsolutePath());
- PropertyConfigurator.configureAndWatch(file.getAbsolutePath());
- }
- }
- }
+ File file = PropertiesUtil.findConfigFile("log4j-cloud.xml");
+ if (file != null) {
+ s_logger.info("log4j configuration found at " + file.getAbsolutePath());
+ DOMConfigurator.configureAndWatch(file.getAbsolutePath());
+ } else {
+ file = PropertiesUtil.findConfigFile("log4j-cloud.properties");
+ if (file != null) {
+ s_logger.info("log4j configuration found at " + file.getAbsolutePath());
+ PropertyConfigurator.configureAndWatch(file.getAbsolutePath());
+ }
+ }
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/110465b5/server/src/com/cloud/servlet/ConsoleProxyServlet.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/servlet/ConsoleProxyServlet.java b/server/src/com/cloud/servlet/ConsoleProxyServlet.java
index afa5c40..6a47ba2 100644
--- a/server/src/com/cloud/servlet/ConsoleProxyServlet.java
+++ b/server/src/com/cloud/servlet/ConsoleProxyServlet.java
@@ -25,17 +25,20 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import javax.annotation.PostConstruct;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
+import javax.inject.Inject;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
+import org.apache.cloudstack.api.IdentityService;
import org.apache.commons.codec.binary.Base64;
import org.apache.log4j.Logger;
+import org.springframework.stereotype.Component;
-import org.apache.cloudstack.api.IdentityService;
import com.cloud.exception.PermissionDeniedException;
import com.cloud.host.HostVO;
import com.cloud.server.ManagementServer;
@@ -46,7 +49,6 @@ import com.cloud.user.User;
import com.cloud.uservm.UserVm;
import com.cloud.utils.Pair;
import com.cloud.utils.Ternary;
-import com.cloud.utils.component.ComponentLocator;
import com.cloud.utils.db.Transaction;
import com.cloud.vm.VMInstanceVO;
import com.cloud.vm.VirtualMachine;
@@ -57,17 +59,27 @@ import com.cloud.vm.VirtualMachineManager;
* Console access : /conosole?cmd=access&vm=xxx
* Authentication : /console?cmd=auth&vm=xxx&sid=xxx
*/
+@Component("consoleServlet")
public class ConsoleProxyServlet extends HttpServlet {
private static final long serialVersionUID = -5515382620323808168L;
public static final Logger s_logger = Logger.getLogger(ConsoleProxyServlet.class.getName());
private static final int DEFAULT_THUMBNAIL_WIDTH = 144;
private static final int DEFAULT_THUMBNAIL_HEIGHT = 110;
- private final static AccountManager _accountMgr = ComponentLocator.getLocator(ManagementServer.Name).getManager(AccountManager.class);
- private final static VirtualMachineManager _vmMgr = ComponentLocator.getLocator(ManagementServer.Name).getManager(VirtualMachineManager.class);
- private final static ManagementServer _ms = (ManagementServer)ComponentLocator.getComponent(ManagementServer.Name);
- private final static IdentityService _identityService = ComponentLocator.getLocator(ManagementServer.Name).getManager(IdentityService.class);
+ @Inject AccountManager _accountMgr;
+ @Inject VirtualMachineManager _vmMgr;
+ @Inject ManagementServer _ms;
+ @Inject IdentityService _identityService;
+ static ManagementServer s_ms;
+ public ConsoleProxyServlet() {
+ }
+
+ @PostConstruct
+ void initComponent() {
+ s_ms = _ms;
+ }
+
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) {
doGet(req, resp);
@@ -398,7 +410,7 @@ public class ConsoleProxyServlet extends HttpServlet {
long ts = normalizedHashTime.getTime();
ts = ts/60000; // round up to 1 minute
- String secretKey = _ms.getHashKey();
+ String secretKey = s_ms.getHashKey();
SecretKeySpec keySpec = new SecretKeySpec(secretKey.getBytes(), "HmacSHA1");
mac.init(keySpec);
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/110465b5/server/src/com/cloud/servlet/RegisterCompleteServlet.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/servlet/RegisterCompleteServlet.java b/server/src/com/cloud/servlet/RegisterCompleteServlet.java
index 7755851..5922455 100644
--- a/server/src/com/cloud/servlet/RegisterCompleteServlet.java
+++ b/server/src/com/cloud/servlet/RegisterCompleteServlet.java
@@ -19,125 +19,111 @@ package com.cloud.servlet;
import java.net.URLEncoder;
import java.util.List;
+import javax.inject.Inject;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
-import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.log4j.Logger;
+import org.springframework.stereotype.Component;
import com.cloud.configuration.Configuration;
import com.cloud.configuration.dao.ConfigurationDao;
-import com.cloud.server.ManagementServer;
import com.cloud.user.Account;
import com.cloud.user.AccountService;
import com.cloud.user.User;
import com.cloud.user.UserVO;
import com.cloud.user.dao.UserDao;
import com.cloud.utils.SerialVersionUID;
-import com.cloud.utils.component.ComponentLocator;
+@Component("registerCompleteServlet")
public class RegisterCompleteServlet extends HttpServlet implements ServletContextListener {
- public static final Logger s_logger = Logger.getLogger(RegisterCompleteServlet.class.getName());
-
+ public static final Logger s_logger = Logger.getLogger(RegisterCompleteServlet.class.getName());
+
static final long serialVersionUID = SerialVersionUID.CloudStartupServlet;
-
- protected static AccountService _accountSvc = null;
- protected static ConfigurationDao _configDao = null;
- protected static UserDao _userDao = null;
-
- @Override
- public void init() throws ServletException {
- ComponentLocator locator = ComponentLocator.getLocator(ManagementServer.Name);
- _accountSvc = locator.getManager(AccountService.class);
- _configDao = locator.getDao(ConfigurationDao.class);
- _userDao = locator.getDao(UserDao.class);
- }
-
- @Override
- public void contextInitialized(ServletContextEvent sce) {
- try {
- init();
- } catch (ServletException e) {
- s_logger.error("Exception starting management server ", e);
- throw new RuntimeException(e);
- }
- }
-
- @Override
- public void contextDestroyed(ServletContextEvent sce) {
- }
-
- @Override
+
+ @Inject AccountService _accountSvc = null;
+ @Inject ConfigurationDao _configDao = null;
+ @Inject UserDao _userDao = null;
+
+ @Override
+ public void contextInitialized(ServletContextEvent sce) {
+ }
+
+ @Override
+ public void contextDestroyed(ServletContextEvent sce) {
+ }
+
+ @Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) {
- doGet(req, resp);
- }
-
- @Override
+ doGet(req, resp);
+ }
+
+ @Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) {
- String registrationToken = req.getParameter("token");
- String expires = req.getParameter("expires");
- int statusCode = HttpServletResponse.SC_OK;
- String responseMessage = null;
-
- if (registrationToken == null || registrationToken.trim().length() == 0) {
- statusCode = 503;
- responseMessage = "{ \"registration_info\" : { \"errorcode\" : \"503\", \"errortext\" : \"Missing token\" } }";
- } else {
- s_logger.info("Attempting to register user account with token = "+registrationToken);
- User resourceAdminUser = _accountSvc.getActiveUserByRegistrationToken(registrationToken);
- if (resourceAdminUser != null) {
- if(resourceAdminUser.isRegistered()) {
- statusCode = 503;
- responseMessage = "{ \"registration_info\" : { \"errorcode\" : \"503\", \"errortext\" : \"Expired token = " + registrationToken + "\" } }";
- } else {
- if(expires != null && expires.toLowerCase().equals("true")){
- _accountSvc.markUserRegistered(resourceAdminUser.getId());
- }
-
- Account resourceAdminAccount = _accountSvc.getActiveAccountById(resourceAdminUser.getAccountId());
- Account rsUserAccount = _accountSvc.getActiveAccountByName(resourceAdminAccount.getAccountName()+"-user", resourceAdminAccount.getDomainId());
-
- List<UserVO> users = _userDao.listByAccount(rsUserAccount.getId());
- User rsUser = users.get(0);
-
- Configuration config = _configDao.findByName("endpointe.url");
-
- StringBuffer sb = new StringBuffer();
- sb.append("{ \"registration_info\" : { \"endpoint_url\" : \""+encodeParam(config.getValue())+"\", ");
- sb.append("\"domain_id\" : \""+resourceAdminAccount.getDomainId()+"\", ");
- sb.append("\"admin_account\" : \""+encodeParam(resourceAdminUser.getUsername())+"\", ");
- sb.append("\"admin_account_api_key\" : \""+resourceAdminUser.getApiKey()+"\", ");
- sb.append("\"admin_account_secret_key\" : \""+resourceAdminUser.getSecretKey()+"\", ");
- sb.append("\"user_account\" : \""+encodeParam(rsUser.getUsername())+"\", ");
- sb.append("\"user_account_api_key\" : \""+rsUser.getApiKey()+"\", ");
- sb.append("\"user_account_secret_key\" : \""+rsUser.getSecretKey()+"\" ");
- sb.append("} }");
- responseMessage = sb.toString();
- }
- } else {
- statusCode = 503;
- responseMessage = "{ \"registration_info\" : { \"errorcode\" : \"503\", \"errortext\" : \"Invalid token = " + registrationToken + "\" } }";
- }
- }
-
+ String registrationToken = req.getParameter("token");
+ String expires = req.getParameter("expires");
+ int statusCode = HttpServletResponse.SC_OK;
+ String responseMessage = null;
+
+ if (registrationToken == null || registrationToken.trim().length() == 0) {
+ statusCode = 503;
+ responseMessage = "{ \"registration_info\" : { \"errorcode\" : \"503\", \"errortext\" : \"Missing token\" } }";
+ } else {
+ s_logger.info("Attempting to register user account with token = "+registrationToken);
+ User resourceAdminUser = _accountSvc.getActiveUserByRegistrationToken(registrationToken);
+ if (resourceAdminUser != null) {
+ if(resourceAdminUser.isRegistered()) {
+ statusCode = 503;
+ responseMessage = "{ \"registration_info\" : { \"errorcode\" : \"503\", \"errortext\" : \"Expired token = " + registrationToken + "\" } }";
+ } else {
+ if(expires != null && expires.toLowerCase().equals("true")){
+ _accountSvc.markUserRegistered(resourceAdminUser.getId());
+ }
+
+ Account resourceAdminAccount = _accountSvc.getActiveAccountById(resourceAdminUser.getAccountId());
+ Account rsUserAccount = _accountSvc.getActiveAccountByName(resourceAdminAccount.getAccountName()+"-user", resourceAdminAccount.getDomainId());
+
+ List<UserVO> users = _userDao.listByAccount(rsUserAccount.getId());
+ User rsUser = users.get(0);
+
+ Configuration config = _configDao.findByName("endpointe.url");
+
+ StringBuffer sb = new StringBuffer();
+ sb.append("{ \"registration_info\" : { \"endpoint_url\" : \""+encodeParam(config.getValue())+"\", ");
+ sb.append("\"domain_id\" : \""+resourceAdminAccount.getDomainId()+"\", ");
+ sb.append("\"admin_account\" : \""+encodeParam(resourceAdminUser.getUsername())+"\", ");
+ sb.append("\"admin_account_api_key\" : \""+resourceAdminUser.getApiKey()+"\", ");
+ sb.append("\"admin_account_secret_key\" : \""+resourceAdminUser.getSecretKey()+"\", ");
+ sb.append("\"user_account\" : \""+encodeParam(rsUser.getUsername())+"\", ");
+ sb.append("\"user_account_api_key\" : \""+rsUser.getApiKey()+"\", ");
+ sb.append("\"user_account_secret_key\" : \""+rsUser.getSecretKey()+"\" ");
+ sb.append("} }");
+ responseMessage = sb.toString();
+ }
+ } else {
+ statusCode = 503;
+ responseMessage = "{ \"registration_info\" : { \"errorcode\" : \"503\", \"errortext\" : \"Invalid token = " + registrationToken + "\" } }";
+ }
+ }
+
try {
- resp.setContentType("text/javascript; charset=UTF-8");
- resp.setStatus(statusCode);
- resp.getWriter().print(responseMessage);
+ resp.setContentType("text/javascript; charset=UTF-8");
+ resp.setStatus(statusCode);
+ resp.getWriter().print(responseMessage);
} catch (Exception ex) {
- s_logger.error("unknown exception writing register complete response", ex);
+ s_logger.error("unknown exception writing register complete response", ex);
+ }
+ }
+
+ private String encodeParam(String value) {
+ try {
+ return URLEncoder.encode(value, "UTF-8").replaceAll("\\+", "%20");
+ } catch (Exception e) {
+ s_logger.warn("Unable to encode: " + value);
}
- }
-
- private String encodeParam(String value) {
- try {
- return URLEncoder.encode(value, "UTF-8").replaceAll("\\+", "%20");
- } catch (Exception e) {
- s_logger.warn("Unable to encode: " + value);
- }
- return value;
- }
+ return value;
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/110465b5/server/src/com/cloud/storage/StorageManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/storage/StorageManagerImpl.java b/server/src/com/cloud/storage/StorageManagerImpl.java
index ef36a82..bff76b9 100755
--- a/server/src/com/cloud/storage/StorageManagerImpl.java
+++ b/server/src/com/cloud/storage/StorageManagerImpl.java
@@ -28,7 +28,6 @@ import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Date;
-import java.util.Enumeration;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
@@ -45,7 +44,10 @@ import javax.ejb.Local;
import javax.inject.Inject;
import javax.naming.ConfigurationException;
-import org.apache.cloudstack.api.command.admin.storage.*;
+import org.apache.cloudstack.api.command.admin.storage.CancelPrimaryStorageMaintenanceCmd;
+import org.apache.cloudstack.api.command.admin.storage.CreateStoragePoolCmd;
+import org.apache.cloudstack.api.command.admin.storage.DeletePoolCmd;
+import org.apache.cloudstack.api.command.admin.storage.UpdateStoragePoolCmd;
import org.apache.cloudstack.api.command.user.volume.CreateVolumeCmd;
import org.apache.cloudstack.api.command.user.volume.UploadVolumeCmd;
import org.apache.log4j.Logger;
@@ -76,14 +78,12 @@ import com.cloud.agent.api.to.VolumeTO;
import com.cloud.agent.manager.Commands;
import com.cloud.alert.AlertManager;
import com.cloud.api.ApiDBUtils;
-import org.apache.cloudstack.api.command.admin.storage.CreateStoragePoolCmd;
import com.cloud.async.AsyncJobManager;
import com.cloud.capacity.Capacity;
import com.cloud.capacity.CapacityManager;
import com.cloud.capacity.CapacityState;
import com.cloud.capacity.CapacityVO;
import com.cloud.capacity.dao.CapacityDao;
-import com.cloud.cluster.CheckPointManager;
import com.cloud.cluster.ClusterManagerListener;
import com.cloud.cluster.ManagementServerHostVO;
import com.cloud.configuration.Config;
@@ -172,8 +172,7 @@ import com.cloud.utils.EnumUtils;
import com.cloud.utils.NumbersUtil;
import com.cloud.utils.Pair;
import com.cloud.utils.UriUtils;
-import com.cloud.utils.component.Adapters;
-import com.cloud.utils.component.ComponentLocator;
+import com.cloud.utils.component.ComponentContext;
import com.cloud.utils.component.Manager;
import com.cloud.utils.concurrency.NamedThreadFactory;
import com.cloud.utils.db.DB;
@@ -322,8 +321,6 @@ public class StorageManagerImpl implements StorageManager, Manager, ClusterManag
@Inject
protected ResourceManager _resourceMgr;
@Inject
- protected CheckPointManager _checkPointMgr;
- @Inject
protected DownloadMonitor _downloadMonitor;
@Inject
protected ResourceTagDao _resourceTagDao;
@@ -355,14 +352,14 @@ public class StorageManagerImpl implements StorageManager, Manager, ClusterManag
protected BigDecimal _overProvisioningFactor = new BigDecimal(1);
private long _maxVolumeSizeInGb;
private long _serverId;
- private StateMachine2<Volume.State, Volume.Event, Volume> _volStateMachine;
+ private final StateMachine2<Volume.State, Volume.Event, Volume> _volStateMachine;
private int _customDiskOfferingMinSize = 1;
private int _customDiskOfferingMaxSize = 1024;
private double _storageUsedThreshold = 1.0d;
private double _storageAllocatedThreshold = 1.0d;
protected BigDecimal _storageOverprovisioningFactor = new BigDecimal(1);
- private boolean _recreateSystemVmEnabled;
+ private boolean _recreateSystemVmEnabled;
public boolean share(VMInstanceVO vm, List<VolumeVO> vols, HostVO host, boolean cancelPreviousShare) throws StorageUnavailableException {
@@ -653,9 +650,9 @@ public class StorageManagerImpl implements StorageManager, Manager, ClusterManag
Pair<VolumeVO, String> volumeDetails = createVolumeFromSnapshot(volume, snapshot);
if (volumeDetails != null) {
createdVolume = volumeDetails.first();
- UsageEventVO usageEvent = new UsageEventVO(EventTypes.EVENT_VOLUME_CREATE, createdVolume.getAccountId(), createdVolume.getDataCenterId(), createdVolume.getId(), createdVolume.getName(),
- createdVolume.getDiskOfferingId(), null, createdVolume.getSize());
- _usageEventDao.persist(usageEvent);
+ UsageEventVO usageEvent = new UsageEventVO(EventTypes.EVENT_VOLUME_CREATE, createdVolume.getAccountId(), createdVolume.getDataCenterId(), createdVolume.getId(), createdVolume.getName(),
+ createdVolume.getDiskOfferingId(), null, createdVolume.getSize());
+ _usageEventDao.persist(usageEvent);
}
return createdVolume;
}
@@ -739,32 +736,32 @@ public class StorageManagerImpl implements StorageManager, Manager, ClusterManag
@DB
public VolumeVO copyVolumeFromSecToPrimary(VolumeVO volume, VMInstanceVO vm, VMTemplateVO template, DataCenterVO dc, HostPodVO pod, Long clusterId, ServiceOfferingVO offering, DiskOfferingVO diskOffering,
List<StoragePoolVO> avoids, long size, HypervisorType hyperType) throws NoTransitionException {
-
- final HashSet<StoragePool> avoidPools = new HashSet<StoragePool>(avoids);
- DiskProfile dskCh = createDiskCharacteristics(volume, template, dc, diskOffering);
- dskCh.setHyperType(vm.getHypervisorType());
- // Find a suitable storage to create volume on
- StoragePoolVO destPool = findStoragePool(dskCh, dc, pod, clusterId, null, vm, avoidPools);
-
- // Copy the volume from secondary storage to the destination storage pool
- stateTransitTo(volume, Event.CopyRequested);
- VolumeHostVO volumeHostVO = _volumeHostDao.findByVolumeId(volume.getId());
- HostVO secStorage = _hostDao.findById(volumeHostVO.getHostId());
- String secondaryStorageURL = secStorage.getStorageUrl();
- String[] volumePath = volumeHostVO.getInstallPath().split("/");
- String volumeUUID = volumePath[volumePath.length - 1].split("\\.")[0];
-
+
+ final HashSet<StoragePool> avoidPools = new HashSet<StoragePool>(avoids);
+ DiskProfile dskCh = createDiskCharacteristics(volume, template, dc, diskOffering);
+ dskCh.setHyperType(vm.getHypervisorType());
+ // Find a suitable storage to create volume on
+ StoragePoolVO destPool = findStoragePool(dskCh, dc, pod, clusterId, null, vm, avoidPools);
+
+ // Copy the volume from secondary storage to the destination storage pool
+ stateTransitTo(volume, Event.CopyRequested);
+ VolumeHostVO volumeHostVO = _volumeHostDao.findByVolumeId(volume.getId());
+ HostVO secStorage = _hostDao.findById(volumeHostVO.getHostId());
+ String secondaryStorageURL = secStorage.getStorageUrl();
+ String[] volumePath = volumeHostVO.getInstallPath().split("/");
+ String volumeUUID = volumePath[volumePath.length - 1].split("\\.")[0];
+
CopyVolumeCommand cvCmd = new CopyVolumeCommand(volume.getId(), volumeUUID, destPool, secondaryStorageURL, false, _copyvolumewait);
CopyVolumeAnswer cvAnswer;
- try {
+ try {
cvAnswer = (CopyVolumeAnswer) sendToPool(destPool, cvCmd);
} catch (StorageUnavailableException e1) {
- stateTransitTo(volume, Event.CopyFailed);
+ stateTransitTo(volume, Event.CopyFailed);
throw new CloudRuntimeException("Failed to copy the volume from secondary storage to the destination primary storage pool.");
}
if (cvAnswer == null || !cvAnswer.getResult()) {
- stateTransitTo(volume, Event.CopyFailed);
+ stateTransitTo(volume, Event.CopyFailed);
throw new CloudRuntimeException("Failed to copy the volume from secondary storage to the destination primary storage pool.");
}
Transaction txn = Transaction.currentTxn();
@@ -778,11 +775,11 @@ public class StorageManagerImpl implements StorageManager, Manager, ClusterManag
UsageEventVO usageEvent = new UsageEventVO(EventTypes.EVENT_VOLUME_CREATE, volume.getAccountId(), volume.getDataCenterId(), volume.getId(), volume.getName(), volume.getDiskOfferingId(), null, volume.getSize());
_usageEventDao.persist(usageEvent);
_volumeHostDao.remove(volumeHostVO.getId());
- txn.commit();
- return volume;
-
+ txn.commit();
+ return volume;
+
}
-
+
@Override
@DB
public VolumeVO createVolume(VolumeVO volume, VMInstanceVO vm, VMTemplateVO template, DataCenterVO dc, HostPodVO pod, Long clusterId, ServiceOfferingVO offering, DiskOfferingVO diskOffering,
@@ -848,11 +845,11 @@ public class StorageManagerImpl implements StorageManager, Manager, ClusterManag
String fullTmpltUrl = tmpltHostUrl + "/" + tmpltHostOn.getInstallPath();
cmd = new CreateCommand(dskCh, fullTmpltUrl, new StorageFilerTO(pool));
} else {
- tmpltStoredOn = _tmpltMgr.prepareTemplateForCreate(template, pool);
- if (tmpltStoredOn == null) {
- continue;
- }
- cmd = new CreateCommand(dskCh, tmpltStoredOn.getLocalDownloadPath(), new StorageFilerTO(pool));
+ tmpltStoredOn = _tmpltMgr.prepareTemplateForCreate(template, pool);
+ if (tmpltStoredOn == null) {
+ continue;
+ }
+ cmd = new CreateCommand(dskCh, tmpltStoredOn.getLocalDownloadPath(), new StorageFilerTO(pool));
}
} else {
if (volume.getVolumeType() == Type.ROOT && Storage.ImageFormat.ISO == template.getFormat()) {
@@ -969,7 +966,7 @@ public class StorageManagerImpl implements StorageManager, Manager, ClusterManag
value = _configDao.getValue(Config.RecreateSystemVmEnabled.key());
_recreateSystemVmEnabled = Boolean.parseBoolean(value);
-
+
value = _configDao.getValue(Config.StorageTemplateCleanupEnabled.key());
_templateCleanupEnabled = (value == null ? true : Boolean.parseBoolean(value));
@@ -995,7 +992,7 @@ public class StorageManagerImpl implements StorageManager, Manager, ClusterManag
int wrks = NumbersUtil.parseInt(workers, 10);
_executor = Executors.newScheduledThreadPool(wrks, new NamedThreadFactory("StorageManager-Scavenger"));
- _agentMgr.registerForHostEvents(ComponentLocator.inject(LocalStoragePoolListener.class), true, false, false);
+ _agentMgr.registerForHostEvents(ComponentContext.inject(LocalStoragePoolListener.class), true, false, false);
String maxVolumeSizeInGbString = _configDao.getValue("storage.max.volume.size");
_maxVolumeSizeInGb = NumbersUtil.parseLong(maxVolumeSizeInGbString, 2000);
@@ -1536,10 +1533,10 @@ public class StorageManagerImpl implements StorageManager, Manager, ClusterManag
// If it does , then you cannot delete the pool
if (vlms.first() > 0) {
throw new CloudRuntimeException("Cannot delete pool " + sPool.getName() + " as there are associated vols" +
- " for this pool");
+ " for this pool");
}
}
-
+
// First get the host_id from storage_pool_host_ref for given pool id
StoragePoolVO lock = _storagePoolDao.acquireInLockTable(sPool.getId());
@@ -1733,7 +1730,7 @@ public class StorageManagerImpl implements StorageManager, Manager, ClusterManag
return _volsDao.findById(volume.getId());
}
-
+
/*
* Upload the volume to secondary storage.
*
@@ -1742,19 +1739,19 @@ public class StorageManagerImpl implements StorageManager, Manager, ClusterManag
@DB
@ActionEvent(eventType = EventTypes.EVENT_VOLUME_UPLOAD, eventDescription = "uploading volume", async = true)
public VolumeVO uploadVolume(UploadVolumeCmd cmd) throws ResourceAllocationException{
- Account caller = UserContext.current().getCaller();
+ Account caller = UserContext.current().getCaller();
long ownerId = cmd.getEntityOwnerId();
Long zoneId = cmd.getZoneId();
String volumeName = cmd.getVolumeName();
String url = cmd.getUrl();
String format = cmd.getFormat();
-
- validateVolume(caller, ownerId, zoneId, volumeName, url, format);
- VolumeVO volume = persistVolume(caller, ownerId, zoneId, volumeName, url, cmd.getFormat());
- _downloadMonitor.downloadVolumeToStorage(volume, zoneId, url, cmd.getChecksum(), ImageFormat.valueOf(format.toUpperCase()));
- return volume;
+
+ validateVolume(caller, ownerId, zoneId, volumeName, url, format);
+ VolumeVO volume = persistVolume(caller, ownerId, zoneId, volumeName, url, cmd.getFormat());
+ _downloadMonitor.downloadVolumeToStorage(volume, zoneId, url, cmd.getChecksum(), ImageFormat.valueOf(format.toUpperCase()));
+ return volume;
}
-
+
private boolean validateVolume(Account caller, long ownerId, Long zoneId, String volumeName, String url, String format) throws ResourceAllocationException{
// permission check
@@ -1762,7 +1759,7 @@ public class StorageManagerImpl implements StorageManager, Manager, ClusterManag
// Check that the resource limit for volumes won't be exceeded
_resourceLimitMgr.checkResourceLimit(_accountMgr.getAccount(ownerId), ResourceType.volume);
-
+
// Verify that zone exists
DataCenterVO zone = _dcDao.findById(zoneId);
@@ -1774,75 +1771,75 @@ public class StorageManagerImpl implements StorageManager, Manager, ClusterManag
if (Grouping.AllocationState.Disabled == zone.getAllocationState() && !_accountMgr.isRootAdmin(caller.getType())) {
throw new PermissionDeniedException("Cannot perform this operation, Zone is currently disabled: " + zoneId);
}
-
- if (url.toLowerCase().contains("file://")) {
- throw new InvalidParameterValueException("File:// type urls are currently unsupported");
- }
-
- ImageFormat imgfmt = ImageFormat.valueOf(format.toUpperCase());
- if (imgfmt == null) {
- throw new IllegalArgumentException("Image format is incorrect " + format + ". Supported formats are " + EnumUtils.listValues(ImageFormat.values()));
- }
-
+
+ if (url.toLowerCase().contains("file://")) {
+ throw new InvalidParameterValueException("File:// type urls are currently unsupported");
+ }
+
+ ImageFormat imgfmt = ImageFormat.valueOf(format.toUpperCase());
+ if (imgfmt == null) {
+ throw new IllegalArgumentException("Image format is incorrect " + format + ". Supported formats are " + EnumUtils.listValues(ImageFormat.values()));
+ }
+
String userSpecifiedName = volumeName;
if (userSpecifiedName == null) {
userSpecifiedName = getRandomVolumeName();
}
- if((!url.toLowerCase().endsWith("vhd"))&&(!url.toLowerCase().endsWith("vhd.zip"))
- &&(!url.toLowerCase().endsWith("vhd.bz2"))&&(!url.toLowerCase().endsWith("vhd.gz"))
- &&(!url.toLowerCase().endsWith("qcow2"))&&(!url.toLowerCase().endsWith("qcow2.zip"))
- &&(!url.toLowerCase().endsWith("qcow2.bz2"))&&(!url.toLowerCase().endsWith("qcow2.gz"))
- &&(!url.toLowerCase().endsWith("ova"))&&(!url.toLowerCase().endsWith("ova.zip"))
- &&(!url.toLowerCase().endsWith("ova.bz2"))&&(!url.toLowerCase().endsWith("ova.gz"))
- &&(!url.toLowerCase().endsWith("img"))&&(!url.toLowerCase().endsWith("raw"))){
- throw new InvalidParameterValueException("Please specify a valid " + format.toLowerCase());
- }
-
- if ((format.equalsIgnoreCase("vhd") && (!url.toLowerCase().endsWith(".vhd") && !url.toLowerCase().endsWith("vhd.zip") && !url.toLowerCase().endsWith("vhd.bz2") && !url.toLowerCase().endsWith("vhd.gz") ))
- || (format.equalsIgnoreCase("qcow2") && (!url.toLowerCase().endsWith(".qcow2") && !url.toLowerCase().endsWith("qcow2.zip") && !url.toLowerCase().endsWith("qcow2.bz2") && !url.toLowerCase().endsWith("qcow2.gz") ))
- || (format.equalsIgnoreCase("ova") && (!url.toLowerCase().endsWith(".ova") && !url.toLowerCase().endsWith("ova.zip") && !url.toLowerCase().endsWith("ova.bz2") && !url.toLowerCase().endsWith("ova.gz")))
- || (format.equalsIgnoreCase("raw") && (!url.toLowerCase().endsWith(".img") && !url.toLowerCase().endsWith("raw")))) {
- throw new InvalidParameterValueException("Please specify a valid URL. URL:" + url + " is an invalid for the format " + format.toLowerCase());
- }
+ if((!url.toLowerCase().endsWith("vhd"))&&(!url.toLowerCase().endsWith("vhd.zip"))
+ &&(!url.toLowerCase().endsWith("vhd.bz2"))&&(!url.toLowerCase().endsWith("vhd.gz"))
+ &&(!url.toLowerCase().endsWith("qcow2"))&&(!url.toLowerCase().endsWith("qcow2.zip"))
+ &&(!url.toLowerCase().endsWith("qcow2.bz2"))&&(!url.toLowerCase().endsWith("qcow2.gz"))
+ &&(!url.toLowerCase().endsWith("ova"))&&(!url.toLowerCase().endsWith("ova.zip"))
+ &&(!url.toLowerCase().endsWith("ova.bz2"))&&(!url.toLowerCase().endsWith("ova.gz"))
+ &&(!url.toLowerCase().endsWith("img"))&&(!url.toLowerCase().endsWith("raw"))){
+ throw new InvalidParameterValueException("Please specify a valid " + format.toLowerCase());
+ }
+
+ if ((format.equalsIgnoreCase("vhd") && (!url.toLowerCase().endsWith(".vhd") && !url.toLowerCase().endsWith("vhd.zip") && !url.toLowerCase().endsWith("vhd.bz2") && !url.toLowerCase().endsWith("vhd.gz") ))
+ || (format.equalsIgnoreCase("qcow2") && (!url.toLowerCase().endsWith(".qcow2") && !url.toLowerCase().endsWith("qcow2.zip") && !url.toLowerCase().endsWith("qcow2.bz2") && !url.toLowerCase().endsWith("qcow2.gz") ))
+ || (format.equalsIgnoreCase("ova") && (!url.toLowerCase().endsWith(".ova") && !url.toLowerCase().endsWith("ova.zip") && !url.toLowerCase().endsWith("ova.bz2") && !url.toLowerCase().endsWith("ova.gz")))
+ || (format.equalsIgnoreCase("raw") && (!url.toLowerCase().endsWith(".img") && !url.toLowerCase().endsWith("raw")))) {
+ throw new InvalidParameterValueException("Please specify a valid URL. URL:" + url + " is an invalid for the format " + format.toLowerCase());
+ }
validateUrl(url);
-
- return false;
+
+ return false;
}
-
+
private String validateUrl(String url){
- try {
- URI uri = new URI(url);
- if ((uri.getScheme() == null) || (!uri.getScheme().equalsIgnoreCase("http")
- && !uri.getScheme().equalsIgnoreCase("https") && !uri.getScheme().equalsIgnoreCase("file"))) {
- throw new IllegalArgumentException("Unsupported scheme for url: " + url);
- }
-
- int port = uri.getPort();
- if (!(port == 80 || port == 443 || port == -1)) {
- throw new IllegalArgumentException("Only ports 80 and 443 are allowed");
- }
- String host = uri.getHost();
- try {
- InetAddress hostAddr = InetAddress.getByName(host);
- if (hostAddr.isAnyLocalAddress() || hostAddr.isLinkLocalAddress() || hostAddr.isLoopbackAddress() || hostAddr.isMulticastAddress()) {
- throw new IllegalArgumentException("Illegal host specified in url");
- }
- if (hostAddr instanceof Inet6Address) {
- throw new IllegalArgumentException("IPV6 addresses not supported (" + hostAddr.getHostAddress() + ")");
- }
- } catch (UnknownHostException uhe) {
- throw new IllegalArgumentException("Unable to resolve " + host);
- }
-
- return uri.toString();
- } catch (URISyntaxException e) {
- throw new IllegalArgumentException("Invalid URL " + url);
- }
-
- }
-
+ try {
+ URI uri = new URI(url);
+ if ((uri.getScheme() == null) || (!uri.getScheme().equalsIgnoreCase("http")
+ && !uri.getScheme().equalsIgnoreCase("https") && !uri.getScheme().equalsIgnoreCase("file"))) {
+ throw new IllegalArgumentException("Unsupported scheme for url: " + url);
+ }
+
+ int port = uri.getPort();
+ if (!(port == 80 || port == 443 || port == -1)) {
+ throw new IllegalArgumentException("Only ports 80 and 443 are allowed");
+ }
+ String host = uri.getHost();
+ try {
+ InetAddress hostAddr = InetAddress.getByName(host);
+ if (hostAddr.isAnyLocalAddress() || hostAddr.isLinkLocalAddress() || hostAddr.isLoopbackAddress() || hostAddr.isMulticastAddress()) {
+ throw new IllegalArgumentException("Illegal host specified in url");
+ }
+ if (hostAddr instanceof Inet6Address) {
+ throw new IllegalArgumentException("IPV6 addresses not supported (" + hostAddr.getHostAddress() + ")");
+ }
+ } catch (UnknownHostException uhe) {
+ throw new IllegalArgumentException("Unable to resolve " + host);
+ }
+
+ return uri.toString();
+ } catch (URISyntaxException e) {
+ throw new IllegalArgumentException("Invalid URL " + url);
+ }
+
+ }
+
private VolumeVO persistVolume(Account caller, long ownerId, Long zoneId, String volumeName, String url, String format) {
-
+
Transaction txn = Transaction.currentTxn();
txn.start();
@@ -1861,21 +1858,21 @@ public class StorageManagerImpl implements StorageManager, Manager, ClusterManag
volume = _volsDao.persist(volume);
try {
- stateTransitTo(volume, Event.UploadRequested);
- } catch (NoTransitionException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
+ stateTransitTo(volume, Event.UploadRequested);
+ } catch (NoTransitionException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
UserContext.current().setEventDetails("Volume Id: " + volume.getId());
// Increment resource count during allocation; if actual creation fails, decrement it
_resourceLimitMgr.incrementResourceCount(volume.getAccountId(), ResourceType.volume);
txn.commit();
- return volume;
- }
-
-
+ return volume;
+ }
+
+
/*
* Just allocate a volume in the database, don't send the createvolume cmd to hypervisor. The volume will be finally
* created
@@ -2049,9 +2046,9 @@ public class StorageManagerImpl implements StorageManager, Manager, ClusterManag
volume = _volsDao.persist(volume);
if(cmd.getSnapshotId() == null){
- //for volume created from snapshot, create usage event after volume creation
- UsageEventVO usageEvent = new UsageEventVO(EventTypes.EVENT_VOLUME_CREATE, volume.getAccountId(), volume.getDataCenterId(), volume.getId(), volume.getName(), diskOfferingId, null, size);
- _usageEventDao.persist(usageEvent);
+ //for volume created from snapshot, create usage event after volume creation
+ UsageEventVO usageEvent = new UsageEventVO(EventTypes.EVENT_VOLUME_CREATE, volume.getAccountId(), volume.getDataCenterId(), volume.getId(), volume.getName(), diskOfferingId, null, size);
+ _usageEventDao.persist(usageEvent);
}
UserContext.current().setEventDetails("Volume Id: " + volume.getId());
@@ -2161,7 +2158,7 @@ public class StorageManagerImpl implements StorageManager, Manager, ClusterManag
if (capacities.size() == 0) {
CapacityVO capacity = new CapacityVO(storagePool.getId(), storagePool.getDataCenterId(), storagePool.getPodId(), storagePool.getClusterId(), allocated, totalOverProvCapacity, capacityType);
CapacityState capacityState = _configMgr.findClusterAllocationState(ApiDBUtils.findClusterById(storagePool.getClusterId())) == AllocationState.Disabled ?
- CapacityState.Disabled : CapacityState.Enabled;
+ CapacityState.Disabled : CapacityState.Enabled;
capacity.setCapacityState(capacityState);
_capacityDao.persist(capacity);
} else {
@@ -2182,7 +2179,7 @@ public class StorageManagerImpl implements StorageManager, Manager, ClusterManag
s_logger.debug("Successfully set Capacity - " + totalOverProvCapacity + " for capacity type - " + capacityType + " , DataCenterId - "
+ storagePool.getDataCenterId() + ", HostOrPoolId - " + storagePool.getId() + ", PodId " + storagePool.getPodId());
}
-
+
@Override
public List<Long> getUpHostsInPool(long poolId) {
SearchCriteria<Long> sc = UpHostsInPoolSearch.create();
@@ -2283,7 +2280,7 @@ public class StorageManagerImpl implements StorageManager, Manager, ClusterManag
s_logger.warn("Unable to destroy " + vol.getId(), e);
}
}
-
+
// remove snapshots in Error state
List<SnapshotVO> snapshots = _snapshotDao.listAllByStatus(Snapshot.Status.Error);
for (SnapshotVO snapshotVO : snapshots) {
@@ -2293,7 +2290,7 @@ public class StorageManagerImpl implements StorageManager, Manager, ClusterManag
s_logger.warn("Unable to destroy " + snapshotVO.getId(), e);
}
}
-
+
} finally {
scanLock.unlock();
}
@@ -2432,7 +2429,7 @@ public class StorageManagerImpl implements StorageManager, Manager, ClusterManag
s_logger.warn("problem cleaning up snapshots in secondary storage " + secondaryStorageHost, e2);
}
}
-
+
//CleanUp volumes on Secondary Storage.
for (HostVO secondaryStorageHost : secondaryStorageHosts) {
try {
@@ -2460,7 +2457,7 @@ public class StorageManagerImpl implements StorageManager, Manager, ClusterManag
_volumeHostDao.remove(destroyedVolumeHostVO.getId());
}
}
-
+
}catch (Exception e2) {
s_logger.warn("problem cleaning up volumes in secondary storage " + secondaryStorageHost, e2);
}
@@ -2894,12 +2891,12 @@ public class StorageManagerImpl implements StorageManager, Manager, ClusterManag
// Check that volume is completely Uploaded
if (volume.getState() == Volume.State.UploadOp){
- VolumeHostVO volumeHost = _volumeHostDao.findByVolumeId(volume.getId());
+ VolumeHostVO volumeHost = _volumeHostDao.findByVolumeId(volume.getId());
if (volumeHost.getDownloadState() == VMTemplateStorageResourceAssoc.Status.DOWNLOAD_IN_PROGRESS){
- throw new InvalidParameterValueException("Please specify a volume that is not uploading");
+ throw new InvalidParameterValueException("Please specify a volume that is not uploading");
}
}
-
+
// Check that the volume is not already destroyed
if (volume.getState() != Volume.State.Destroy) {
if (!destroyVolume(volume)) {
@@ -3109,7 +3106,6 @@ public class StorageManagerImpl implements StorageManager, Manager, ClusterManag
volIds.add(volume.getId());
}
- checkPointTaskId = _checkPointMgr.pushCheckPoint(new StorageMigrationCleanupMaid(StorageMigrationCleanupMaid.StorageMigrationState.MIGRATING, volIds));
transitResult = true;
} finally {
if (!transitResult) {
@@ -3166,7 +3162,6 @@ public class StorageManagerImpl implements StorageManager, Manager, ClusterManag
s_logger.debug("Failed to change volume state: " + e.toString());
}
}
- _checkPointMgr.popCheckPoint(checkPointTaskId);
} else {
// Need a transaction, make sure all the volumes get migrated to new storage pool
txn = Transaction.currentTxn();
@@ -3192,11 +3187,6 @@ public class StorageManagerImpl implements StorageManager, Manager, ClusterManag
}
}
transitResult = true;
- try {
- _checkPointMgr.popCheckPoint(checkPointTaskId);
- } catch (Exception e) {
-
- }
} finally {
if (!transitResult) {
txn.rollback();
@@ -3259,7 +3249,7 @@ public class StorageManagerImpl implements StorageManager, Manager, ClusterManag
if (s_logger.isDebugEnabled()) {
s_logger.debug("Checking if we need to prepare " + vols.size() + " volumes for " + vm);
}
-
+
boolean recreate = _recreateSystemVmEnabled;
List<VolumeVO> recreateVols = new ArrayList<VolumeVO>(vols.size());
@@ -3270,8 +3260,8 @@ public class StorageManagerImpl implements StorageManager, Manager, ClusterManag
assignedPool = dest.getStorageForDisks().get(vol);
}
if (assignedPool == null && recreate) {
- assignedPool = _storagePoolDao.findById(vol.getPoolId());
-
+ assignedPool = _storagePoolDao.findById(vol.getPoolId());
+
}
if (assignedPool != null || recreate) {
Volume.State state = vol.getState();
@@ -3312,7 +3302,7 @@ public class StorageManagerImpl implements StorageManager, Manager, ClusterManag
StoragePoolVO pool = _storagePoolDao.findById(vol.getPoolId());
vm.addDisk(new VolumeTO(vol, pool));
}
-
+
}
}
} else {
@@ -3331,10 +3321,10 @@ public class StorageManagerImpl implements StorageManager, Manager, ClusterManag
VolumeVO newVol;
StoragePool existingPool = null;
if (recreate && (dest.getStorageForDisks() == null || dest.getStorageForDisks().get(vol) == null)) {
- existingPool = _storagePoolDao.findById(vol.getPoolId());
- s_logger.debug("existing pool: " + existingPool.getId());
+ existingPool = _storagePoolDao.findById(vol.getPoolId());
+ s_logger.debug("existing pool: " + existingPool.getId());
}
-
+
if (vol.getState() == Volume.State.Allocated || vol.getState() == Volume.State.Creating) {
newVol = vol;
} else {
@@ -3429,12 +3419,12 @@ public class StorageManagerImpl implements StorageManager, Manager, ClusterManag
if (toBeCreated.getTemplateId() != null) {
template = _templateDao.findById(toBeCreated.getTemplateId());
}
-
+
StoragePool pool = null;
if (sPool != null) {
- pool = sPool;
+ pool = sPool;
} else {
- pool = dest.getStorageForDisks().get(toBeCreated);
+ pool = dest.getStorageForDisks().get(toBeCreated);
}
if (pool != null) {
@@ -3465,12 +3455,12 @@ public class StorageManagerImpl implements StorageManager, Manager, ClusterManag
String fullTmpltUrl = tmpltHostUrl + "/" + tmpltHostOn.getInstallPath();
cmd = new CreateCommand(diskProfile, fullTmpltUrl, new StorageFilerTO(pool));
} else {
- tmpltStoredOn = _tmpltMgr.prepareTemplateForCreate(template, pool);
- if (tmpltStoredOn == null) {
- s_logger.debug("Cannot use this pool " + pool + " because we can't propagate template " + template);
- return null;
- }
- cmd = new CreateCommand(diskProfile, tmpltStoredOn.getLocalDownloadPath(), new StorageFilerTO(pool));
+ tmpltStoredOn = _tmpltMgr.prepareTemplateForCreate(template, pool);
+ if (tmpltStoredOn == null) {
+ s_logger.debug("Cannot use this pool " + pool + " because we can't propagate template " + template);
+ return null;
+ }
+ cmd = new CreateCommand(diskProfile, tmpltStoredOn.getLocalDownloadPath(), new StorageFilerTO(pool));
}
} else {
if (template != null && Storage.ImageFormat.ISO == template.getFormat()) {
@@ -3513,27 +3503,27 @@ public class StorageManagerImpl implements StorageManager, Manager, ClusterManag
if (s_logger.isDebugEnabled()) {
s_logger.debug("Expunging " + vol);
}
-
+
//Find out if the volume is present on secondary storage
VolumeHostVO volumeHost = _volumeHostDao.findByVolumeId(vol.getId());
if(volumeHost != null){
- if (volumeHost.getDownloadState() == VMTemplateStorageResourceAssoc.Status.DOWNLOADED){
- HostVO ssHost = _hostDao.findById(volumeHost.getHostId());
- DeleteVolumeCommand dtCommand = new DeleteVolumeCommand(ssHost.getStorageUrl(), volumeHost.getInstallPath());
- Answer answer = _agentMgr.sendToSecStorage(ssHost, dtCommand);
- if (answer == null || !answer.getResult()) {
- s_logger.debug("Failed to delete " + volumeHost + " due to " + ((answer == null) ? "answer is null" : answer.getDetails()));
- return;
- }
- }else if(volumeHost.getDownloadState() == VMTemplateStorageResourceAssoc.Status.DOWNLOAD_IN_PROGRESS){
- s_logger.debug("Volume: " + vol.getName() + " is currently being uploaded; cant' delete it.");
- throw new CloudRuntimeException("Please specify a volume that is not currently being uploaded.");
- }
+ if (volumeHost.getDownloadState() == VMTemplateStorageResourceAssoc.Status.DOWNLOADED){
+ HostVO ssHost = _hostDao.findById(volumeHost.getHostId());
+ DeleteVolumeCommand dtCommand = new DeleteVolumeCommand(ssHost.getStorageUrl(), volumeHost.getInstallPath());
+ Answer answer = _agentMgr.sendToSecStorage(ssHost, dtCommand);
+ if (answer == null || !answer.getResult()) {
+ s_logger.debug("Failed to delete " + volumeHost + " due to " + ((answer == null) ? "answer is null" : answer.getDetails()));
+ return;
+ }
+ }else if(volumeHost.getDownloadState() == VMTemplateStorageResourceAssoc.Status.DOWNLOAD_IN_PROGRESS){
+ s_logger.debug("Volume: " + vol.getName() + " is currently being uploaded; cant' delete it.");
+ throw new CloudRuntimeException("Please specify a volume that is not currently being uploaded.");
+ }
_volumeHostDao.remove(volumeHost.getId());
_volumeDao.remove(vol.getId());
return;
}
-
+
String vmName = null;
if (vol.getVolumeType() == Type.ROOT && vol.getInstanceId() != null) {
VirtualMachine vm = _vmInstanceDao.findByIdIncludingRemoved(vol.getInstanceId());
@@ -3578,7 +3568,7 @@ public class StorageManagerImpl implements StorageManager, Manager, ClusterManag
} catch (RuntimeException ex) {
if (force) {
s_logger.info("Failed to expunge volume, but marking volume id=" + vol.getId() + " as expunged anyway " +
- "due to force=true. Volume failed to expunge due to ", ex);
+ "due to force=true. Volume failed to expunge due to ", ex);
removeVolume = true;
} else {
throw ex;
@@ -3869,14 +3859,14 @@ public class StorageManagerImpl implements StorageManager, Manager, ClusterManag
return null;
}
}
-
+
@Override
public HypervisorType getHypervisorTypeFromFormat(ImageFormat format) {
-
- if(format == null) {
+
+ if(format == null) {
return HypervisorType.None;
- }
-
+ }
+
if (format == ImageFormat.VHD) {
return HypervisorType.XenServer;
} else if (format == ImageFormat.OVA) {
@@ -3965,5 +3955,5 @@ public class StorageManagerImpl implements StorageManager, Manager, ClusterManag
}
return true;
}
-
+
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/110465b5/server/src/com/cloud/storage/StorageMigrationCleanupMaid.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/storage/StorageMigrationCleanupMaid.java b/server/src/com/cloud/storage/StorageMigrationCleanupMaid.java
deleted file mode 100644
index 3ba8483..0000000
--- a/server/src/com/cloud/storage/StorageMigrationCleanupMaid.java
+++ /dev/null
@@ -1,121 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements. See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership. The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License. You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied. See the License for the
-// specific language governing permissions and limitations
-// under the License.
-package com.cloud.storage;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.log4j.Logger;
-
-import com.cloud.cluster.CheckPointManager;
-import com.cloud.cluster.CleanupMaid;
-import com.cloud.server.ManagementServer;
-import com.cloud.storage.dao.VolumeDao;
-import com.cloud.utils.component.ComponentLocator;
-import com.cloud.utils.db.Transaction;
-import com.cloud.utils.fsm.NoTransitionException;
-import com.cloud.utils.fsm.StateMachine2;
-import com.cloud.vm.VMInstanceVO;
-import com.cloud.vm.VirtualMachine;
-import com.cloud.vm.VirtualMachineManager;
-import com.cloud.vm.dao.VMInstanceDao;
-
-public class StorageMigrationCleanupMaid implements CleanupMaid {
- private static final Logger s_logger = Logger.getLogger(StorageMigrationCleanupMaid.class);
- public static enum StorageMigrationState {
- MIGRATING,
- MIGRATINGFAILED,
- MIGRATINGSUCCESS;
- }
-
- private List<Long> _volumesIds = new ArrayList<Long>();
- private StorageMigrationState _migrateState;
-
- public StorageMigrationCleanupMaid() {
-
- }
-
- public StorageMigrationCleanupMaid(StorageMigrationState state, List<Long> volumes) {
- _migrateState = state;
- _volumesIds = volumes;
- }
-
- public void updateStaste(StorageMigrationState state) {
- _migrateState = state;
- }
-
- @Override
- public int cleanup(CheckPointManager checkPointMgr) {
- StateMachine2<Volume.State, Volume.Event, Volume> _stateMachine = Volume.State.getStateMachine();
-
- ComponentLocator locator = ComponentLocator.getLocator(ManagementServer.Name);
- VolumeDao volDao = locator.getDao(VolumeDao.class);
- VMInstanceDao vmDao = locator.getDao(VMInstanceDao.class);
- VirtualMachineManager vmMgr = locator.getManager(VirtualMachineManager.class);
- Long vmInstanceId = null;
- boolean success = true;
- Transaction txn = Transaction.open(Transaction.CLOUD_DB);
-
- try {
- txn.start();
- for (Long volumeId : _volumesIds) {
- VolumeVO volume = volDao.findById(volumeId);
- if (volume == null) {
- continue;
- }
- vmInstanceId = volume.getInstanceId();
- if (_migrateState == StorageMigrationState.MIGRATING && volume.getState() == Volume.State.Migrating) {
- try {
- _stateMachine.transitTo(volume, Volume.Event.OperationFailed, null, volDao);
- } catch (NoTransitionException e) {
- s_logger.debug("Failed to transit volume state: " + e.toString());
- success = false;
- break;
- }
- }
- }
- if (vmInstanceId != null) {
- VMInstanceVO vm = vmDao.findById(vmInstanceId);
- if (vm != null && vm.getState() == VirtualMachine.State.Migrating) {
- try {
- vmMgr.stateTransitTo(vm, VirtualMachine.Event.AgentReportStopped, null);
- } catch (NoTransitionException e) {
- s_logger.debug("Failed to transit vm state");
- success = false;
- }
- }
- }
-
- if (success) {
- txn.commit();
- }
- } catch (Exception e) {
- s_logger.debug("storage migration cleanup failed:" + e.toString());
- txn.rollback();
- }finally {
- txn.close();
- }
-
- return 0;
- }
-
- @Override
- public String getCleanupProcedure() {
- return null;
- }
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/110465b5/server/src/com/cloud/storage/allocator/GarbageCollectingStoragePoolAllocator.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/storage/allocator/GarbageCollectingStoragePoolAllocator.java b/server/src/com/cloud/storage/allocator/GarbageCollectingStoragePoolAllocator.java
index 3e1030d..4eeae28 100644
--- a/server/src/com/cloud/storage/allocator/GarbageCollectingStoragePoolAllocator.java
+++ b/server/src/com/cloud/storage/allocator/GarbageCollectingStoragePoolAllocator.java
@@ -31,7 +31,7 @@ import com.cloud.deploy.DeploymentPlan;
import com.cloud.deploy.DeploymentPlanner.ExcludeList;
import com.cloud.storage.StorageManager;
import com.cloud.storage.StoragePool;
-import com.cloud.utils.component.ComponentLocator;
+import com.cloud.utils.component.ComponentContext;
import com.cloud.vm.DiskProfile;
import com.cloud.vm.VirtualMachine;
import com.cloud.vm.VirtualMachineProfile;
@@ -40,68 +40,66 @@ import com.cloud.vm.VirtualMachineProfile;
@Local(value=StoragePoolAllocator.class)
public class GarbageCollectingStoragePoolAllocator extends AbstractStoragePoolAllocator {
private static final Logger s_logger = Logger.getLogger(GarbageCollectingStoragePoolAllocator.class);
-
+
StoragePoolAllocator _firstFitStoragePoolAllocator;
StoragePoolAllocator _localStoragePoolAllocator;
@Inject StorageManager _storageMgr;
@Inject ConfigurationDao _configDao;
boolean _storagePoolCleanupEnabled;
-
+
@Override
public boolean allocatorIsCorrectType(DiskProfile dskCh) {
- return true;
+ return true;
}
-
+
public Integer getStorageOverprovisioningFactor() {
- return null;
+ return null;
}
-
+
public Long getExtraBytesPerVolume() {
- return null;
+ return null;
}
-
+
@Override
public List<StoragePool> allocateToPool(DiskProfile dskCh, VirtualMachineProfile<? extends VirtualMachine> vmProfile, DeploymentPlan plan, ExcludeList avoid, int returnUpTo) {
-
- if (!_storagePoolCleanupEnabled) {
- s_logger.debug("Storage pool cleanup is not enabled, so GarbageCollectingStoragePoolAllocator is being skipped.");
- return null;
- }
-
- // Clean up all storage pools
- _storageMgr.cleanupStorage(false);
- // Determine what allocator to use
- StoragePoolAllocator allocator;
- if (localStorageAllocationNeeded(dskCh)) {
- allocator = _localStoragePoolAllocator;
- } else {
- allocator = _firstFitStoragePoolAllocator;
- }
-
- // Try to find a storage pool after cleanup
+
+ if (!_storagePoolCleanupEnabled) {
+ s_logger.debug("Storage pool cleanup is not enabled, so GarbageCollectingStoragePoolAllocator is being skipped.");
+ return null;
+ }
+
+ // Clean up all storage pools
+ _storageMgr.cleanupStorage(false);
+ // Determine what allocator to use
+ StoragePoolAllocator allocator;
+ if (localStorageAllocationNeeded(dskCh)) {
+ allocator = _localStoragePoolAllocator;
+ } else {
+ allocator = _firstFitStoragePoolAllocator;
+ }
+
+ // Try to find a storage pool after cleanup
ExcludeList myAvoids = new ExcludeList(avoid.getDataCentersToAvoid(), avoid.getPodsToAvoid(), avoid.getClustersToAvoid(), avoid.getHostsToAvoid(), avoid.getPoolsToAvoid());
-
+
return allocator.allocateToPool(dskCh, vmProfile, plan, myAvoids, returnUpTo);
}
@Override
public boolean configure(String name, Map<String, Object> params) throws ConfigurationException {
super.configure(name, params);
-
- ComponentLocator locator = ComponentLocator.getCurrentLocator();
-
- _firstFitStoragePoolAllocator = ComponentLocator.inject(FirstFitStoragePoolAllocator.class);
+
+ _firstFitStoragePoolAllocator = ComponentContext.inject(FirstFitStoragePoolAllocator.class);
_firstFitStoragePoolAllocator.configure("GCFirstFitStoragePoolAllocator", params);
- _localStoragePoolAllocator = ComponentLocator.inject(LocalStoragePoolAllocator.class);
+ _localStoragePoolAllocator = ComponentContext.inject(LocalStoragePoolAllocator.class);
_localStoragePoolAllocator.configure("GCLocalStoragePoolAllocator", params);
-
+
String storagePoolCleanupEnabled = _configDao.getValue("storage.pool.cleanup.enabled");
_storagePoolCleanupEnabled = (storagePoolCleanupEnabled == null) ? true : Boolean.parseBoolean(storagePoolCleanupEnabled);
-
+
return true;
}
-
+
public GarbageCollectingStoragePoolAllocator() {
}
-
+
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/110465b5/server/src/com/cloud/storage/allocator/UseLocalForRootAllocator.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/storage/allocator/UseLocalForRootAllocator.java b/server/src/com/cloud/storage/allocator/UseLocalForRootAllocator.java
index ace7303..2c19406 100644
--- a/server/src/com/cloud/storage/allocator/UseLocalForRootAllocator.java
+++ b/server/src/com/cloud/storage/allocator/UseLocalForRootAllocator.java
@@ -34,7 +34,7 @@ import com.cloud.deploy.DeploymentPlanner.ExcludeList;
import com.cloud.host.Host;
import com.cloud.storage.StoragePool;
import com.cloud.storage.Volume.Type;
-import com.cloud.utils.component.ComponentLocator;
+
import com.cloud.vm.DiskProfile;
import com.cloud.vm.VirtualMachine;
import com.cloud.vm.VirtualMachineProfile;
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/110465b5/server/src/com/cloud/storage/dao/SnapshotDaoImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/storage/dao/SnapshotDaoImpl.java b/server/src/com/cloud/storage/dao/SnapshotDaoImpl.java
index 7868b36..8347c4e 100644
--- a/server/src/com/cloud/storage/dao/SnapshotDaoImpl.java
+++ b/server/src/com/cloud/storage/dao/SnapshotDaoImpl.java
@@ -34,7 +34,7 @@ import com.cloud.storage.SnapshotVO;
import com.cloud.storage.Volume;
import com.cloud.storage.VolumeVO;
import com.cloud.tags.dao.ResourceTagsDaoImpl;
-import com.cloud.utils.component.ComponentLocator;
+
import com.cloud.utils.db.DB;
import com.cloud.utils.db.Filter;
import com.cloud.utils.db.GenericDaoBase;
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/110465b5/server/src/com/cloud/storage/dao/StoragePoolDaoImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/storage/dao/StoragePoolDaoImpl.java b/server/src/com/cloud/storage/dao/StoragePoolDaoImpl.java
index 9a50189..4019dff 100644
--- a/server/src/com/cloud/storage/dao/StoragePoolDaoImpl.java
+++ b/server/src/com/cloud/storage/dao/StoragePoolDaoImpl.java
@@ -35,7 +35,7 @@ import com.cloud.storage.Storage.StoragePoolType;
import com.cloud.storage.StoragePoolDetailVO;
import com.cloud.storage.StoragePoolStatus;
import com.cloud.storage.StoragePoolVO;
-import com.cloud.utils.component.ComponentLocator;
+
import com.cloud.utils.db.DB;
import com.cloud.utils.db.GenericDaoBase;
import com.cloud.utils.db.GenericSearchBuilder;
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/110465b5/server/src/com/cloud/storage/dao/VMTemplateDaoImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/storage/dao/VMTemplateDaoImpl.java b/server/src/com/cloud/storage/dao/VMTemplateDaoImpl.java
index 8093fd5..42f10d3 100755
--- a/server/src/com/cloud/storage/dao/VMTemplateDaoImpl.java
+++ b/server/src/com/cloud/storage/dao/VMTemplateDaoImpl.java
@@ -59,7 +59,7 @@ import com.cloud.tags.dao.ResourceTagsDaoImpl;
import com.cloud.template.VirtualMachineTemplate.TemplateFilter;
import com.cloud.user.Account;
import com.cloud.utils.Pair;
-import com.cloud.utils.component.ComponentLocator;
+
import com.cloud.utils.db.DB;
import com.cloud.utils.db.Filter;
import com.cloud.utils.db.GenericDaoBase;
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/110465b5/server/src/com/cloud/storage/dao/VolumeDaoImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/storage/dao/VolumeDaoImpl.java b/server/src/com/cloud/storage/dao/VolumeDaoImpl.java
index d4cc692..a189d00 100755
--- a/server/src/com/cloud/storage/dao/VolumeDaoImpl.java
+++ b/server/src/com/cloud/storage/dao/VolumeDaoImpl.java
@@ -39,7 +39,7 @@ import com.cloud.storage.Volume.Type;
import com.cloud.storage.VolumeVO;
import com.cloud.tags.dao.ResourceTagsDaoImpl;
import com.cloud.utils.Pair;
-import com.cloud.utils.component.ComponentLocator;
+
import com.cloud.utils.db.DB;
import com.cloud.utils.db.GenericDaoBase;
import com.cloud.utils.db.GenericSearchBuilder;