http://git-wip-us.apache.org/repos/asf/cloudstack/blob/de2bd96d/engine/orchestration/src/org/apache/cloudstack/platform/orchestration/CloudOrchestrator.java
----------------------------------------------------------------------
diff --git 
a/engine/orchestration/src/org/apache/cloudstack/platform/orchestration/CloudOrchestrator.java
 
b/engine/orchestration/src/org/apache/cloudstack/platform/orchestration/CloudOrchestrator.java
deleted file mode 100755
index 1efeb80..0000000
--- 
a/engine/orchestration/src/org/apache/cloudstack/platform/orchestration/CloudOrchestrator.java
+++ /dev/null
@@ -1,284 +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 org.apache.cloudstack.platform.orchestration;
-
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-
-import javax.inject.Inject;
-
-import org.springframework.stereotype.Component;
-
-import org.apache.cloudstack.engine.cloud.entity.api.NetworkEntity;
-import org.apache.cloudstack.engine.cloud.entity.api.TemplateEntity;
-import org.apache.cloudstack.engine.cloud.entity.api.VMEntityManager;
-import org.apache.cloudstack.engine.cloud.entity.api.VirtualMachineEntity;
-import org.apache.cloudstack.engine.cloud.entity.api.VirtualMachineEntityImpl;
-import org.apache.cloudstack.engine.cloud.entity.api.VolumeEntity;
-import org.apache.cloudstack.engine.service.api.OrchestrationService;
-
-import com.cloud.deploy.DeploymentPlan;
-import com.cloud.exception.InsufficientCapacityException;
-import com.cloud.exception.InvalidParameterValueException;
-import com.cloud.hypervisor.Hypervisor;
-import com.cloud.hypervisor.Hypervisor.HypervisorType;
-import com.cloud.network.dao.NetworkDao;
-import com.cloud.network.dao.NetworkVO;
-import com.cloud.service.ServiceOfferingVO;
-import com.cloud.service.dao.ServiceOfferingDao;
-import com.cloud.storage.DiskOfferingVO;
-import com.cloud.storage.VolumeManager;
-import com.cloud.storage.dao.DiskOfferingDao;
-import com.cloud.storage.dao.VMTemplateDao;
-import com.cloud.user.dao.AccountDao;
-import com.cloud.utils.Pair;
-import com.cloud.utils.component.ComponentContext;
-import com.cloud.vm.NicProfile;
-import com.cloud.vm.VMInstanceVO;
-import com.cloud.vm.VirtualMachineManager;
-import com.cloud.vm.dao.UserVmDao;
-import com.cloud.vm.dao.VMInstanceDao;
-
-
-@Component
-public class CloudOrchestrator implements OrchestrationService {
-
-       @Inject
-       private VMEntityManager vmEntityManager;
-
-       @Inject
-       private VirtualMachineManager _itMgr;
-
-       @Inject
-       protected VMTemplateDao _templateDao = null;
-
-    @Inject
-    protected VMInstanceDao _vmDao;
-
-    @Inject
-    protected UserVmDao _userVmDao = null;
-
-       @Inject
-       protected ServiceOfferingDao _serviceOfferingDao;
-
-       @Inject
-       protected DiskOfferingDao _diskOfferingDao = null;
-
-       @Inject
-       protected NetworkDao _networkDao;
-
-       @Inject
-       protected AccountDao _accountDao = null;
-
-    @Inject
-    VolumeManager _volumeMgr;
-
-       public CloudOrchestrator() {
-       }
-
-    public VirtualMachineEntity createFromScratch(String uuid, String iso, 
String os, String hypervisor, String hostName, int cpu, int speed, long memory, 
List<String> networks, List<String> computeTags,
-            Map<String, String> details, String owner) {
-        return null;
-    }
-
-    public String reserve(String vm, String planner, Long until) throws 
InsufficientCapacityException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    public String deploy(String reservationId) {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    public void joinNetwork(String network1, String network2) {
-        // TODO Auto-generated method stub
-
-    }
-
-    public void createNetwork() {
-        // TODO Auto-generated method stub
-
-    }
-
-    public void destroyNetwork() {
-        // TODO Auto-generated method stub
-
-    }
-
-    @Override
-    public VolumeEntity createVolume() {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public TemplateEntity registerTemplate(String name, URL path, String os, 
Hypervisor hypervisor) {
-        return null;
-    }
-
-    @Override
-    public void destroyNetwork(String networkUuid) {
-        // TODO Auto-generated method stub
-
-    }
-
-    @Override
-    public void destroyVolume(String volumeEntity) {
-        // TODO Auto-generated method stub
-
-    }
-
-    @Override
-    public VirtualMachineEntity createVirtualMachine(
-            String id,
-            String owner,
-            String templateId,
-            String hostName,
-            String displayName,
-            String hypervisor,
-            int cpu,
-            int speed,
-            long memory,
-            Long diskSize,
-            List<String> computeTags,
-            List<String> rootDiskTags,
-            Map<String, NicProfile> networkNicMap, DeploymentPlan plan) throws 
InsufficientCapacityException {
-
-       // VirtualMachineEntityImpl vmEntity = new VirtualMachineEntityImpl(id, 
owner, hostName, displayName, cpu, speed, memory, computeTags, rootDiskTags, 
networks, vmEntityManager);
-
-        List<Pair<NetworkVO, NicProfile>> networkIpMap = new 
ArrayList<Pair<NetworkVO, NicProfile>>();
-        for (String uuid : networkNicMap.keySet()) {
-            NetworkVO network = _networkDao.findByUuid(uuid);
-            if(network != null){
-                networkIpMap.add(new Pair<NetworkVO, NicProfile>(network, 
networkNicMap.get(uuid)));
-            }
-        }
-
-       VirtualMachineEntityImpl vmEntity = 
ComponentContext.inject(VirtualMachineEntityImpl.class);
-       vmEntity.init(id, owner, hostName, displayName, cpu, speed, memory, 
computeTags, rootDiskTags, new ArrayList<String>(networkNicMap.keySet()));
-
-
-       HypervisorType hypervisorType = HypervisorType.valueOf(hypervisor);
-
-       //load vm instance and offerings and call virtualMachineManagerImpl
-       VMInstanceVO vm = _vmDao.findByUuid(id);
-
-               // If the template represents an ISO, a disk offering must be 
passed in, and will be used to create the root disk
-               // Else, a disk offering is optional, and if present will be 
used to create the data disk
-
-       Pair<DiskOfferingVO, Long> rootDiskOffering = new Pair<DiskOfferingVO, 
Long>(null, null);
-               List<Pair<DiskOfferingVO, Long>> dataDiskOfferings = new 
ArrayList<Pair<DiskOfferingVO, Long>>();
-
-               ServiceOfferingVO offering = 
_serviceOfferingDao.findById(vm.getServiceOfferingId());
-               rootDiskOffering.first(offering);
-
-               if(vm.getDiskOfferingId() != null){
-               DiskOfferingVO diskOffering = 
_diskOfferingDao.findById(vm.getDiskOfferingId());
-               if (diskOffering == null) {
-                       throw new InvalidParameterValueException("Unable to 
find disk offering " + vm.getDiskOfferingId());
-               }
-               Long size = null;
-               if (diskOffering.getDiskSize() == 0) {
-                       size = diskSize;
-                       if (size == null) {
-                               throw new InvalidParameterValueException(
-                                               "Disk offering " + diskOffering
-                                                               + " requires 
size parameter.");
-                       }
-                _volumeMgr.validateVolumeSizeRange(size * 1024 * 1024 * 1024);
-               }
-               dataDiskOfferings.add(new Pair<DiskOfferingVO, 
Long>(diskOffering, size));
-               }
-
-
-
-        _itMgr.allocate(vm.getInstanceName(), _templateDao.findById(new 
Long(templateId)), offering, rootDiskOffering, dataDiskOfferings, networkIpMap, 
null, plan, hypervisorType);
-
-        return vmEntity;
-    }
-
-    @Override
-    public VirtualMachineEntity createVirtualMachineFromScratch(String id, 
String owner, String isoId, String hostName, String displayName, String 
hypervisor, String os, int cpu, int speed, long memory,Long diskSize,
-            List<String> computeTags, List<String> rootDiskTags, Map<String, 
NicProfile> networkNicMap, DeploymentPlan plan)  throws 
InsufficientCapacityException {
-
-       // VirtualMachineEntityImpl vmEntity = new VirtualMachineEntityImpl(id, 
owner, hostName, displayName, cpu, speed, memory, computeTags, rootDiskTags, 
networks, vmEntityManager);
-       VirtualMachineEntityImpl vmEntity = 
ComponentContext.inject(VirtualMachineEntityImpl.class);
-       vmEntity.init(id, owner, hostName, displayName, cpu, speed, memory, 
computeTags, rootDiskTags, new ArrayList<String>(networkNicMap.keySet()));
-
-       //load vm instance and offerings and call virtualMachineManagerImpl
-       VMInstanceVO vm = _vmDao.findByUuid(id);
-
-
-               Pair<DiskOfferingVO, Long> rootDiskOffering = new 
Pair<DiskOfferingVO, Long>(null, null);
-               ServiceOfferingVO offering = 
_serviceOfferingDao.findById(vm.getServiceOfferingId());
-               rootDiskOffering.first(offering);
-
-               List<Pair<DiskOfferingVO, Long>> dataDiskOfferings = new 
ArrayList<Pair<DiskOfferingVO, Long>>();
-               Long diskOfferingId = vm.getDiskOfferingId();
-               if (diskOfferingId == null) {
-                       throw new InvalidParameterValueException(
-                                       "Installing from ISO requires a disk 
offering to be specified for the root disk.");
-               }
-               DiskOfferingVO diskOffering = 
_diskOfferingDao.findById(diskOfferingId);
-               if (diskOffering == null) {
-                       throw new InvalidParameterValueException("Unable to 
find disk offering " + diskOfferingId);
-               }
-               Long size = null;
-               if (diskOffering.getDiskSize() == 0) {
-                       size = diskSize;
-                       if (size == null) {
-                               throw new InvalidParameterValueException("Disk 
offering "
-                                               + diskOffering + " requires 
size parameter.");
-                       }
-            _volumeMgr.validateVolumeSizeRange(size * 1024 * 1024 * 1024);
-        }
-               rootDiskOffering.first(diskOffering);
-               rootDiskOffering.second(size);
-
-        List<Pair<NetworkVO, NicProfile>> networkIpMap = new 
ArrayList<Pair<NetworkVO, NicProfile>>();
-        for (String uuid : networkNicMap.keySet()) {
-            NetworkVO network = _networkDao.findByUuid(uuid);
-            if(network != null){
-                networkIpMap.add(new Pair<NetworkVO, NicProfile>(network, 
networkNicMap.get(uuid)));
-            }
-        }
-
-               HypervisorType hypervisorType = 
HypervisorType.valueOf(hypervisor);
-
-        _itMgr.allocate(vm.getInstanceName(), _templateDao.findById(new 
Long(isoId)), offering, rootDiskOffering, dataDiskOfferings, networkIpMap, 
null, plan, hypervisorType);
-
-        return vmEntity;
-    }
-
-    @Override
-    public NetworkEntity createNetwork(String id, String name, String 
domainName, String cidr, String gateway) {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-       @Override
-       public VirtualMachineEntity getVirtualMachine(String id) {
-               VirtualMachineEntityImpl vmEntity = new 
VirtualMachineEntityImpl(id, vmEntityManager);
-               return vmEntity;
-       }
-
-}

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/de2bd96d/engine/storage/datamotion/src/org/apache/cloudstack/storage/motion/AncientDataMotionStrategy.java
----------------------------------------------------------------------
diff --git 
a/engine/storage/datamotion/src/org/apache/cloudstack/storage/motion/AncientDataMotionStrategy.java
 
b/engine/storage/datamotion/src/org/apache/cloudstack/storage/motion/AncientDataMotionStrategy.java
index cb2870e..d5e8a84 100644
--- 
a/engine/storage/datamotion/src/org/apache/cloudstack/storage/motion/AncientDataMotionStrategy.java
+++ 
b/engine/storage/datamotion/src/org/apache/cloudstack/storage/motion/AncientDataMotionStrategy.java
@@ -22,6 +22,7 @@ import java.util.Map;
 
 import javax.inject.Inject;
 
+import 
org.apache.cloudstack.engine.orchestration.service.VolumeOrchestrationService;
 import org.apache.cloudstack.engine.subsystem.api.storage.ClusterScope;
 import org.apache.cloudstack.engine.subsystem.api.storage.CopyCommandResult;
 import org.apache.cloudstack.engine.subsystem.api.storage.DataMotionStrategy;
@@ -66,7 +67,6 @@ import com.cloud.server.ManagementService;
 import com.cloud.storage.DataStoreRole;
 import com.cloud.storage.StorageManager;
 import com.cloud.storage.StoragePool;
-import com.cloud.storage.VolumeManager;
 import com.cloud.storage.VolumeVO;
 import com.cloud.storage.dao.DiskOfferingDao;
 import com.cloud.storage.dao.SnapshotDao;
@@ -116,7 +116,7 @@ public class
     @Inject
     VMTemplatePoolDao templatePoolDao;
     @Inject
-    VolumeManager volumeMgr;
+    VolumeOrchestrationService volumeMgr;
     @Inject
     StorageCacheManager cacheMgr;
     @Inject

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/de2bd96d/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/ChildTestConfiguration.java
----------------------------------------------------------------------
diff --git 
a/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/ChildTestConfiguration.java
 
b/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/ChildTestConfiguration.java
index 86cafa8..0f97f31 100644
--- 
a/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/ChildTestConfiguration.java
+++ 
b/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/ChildTestConfiguration.java
@@ -19,6 +19,7 @@ package org.apache.cloudstack.storage.test;
 import java.io.IOException;
 
 import org.apache.cloudstack.acl.APIChecker;
+import 
org.apache.cloudstack.engine.orchestration.service.VolumeOrchestrationService;
 import org.apache.cloudstack.engine.service.api.OrchestrationService;
 import org.apache.cloudstack.engine.subsystem.api.storage.EndPointSelector;
 import org.apache.cloudstack.framework.config.dao.ConfigurationDaoImpl;
@@ -63,7 +64,6 @@ import com.cloud.server.auth.UserAuthenticator;
 import com.cloud.service.dao.ServiceOfferingDaoImpl;
 import com.cloud.storage.OCFS2ManagerImpl;
 import com.cloud.storage.StorageManager;
-import com.cloud.storage.VolumeManager;
 import com.cloud.storage.dao.DiskOfferingDaoImpl;
 import com.cloud.storage.dao.SnapshotDaoImpl;
 import com.cloud.storage.dao.StoragePoolDetailsDaoImpl;
@@ -172,8 +172,8 @@ public class ChildTestConfiguration extends 
TestConfiguration {
     }
 
     @Bean
-    public VolumeManager volumeMgr() {
-        return Mockito.mock(VolumeManager.class);
+    public VolumeOrchestrationService volumeMgr() {
+        return Mockito.mock(VolumeOrchestrationService.class);
     }
 
     @Bean

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/de2bd96d/engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/SnapshotServiceImpl.java
----------------------------------------------------------------------
diff --git 
a/engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/SnapshotServiceImpl.java
 
b/engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/SnapshotServiceImpl.java
index f8d9cbc..cabd91b 100644
--- 
a/engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/SnapshotServiceImpl.java
+++ 
b/engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/SnapshotServiceImpl.java
@@ -20,7 +20,6 @@ package org.apache.cloudstack.storage.snapshot;
 import com.cloud.dc.dao.ClusterDao;
 import com.cloud.storage.DataStoreRole;
 import com.cloud.storage.Snapshot;
-import com.cloud.storage.VolumeManager;
 import com.cloud.storage.dao.SnapshotDao;
 import com.cloud.storage.dao.VolumeDao;
 import com.cloud.storage.snapshot.SnapshotManager;
@@ -28,6 +27,8 @@ import com.cloud.utils.exception.CloudRuntimeException;
 import com.cloud.utils.fsm.NoTransitionException;
 import com.cloud.vm.dao.UserVmDao;
 import com.cloud.vm.snapshot.dao.VMSnapshotDao;
+
+import 
org.apache.cloudstack.engine.orchestration.service.VolumeOrchestrationService;
 import org.apache.cloudstack.engine.subsystem.api.storage.*;
 import 
org.apache.cloudstack.engine.subsystem.api.storage.ObjectInDataStoreStateMachine.Event;
 import org.apache.cloudstack.framework.async.AsyncCallFuture;
@@ -40,10 +41,12 @@ import 
org.apache.cloudstack.storage.datastore.ObjectInDataStoreManager;
 import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao;
 import org.apache.cloudstack.storage.datastore.db.SnapshotDataStoreDao;
 import org.apache.cloudstack.storage.datastore.db.SnapshotDataStoreVO;
+
 import org.apache.log4j.Logger;
 import org.springframework.stereotype.Component;
 
 import javax.inject.Inject;
+
 import java.util.concurrent.ExecutionException;
 
 @Component
@@ -65,7 +68,7 @@ public class SnapshotServiceImpl implements SnapshotService {
     @Inject
     protected SnapshotManager snapshotMgr;
     @Inject
-    protected VolumeManager volumeMgr;
+    protected VolumeOrchestrationService volumeMgr;
     @Inject
     protected SnapshotStateMachineManager stateMachineManager;
     @Inject

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/de2bd96d/plugins/hypervisors/vmware/pom.xml
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/vmware/pom.xml 
b/plugins/hypervisors/vmware/pom.xml
index 16c77b3..46d51e8 100644
--- a/plugins/hypervisors/vmware/pom.xml
+++ b/plugins/hypervisors/vmware/pom.xml
@@ -44,6 +44,11 @@
       <scope>compile</scope>
     </dependency>
     <dependency>
+      <groupId>org.apache.cloudstack</groupId>
+      <artifactId>cloud-engine-orchestration</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+    <dependency>
       <groupId>com.cloud.com.vmware</groupId>
       <artifactId>vmware-vim25</artifactId>
       <version>${cs.vmware.api.version}</version>

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/de2bd96d/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java
----------------------------------------------------------------------
diff --git 
a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java
 
b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java
index a76794f..1438111 100755
--- 
a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java
+++ 
b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java
@@ -28,7 +28,6 @@ import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.Comparator;
-import java.util.concurrent.*;
 import java.util.Date;
 import java.util.GregorianCalendar;
 import java.util.HashMap;
@@ -40,12 +39,13 @@ import java.util.Random;
 import java.util.Set;
 import java.util.TimeZone;
 import java.util.UUID;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.TimeUnit;
 
 import javax.inject.Inject;
 import javax.naming.ConfigurationException;
 
-import com.cloud.agent.api.to.DhcpTO;
-import com.cloud.storage.resource.VmwareStorageSubsystemCommandHandler;
 import org.apache.log4j.Logger;
 import org.apache.log4j.NDC;
 
@@ -109,6 +109,14 @@ import com.vmware.vim25.VirtualMachineRuntimeInfo;
 import com.vmware.vim25.VirtualSCSISharing;
 import com.vmware.vim25.VmwareDistributedVirtualSwitchVlanIdSpec;
 
+import org.apache.cloudstack.engine.orchestration.VolumeOrchestrator;
+import 
org.apache.cloudstack.engine.orchestration.service.VolumeOrchestrationService;
+import org.apache.cloudstack.storage.command.DeleteCommand;
+import org.apache.cloudstack.storage.command.StorageSubSystemCommand;
+import org.apache.cloudstack.storage.to.PrimaryDataStoreTO;
+import org.apache.cloudstack.storage.to.TemplateObjectTO;
+import org.apache.cloudstack.storage.to.VolumeObjectTO;
+
 import com.cloud.agent.IAgentControl;
 import com.cloud.agent.api.Answer;
 import com.cloud.agent.api.AttachIsoCommand;
@@ -237,18 +245,15 @@ import com.cloud.agent.api.storage.CopyVolumeCommand;
 import com.cloud.agent.api.storage.CreateAnswer;
 import com.cloud.agent.api.storage.CreateCommand;
 import com.cloud.agent.api.storage.CreatePrivateTemplateAnswer;
-import com.cloud.agent.api.storage.CreateVolumeOVAAnswer;
-import com.cloud.agent.api.storage.CreateVolumeOVACommand;
 import com.cloud.agent.api.storage.DestroyCommand;
 import com.cloud.agent.api.storage.MigrateVolumeAnswer;
 import com.cloud.agent.api.storage.MigrateVolumeCommand;
-import com.cloud.agent.api.storage.PrepareOVAPackingAnswer;
-import com.cloud.agent.api.storage.PrepareOVAPackingCommand;
 import com.cloud.agent.api.storage.PrimaryStorageDownloadAnswer;
 import com.cloud.agent.api.storage.PrimaryStorageDownloadCommand;
 import com.cloud.agent.api.storage.ResizeVolumeAnswer;
 import com.cloud.agent.api.storage.ResizeVolumeCommand;
 import com.cloud.agent.api.to.DataStoreTO;
+import com.cloud.agent.api.to.DhcpTO;
 import com.cloud.agent.api.to.DiskTO;
 import com.cloud.agent.api.to.FirewallRuleTO;
 import com.cloud.agent.api.to.IpAddressTO;
@@ -301,12 +306,10 @@ import com.cloud.serializer.GsonHelper;
 import com.cloud.storage.Storage;
 import com.cloud.storage.Storage.StoragePoolType;
 import com.cloud.storage.Volume;
-import com.cloud.storage.VolumeManager;
-import com.cloud.storage.VolumeManagerImpl;
 import com.cloud.storage.resource.StoragePoolResource;
 import com.cloud.storage.resource.StorageSubsystemCommandHandler;
-import com.cloud.storage.resource.StorageSubsystemCommandHandlerBase;
 import com.cloud.storage.resource.VmwareStorageProcessor;
+import com.cloud.storage.resource.VmwareStorageSubsystemCommandHandler;
 import com.cloud.storage.template.TemplateProp;
 import com.cloud.utils.DateUtil;
 import com.cloud.utils.NumbersUtil;
@@ -326,12 +329,6 @@ import com.cloud.vm.VirtualMachine.State;
 import com.cloud.vm.VirtualMachineName;
 import com.cloud.vm.VmDetailConstants;
 
-import org.apache.cloudstack.storage.command.DeleteCommand;
-import org.apache.cloudstack.storage.command.StorageSubSystemCommand;
-import org.apache.cloudstack.storage.to.PrimaryDataStoreTO;
-import org.apache.cloudstack.storage.to.TemplateObjectTO;
-import org.apache.cloudstack.storage.to.VolumeObjectTO;
-
 
 public class VmwareResource implements StoragePoolResource, ServerResource, 
VmwareHostService {
     private static final Logger s_logger = 
Logger.getLogger(VmwareResource.class);
@@ -343,7 +340,7 @@ public class VmwareResource implements StoragePoolResource, 
ServerResource, Vmwa
     protected final int _shutdown_waitMs = 300000;             // wait up to 5 
minutes for shutdown
 
     @Inject
-    protected VolumeManager volMgr;
+    protected VolumeOrchestrationService volMgr;
 
     // out an operation
     protected final int _retry = 24;
@@ -6240,7 +6237,7 @@ public class VmwareResource implements 
StoragePoolResource, ServerResource, Vmwa
         _guestTrafficInfo = (VmwareTrafficLabel) 
params.get("guestTrafficInfo");
         _publicTrafficInfo = (VmwareTrafficLabel) 
params.get("publicTrafficInfo");
         VmwareContext context = getServiceContext();
-        volMgr = ComponentContext.inject(VolumeManagerImpl.class);
+        volMgr = ComponentContext.inject(VolumeOrchestrator.class);
         try {
             VmwareManager mgr = 
context.getStockObject(VmwareManager.CONTEXT_STOCK_NAME);
             mgr.setupResourceStartupParams(params);

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/de2bd96d/plugins/storage/volume/default/src/org/apache/cloudstack/storage/datastore/driver/CloudStackPrimaryDataStoreDriverImpl.java
----------------------------------------------------------------------
diff --git 
a/plugins/storage/volume/default/src/org/apache/cloudstack/storage/datastore/driver/CloudStackPrimaryDataStoreDriverImpl.java
 
b/plugins/storage/volume/default/src/org/apache/cloudstack/storage/datastore/driver/CloudStackPrimaryDataStoreDriverImpl.java
index 9ea91b5..55e2583 100644
--- 
a/plugins/storage/volume/default/src/org/apache/cloudstack/storage/datastore/driver/CloudStackPrimaryDataStoreDriverImpl.java
+++ 
b/plugins/storage/volume/default/src/org/apache/cloudstack/storage/datastore/driver/CloudStackPrimaryDataStoreDriverImpl.java
@@ -30,13 +30,14 @@ import com.cloud.host.dao.HostDao;
 import com.cloud.storage.ResizeVolumePayload;
 import com.cloud.storage.StorageManager;
 import com.cloud.storage.StoragePool;
-import com.cloud.storage.VolumeManager;
 import com.cloud.storage.dao.DiskOfferingDao;
 import com.cloud.storage.dao.SnapshotDao;
 import com.cloud.storage.dao.VMTemplateDao;
 import com.cloud.storage.dao.VolumeDao;
 import com.cloud.storage.snapshot.SnapshotManager;
 import com.cloud.vm.dao.VMInstanceDao;
+
+import 
org.apache.cloudstack.engine.orchestration.service.VolumeOrchestrationService;
 import org.apache.cloudstack.engine.subsystem.api.storage.*;
 import org.apache.cloudstack.framework.async.AsyncCompletionCallback;
 import org.apache.cloudstack.storage.command.CommandResult;
@@ -44,6 +45,7 @@ import 
org.apache.cloudstack.storage.command.CreateObjectCommand;
 import org.apache.cloudstack.storage.command.DeleteCommand;
 import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao;
 import org.apache.cloudstack.storage.volume.VolumeObject;
+
 import org.apache.log4j.Logger;
 
 import javax.inject.Inject;
@@ -61,7 +63,7 @@ public class CloudStackPrimaryDataStoreDriverImpl implements 
PrimaryDataStoreDri
     @Inject
     StorageManager storageMgr;
     @Inject
-    VolumeManager volumeMgr;
+    VolumeOrchestrationService volumeMgr;
     @Inject
     VMInstanceDao vmDao;
     @Inject

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/de2bd96d/server/src/com/cloud/api/ApiDBUtils.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/api/ApiDBUtils.java 
b/server/src/com/cloud/api/ApiDBUtils.java
index b79e677..1ada63f 100755
--- a/server/src/com/cloud/api/ApiDBUtils.java
+++ b/server/src/com/cloud/api/ApiDBUtils.java
@@ -52,6 +52,7 @@ import org.apache.cloudstack.api.response.UserResponse;
 import org.apache.cloudstack.api.response.UserVmResponse;
 import org.apache.cloudstack.api.response.VolumeResponse;
 import org.apache.cloudstack.api.response.ZoneResponse;
+import 
org.apache.cloudstack.engine.orchestration.service.VolumeOrchestrationService;
 import org.apache.cloudstack.framework.config.dao.ConfigurationDao;
 import org.apache.cloudstack.framework.jobs.AsyncJob;
 import org.apache.cloudstack.framework.jobs.AsyncJobManager;
@@ -235,7 +236,6 @@ import com.cloud.storage.UploadVO;
 import com.cloud.storage.VMTemplateVO;
 import com.cloud.storage.Volume;
 import com.cloud.storage.Volume.Type;
-import com.cloud.storage.VolumeManager;
 import com.cloud.storage.VolumeVO;
 import com.cloud.storage.dao.DiskOfferingDao;
 import com.cloud.storage.dao.GuestOSCategoryDao;
@@ -293,7 +293,7 @@ public class ApiDBUtils {
     static AsyncJobManager _asyncMgr;
     static SecurityGroupManager _securityGroupMgr;
     static StorageManager _storageMgr;
-    static VolumeManager _volumeMgr;
+    static VolumeOrchestrationService _volumeMgr;
     static UserVmManager _userVmMgr;
     static NetworkModel _networkModel;
     static NetworkManager _networkMgr;
@@ -411,7 +411,7 @@ public class ApiDBUtils {
     @Inject private NetworkManager networkMgr;
     @Inject private StatsCollector statsCollector;
     @Inject private TemplateManager templateMgr;
-    @Inject private VolumeManager volumeMgr;
+    @Inject private VolumeOrchestrationService volumeMgr;
 
     @Inject private AccountDao accountDao;
     @Inject private AccountVlanMapDao accountVlanMapDao;

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/de2bd96d/server/src/com/cloud/ha/HighAvailabilityManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/ha/HighAvailabilityManagerImpl.java 
b/server/src/com/cloud/ha/HighAvailabilityManagerImpl.java
index 825e1ed..6b0d3c4 100755
--- a/server/src/com/cloud/ha/HighAvailabilityManagerImpl.java
+++ b/server/src/com/cloud/ha/HighAvailabilityManagerImpl.java
@@ -33,6 +33,7 @@ import org.apache.log4j.Logger;
 import org.apache.log4j.NDC;
 
 import org.apache.cloudstack.context.ServerContexts;
+import 
org.apache.cloudstack.engine.orchestration.service.VolumeOrchestrationService;
 import org.apache.cloudstack.framework.config.dao.ConfigurationDao;
 
 import com.cloud.agent.AgentManager;
@@ -60,7 +61,6 @@ import com.cloud.hypervisor.Hypervisor.HypervisorType;
 import com.cloud.resource.ResourceManager;
 import com.cloud.server.ManagementServer;
 import com.cloud.storage.StorageManager;
-import com.cloud.storage.VolumeManager;
 import com.cloud.storage.dao.GuestOSCategoryDao;
 import com.cloud.storage.dao.GuestOSDao;
 import com.cloud.user.AccountManager;
@@ -154,7 +154,7 @@ public class HighAvailabilityManagerImpl extends 
ManagerBase implements HighAvai
     @Inject
     ConfigurationDao _configDao;
     @Inject
-    VolumeManager volumeMgr;
+    VolumeOrchestrationService volumeMgr;
 
     String _instance;
     ScheduledExecutorService _executor;

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/de2bd96d/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 cdf7b6f..2941cc8 100755
--- a/server/src/com/cloud/server/ManagementServerImpl.java
+++ b/server/src/com/cloud/server/ManagementServerImpl.java
@@ -425,6 +425,7 @@ import 
org.apache.cloudstack.api.command.user.vpn.UpdateVpnCustomerGatewayCmd;
 import org.apache.cloudstack.api.command.user.zone.ListZonesByCmd;
 import org.apache.cloudstack.config.Configuration;
 import org.apache.cloudstack.context.CallContext;
+import 
org.apache.cloudstack.engine.orchestration.service.VolumeOrchestrationService;
 import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreManager;
 import org.apache.cloudstack.engine.subsystem.api.storage.StoragePoolAllocator;
 import org.apache.cloudstack.engine.subsystem.api.storage.VolumeDataFactory;
@@ -525,7 +526,6 @@ import com.cloud.storage.StorageManager;
 import com.cloud.storage.StoragePool;
 import com.cloud.storage.VMTemplateVO;
 import com.cloud.storage.Volume;
-import com.cloud.storage.VolumeManager;
 import com.cloud.storage.VolumeVO;
 import com.cloud.storage.dao.DiskOfferingDao;
 import com.cloud.storage.dao.GuestOSCategoryDao;
@@ -651,7 +651,7 @@ public class ManagementServerImpl extends ManagerBase 
implements ManagementServe
     @Inject
     private StorageManager _storageMgr;
     @Inject
-    private VolumeManager _volumeMgr;
+    private VolumeOrchestrationService _volumeMgr;
     @Inject
     private VirtualMachineManager _itMgr;
     @Inject

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/de2bd96d/server/src/com/cloud/storage/StorageManager.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/storage/StorageManager.java 
b/server/src/com/cloud/storage/StorageManager.java
index af4e8c2..4bd6b0e 100755
--- a/server/src/com/cloud/storage/StorageManager.java
+++ b/server/src/com/cloud/storage/StorageManager.java
@@ -18,7 +18,6 @@ package com.cloud.storage;
 
 import java.math.BigDecimal;
 import java.util.List;
-import java.util.Set;
 
 import org.apache.cloudstack.engine.subsystem.api.storage.DataStore;
 import 
org.apache.cloudstack.engine.subsystem.api.storage.HypervisorHostListener;
@@ -29,8 +28,6 @@ import com.cloud.agent.api.Command;
 import com.cloud.agent.api.StoragePoolInfo;
 import com.cloud.agent.manager.Commands;
 import com.cloud.capacity.CapacityVO;
-import com.cloud.dc.DataCenterVO;
-import com.cloud.dc.Pod;
 import com.cloud.exception.ConnectionException;
 import com.cloud.exception.StorageUnavailableException;
 import com.cloud.host.Host;
@@ -38,7 +35,6 @@ import com.cloud.hypervisor.Hypervisor.HypervisorType;
 import com.cloud.service.ServiceOfferingVO;
 import com.cloud.storage.Storage.ImageFormat;
 import com.cloud.utils.Pair;
-import com.cloud.vm.DiskProfile;
 import com.cloud.vm.VMInstanceVO;
 
 public interface StorageManager extends StorageService {
@@ -106,9 +102,7 @@ public interface StorageManager extends StorageService {
 
     boolean registerHostListener(String providerUuid, HypervisorHostListener 
listener);
 
-    StoragePool findStoragePool(DiskProfile dskCh, DataCenterVO dc,
-            Pod pod, Long clusterId, Long hostId, VMInstanceVO vm,
-            Set<StoragePool> avoid);
+
 
     void connectHostToSharedPool(long hostId, long poolId)
             throws StorageUnavailableException;

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/de2bd96d/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 df0832a..4e61380 100755
--- a/server/src/com/cloud/storage/StorageManagerImpl.java
+++ b/server/src/com/cloud/storage/StorageManagerImpl.java
@@ -31,7 +31,6 @@ import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.Random;
-import java.util.Set;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.Executors;
 import java.util.concurrent.ScheduledExecutorService;
@@ -66,7 +65,6 @@ import 
org.apache.cloudstack.engine.subsystem.api.storage.ImageStoreProvider;
 import org.apache.cloudstack.engine.subsystem.api.storage.PrimaryDataStoreInfo;
 import org.apache.cloudstack.engine.subsystem.api.storage.SnapshotDataFactory;
 import org.apache.cloudstack.engine.subsystem.api.storage.SnapshotInfo;
-import org.apache.cloudstack.engine.subsystem.api.storage.StoragePoolAllocator;
 import org.apache.cloudstack.engine.subsystem.api.storage.TemplateDataFactory;
 import org.apache.cloudstack.engine.subsystem.api.storage.TemplateService;
 import org.apache.cloudstack.engine.subsystem.api.storage.VolumeDataFactory;
@@ -107,11 +105,8 @@ import com.cloud.configuration.Config;
 import com.cloud.configuration.ConfigurationManager;
 import com.cloud.dc.ClusterVO;
 import com.cloud.dc.DataCenterVO;
-import com.cloud.dc.Pod;
 import com.cloud.dc.dao.ClusterDao;
 import com.cloud.dc.dao.DataCenterDao;
-import com.cloud.deploy.DataCenterDeployment;
-import com.cloud.deploy.DeploymentPlanner.ExcludeList;
 import com.cloud.exception.AgentUnavailableException;
 import com.cloud.exception.ConnectionException;
 import com.cloud.exception.DiscoveryException;
@@ -168,11 +163,8 @@ import com.cloud.utils.db.SearchCriteria;
 import com.cloud.utils.db.SearchCriteria.Op;
 import com.cloud.utils.db.Transaction;
 import com.cloud.utils.exception.CloudRuntimeException;
-import com.cloud.vm.DiskProfile;
 import com.cloud.vm.VMInstanceVO;
 import com.cloud.vm.VirtualMachine.State;
-import com.cloud.vm.VirtualMachineProfile;
-import com.cloud.vm.VirtualMachineProfileImpl;
 import com.cloud.vm.dao.VMInstanceDao;
 
 @Component
@@ -266,16 +258,6 @@ public class StorageManagerImpl extends ManagerBase 
implements StorageManager, C
     @Inject
     EndPointSelector _epSelector;
 
-    protected List<StoragePoolAllocator> _storagePoolAllocators;
-
-    public List<StoragePoolAllocator> getStoragePoolAllocators() {
-        return _storagePoolAllocators;
-    }
-
-    public void setStoragePoolAllocators(List<StoragePoolAllocator> 
_storagePoolAllocators) {
-        this._storagePoolAllocators = _storagePoolAllocators;
-    }
-
     protected List<StoragePoolDiscoverer> _discoverers;
 
     public List<StoragePoolDiscoverer> getDiscoverers() {
@@ -404,36 +386,6 @@ public class StorageManagerImpl extends ManagerBase 
implements StorageManager, C
     }
 
     @Override
-    public StoragePool findStoragePool(DiskProfile dskCh, final DataCenterVO 
dc, Pod pod, Long clusterId, Long hostId, VMInstanceVO vm,
-            final Set<StoragePool> avoid) {
-        Long podId = null;
-        if (pod != null) {
-            podId = pod.getId();
-        } else if (clusterId != null) {
-            ClusterVO cluster = _clusterDao.findById(clusterId);
-            if (cluster != null) {
-                podId = cluster.getPodId();
-            }
-        }
-
-        VirtualMachineProfile profile = new VirtualMachineProfileImpl(vm);
-        for (StoragePoolAllocator allocator : _storagePoolAllocators) {
-
-            ExcludeList avoidList = new ExcludeList();
-            for (StoragePool pool : avoid) {
-                avoidList.addPool(pool.getId());
-            }
-            DataCenterDeployment plan = new DataCenterDeployment(dc.getId(), 
podId, clusterId, hostId, null, null);
-
-            final List<StoragePool> poolList = allocator.allocateToPool(dskCh, 
profile, plan, avoidList, 1);
-            if (poolList != null && !poolList.isEmpty()) {
-                return (StoragePool) 
dataStoreMgr.getDataStore(poolList.get(0).getId(), DataStoreRole.Primary);
-            }
-        }
-        return null;
-    }
-
-    @Override
     public Answer[] sendToPool(StoragePool pool, Commands cmds) throws 
StorageUnavailableException {
         return sendToPool(pool, null, null, cmds).second();
     }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/de2bd96d/server/src/com/cloud/storage/VolumeApiServiceImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/storage/VolumeApiServiceImpl.java 
b/server/src/com/cloud/storage/VolumeApiServiceImpl.java
index f7beb9a..b2104ad 100644
--- a/server/src/com/cloud/storage/VolumeApiServiceImpl.java
+++ b/server/src/com/cloud/storage/VolumeApiServiceImpl.java
@@ -39,6 +39,7 @@ import 
org.apache.cloudstack.api.command.user.volume.ResizeVolumeCmd;
 import org.apache.cloudstack.api.command.user.volume.UpdateVolumeCmd;
 import org.apache.cloudstack.api.command.user.volume.UploadVolumeCmd;
 import org.apache.cloudstack.context.CallContext;
+import 
org.apache.cloudstack.engine.orchestration.service.VolumeOrchestrationService;
 import org.apache.cloudstack.engine.subsystem.api.storage.ChapInfo;
 import org.apache.cloudstack.engine.subsystem.api.storage.DataStore;
 import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreManager;
@@ -166,7 +167,7 @@ import com.cloud.vm.snapshot.dao.VMSnapshotDao;
 public class VolumeApiServiceImpl extends ManagerBase implements 
VolumeApiService {
     private final static Logger s_logger = 
Logger.getLogger(VolumeApiServiceImpl.class);
     @Inject
-    VolumeManager _volumeMgr;
+    VolumeOrchestrationService _volumeMgr;
 
     @Inject
     EntityManager _entityMgr;
@@ -717,7 +718,7 @@ public class VolumeApiServiceImpl extends ManagerBase 
implements VolumeApiServic
         while ((pod = _resourceMgr.findPod(null, null, dc, account.getId(), 
podsToAvoid)) != null) {
             podsToAvoid.add(pod.first().getId());
             // Determine what storage pool to store the volume in
-            while ((pool = storageMgr.findStoragePool(dskCh, dc, pod.first(), 
null, null, null, poolsToAvoid)) != null) {
+            while ((pool = _volumeMgr.findStoragePool(dskCh, dc, pod.first(), 
null, null, null, poolsToAvoid)) != null) {
                 break;
             }
         }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/de2bd96d/server/src/com/cloud/storage/VolumeManager.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/storage/VolumeManager.java 
b/server/src/com/cloud/storage/VolumeManager.java
deleted file mode 100644
index 944abc0..0000000
--- a/server/src/com/cloud/storage/VolumeManager.java
+++ /dev/null
@@ -1,80 +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.Map;
-
-import org.apache.cloudstack.engine.subsystem.api.storage.VolumeInfo;
-
-import com.cloud.agent.api.to.VirtualMachineTO;
-import com.cloud.deploy.DeployDestination;
-import com.cloud.exception.ConcurrentOperationException;
-import com.cloud.exception.InsufficientStorageCapacityException;
-import com.cloud.exception.StorageUnavailableException;
-import com.cloud.host.Host;
-import com.cloud.hypervisor.Hypervisor.HypervisorType;
-import com.cloud.storage.Volume.Type;
-import com.cloud.user.Account;
-import com.cloud.utils.fsm.NoTransitionException;
-import com.cloud.vm.DiskProfile;
-import com.cloud.vm.VMInstanceVO;
-import com.cloud.vm.VirtualMachine;
-import com.cloud.vm.VirtualMachineProfile;
-
-public interface VolumeManager {
-    VolumeInfo moveVolume(VolumeInfo volume, long destPoolDcId, Long 
destPoolPodId, Long destPoolClusterId, HypervisorType dataDiskHyperType) throws 
ConcurrentOperationException;
-
-    VolumeVO allocateDuplicateVolume(VolumeVO oldVol, Long templateId);
-
-    boolean volumeOnSharedStoragePool(VolumeVO volume);
-
-    boolean volumeInactive(Volume volume);
-
-    String getVmNameOnVolume(Volume volume);
-
-    Volume migrateVolume(Volume volume, StoragePool destPool);
-
-    void destroyVolume(VolumeVO volume);
-
-    DiskProfile allocateRawVolume(Type type, String name, DiskOfferingVO 
offering, Long size, VMInstanceVO vm, VMTemplateVO template, Account owner);
-
-    VolumeInfo createVolumeOnPrimaryStorage(VMInstanceVO vm, VolumeVO 
rootVolumeOfVm, VolumeInfo volume, HypervisorType rootDiskHyperType) throws 
NoTransitionException;
-
-    void release(VirtualMachineProfile profile);
-
-    void cleanupVolumes(long vmId) throws ConcurrentOperationException;
-
-    void migrateVolumes(VirtualMachine vm, VirtualMachineTO vmTo, Host 
srcHost, Host destHost, Map<Volume, StoragePool> volumeToPool);
-
-    boolean storageMigration(VirtualMachineProfile vm, StoragePool destPool);
-
-    void prepareForMigration(VirtualMachineProfile vm, DeployDestination dest);
-
-    void prepare(VirtualMachineProfile vm, DeployDestination dest) throws 
StorageUnavailableException, InsufficientStorageCapacityException, 
ConcurrentOperationException;
-
-    boolean canVmRestartOnAnotherServer(long vmId);
-
-    DiskProfile allocateTemplatedVolume(Type type, String name, DiskOfferingVO 
offering, VMTemplateVO template, VMInstanceVO vm, Account owner);
-
-    String getVmNameFromVolumeId(long volumeId);
-
-    String getStoragePoolOfVolume(long volumeId);
-
-    boolean validateVolumeSizeRange(long size);
-}

Reply via email to