You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by ah...@apache.org on 2013/01/11 00:29:22 UTC
[4/7] more files changed
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/fac22702/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/fac22702/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 c1001da..568ad06 100644
--- a/server/src/com/cloud/servlet/ConsoleProxyServlet.java
+++ b/server/src/com/cloud/servlet/ConsoleProxyServlet.java
@@ -27,15 +27,16 @@ import java.util.Map;
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.apache.cloudstack.api.IdentityService;
import com.cloud.exception.PermissionDeniedException;
import com.cloud.host.HostVO;
import com.cloud.server.ManagementServer;
@@ -46,7 +47,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.db.Transaction;
import com.cloud.vm.VMInstanceVO;
import com.cloud.vm.VirtualMachine;
@@ -63,10 +63,10 @@ public class ConsoleProxyServlet extends HttpServlet {
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;
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) {
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/fac22702/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 d159c88..aecbce3 100644
--- a/server/src/com/cloud/servlet/RegisterCompleteServlet.java
+++ b/server/src/com/cloud/servlet/RegisterCompleteServlet.java
@@ -19,9 +19,9 @@ 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;
@@ -30,7 +30,6 @@ import org.apache.log4j.Logger;
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;
@@ -40,104 +39,90 @@ import com.cloud.utils.SerialVersionUID;
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/fac22702/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 602d10d..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.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/fac22702/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 03a4976..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.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/fac22702/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 dbef8d5..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.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/fac22702/server/src/com/cloud/storage/listener/StoragePoolMonitor.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/storage/listener/StoragePoolMonitor.java b/server/src/com/cloud/storage/listener/StoragePoolMonitor.java
index 3a7dac7..e848a87 100755
--- a/server/src/com/cloud/storage/listener/StoragePoolMonitor.java
+++ b/server/src/com/cloud/storage/listener/StoragePoolMonitor.java
@@ -18,6 +18,8 @@ package com.cloud.storage.listener;
import java.util.List;
+import javax.inject.Inject;
+
import org.apache.log4j.Logger;
import com.cloud.agent.Listener;
@@ -31,96 +33,93 @@ import com.cloud.exception.ConnectionException;
import com.cloud.host.HostVO;
import com.cloud.host.Status;
import com.cloud.hypervisor.Hypervisor.HypervisorType;
-import com.cloud.server.ManagementService;
import com.cloud.storage.OCFS2Manager;
+import com.cloud.storage.Storage.StoragePoolType;
import com.cloud.storage.StorageManagerImpl;
import com.cloud.storage.StoragePoolStatus;
import com.cloud.storage.StoragePoolVO;
-import com.cloud.storage.Storage.StoragePoolType;
import com.cloud.storage.dao.StoragePoolDao;
public class StoragePoolMonitor implements Listener {
private static final Logger s_logger = Logger.getLogger(StoragePoolMonitor.class);
- private final StorageManagerImpl _storageManager;
- private final StoragePoolDao _poolDao;
- OCFS2Manager _ocfs2Mgr;
-
+ private final StorageManagerImpl _storageManager;
+ private final StoragePoolDao _poolDao;
+ @Inject OCFS2Manager _ocfs2Mgr;
+
public StoragePoolMonitor(StorageManagerImpl mgr, StoragePoolDao poolDao) {
- this._storageManager = mgr;
- this._poolDao = poolDao;
-
- ComponentLocator locator = ComponentLocator.getLocator(ManagementService.Name);
- this._ocfs2Mgr = locator.getManager(OCFS2Manager.class);
+ this._storageManager = mgr;
+ this._poolDao = poolDao;
+
}
-
-
+
+
@Override
public boolean isRecurring() {
return false;
}
-
+
@Override
public synchronized boolean processAnswers(long agentId, long seq, Answer[] resp) {
return true;
}
-
+
@Override
public synchronized boolean processDisconnect(long agentId, Status state) {
return true;
}
-
+
@Override
public void processConnect(HostVO host, StartupCommand cmd, boolean forRebalance) throws ConnectionException {
- if (cmd instanceof StartupRoutingCommand) {
- StartupRoutingCommand scCmd = (StartupRoutingCommand)cmd;
- if (scCmd.getHypervisorType() == HypervisorType.XenServer || scCmd.getHypervisorType() == HypervisorType.KVM ||
- scCmd.getHypervisorType() == HypervisorType.VMware || scCmd.getHypervisorType() == HypervisorType.Simulator || scCmd.getHypervisorType() == HypervisorType.Ovm) {
- List<StoragePoolVO> pools = _poolDao.listBy(host.getDataCenterId(), host.getPodId(), host.getClusterId());
- for (StoragePoolVO pool : pools) {
- if (pool.getStatus() != StoragePoolStatus.Up) {
- continue;
- }
- if (!pool.getPoolType().isShared()) {
- continue;
- }
-
- if (pool.getPoolType() == StoragePoolType.OCFS2 && !_ocfs2Mgr.prepareNodes(pool.getClusterId())) {
- throw new ConnectionException(true, "Unable to prepare OCFS2 nodes for pool " + pool.getId());
- }
-
- Long hostId = host.getId();
- s_logger.debug("Host " + hostId + " connected, sending down storage pool information ...");
- try {
- _storageManager.connectHostToSharedPool(hostId, pool);
- _storageManager.createCapacityEntry(pool);
- } catch (Exception e) {
- s_logger.warn("Unable to connect host " + hostId + " to pool " + pool + " due to " + e.toString(), e);
- }
- }
- }
- }
+ if (cmd instanceof StartupRoutingCommand) {
+ StartupRoutingCommand scCmd = (StartupRoutingCommand)cmd;
+ if (scCmd.getHypervisorType() == HypervisorType.XenServer || scCmd.getHypervisorType() == HypervisorType.KVM ||
+ scCmd.getHypervisorType() == HypervisorType.VMware || scCmd.getHypervisorType() == HypervisorType.Simulator || scCmd.getHypervisorType() == HypervisorType.Ovm) {
+ List<StoragePoolVO> pools = _poolDao.listBy(host.getDataCenterId(), host.getPodId(), host.getClusterId());
+ for (StoragePoolVO pool : pools) {
+ if (pool.getStatus() != StoragePoolStatus.Up) {
+ continue;
+ }
+ if (!pool.getPoolType().isShared()) {
+ continue;
+ }
+
+ if (pool.getPoolType() == StoragePoolType.OCFS2 && !_ocfs2Mgr.prepareNodes(pool.getClusterId())) {
+ throw new ConnectionException(true, "Unable to prepare OCFS2 nodes for pool " + pool.getId());
+ }
+
+ Long hostId = host.getId();
+ s_logger.debug("Host " + hostId + " connected, sending down storage pool information ...");
+ try {
+ _storageManager.connectHostToSharedPool(hostId, pool);
+ _storageManager.createCapacityEntry(pool);
+ } catch (Exception e) {
+ s_logger.warn("Unable to connect host " + hostId + " to pool " + pool + " due to " + e.toString(), e);
+ }
+ }
+ }
+ }
}
-
+
@Override
public boolean processCommands(long agentId, long seq, Command[] req) {
return false;
}
-
+
@Override
public AgentControlAnswer processControlCommand(long agentId, AgentControlCommand cmd) {
- return null;
+ return null;
}
-
+
@Override
public boolean processTimeout(long agentId, long seq) {
- return true;
+ return true;
}
-
+
@Override
public int getTimeout() {
- return -1;
+ return -1;
}
-
+
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/fac22702/server/src/com/cloud/storage/resource/DummySecondaryStorageResource.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/storage/resource/DummySecondaryStorageResource.java b/server/src/com/cloud/storage/resource/DummySecondaryStorageResource.java
index 1f33330..2773e29 100644
--- a/server/src/com/cloud/storage/resource/DummySecondaryStorageResource.java
+++ b/server/src/com/cloud/storage/resource/DummySecondaryStorageResource.java
@@ -21,6 +21,7 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import javax.inject.Inject;
import javax.naming.ConfigurationException;
import org.apache.log4j.Logger;
@@ -54,38 +55,38 @@ import com.cloud.storage.template.TemplateInfo;
public class DummySecondaryStorageResource extends ServerResourceBase implements ServerResource {
private static final Logger s_logger = Logger.getLogger(DummySecondaryStorageResource.class);
-
+
String _dc;
String _pod;
String _guid;
String _dummyPath;
- VMTemplateDao _tmpltDao;
- private boolean _useServiceVm;
-
-
- public DummySecondaryStorageResource(boolean useServiceVM) {
- setUseServiceVm(useServiceVM);
- }
-
- @Override
- protected String getDefaultScriptsDir() {
- return "dummy";
- }
-
- @Override
- public Answer executeRequest(Command cmd) {
+ @Inject VMTemplateDao _tmpltDao;
+ private boolean _useServiceVm;
+
+
+ public DummySecondaryStorageResource(boolean useServiceVM) {
+ setUseServiceVm(useServiceVM);
+ }
+
+ @Override
+ protected String getDefaultScriptsDir() {
+ return "dummy";
+ }
+
+ @Override
+ public Answer executeRequest(Command cmd) {
if (cmd instanceof DownloadProgressCommand) {
return new DownloadAnswer(null, 100, cmd,
- com.cloud.storage.VMTemplateStorageResourceAssoc.Status.DOWNLOADED,
- "dummyFS",
- "/dummy");
+ com.cloud.storage.VMTemplateStorageResourceAssoc.Status.DOWNLOADED,
+ "dummyFS",
+ "/dummy");
} else if (cmd instanceof DownloadCommand) {
return new DownloadAnswer(null, 100, cmd,
- com.cloud.storage.VMTemplateStorageResourceAssoc.Status.DOWNLOADED,
- "dummyFS",
- "/dummy");
+ com.cloud.storage.VMTemplateStorageResourceAssoc.Status.DOWNLOADED,
+ "dummyFS",
+ "/dummy");
} else if (cmd instanceof GetStorageStatsCommand) {
- return execute((GetStorageStatsCommand)cmd);
+ return execute((GetStorageStatsCommand)cmd);
} else if (cmd instanceof CheckHealthCommand) {
return new CheckHealthAnswer((CheckHealthCommand)cmd, true);
} else if (cmd instanceof ReadyCommand) {
@@ -93,33 +94,33 @@ public class DummySecondaryStorageResource extends ServerResourceBase implements
} else {
return Answer.createUnsupportedCommandAnswer(cmd);
}
- }
+ }
- @Override
- public PingCommand getCurrentStatus(long id) {
+ @Override
+ public PingCommand getCurrentStatus(long id) {
return new PingStorageCommand(Host.Type.Storage, id, new HashMap<String, Boolean>());
- }
+ }
- @Override
- public Type getType() {
+ @Override
+ public Type getType() {
return Host.Type.SecondaryStorage;
- }
+ }
- @Override
- public StartupCommand[] initialize() {
+ @Override
+ public StartupCommand[] initialize() {
final StartupStorageCommand cmd = new StartupStorageCommand("dummy",
- StoragePoolType.NetworkFilesystem, 1024*1024*1024*100L,
- new HashMap<String, TemplateInfo>());
-
+ StoragePoolType.NetworkFilesystem, 1024*1024*1024*100L,
+ new HashMap<String, TemplateInfo>());
+
cmd.setResourceType(Storage.StorageResourceType.SECONDARY_STORAGE);
cmd.setIqn(null);
cmd.setNfsShare(_guid);
-
+
fillNetworkInformation(cmd);
cmd.setDataCenter(_dc);
cmd.setPod(_pod);
cmd.setGuid(_guid);
-
+
cmd.setName(_guid);
cmd.setVersion(DummySecondaryStorageResource.class.getPackage().getImplementationVersion());
/* gather TemplateInfo in second storage */
@@ -127,62 +128,57 @@ public class DummySecondaryStorageResource extends ServerResourceBase implements
cmd.getHostDetails().put("mount.parent", "dummy");
cmd.getHostDetails().put("mount.path", "dummy");
cmd.getHostDetails().put("orig.url", _guid);
-
+
String tok[] = _dummyPath.split(":");
cmd.setPrivateIpAddress(tok[0]);
return new StartupCommand [] {cmd};
- }
-
+ }
+
protected GetStorageStatsAnswer execute(GetStorageStatsCommand cmd) {
long size = 1024*1024*1024*100L;
return new GetStorageStatsAnswer(cmd, 0, size);
}
-
+
@Override
public boolean configure(String name, Map<String, Object> params) throws ConfigurationException {
super.configure(name, params);
-
+
_guid = (String)params.get("guid");
if (_guid == null) {
throw new ConfigurationException("Unable to find the guid");
}
-
+
_dc = (String)params.get("zone");
if (_dc == null) {
throw new ConfigurationException("Unable to find the zone");
}
_pod = (String)params.get("pod");
-
+
_dummyPath = (String)params.get("mount.path");
if (_dummyPath == null) {
throw new ConfigurationException("Unable to find mount.path");
}
-
- ComponentLocator locator = ComponentLocator.getLocator("management-server");
- _tmpltDao = locator.getDao(VMTemplateDao.class);
- if (_tmpltDao == null) {
- throw new ConfigurationException("Unable to find VMTemplate dao");
- }
+
return true;
}
- public void setUseServiceVm(boolean _useServiceVm) {
- this._useServiceVm = _useServiceVm;
- }
-
- public boolean useServiceVm() {
- return _useServiceVm;
- }
-
- public Map<String, TemplateInfo> getDefaultSystemVmTemplateInfo() {
- List<VMTemplateVO> tmplts = _tmpltDao.listAllSystemVMTemplates();
- Map<String, TemplateInfo> tmpltInfo = new HashMap<String, TemplateInfo>();
- if (tmplts != null) {
- for (VMTemplateVO tmplt : tmplts) {
- TemplateInfo routingInfo = new TemplateInfo(tmplt.getUniqueName(), TemplateConstants.DEFAULT_SYSTEM_VM_TEMPLATE_PATH + tmplt.getId() + File.separator, false, false);
- tmpltInfo.put(tmplt.getUniqueName(), routingInfo);
- }
- }
- return tmpltInfo;
- }
+ public void setUseServiceVm(boolean _useServiceVm) {
+ this._useServiceVm = _useServiceVm;
+ }
+
+ public boolean useServiceVm() {
+ return _useServiceVm;
+ }
+
+ public Map<String, TemplateInfo> getDefaultSystemVmTemplateInfo() {
+ List<VMTemplateVO> tmplts = _tmpltDao.listAllSystemVMTemplates();
+ Map<String, TemplateInfo> tmpltInfo = new HashMap<String, TemplateInfo>();
+ if (tmplts != null) {
+ for (VMTemplateVO tmplt : tmplts) {
+ TemplateInfo routingInfo = new TemplateInfo(tmplt.getUniqueName(), TemplateConstants.DEFAULT_SYSTEM_VM_TEMPLATE_PATH + tmplt.getId() + File.separator, false, false);
+ tmpltInfo.put(tmplt.getUniqueName(), routingInfo);
+ }
+ }
+ return tmpltInfo;
+ }
}