You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by ts...@apache.org on 2013/04/09 15:20:46 UTC

[09/50] [abbrv] git commit: updated refs/heads/marvin_refactor to 2a99064

CLOUDSTACK-1608: enable attach a volume created on zone wide storage to a vm created on cluster or host wide storage


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

Branch: refs/heads/marvin_refactor
Commit: 7d4fd16691a144bf1adce4c40ca2145a7f1f7048
Parents: 8b15988
Author: Edison Su <su...@gmail.com>
Authored: Tue Mar 19 14:45:17 2013 -0700
Committer: Prasanna Santhanam <ts...@apache.org>
Committed: Sun Mar 31 22:01:24 2013 +0530

----------------------------------------------------------------------
 .../src/com/cloud/storage/VolumeManagerImpl.java   |  107 ++++-----------
 1 files changed, 28 insertions(+), 79 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/7d4fd166/server/src/com/cloud/storage/VolumeManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/storage/VolumeManagerImpl.java b/server/src/com/cloud/storage/VolumeManagerImpl.java
index ff0235f..1bf092f 100644
--- a/server/src/com/cloud/storage/VolumeManagerImpl.java
+++ b/server/src/com/cloud/storage/VolumeManagerImpl.java
@@ -146,7 +146,6 @@ import com.cloud.uservm.UserVm;
 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.ManagerBase;
 import com.cloud.utils.db.DB;
 import com.cloud.utils.db.JoinBuilder;
@@ -470,10 +469,6 @@ public class VolumeManagerImpl extends ManagerBase implements VolumeManager {
         }
         validateUrl(url);
 
-        // Check that the resource limit for secondary storage won't be exceeded
-        _resourceLimitMgr.checkResourceLimit(_accountMgr.getAccount(ownerId), ResourceType.secondary_storage,
-                UriUtils.getRemoteSize(url));
-
         return false;
     }
     
@@ -741,8 +736,6 @@ public class VolumeManagerImpl extends ManagerBase implements VolumeManager {
         // decrement it
         _resourceLimitMgr.incrementResourceCount(volume.getAccountId(),
                 ResourceType.volume);
-        _resourceLimitMgr.incrementResourceCount(volume.getAccountId(), ResourceType.secondary_storage,
-                UriUtils.getRemoteSize(url));
 
         txn.commit();
         return volume;
@@ -913,10 +906,6 @@ public class VolumeManagerImpl extends ManagerBase implements VolumeManager {
             _accountMgr.checkAccess(caller, null, true, snapshotCheck);
         }
 
-        // Check that the resource limit for primary storage won't be exceeded
-        _resourceLimitMgr.checkResourceLimit(_accountMgr.getAccount(ownerId), ResourceType.primary_storage,
-                new Long(size));
-
         // Verify that zone exists
         DataCenterVO zone = _dcDao.findById(zoneId);
         if (zone == null) {
@@ -985,8 +974,6 @@ public class VolumeManagerImpl extends ManagerBase implements VolumeManager {
         // decrement it
         _resourceLimitMgr.incrementResourceCount(volume.getAccountId(),
                 ResourceType.volume);
-        _resourceLimitMgr.incrementResourceCount(volume.getAccountId(), ResourceType.primary_storage,
-                new Long(volume.getSize()));
 
         txn.commit();
 
@@ -1019,8 +1006,6 @@ public class VolumeManagerImpl extends ManagerBase implements VolumeManager {
                         + " as volume failed to create on the backend");
                 _resourceLimitMgr.decrementResourceCount(volume.getAccountId(),
                         ResourceType.volume);
-                _resourceLimitMgr.decrementResourceCount(volume.getAccountId(), ResourceType.primary_storage,
-                        new Long(volume.getSize()));
             }
         }
     }
@@ -1028,8 +1013,7 @@ public class VolumeManagerImpl extends ManagerBase implements VolumeManager {
     @Override
     @DB
     @ActionEvent(eventType = EventTypes.EVENT_VOLUME_RESIZE, eventDescription = "resizing volume", async = true)
-    public VolumeVO resizeVolume(ResizeVolumeCmd cmd)
-            throws ResourceAllocationException {
+    public VolumeVO resizeVolume(ResizeVolumeCmd cmd) {
         Long newSize = null;
         boolean shrinkOk = cmd.getShrinkOk();
         
@@ -1165,12 +1149,6 @@ public class VolumeManagerImpl extends ManagerBase implements VolumeManager {
                             + " would shrink the volume, need to sign off by supplying the shrinkok parameter with value of true");
         }
 
-        if (!shrinkOk) {
-            /* Check resource limit for this account on primary storage resource */
-            _resourceLimitMgr.checkResourceLimit(_accountMgr.getAccount(volume.getAccountId()),
-                    ResourceType.primary_storage, new Long(newSize - currentSize));
-        }
-
         /*
          * get a list of hosts to send the commands to, try the system the
          * associated vm is running on first, then the last known place it ran.
@@ -1198,35 +1176,27 @@ public class VolumeManagerImpl extends ManagerBase implements VolumeManager {
         ResizeVolumePayload payload = new ResizeVolumePayload(newSize, shrinkOk, instanceName, hosts);
         
         try {
-            VolumeInfo vol = this.volFactory.getVolume(volume.getId());
+        	VolumeInfo vol = this.volFactory.getVolume(volume.getId());
             vol.addPayload(payload);
-
-            AsyncCallFuture<VolumeApiResult> future = this.volService.resize(vol);
-            future.get();
-            volume = _volsDao.findById(volume.getId());
-
-            if (newDiskOffering != null) {
-                volume.setDiskOfferingId(cmd.getNewDiskOfferingId());
-            }
-            _volsDao.update(volume.getId(), volume);
-
-            /* Update resource count for the account on primary storage resource */
-            if (!shrinkOk) {
-                _resourceLimitMgr.incrementResourceCount(volume.getAccountId(), ResourceType.primary_storage,
-                        new Long(newSize - currentSize));
-            } else {
-                _resourceLimitMgr.decrementResourceCount(volume.getAccountId(), ResourceType.primary_storage,
-                        new Long(currentSize - newSize));
-            }
-            return volume;
-        } catch (InterruptedException e) {
-            s_logger.debug("failed get resize volume result", e);
-        } catch (ExecutionException e) {
-            s_logger.debug("failed get resize volume result", e);
-        } catch (Exception e) {
-            s_logger.debug("failed get resize volume result", e);
-        }
-
+            
+        	AsyncCallFuture<VolumeApiResult> future = this.volService.resize(vol);
+        	future.get();
+        	volume = _volsDao.findById(volume.getId());
+
+        	if (newDiskOffering != null) {
+        		volume.setDiskOfferingId(cmd.getNewDiskOfferingId());
+        	}
+        	_volsDao.update(volume.getId(), volume);
+
+        	return volume;
+		} catch (InterruptedException e) {
+			s_logger.debug("failed get resize volume result", e);
+		} catch (ExecutionException e) {
+			s_logger.debug("failed get resize volume result", e);
+		} catch (Exception e) {
+			s_logger.debug("failed get resize volume result", e);
+		}
+       
         return null;
     }
     
@@ -1273,19 +1243,9 @@ public class VolumeManagerImpl extends ManagerBase implements VolumeManager {
                 VMInstanceVO vmInstance = this._vmInstanceDao.findById(instanceId);
                 if (instanceId == null
                         || (vmInstance.getType().equals(VirtualMachine.Type.User))) {
-                    // Decrement the resource count for volumes and primary storage belonging user VM's only
+                    // Decrement the resource count for volumes belonging user VM's only
                     _resourceLimitMgr.decrementResourceCount(volume.getAccountId(),
                             ResourceType.volume);
-                    /* If volume is in primary storage, decrement primary storage count else decrement secondary
-                     storage count (in case of upload volume). */
-                    if (volume.getFolder() != null) {
-                        _resourceLimitMgr.decrementResourceCount(volume.getAccountId(), ResourceType.primary_storage,
-                                new Long(volume.getSize()));
-                    } else {
-                        _resourceLimitMgr.recalculateResourceCount(volume.getAccountId(), volume.getDomainId(),
-                                ResourceType.secondary_storage.getOrdinal());
-                    }
-
                     // Log usage event for volumes belonging user VM's only
                     UsageEventVO usageEvent = new UsageEventVO(
                             EventTypes.EVENT_VOLUME_DELETE, volume.getAccountId(),
@@ -1357,8 +1317,6 @@ public class VolumeManagerImpl extends ManagerBase implements VolumeManager {
 
             _resourceLimitMgr.incrementResourceCount(vm.getAccountId(),
                     ResourceType.volume);
-            _resourceLimitMgr.incrementResourceCount(vm.getAccountId(), ResourceType.primary_storage,
-                    new Long(vol.getSize()));
         }
         return toDiskProfile(vol, offering);
     }
@@ -1406,8 +1364,6 @@ public class VolumeManagerImpl extends ManagerBase implements VolumeManager {
 
             _resourceLimitMgr.incrementResourceCount(vm.getAccountId(),
                     ResourceType.volume);
-            _resourceLimitMgr.incrementResourceCount(vm.getAccountId(), ResourceType.primary_storage,
-                    new Long(vol.getSize()));
         }
         return toDiskProfile(vol, offering);
     }
@@ -1479,13 +1435,6 @@ public class VolumeManagerImpl extends ManagerBase implements VolumeManager {
             vol = copyVolume(rootDiskPool
                     , volume, vm, rootDiskTmplt,  dcVO,
                     pod,  diskVO,  svo,  rootDiskHyperType);
-            if (vol != null) {
-                // Moving of Volume is successful, decrement the volume resource count from secondary for an account and increment it into primary storage under same account.
-                _resourceLimitMgr.decrementResourceCount(volume.getAccountId(),
-                        ResourceType.secondary_storage, new Long(volume.getSize()));
-                _resourceLimitMgr.incrementResourceCount(volume.getAccountId(),
-                        ResourceType.primary_storage, new Long(volume.getSize()));
-            }
         }
         return vol;
     }
@@ -1498,23 +1447,23 @@ public class VolumeManagerImpl extends ManagerBase implements VolumeManager {
         if (storeForRootStoreScope == null) {
             throw new CloudRuntimeException("Can't get scope of data store: " + storeForRootVol.getId());
         }
-        
+
         Scope storeForDataStoreScope = storeForDataVol.getScope();
         if (storeForDataStoreScope == null) {
             throw new CloudRuntimeException("Can't get scope of data store: " + storeForDataVol.getId());
         }
-        
+
         if (storeForDataStoreScope.getScopeType() == ScopeType.ZONE) {
             return false;
         }
-        
+
         if (storeForRootStoreScope.getScopeType() != storeForDataStoreScope.getScopeType()) {
             throw new CloudRuntimeException("Can't move volume between scope: " + storeForDataStoreScope.getScopeType() + " and " + storeForRootStoreScope.getScopeType());
         }
-       
+
         return !storeForRootStoreScope.isSameScope(storeForDataStoreScope);
     }
-    
+
     private VolumeVO sendAttachVolumeCommand(UserVmVO vm, VolumeVO volume, Long deviceId) {
         String errorMsg = "Failed to attach volume: " + volume.getName()
                 + " to VM: " + vm.getHostName();
@@ -2184,7 +2133,7 @@ public class VolumeManagerImpl extends ManagerBase implements VolumeManager {
                                             + assignedPool
                                             + " assigned by deploymentPlanner");
                                 }
-                                VolumeTask task = new VolumeTask(VolumeTaskType.MIGRATE, vol, assignedPool);
+                                VolumeTask task = new VolumeTask(VolumeTaskType.MIGRATE, vol, null);
                                 tasks.add(task);
                             }
                         } else {