Updated Branches: refs/heads/4.2 da10df78e -> 4cc8af053
CLOUDSTACK-4682: VMs are getting deployed with shared service offering and local compute offering VM deployment is fine, issue is in attach volume where all possible scenarios are not handled. The following needs to be logic of attached volume: 1. if data volume scope is zone then allow attach (this is already there) 2. if data volume scope is cluster a. if root volume scope is host, allow if both are in same cluster (already there) b. if root volume scope is zone, allow if vm and data volume in same cluster (fixed as part of this commit) 3. if data volume scope is host allow if vm and data volume in same host (fixed as part of this commit) Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/4cc8af05 Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/4cc8af05 Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/4cc8af05 Branch: refs/heads/4.2 Commit: 4cc8af053267c5c0dc9ed45fd8fcb4158b3ecaa9 Parents: da10df7 Author: Koushik Das <[email protected]> Authored: Wed Oct 16 17:02:45 2013 +0530 Committer: Koushik Das <[email protected]> Committed: Wed Oct 16 17:16:13 2013 +0530 ---------------------------------------------------------------------- .../com/cloud/storage/VolumeManagerImpl.java | 24 ++++++++++++++------ 1 file changed, 17 insertions(+), 7 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cloudstack/blob/4cc8af05/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 f3e1d9f..b680da1 100644 --- a/server/src/com/cloud/storage/VolumeManagerImpl.java +++ b/server/src/com/cloud/storage/VolumeManagerImpl.java @@ -1591,15 +1591,25 @@ public class VolumeManagerImpl extends ManagerBase implements VolumeManager { } if (storeForRootStoreScope.getScopeType() != storeForDataStoreScope.getScopeType()) { - if (storeForDataStoreScope.getScopeType() == ScopeType.CLUSTER && storeForRootStoreScope.getScopeType() == ScopeType.HOST) { - HostScope hs = (HostScope)storeForRootStoreScope; - if (storeForDataStoreScope.getScopeId().equals(hs.getClusterId())) { + if (storeForDataStoreScope.getScopeType() == ScopeType.CLUSTER) { + Long vmClusterId = null; + if (storeForRootStoreScope.getScopeType() == ScopeType.HOST) { + HostScope hs = (HostScope)storeForRootStoreScope; + vmClusterId = hs.getClusterId(); + } else if (storeForRootStoreScope.getScopeType() == ScopeType.ZONE) { + Long hostId = _vmInstanceDao.findById(rootVolumeOfVm.getInstanceId()).getHostId(); + if (hostId != null) { + HostVO host = _hostDao.findById(hostId); + vmClusterId = host.getClusterId(); + } + } + if (storeForDataStoreScope.getScopeId().equals(vmClusterId)) { return false; } - } - if (storeForRootStoreScope.getScopeType() == ScopeType.CLUSTER && storeForDataStoreScope.getScopeType() == ScopeType.HOST) { - HostScope hs = (HostScope)storeForDataStoreScope; - if (storeForRootStoreScope.getScopeId().equals(hs.getClusterId())) { + } else if (storeForDataStoreScope.getScopeType() == ScopeType.HOST && + (storeForRootStoreScope.getScopeType() == ScopeType.CLUSTER || storeForRootStoreScope.getScopeType() == ScopeType.ZONE)) { + Long hostId = _vmInstanceDao.findById(rootVolumeOfVm.getInstanceId()).getHostId(); + if (storeForDataStoreScope.getScopeId().equals(hostId)) { return false; } }
