You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by mc...@apache.org on 2014/03/13 22:53:22 UTC

[1/6] git commit: updated refs/heads/rbac to 84a528f

Repository: cloudstack
Updated Branches:
  refs/heads/rbac fa80c63c3 -> 84a528fad


deployVm/startVm APIs: ability to define deploymentPlanner for VmToStart in the api call (available to ROOT admin only)


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

Branch: refs/heads/rbac
Commit: 1b83698dac712e3497d4140b15c9fcba3870c705
Parents: 5779292
Author: Alena Prokharchyk <al...@citrix.com>
Authored: Tue Mar 11 10:14:08 2014 -0700
Committer: Alena Prokharchyk <al...@citrix.com>
Committed: Thu Mar 13 10:23:34 2014 -0700

----------------------------------------------------------------------
 .../api/command/user/vm/DeployVMCmd.java        |  7 ++++
 .../api/command/user/vm/StartVMCmd.java         | 13 ++++++--
 .../src/com/cloud/vm/VirtualMachineManager.java |  2 +-
 .../cloud/entity/api/VirtualMachineEntity.java  |  3 +-
 .../cloud/deploy/DeploymentPlanningManager.java |  4 ++-
 .../com/cloud/vm/VirtualMachineManagerImpl.java | 20 ++++++-----
 .../src/com/cloud/vm/VmWorkStart.java           | 12 +++++--
 .../cloud/entity/api/VMEntityManager.java       |  3 +-
 .../cloud/entity/api/VMEntityManagerImpl.java   | 19 ++++++-----
 .../entity/api/VirtualMachineEntityImpl.java    |  4 +--
 .../cloud/entity/api/db/VMReservationVO.java    | 11 ++++++
 .../lb/InternalLoadBalancerVMManagerImpl.java   |  2 +-
 .../deploy/DeploymentPlanningManagerImpl.java   | 31 +++++++++++------
 .../src/com/cloud/deploy/FirstFitPlanner.java   |  3 +-
 .../cloud/network/as/AutoScaleManagerImpl.java  |  4 +--
 server/src/com/cloud/vm/UserVmManager.java      |  2 +-
 server/src/com/cloud/vm/UserVmManagerImpl.java  | 35 ++++++++++----------
 setup/db/db/schema-430to440.sql                 |  2 ++
 18 files changed, 113 insertions(+), 64 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/1b83698d/api/src/org/apache/cloudstack/api/command/user/vm/DeployVMCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/vm/DeployVMCmd.java b/api/src/org/apache/cloudstack/api/command/user/vm/DeployVMCmd.java
index bd363da..44edef8 100755
--- a/api/src/org/apache/cloudstack/api/command/user/vm/DeployVMCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/vm/DeployVMCmd.java
@@ -178,6 +178,9 @@ public class DeployVMCmd extends BaseAsyncCreateCustomIdCmd {
     @Parameter(name = ApiConstants.DETAILS, type = CommandType.MAP, since = "4.3", description = "used to specify the custom parameters.")
     private Map details;
 
+    @Parameter(name = ApiConstants.DEPLOYMENT_PLANNER, type = CommandType.STRING, description = "Deployment planner to use for vm allocation. Available to ROOT admin only", since = "4.4", authorized = { RoleType.Admin })
+    private String deploymentPlanner;
+
     /////////////////////////////////////////////////////
     /////////////////// Accessors ///////////////////////
     /////////////////////////////////////////////////////
@@ -193,6 +196,10 @@ public class DeployVMCmd extends BaseAsyncCreateCustomIdCmd {
         return diskOfferingId;
     }
 
+    public String getDeploymentPlanner() {
+        return deploymentPlanner;
+    }
+
     public String getDisplayName() {
         return displayName;
     }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/1b83698d/api/src/org/apache/cloudstack/api/command/user/vm/StartVMCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/vm/StartVMCmd.java b/api/src/org/apache/cloudstack/api/command/user/vm/StartVMCmd.java
index 553b753..f55aa59 100644
--- a/api/src/org/apache/cloudstack/api/command/user/vm/StartVMCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/vm/StartVMCmd.java
@@ -16,18 +16,18 @@
 // under the License.
 package org.apache.cloudstack.api.command.user.vm;
 
-import org.apache.cloudstack.api.BaseAsyncVMCmd;
-import org.apache.log4j.Logger;
-
+import org.apache.cloudstack.acl.RoleType;
 import org.apache.cloudstack.api.APICommand;
 import org.apache.cloudstack.api.ApiCommandJobType;
 import org.apache.cloudstack.api.ApiConstants;
 import org.apache.cloudstack.api.ApiErrorCode;
+import org.apache.cloudstack.api.BaseAsyncVMCmd;
 import org.apache.cloudstack.api.Parameter;
 import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.HostResponse;
 import org.apache.cloudstack.api.response.UserVmResponse;
 import org.apache.cloudstack.context.CallContext;
+import org.apache.log4j.Logger;
 
 import com.cloud.event.EventTypes;
 import com.cloud.exception.ConcurrentOperationException;
@@ -61,6 +61,9 @@ public class StartVMCmd extends BaseAsyncVMCmd {
                since = "3.0.1")
     private Long hostId;
 
+    @Parameter(name = ApiConstants.DEPLOYMENT_PLANNER, type = CommandType.STRING, description = "Deployment planner to use for vm allocation. Available to ROOT admin only", since = "4.4", authorized = { RoleType.Admin })
+    private String deploymentPlanner;
+
     // ///////////////////////////////////////////////////
     // ///////////////// Accessors ///////////////////////
     // ///////////////////////////////////////////////////
@@ -86,6 +89,10 @@ public class StartVMCmd extends BaseAsyncVMCmd {
         return "virtualmachine";
     }
 
+    public String getDeploymentPlanner() {
+        return deploymentPlanner;
+    }
+
     @Override
     public long getEntityOwnerId() {
         UserVm vm = _responseGenerator.findUserVmById(getId());

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/1b83698d/engine/api/src/com/cloud/vm/VirtualMachineManager.java
----------------------------------------------------------------------
diff --git a/engine/api/src/com/cloud/vm/VirtualMachineManager.java b/engine/api/src/com/cloud/vm/VirtualMachineManager.java
index 350f396..99f5595 100644
--- a/engine/api/src/com/cloud/vm/VirtualMachineManager.java
+++ b/engine/api/src/com/cloud/vm/VirtualMachineManager.java
@@ -85,7 +85,7 @@ public interface VirtualMachineManager extends Manager {
 
     void start(String vmUuid, Map<VirtualMachineProfile.Param, Object> params);
 
-    void start(String vmUuid, Map<VirtualMachineProfile.Param, Object> params, DeploymentPlan planToDeploy);
+    void start(String vmUuid, Map<VirtualMachineProfile.Param, Object> params, DeploymentPlan planToDeploy, DeploymentPlanner planner);
 
     void stop(String vmUuid) throws ResourceUnavailableException;
 

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/1b83698d/engine/api/src/org/apache/cloudstack/engine/cloud/entity/api/VirtualMachineEntity.java
----------------------------------------------------------------------
diff --git a/engine/api/src/org/apache/cloudstack/engine/cloud/entity/api/VirtualMachineEntity.java b/engine/api/src/org/apache/cloudstack/engine/cloud/entity/api/VirtualMachineEntity.java
index 773c683..37501f0 100755
--- a/engine/api/src/org/apache/cloudstack/engine/cloud/entity/api/VirtualMachineEntity.java
+++ b/engine/api/src/org/apache/cloudstack/engine/cloud/entity/api/VirtualMachineEntity.java
@@ -30,6 +30,7 @@ import javax.xml.bind.annotation.XmlRootElement;
 import org.apache.cloudstack.engine.entity.api.CloudStackEntity;
 
 import com.cloud.deploy.DeploymentPlan;
+import com.cloud.deploy.DeploymentPlanner;
 import com.cloud.deploy.DeploymentPlanner.ExcludeList;
 import com.cloud.exception.AgentUnavailableException;
 import com.cloud.exception.CloudException;
@@ -90,7 +91,7 @@ public interface VirtualMachineEntity extends CloudStackEntity {
      * @param exclude list of areas to exclude
      * @return a reservation id
      */
-    String reserve(String plannerToUse, @BeanParam DeploymentPlan plan, ExcludeList exclude, String caller) throws InsufficientCapacityException,
+    String reserve(DeploymentPlanner plannerToUse, @BeanParam DeploymentPlan plan, ExcludeList exclude, String caller) throws InsufficientCapacityException,
         ResourceUnavailableException;
 
     /**

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/1b83698d/engine/components-api/src/com/cloud/deploy/DeploymentPlanningManager.java
----------------------------------------------------------------------
diff --git a/engine/components-api/src/com/cloud/deploy/DeploymentPlanningManager.java b/engine/components-api/src/com/cloud/deploy/DeploymentPlanningManager.java
index de2fc0e..ee6721a 100644
--- a/engine/components-api/src/com/cloud/deploy/DeploymentPlanningManager.java
+++ b/engine/components-api/src/com/cloud/deploy/DeploymentPlanningManager.java
@@ -43,8 +43,10 @@ public interface DeploymentPlanningManager extends Manager {
             ExcludeList avoids, DeploymentPlanner planner) throws InsufficientServerCapacityException, AffinityConflictException;
 
     String finalizeReservation(DeployDestination plannedDestination,
-            VirtualMachineProfile vmProfile, DeploymentPlan plan, ExcludeList avoids)
+            VirtualMachineProfile vmProfile, DeploymentPlan plan, ExcludeList avoids, DeploymentPlanner planner)
             throws InsufficientServerCapacityException, AffinityConflictException;
 
     void cleanupVMReservations();
+
+    DeploymentPlanner getDeploymentPlannerByName(String plannerName);
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/1b83698d/engine/orchestration/src/com/cloud/vm/VirtualMachineManagerImpl.java
----------------------------------------------------------------------
diff --git a/engine/orchestration/src/com/cloud/vm/VirtualMachineManagerImpl.java b/engine/orchestration/src/com/cloud/vm/VirtualMachineManagerImpl.java
index 609aefa..2cbde35 100755
--- a/engine/orchestration/src/com/cloud/vm/VirtualMachineManagerImpl.java
+++ b/engine/orchestration/src/com/cloud/vm/VirtualMachineManagerImpl.java
@@ -40,8 +40,6 @@ import javax.ejb.Local;
 import javax.inject.Inject;
 import javax.naming.ConfigurationException;
 
-import org.apache.log4j.Logger;
-
 import org.apache.cloudstack.affinity.dao.AffinityGroupVMMapDao;
 import org.apache.cloudstack.context.CallContext;
 import org.apache.cloudstack.engine.orchestration.service.NetworkOrchestrationService;
@@ -70,6 +68,7 @@ import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao;
 import org.apache.cloudstack.storage.datastore.db.StoragePoolVO;
 import org.apache.cloudstack.storage.to.VolumeObjectTO;
 import org.apache.cloudstack.utils.identity.ManagementServerNode;
+import org.apache.log4j.Logger;
 
 import com.cloud.agent.AgentManager;
 import com.cloud.agent.Listener;
@@ -80,8 +79,8 @@ import com.cloud.agent.api.CheckVirtualMachineAnswer;
 import com.cloud.agent.api.CheckVirtualMachineCommand;
 import com.cloud.agent.api.ClusterSyncAnswer;
 import com.cloud.agent.api.ClusterSyncCommand;
-import com.cloud.agent.api.ClusterVMMetaDataSyncCommand;
 import com.cloud.agent.api.ClusterVMMetaDataSyncAnswer;
+import com.cloud.agent.api.ClusterVMMetaDataSyncCommand;
 import com.cloud.agent.api.Command;
 import com.cloud.agent.api.MigrateAnswer;
 import com.cloud.agent.api.MigrateCommand;
@@ -608,13 +607,13 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
 
     @Override
     public void start(String vmUuid, Map<VirtualMachineProfile.Param, Object> params) {
-        start(vmUuid, params, null);
+        start(vmUuid, params, null, null);
     }
 
     @Override
-    public void start(String vmUuid, Map<VirtualMachineProfile.Param, Object> params, DeploymentPlan planToDeploy) {
+    public void start(String vmUuid, Map<VirtualMachineProfile.Param, Object> params, DeploymentPlan planToDeploy, DeploymentPlanner planner) {
         try {
-            advanceStart(vmUuid, params, planToDeploy, null);
+            advanceStart(vmUuid, params, planToDeploy, planner);
         } catch (ConcurrentOperationException e) {
             throw new CloudRuntimeException("Unable to start a VM due to concurrent operation", e).add(VirtualMachine.class, vmUuid);
         } catch (InsufficientCapacityException e) {
@@ -779,7 +778,7 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
                     _workJobDao.expunge(placeHolder.getId());
             }
         } else {
-            Outcome<VirtualMachine> outcome = startVmThroughJobQueue(vmUuid, params, planToDeploy);
+            Outcome<VirtualMachine> outcome = startVmThroughJobQueue(vmUuid, params, planToDeploy, planner);
 
             try {
                 VirtualMachine vm = outcome.get();
@@ -4451,7 +4450,7 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
     //
     public Outcome<VirtualMachine> startVmThroughJobQueue(final String vmUuid,
             final Map<VirtualMachineProfile.Param, Object> params,
-            final DeploymentPlan planToDeploy) {
+            final DeploymentPlan planToDeploy, final DeploymentPlanner planner) {
 
         final CallContext context = CallContext.current();
         final User callingUser = context.getCallingUser();
@@ -4488,6 +4487,9 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
                         // save work context info (there are some duplications)
                         VmWorkStart workInfo = new VmWorkStart(callingUser.getId(), callingAccount.getId(), vm.getId(), VirtualMachineManagerImpl.VM_WORK_JOB_HANDLER);
                         workInfo.setPlan(planToDeploy);
+                        if (planner != null) {
+                            workInfo.setDeploymentPlanner(planner.getName());
+                        }
                         workInfo.setParams(params);
                         workJob.setCmdInfo(VmWorkSerializer.serialize(workInfo));
 
@@ -5123,7 +5125,7 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
         }
         assert (vm != null);
 
-        orchestrateStart(vm.getUuid(), work.getParams(), work.getPlan(), null);
+        orchestrateStart(vm.getUuid(), work.getParams(), work.getPlan(), _dpMgr.getDeploymentPlannerByName(work.getDeploymentPlanner()));
         return new Pair<JobInfo.Status, String>(JobInfo.Status.SUCCEEDED, null);
     }
 

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/1b83698d/engine/orchestration/src/com/cloud/vm/VmWorkStart.java
----------------------------------------------------------------------
diff --git a/engine/orchestration/src/com/cloud/vm/VmWorkStart.java b/engine/orchestration/src/com/cloud/vm/VmWorkStart.java
index f1b2efd..bb9f375 100644
--- a/engine/orchestration/src/com/cloud/vm/VmWorkStart.java
+++ b/engine/orchestration/src/com/cloud/vm/VmWorkStart.java
@@ -21,10 +21,9 @@ import java.io.Serializable;
 import java.util.HashMap;
 import java.util.Map;
 
-import org.apache.log4j.Logger;
-
 import org.apache.cloudstack.context.CallContext;
 import org.apache.cloudstack.framework.jobs.impl.JobSerializerHelper;
+import org.apache.log4j.Logger;
 
 import com.cloud.deploy.DataCenterDeployment;
 import com.cloud.deploy.DeploymentPlan;
@@ -46,6 +45,7 @@ public class VmWorkStart extends VmWork {
 
     String reservationId;
     String journalName;
+    String planner;
 
     // use serialization friendly map
     private Map<String, String> rawParams;
@@ -91,6 +91,14 @@ public class VmWorkStart extends VmWork {
         }
     }
 
+    public void setDeploymentPlanner(String planner) {
+        this.planner = planner;
+    }
+
+    public String getDeploymentPlanner() {
+        return this.planner;
+    }
+
     public Map<String, String> getRawParams() {
         return rawParams;
     }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/1b83698d/engine/orchestration/src/org/apache/cloudstack/engine/cloud/entity/api/VMEntityManager.java
----------------------------------------------------------------------
diff --git a/engine/orchestration/src/org/apache/cloudstack/engine/cloud/entity/api/VMEntityManager.java b/engine/orchestration/src/org/apache/cloudstack/engine/cloud/entity/api/VMEntityManager.java
index 7c53302..3145314 100644
--- a/engine/orchestration/src/org/apache/cloudstack/engine/cloud/entity/api/VMEntityManager.java
+++ b/engine/orchestration/src/org/apache/cloudstack/engine/cloud/entity/api/VMEntityManager.java
@@ -21,6 +21,7 @@ import java.util.Map;
 import org.apache.cloudstack.engine.cloud.entity.api.db.VMEntityVO;
 
 import com.cloud.deploy.DeploymentPlan;
+import com.cloud.deploy.DeploymentPlanner;
 import com.cloud.deploy.DeploymentPlanner.ExcludeList;
 import com.cloud.exception.AgentUnavailableException;
 import com.cloud.exception.ConcurrentOperationException;
@@ -35,7 +36,7 @@ public interface VMEntityManager {
 
     void saveVirtualMachine(VMEntityVO vmInstanceVO);
 
-    String reserveVirtualMachine(VMEntityVO vmEntityVO, String plannerToUse, DeploymentPlan plan, ExcludeList exclude) throws InsufficientCapacityException,
+    String reserveVirtualMachine(VMEntityVO vmEntityVO, DeploymentPlanner plannerToUse, DeploymentPlan plan, ExcludeList exclude) throws InsufficientCapacityException,
         ResourceUnavailableException;
 
     void deployVirtualMachine(String reservationId, VMEntityVO vmEntityVO, String caller, Map<VirtualMachineProfile.Param, Object> params)

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/1b83698d/engine/orchestration/src/org/apache/cloudstack/engine/cloud/entity/api/VMEntityManagerImpl.java
----------------------------------------------------------------------
diff --git a/engine/orchestration/src/org/apache/cloudstack/engine/cloud/entity/api/VMEntityManagerImpl.java b/engine/orchestration/src/org/apache/cloudstack/engine/cloud/entity/api/VMEntityManagerImpl.java
index 36481ab..b1ac2f8 100755
--- a/engine/orchestration/src/org/apache/cloudstack/engine/cloud/entity/api/VMEntityManagerImpl.java
+++ b/engine/orchestration/src/org/apache/cloudstack/engine/cloud/entity/api/VMEntityManagerImpl.java
@@ -22,9 +22,6 @@ import java.util.UUID;
 
 import javax.inject.Inject;
 
-import org.apache.log4j.Logger;
-import org.springframework.stereotype.Component;
-
 import org.apache.cloudstack.affinity.dao.AffinityGroupVMMapDao;
 import org.apache.cloudstack.engine.cloud.entity.api.db.VMEntityVO;
 import org.apache.cloudstack.engine.cloud.entity.api.db.VMReservationVO;
@@ -32,6 +29,8 @@ import org.apache.cloudstack.engine.cloud.entity.api.db.dao.VMEntityDao;
 import org.apache.cloudstack.engine.cloud.entity.api.db.dao.VMReservationDao;
 import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreManager;
 import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao;
+import org.apache.log4j.Logger;
+import org.springframework.stereotype.Component;
 
 import com.cloud.dc.DataCenter;
 import com.cloud.deploy.DataCenterDeployment;
@@ -114,6 +113,8 @@ public class VMEntityManagerImpl implements VMEntityManager {
 
     @Inject
     protected AffinityGroupVMMapDao _affinityGroupVMMapDao;
+    @Inject
+    DeploymentPlanningManager _planningMgr;
 
     @Override
     public VMEntityVO loadVirtualMachine(String vmId) {
@@ -138,7 +139,7 @@ public class VMEntityManagerImpl implements VMEntityManager {
     }
 
     @Override
-    public String reserveVirtualMachine(VMEntityVO vmEntityVO, String plannerToUse, DeploymentPlan planToDeploy, ExcludeList exclude)
+    public String reserveVirtualMachine(VMEntityVO vmEntityVO, DeploymentPlanner plannerToUse, DeploymentPlan planToDeploy, ExcludeList exclude)
         throws InsufficientCapacityException, ResourceUnavailableException {
 
         //call planner and get the deployDestination.
@@ -189,13 +190,13 @@ public class VMEntityManagerImpl implements VMEntityManager {
         while (true) {
             DeployDestination dest = null;
             try {
-                dest = _dpMgr.planDeployment(vmProfile, plan, exclude, null);
+                dest = _dpMgr.planDeployment(vmProfile, plan, exclude, plannerToUse);
             } catch (AffinityConflictException e) {
                 throw new CloudRuntimeException("Unable to create deployment, affinity rules associted to the VM conflict");
             }
 
             if (dest != null) {
-                String reservationId = _dpMgr.finalizeReservation(dest, vmProfile, plan, exclude);
+                String reservationId = _dpMgr.finalizeReservation(dest, vmProfile, plan, exclude, plannerToUse);
                 if (reservationId != null) {
                     return reservationId;
                 } else {
@@ -229,7 +230,7 @@ public class VMEntityManagerImpl implements VMEntityManager {
             DataCenterDeployment reservedPlan =
                 new DataCenterDeployment(vm.getDataCenterId(), vmReservation.getPodId(), vmReservation.getClusterId(), vmReservation.getHostId(), null, null);
             try {
-                _itMgr.start(vm.getUuid(), params, reservedPlan);
+                _itMgr.start(vm.getUuid(), params, reservedPlan, _planningMgr.getDeploymentPlannerByName(vmReservation.getDeploymentPlanner()));
             } catch (Exception ex) {
                 // Retry the deployment without using the reservation plan
                 DataCenterDeployment plan = new DataCenterDeployment(0, null, null, null, null, null);
@@ -238,11 +239,11 @@ public class VMEntityManagerImpl implements VMEntityManager {
                     plan.setAvoids(reservedPlan.getAvoids());
                 }
 
-                _itMgr.start(vm.getUuid(), params, plan);
+                _itMgr.start(vm.getUuid(), params, plan, null);
             }
         } else {
             // no reservation found. Let VirtualMachineManager retry
-            _itMgr.start(vm.getUuid(), params, null);
+            _itMgr.start(vm.getUuid(), params, null, null);
         }
 
     }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/1b83698d/engine/orchestration/src/org/apache/cloudstack/engine/cloud/entity/api/VirtualMachineEntityImpl.java
----------------------------------------------------------------------
diff --git a/engine/orchestration/src/org/apache/cloudstack/engine/cloud/entity/api/VirtualMachineEntityImpl.java b/engine/orchestration/src/org/apache/cloudstack/engine/cloud/entity/api/VirtualMachineEntityImpl.java
index 7f2e4ff..706748f 100644
--- a/engine/orchestration/src/org/apache/cloudstack/engine/cloud/entity/api/VirtualMachineEntityImpl.java
+++ b/engine/orchestration/src/org/apache/cloudstack/engine/cloud/entity/api/VirtualMachineEntityImpl.java
@@ -24,10 +24,10 @@ import java.util.Map;
 import javax.inject.Inject;
 
 import org.springframework.stereotype.Component;
-
 import org.apache.cloudstack.engine.cloud.entity.api.db.VMEntityVO;
 
 import com.cloud.deploy.DeploymentPlan;
+import com.cloud.deploy.DeploymentPlanner;
 import com.cloud.deploy.DeploymentPlanner.ExcludeList;
 import com.cloud.exception.AgentUnavailableException;
 import com.cloud.exception.ConcurrentOperationException;
@@ -195,7 +195,7 @@ public class VirtualMachineEntityImpl implements VirtualMachineEntity {
     }
 
     @Override
-    public String reserve(String plannerToUse, DeploymentPlan plan, ExcludeList exclude, String caller) throws InsufficientCapacityException,
+    public String reserve(DeploymentPlanner plannerToUse, DeploymentPlan plan, ExcludeList exclude, String caller) throws InsufficientCapacityException,
         ResourceUnavailableException {
         return manager.reserveVirtualMachine(this.vmEntityVO, plannerToUse, plan, exclude);
     }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/1b83698d/engine/schema/src/org/apache/cloudstack/engine/cloud/entity/api/db/VMReservationVO.java
----------------------------------------------------------------------
diff --git a/engine/schema/src/org/apache/cloudstack/engine/cloud/entity/api/db/VMReservationVO.java b/engine/schema/src/org/apache/cloudstack/engine/cloud/entity/api/db/VMReservationVO.java
index dabed15..b934a5d 100644
--- a/engine/schema/src/org/apache/cloudstack/engine/cloud/entity/api/db/VMReservationVO.java
+++ b/engine/schema/src/org/apache/cloudstack/engine/cloud/entity/api/db/VMReservationVO.java
@@ -66,6 +66,9 @@ public class VMReservationVO implements Identity, InternalIdentity {
     @Column(name = GenericDao.REMOVED_COLUMN)
     private Date removed;
 
+    @Column(name = "deployment_planner")
+    private String deploymentPlanner;
+
     // VolumeId -> poolId
     @Transient
     Map<Long, Long> volumeReservationMap;
@@ -124,4 +127,12 @@ public class VMReservationVO implements Identity, InternalIdentity {
         this.volumeReservationMap = volumeReservationMap;
     }
 
+    public void setDeploymentPlanner(String planner) {
+        this.deploymentPlanner = planner;
+    }
+
+    public String getDeploymentPlanner() {
+        return this.deploymentPlanner;
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/1b83698d/plugins/network-elements/internal-loadbalancer/src/org/apache/cloudstack/network/lb/InternalLoadBalancerVMManagerImpl.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/internal-loadbalancer/src/org/apache/cloudstack/network/lb/InternalLoadBalancerVMManagerImpl.java b/plugins/network-elements/internal-loadbalancer/src/org/apache/cloudstack/network/lb/InternalLoadBalancerVMManagerImpl.java
index 8b82306..aa763d5 100644
--- a/plugins/network-elements/internal-loadbalancer/src/org/apache/cloudstack/network/lb/InternalLoadBalancerVMManagerImpl.java
+++ b/plugins/network-elements/internal-loadbalancer/src/org/apache/cloudstack/network/lb/InternalLoadBalancerVMManagerImpl.java
@@ -805,7 +805,7 @@ public class InternalLoadBalancerVMManagerImpl extends ManagerBase implements In
     protected DomainRouterVO startInternalLbVm(DomainRouterVO internalLbVm, Account caller, long callerUserId, Map<Param, Object> params)
         throws StorageUnavailableException, InsufficientCapacityException, ConcurrentOperationException, ResourceUnavailableException {
         s_logger.debug("Starting Internal LB VM " + internalLbVm);
-        _itMgr.start(internalLbVm.getUuid(), params, null);
+        _itMgr.start(internalLbVm.getUuid(), params, null, null);
         if (internalLbVm.isStopPending()) {
             s_logger.info("Clear the stop pending flag of Internal LB VM " + internalLbVm.getHostName() + " after start router successfully!");
             internalLbVm.setStopPending(false);

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/1b83698d/server/src/com/cloud/deploy/DeploymentPlanningManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/deploy/DeploymentPlanningManagerImpl.java b/server/src/com/cloud/deploy/DeploymentPlanningManagerImpl.java
index f76e485..5312e15 100644
--- a/server/src/com/cloud/deploy/DeploymentPlanningManagerImpl.java
+++ b/server/src/com/cloud/deploy/DeploymentPlanningManagerImpl.java
@@ -31,8 +31,6 @@ import javax.ejb.Local;
 import javax.inject.Inject;
 import javax.naming.ConfigurationException;
 
-import org.apache.log4j.Logger;
-
 import org.apache.cloudstack.affinity.AffinityGroupProcessor;
 import org.apache.cloudstack.affinity.AffinityGroupService;
 import org.apache.cloudstack.affinity.AffinityGroupVMMapVO;
@@ -51,6 +49,7 @@ import org.apache.cloudstack.managed.context.ManagedContextTimerTask;
 import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao;
 import org.apache.cloudstack.storage.datastore.db.StoragePoolVO;
 import org.apache.cloudstack.utils.identity.ManagementServerNode;
+import org.apache.log4j.Logger;
 
 import com.cloud.agent.AgentManager;
 import com.cloud.agent.Listener;
@@ -284,12 +283,7 @@ public class DeploymentPlanningManagerImpl extends ManagerBase implements Deploy
                     plannerName = _configDao.getValue(Config.VmDeploymentPlanner.key());
                 }
             }
-            for (DeploymentPlanner plannerInList : _planners) {
-                if (plannerName.equals(plannerInList.getName())) {
-                    planner = plannerInList;
-                    break;
-                }
-            }
+            planner = getDeploymentPlannerByName(plannerName);
         }
 
         int cpu_requested = offering.getCpu() * offering.getSpeed();
@@ -450,7 +444,6 @@ public class DeploymentPlanningManagerImpl extends ManagerBase implements Deploy
 
         if (planner != null && planner.canHandle(vmProfile, plan, avoids)) {
             while (true) {
-
                 if (planner instanceof DeploymentClusterPlanner) {
 
                     ExcludeList plannerAvoidInput =
@@ -502,6 +495,21 @@ public class DeploymentPlanningManagerImpl extends ManagerBase implements Deploy
         return dest;
     }
 
+    @Override
+    public DeploymentPlanner getDeploymentPlannerByName(String plannerName) {
+        if (plannerName != null) {
+            for (DeploymentPlanner plannerInList : _planners) {
+                if (plannerName != null) {
+                }
+                if (plannerName.equalsIgnoreCase(plannerInList.getName())) {
+                    return plannerInList;
+                }
+            }
+        }
+
+        return null;
+    }
+
     private void checkForNonDedicatedResources(VirtualMachineProfile vmProfile, DataCenter dc, ExcludeList avoids) {
         boolean isExplicit = false;
         VirtualMachine vm = vmProfile.getVirtualMachine();
@@ -1345,7 +1353,7 @@ public class DeploymentPlanningManagerImpl extends ManagerBase implements Deploy
 
     @DB
     @Override
-    public String finalizeReservation(final DeployDestination plannedDestination, final VirtualMachineProfile vmProfile, DeploymentPlan plan, ExcludeList avoids)
+    public String finalizeReservation(final DeployDestination plannedDestination, final VirtualMachineProfile vmProfile, DeploymentPlan plan, ExcludeList avoids, final DeploymentPlanner planner)
         throws InsufficientServerCapacityException, AffinityConflictException {
 
         final VirtualMachine vm = vmProfile.getVirtualMachine();
@@ -1374,6 +1382,9 @@ public class DeploymentPlanningManagerImpl extends ManagerBase implements Deploy
                     VMReservationVO vmReservation =
                         new VMReservationVO(vm.getId(), plannedDestination.getDataCenter().getId(), plannedDestination.getPod().getId(), plannedDestination.getCluster()
                             .getId(), plannedDestination.getHost().getId());
+                    if (planner != null) {
+                        vmReservation.setDeploymentPlanner(planner.getName());
+                    }
                     Map<Long, Long> volumeReservationMap = new HashMap<Long, Long>();
 
                     if (vm.getHypervisorType() != HypervisorType.BareMetal) {

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/1b83698d/server/src/com/cloud/deploy/FirstFitPlanner.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/deploy/FirstFitPlanner.java b/server/src/com/cloud/deploy/FirstFitPlanner.java
index 1c79a67..c09fa7a 100755
--- a/server/src/com/cloud/deploy/FirstFitPlanner.java
+++ b/server/src/com/cloud/deploy/FirstFitPlanner.java
@@ -25,13 +25,12 @@ import javax.ejb.Local;
 import javax.inject.Inject;
 import javax.naming.ConfigurationException;
 
-import org.apache.log4j.Logger;
-
 import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreManager;
 import org.apache.cloudstack.framework.config.ConfigKey;
 import org.apache.cloudstack.framework.config.Configurable;
 import org.apache.cloudstack.framework.config.dao.ConfigurationDao;
 import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao;
+import org.apache.log4j.Logger;
 
 import com.cloud.capacity.Capacity;
 import com.cloud.capacity.CapacityManager;

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/1b83698d/server/src/com/cloud/network/as/AutoScaleManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/as/AutoScaleManagerImpl.java b/server/src/com/cloud/network/as/AutoScaleManagerImpl.java
index 2fa3821..61b7f4b 100644
--- a/server/src/com/cloud/network/as/AutoScaleManagerImpl.java
+++ b/server/src/com/cloud/network/as/AutoScaleManagerImpl.java
@@ -53,7 +53,6 @@ import org.apache.cloudstack.api.command.user.vm.DeployVMCmd;
 import org.apache.cloudstack.config.ApiServiceConfiguration;
 import org.apache.cloudstack.context.CallContext;
 import org.apache.cloudstack.framework.config.dao.ConfigurationDao;
-
 import org.apache.log4j.Logger;
 
 import com.cloud.api.ApiDBUtils;
@@ -120,7 +119,6 @@ import com.cloud.utils.db.TransactionStatus;
 import com.cloud.utils.net.NetUtils;
 import com.cloud.vm.UserVmManager;
 import com.cloud.vm.UserVmService;
-
 import com.google.gson.Gson;
 import com.google.gson.reflect.TypeToken;
 
@@ -1371,7 +1369,7 @@ public class AutoScaleManagerImpl<Type> extends ManagerBase implements AutoScale
     private boolean startNewVM(final long vmId) {
         try {
             CallContext.current().setEventDetails("Vm Id: " + vmId);
-            _userVmManager.startVirtualMachine(vmId, null, null);
+            _userVmManager.startVirtualMachine(vmId, null, null, null);
         } catch (final ResourceUnavailableException ex) {
             s_logger.warn("Exception: ", ex);
             throw new ServerApiException(ApiErrorCode.RESOURCE_UNAVAILABLE_ERROR, ex.getMessage());

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/1b83698d/server/src/com/cloud/vm/UserVmManager.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/vm/UserVmManager.java b/server/src/com/cloud/vm/UserVmManager.java
index 7371692..11b110f 100755
--- a/server/src/com/cloud/vm/UserVmManager.java
+++ b/server/src/com/cloud/vm/UserVmManager.java
@@ -108,7 +108,7 @@ public interface UserVmManager extends UserVmService {
     Pair<List<UserVmJoinVO>, Integer> searchForUserVMs(Criteria c, Account caller, Long domainId, boolean isRecursive, List<Long> permittedAccounts, boolean listAll,
         ListProjectResourcesCriteria listProjectResourcesCriteria, Map<String, String> tags);
 
-    Pair<UserVmVO, Map<VirtualMachineProfile.Param, Object>> startVirtualMachine(long vmId, Long hostId, Map<VirtualMachineProfile.Param, Object> additionalParams)
+    Pair<UserVmVO, Map<VirtualMachineProfile.Param, Object>> startVirtualMachine(long vmId, Long hostId, Map<VirtualMachineProfile.Param, Object> additionalParams, String deploymentPlannerToUse)
         throws ConcurrentOperationException, ResourceUnavailableException, InsufficientCapacityException;
 
     boolean upgradeVirtualMachine(Long id, Long serviceOfferingId, Map<String, String> customParameters) throws ResourceUnavailableException,

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/1b83698d/server/src/com/cloud/vm/UserVmManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/vm/UserVmManagerImpl.java b/server/src/com/cloud/vm/UserVmManagerImpl.java
index be00aa8..0751d27 100755
--- a/server/src/com/cloud/vm/UserVmManagerImpl.java
+++ b/server/src/com/cloud/vm/UserVmManagerImpl.java
@@ -115,7 +115,9 @@ import com.cloud.dc.dao.DedicatedResourceDao;
 import com.cloud.dc.dao.HostPodDao;
 import com.cloud.deploy.DataCenterDeployment;
 import com.cloud.deploy.DeployDestination;
+import com.cloud.deploy.DeploymentPlanner;
 import com.cloud.deploy.DeploymentPlanner.ExcludeList;
+import com.cloud.deploy.DeploymentPlanningManager;
 import com.cloud.deploy.PlannerHostReservationVO;
 import com.cloud.deploy.dao.PlannerHostReservationDao;
 import com.cloud.domain.DomainVO;
@@ -396,7 +398,6 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir
     protected ProjectManager _projectMgr;
     @Inject
     protected ResourceManager _resourceMgr;
-
     @Inject
     protected NetworkServiceMapDao _ntwkSrvcDao;
     @Inject
@@ -415,17 +416,14 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir
     protected GuestOSCategoryDao _guestOSCategoryDao;
     @Inject
     UsageEventDao _usageEventDao;
-
     @Inject
     SecondaryStorageVmDao _secondaryDao;
     @Inject
     VmDiskStatisticsDao _vmDiskStatsDao;
-
     @Inject
     protected VMSnapshotDao _vmSnapshotDao;
     @Inject
     protected VMSnapshotManager _vmSnapshotMgr;
-
     @Inject
     AffinityGroupVMMapDao _affinityGroupVMMapDao;
     @Inject
@@ -450,6 +448,8 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir
     UserVmDetailsDao _uservmDetailsDao;
     @Inject
     UUIDManager _uuidMgr;
+    @Inject
+    DeploymentPlanningManager _planningMgr;
 
     protected ScheduledExecutorService _executor = null;
     protected int _expungeInterval;
@@ -1975,7 +1975,7 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir
     @Override
     @ActionEvent(eventType = EventTypes.EVENT_VM_START, eventDescription = "starting Vm", async = true)
     public UserVm startVirtualMachine(StartVMCmd cmd) throws ExecutionException, ConcurrentOperationException, ResourceUnavailableException, InsufficientCapacityException {
-        return startVirtualMachine(cmd.getId(), cmd.getHostId(), null).first();
+        return startVirtualMachine(cmd.getId(), cmd.getHostId(), null, cmd.getDeploymentPlanner()).first();
     }
 
     @Override
@@ -2974,10 +2974,10 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir
     @Override
     @ActionEvent(eventType = EventTypes.EVENT_VM_CREATE, eventDescription = "starting Vm", async = true)
     public UserVm startVirtualMachine(DeployVMCmd cmd) throws ResourceUnavailableException, InsufficientCapacityException, ConcurrentOperationException {
-        return startVirtualMachine(cmd, null);
+        return startVirtualMachine(cmd, null, cmd.getDeploymentPlanner());
     }
 
-    protected UserVm startVirtualMachine(DeployVMCmd cmd, Map<VirtualMachineProfile.Param, Object> additonalParams) throws ResourceUnavailableException,
+    protected UserVm startVirtualMachine(DeployVMCmd cmd, Map<VirtualMachineProfile.Param, Object> additonalParams, String deploymentPlannerToUse) throws ResourceUnavailableException,
             InsufficientCapacityException, ConcurrentOperationException {
 
         long vmId = cmd.getEntityId();
@@ -2986,7 +2986,7 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir
 
         Pair<UserVmVO, Map<VirtualMachineProfile.Param, Object>> vmParamPair = null;
         try {
-            vmParamPair = startVirtualMachine(vmId, hostId, additonalParams);
+            vmParamPair = startVirtualMachine(vmId, hostId, additonalParams, deploymentPlannerToUse);
             vm = vmParamPair.first();
         } finally {
             updateVmStateForFailedVmCreation(vm.getId(), hostId);
@@ -3232,7 +3232,7 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir
     }
 
     @Override
-    public Pair<UserVmVO, Map<VirtualMachineProfile.Param, Object>> startVirtualMachine(long vmId, Long hostId, Map<VirtualMachineProfile.Param, Object> additionalParams)
+    public Pair<UserVmVO, Map<VirtualMachineProfile.Param, Object>> startVirtualMachine(long vmId, Long hostId, Map<VirtualMachineProfile.Param, Object> additionalParams, String deploymentPlannerToUse)
             throws ConcurrentOperationException, ResourceUnavailableException, InsufficientCapacityException {
         // Input validation
         Account callerAccount = CallContext.current().getCallingAccount();
@@ -3324,18 +3324,17 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir
 
         VirtualMachineEntity vmEntity = _orchSrvc.getVirtualMachine(vm.getUuid());
 
-        // Get serviceOffering for Virtual Machine
-        ServiceOfferingVO offering = _serviceOfferingDao.findByIdIncludingRemoved(vm.getId(), vm.getServiceOfferingId());
-        String plannerName = offering.getDeploymentPlanner();
-        if (plannerName == null) {
-            if (vm.getHypervisorType() == HypervisorType.BareMetal) {
-                plannerName = "BareMetalPlanner";
-            } else {
-                plannerName = _configDao.getValue(Config.VmDeploymentPlanner.key());
+        DeploymentPlanner planner = null;
+        if (deploymentPlannerToUse != null) {
+            // if set to null, the deployment planner would be later figured out either from global config var, or from
+            // the service offering
+            planner = _planningMgr.getDeploymentPlannerByName(deploymentPlannerToUse);
+            if (planner == null) {
+                throw new InvalidParameterValueException("Can't find a planner by name " + deploymentPlannerToUse);
             }
         }
 
-        String reservationId = vmEntity.reserve(plannerName, plan, new ExcludeList(), Long.toString(callerUser.getId()));
+        String reservationId = vmEntity.reserve(planner, plan, new ExcludeList(), Long.toString(callerUser.getId()));
         vmEntity.deploy(reservationId, Long.toString(callerUser.getId()), params);
 
         Pair<UserVmVO, Map<VirtualMachineProfile.Param, Object>> vmParamPair = new Pair(vm, params);

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/1b83698d/setup/db/db/schema-430to440.sql
----------------------------------------------------------------------
diff --git a/setup/db/db/schema-430to440.sql b/setup/db/db/schema-430to440.sql
index ab6bc98..235f357 100644
--- a/setup/db/db/schema-430to440.sql
+++ b/setup/db/db/schema-430to440.sql
@@ -621,3 +621,5 @@ UPDATE `cloud`.`guest_os_hypervisor` SET `created` = now();
 ALTER TABLE `cloud`.`guest_os` ADD COLUMN `created` datetime COMMENT 'Time when Guest OS was created in system';
 ALTER TABLE `cloud`.`guest_os` ADD COLUMN `removed` datetime COMMENT 'Time when Guest OS was removed if deleted, else NULL';
 UPDATE `cloud`.`guest_os` SET `created` = now();
+
+ALTER TABLE `cloud`.`vm_reservation` ADD COLUMN `deployment_planner` varchar(40) DEFAULT NULL COMMENT 'Preferred deployment planner for the vm';


[3/6] git commit: updated refs/heads/rbac to 84a528f

Posted by mc...@apache.org.
Removed unused imports and instance vars from FirstFitAllocator


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

Branch: refs/heads/rbac
Commit: df8521194569668a923443767e783cd87ab5ea0c
Parents: 39e5b76
Author: Alena Prokharchyk <al...@citrix.com>
Authored: Thu Mar 13 11:05:37 2014 -0700
Committer: Alena Prokharchyk <al...@citrix.com>
Committed: Thu Mar 13 11:05:37 2014 -0700

----------------------------------------------------------------------
 .../allocator/impl/FirstFitAllocator.java       | 29 ++++----------------
 1 file changed, 6 insertions(+), 23 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/df852119/server/src/com/cloud/agent/manager/allocator/impl/FirstFitAllocator.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/agent/manager/allocator/impl/FirstFitAllocator.java b/server/src/com/cloud/agent/manager/allocator/impl/FirstFitAllocator.java
index 8abb5cd..3736884 100755
--- a/server/src/com/cloud/agent/manager/allocator/impl/FirstFitAllocator.java
+++ b/server/src/com/cloud/agent/manager/allocator/impl/FirstFitAllocator.java
@@ -48,7 +48,6 @@ import com.cloud.offering.ServiceOffering;
 import com.cloud.org.Cluster;
 import com.cloud.resource.ResourceManager;
 import com.cloud.service.ServiceOfferingDetailsVO;
-import com.cloud.service.dao.ServiceOfferingDao;
 import com.cloud.service.dao.ServiceOfferingDetailsDao;
 import com.cloud.storage.GuestOSCategoryVO;
 import com.cloud.storage.GuestOSVO;
@@ -56,14 +55,9 @@ import com.cloud.storage.VMTemplateVO;
 import com.cloud.storage.dao.GuestOSCategoryDao;
 import com.cloud.storage.dao.GuestOSDao;
 import com.cloud.user.Account;
-import com.cloud.utils.NumbersUtil;
 import com.cloud.utils.component.AdapterBase;
 import com.cloud.vm.VirtualMachine;
 import com.cloud.vm.VirtualMachineProfile;
-import com.cloud.vm.dao.ConsoleProxyDao;
-import com.cloud.vm.dao.DomainRouterDao;
-import com.cloud.vm.dao.SecondaryStorageVmDao;
-import com.cloud.vm.dao.UserVmDao;
 import com.cloud.vm.dao.VMInstanceDao;
 
 /**
@@ -74,20 +68,10 @@ import com.cloud.vm.dao.VMInstanceDao;
 public class FirstFitAllocator extends AdapterBase implements HostAllocator {
     private static final Logger s_logger = Logger.getLogger(FirstFitAllocator.class);
     @Inject
-    HostDao _hostDao = null;
+    protected HostDao _hostDao = null;
     @Inject
     HostDetailsDao _hostDetailsDao = null;
     @Inject
-    UserVmDao _vmDao = null;
-    @Inject
-    ServiceOfferingDao _offeringDao = null;
-    @Inject
-    DomainRouterDao _routerDao = null;
-    @Inject
-    ConsoleProxyDao _consoleProxyDao = null;
-    @Inject
-    SecondaryStorageVmDao _secStorgaeVmDao = null;
-    @Inject
     ConfigurationDao _configDao = null;
     @Inject
     GuestOSDao _guestOSDao = null;
@@ -96,19 +80,20 @@ public class FirstFitAllocator extends AdapterBase implements HostAllocator {
     @Inject
     VMInstanceDao _vmInstanceDao = null;
     @Inject
-    ResourceManager _resourceMgr;
+    protected ResourceManager _resourceMgr;
     @Inject
     ClusterDao _clusterDao;
     @Inject
     ClusterDetailsDao _clusterDetailsDao;
     @Inject
     ServiceOfferingDetailsDao _serviceOfferingDetailsDao;
-    float _factor = 1;
-    boolean _checkHvm = true;
-    protected String _allocationAlgorithm = "random";
     @Inject
     CapacityManager _capacityMgr;
 
+    boolean _checkHvm = true;
+    protected String _allocationAlgorithm = "random";
+
+
     @Override
     public List<Host> allocateTo(VirtualMachineProfile vmProfile, DeploymentPlan plan, Type type, ExcludeList avoid, int returnUpTo) {
         return allocateTo(vmProfile, plan, type, avoid, returnUpTo, true);
@@ -489,8 +474,6 @@ public class FirstFitAllocator extends AdapterBase implements HostAllocator {
     public boolean configure(String name, Map<String, Object> params) throws ConfigurationException {
         if (_configDao != null) {
             Map<String, String> configs = _configDao.getConfiguration(params);
-            String opFactor = configs.get("cpu.overprovisioning.factor");
-            _factor = NumbersUtil.parseFloat(opFactor, 1);
 
             String allocationAlgorithm = configs.get("vm.allocation.algorithm");
             if (allocationAlgorithm != null) {


[4/6] git commit: updated refs/heads/rbac to 84a528f

Posted by mc...@apache.org.
Removed getUUID() method from Domain interface as this interface already implements @Identity where getUUID is defined


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

Branch: refs/heads/rbac
Commit: 67ab3211bd49724ee4a15aa4933c19c0e7adddff
Parents: df85211
Author: Alena Prokharchyk <al...@citrix.com>
Authored: Thu Mar 13 12:54:13 2014 -0700
Committer: Alena Prokharchyk <al...@citrix.com>
Committed: Thu Mar 13 12:54:13 2014 -0700

----------------------------------------------------------------------
 api/src/com/cloud/domain/Domain.java | 3 ---
 1 file changed, 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/67ab3211/api/src/com/cloud/domain/Domain.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/domain/Domain.java b/api/src/com/cloud/domain/Domain.java
index c4755d7..365a705 100644
--- a/api/src/com/cloud/domain/Domain.java
+++ b/api/src/com/cloud/domain/Domain.java
@@ -60,7 +60,4 @@ public interface Domain extends OwnedBy, Identity, InternalIdentity {
 
     String getNetworkDomain();
 
-    @Override
-    public String getUuid();
-
 }


[2/6] git commit: updated refs/heads/rbac to 84a528f

Posted by mc...@apache.org.
More generic parameters that are not unknown

Adding some more parameter names that should not be considered unknown since they belong to general use paramters

Signed-off-by: Alena Prokharchyk <al...@citrix.com>


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

Branch: refs/heads/rbac
Commit: 39e5b768e8fcae9622e01b2ca72a49675eb6d3fb
Parents: 1b83698
Author: Antonio Fornie <af...@schubergphilis.com>
Authored: Wed Mar 12 18:47:50 2014 -0500
Committer: Alena Prokharchyk <al...@citrix.com>
Committed: Thu Mar 13 10:40:14 2014 -0700

----------------------------------------------------------------------
 .../org/apache/cloudstack/api/ApiConstants.java |  2 +-
 .../dispatch/ParamGenericValidationWorker.java  |  3 +++
 .../ParamGenericValidationWorkerTest.java       | 24 ++++++++++++++++++++
 3 files changed, 28 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/39e5b768/api/src/org/apache/cloudstack/api/ApiConstants.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/ApiConstants.java b/api/src/org/apache/cloudstack/api/ApiConstants.java
index 089affb..d5e97e6 100755
--- a/api/src/org/apache/cloudstack/api/ApiConstants.java
+++ b/api/src/org/apache/cloudstack/api/ApiConstants.java
@@ -59,7 +59,7 @@ public class ApiConstants {
     public static final String CTX_ACCOUNT_ID = "ctxaccountid";
     public static final String CTX_USER_ID = "ctxuserid";
     public static final String CTXSTARTEVENTID = "ctxstarteventid";
-    public static final String CTX_START_EVENT_ID = "ctxStartEventId";
+    public static final String CTX_START_EVENT_ID = "ctxstarteventid";
     public static final String CUSTOMIZED = "customized";
     public static final String CUSTOMIZED_IOPS = "customizediops";
     public static final String CUSTOM_ID = "customid";

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/39e5b768/server/src/com/cloud/api/dispatch/ParamGenericValidationWorker.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/api/dispatch/ParamGenericValidationWorker.java b/server/src/com/cloud/api/dispatch/ParamGenericValidationWorker.java
index f456468..7a73b8a 100644
--- a/server/src/com/cloud/api/dispatch/ParamGenericValidationWorker.java
+++ b/server/src/com/cloud/api/dispatch/ParamGenericValidationWorker.java
@@ -42,6 +42,7 @@ public class ParamGenericValidationWorker implements DispatchWorker {
     protected static final List<String> defaultParamNames = new ArrayList<String>();
 
     static {
+        defaultParamNames.add(ApiConstants.ACCOUNT_ID);
         defaultParamNames.add(ApiConstants.CTX_START_EVENT_ID);
         defaultParamNames.add(ApiConstants.COMMAND);
         defaultParamNames.add(ApiConstants.CMD_EVENT_TYPE);
@@ -62,6 +63,8 @@ public class ParamGenericValidationWorker implements DispatchWorker {
         defaultParamNames.add(ApiConstants.CTX_ACCOUNT_ID);
         defaultParamNames.add(ApiConstants.CTX_START_EVENT_ID);
         defaultParamNames.add(ApiConstants.CTX_USER_ID);
+        defaultParamNames.add(ApiConstants.UUID);
+        defaultParamNames.add(ApiConstants.ID);
         defaultParamNames.add("_");
     }
 

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/39e5b768/server/test/com/cloud/api/dispatch/ParamGenericValidationWorkerTest.java
----------------------------------------------------------------------
diff --git a/server/test/com/cloud/api/dispatch/ParamGenericValidationWorkerTest.java b/server/test/com/cloud/api/dispatch/ParamGenericValidationWorkerTest.java
index 0803a2b..8f9709c 100644
--- a/server/test/com/cloud/api/dispatch/ParamGenericValidationWorkerTest.java
+++ b/server/test/com/cloud/api/dispatch/ParamGenericValidationWorkerTest.java
@@ -75,6 +75,30 @@ public class ParamGenericValidationWorkerTest {
         final BaseCmd cmd = new FakeCmd();
         final Map<String, String> params = new HashMap<String, String>();
         params.put(ApiConstants.COMMAND, "");
+        params.put(ApiConstants.ACCOUNT_ID, "");
+        params.put(ApiConstants.CTX_START_EVENT_ID, "");
+        params.put(ApiConstants.COMMAND, "");
+        params.put(ApiConstants.CMD_EVENT_TYPE, "");
+        params.put(ApiConstants.USERNAME, "");
+        params.put(ApiConstants.USER_ID, "");
+        params.put(ApiConstants.PASSWORD, "");
+        params.put(ApiConstants.DOMAIN, "");
+        params.put(ApiConstants.DOMAIN_ID, "");
+        params.put(ApiConstants.DOMAIN__ID, "");
+        params.put(ApiConstants.SESSIONKEY, "");
+        params.put(ApiConstants.RESPONSE, "");
+        params.put(ApiConstants.PAGE, "");
+        params.put(ApiConstants.USER_API_KEY, "");
+        params.put(ApiConstants.API_KEY, "");
+        params.put(ApiConstants.PAGE_SIZE, "");
+        params.put(ApiConstants.HTTPMETHOD, "");
+        params.put(ApiConstants.SIGNATURE, "");
+        params.put(ApiConstants.CTX_ACCOUNT_ID, "");
+        params.put(ApiConstants.CTX_START_EVENT_ID, "");
+        params.put(ApiConstants.CTX_USER_ID, "");
+        params.put(ApiConstants.UUID, "");
+        params.put(ApiConstants.ID, "");
+        params.put("_", "");
         params.put("addedParam", "");
 
         Account account = new AccountVO("testaccount", 1L, "networkdomain", (short) 0, "uuid");


[6/6] git commit: updated refs/heads/rbac to 84a528f

Posted by mc...@apache.org.
Merge branch 'master' into rbac


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

Branch: refs/heads/rbac
Commit: 84a528fad6979ed6745ad9eb9806d6b9a9fdb0f4
Parents: fa80c63 90c485e
Author: Min Chen <mi...@citrix.com>
Authored: Thu Mar 13 14:52:37 2014 -0700
Committer: Min Chen <mi...@citrix.com>
Committed: Thu Mar 13 14:52:37 2014 -0700

----------------------------------------------------------------------
 api/src/com/cloud/domain/Domain.java            |   3 -
 .../org/apache/cloudstack/api/ApiConstants.java |   2 +-
 .../org/apache/cloudstack/api/BaseListCmd.java  |   2 +-
 .../api/command/user/vm/DeployVMCmd.java        |   7 +
 .../api/command/user/vm/StartVMCmd.java         |  11 +-
 .../src/com/cloud/vm/VirtualMachineManager.java |   2 +-
 .../cloud/entity/api/VirtualMachineEntity.java  |   3 +-
 .../cloud/deploy/DeploymentPlanningManager.java |   4 +-
 .../com/cloud/vm/VirtualMachineManagerImpl.java |  20 +-
 .../src/com/cloud/vm/VmWorkStart.java           |  12 +-
 .../cloud/entity/api/VMEntityManager.java       |   3 +-
 .../cloud/entity/api/VMEntityManagerImpl.java   |  19 +-
 .../entity/api/VirtualMachineEntityImpl.java    |   4 +-
 .../security/dao/VmRulesetLogDaoImpl.java       |   2 +-
 .../src/com/cloud/projects/ProjectVO.java       |   5 +
 .../cloud/entity/api/db/VMReservationVO.java    |  11 +
 .../jobs/impl/JobSerializerHelper.java          |   5 +-
 .../mom/rabbitmq/RabbitMQEventBus.java          |  18 +-
 .../lb/InternalLoadBalancerVMManagerImpl.java   |   2 +-
 .../allocator/impl/FirstFitAllocator.java       |  29 +--
 .../dispatch/ParamGenericValidationWorker.java  |   3 +
 .../src/com/cloud/dc/DedicatedResourceVO.java   |   7 +
 .../deploy/DeploymentPlanningManagerImpl.java   |  31 ++-
 .../src/com/cloud/deploy/FirstFitPlanner.java   |   3 +-
 .../com/cloud/network/IpAddressManagerImpl.java |   4 +-
 .../cloud/network/as/AutoScaleManagerImpl.java  |   4 +-
 .../com/cloud/server/ManagementServerImpl.java  | 217 +------------------
 server/src/com/cloud/vm/UserVmManager.java      |   2 +-
 server/src/com/cloud/vm/UserVmManagerImpl.java  |  35 ++-
 .../ParamGenericValidationWorkerTest.java       |  24 ++
 setup/db/db/schema-430to440.sql                 |   2 +
 31 files changed, 175 insertions(+), 321 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/84a528fa/api/src/org/apache/cloudstack/api/ApiConstants.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/84a528fa/api/src/org/apache/cloudstack/api/command/user/vm/DeployVMCmd.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/84a528fa/api/src/org/apache/cloudstack/api/command/user/vm/StartVMCmd.java
----------------------------------------------------------------------
diff --cc api/src/org/apache/cloudstack/api/command/user/vm/StartVMCmd.java
index 4e91c7b,f55aa59..13b7442
--- a/api/src/org/apache/cloudstack/api/command/user/vm/StartVMCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/vm/StartVMCmd.java
@@@ -16,18 -16,13 +16,19 @@@
  // under the License.
  package org.apache.cloudstack.api.command.user.vm;
  
- import org.apache.cloudstack.api.BaseAsyncVMCmd;
 +import org.apache.log4j.Logger;
 +
 +import org.apache.cloudstack.acl.IAMEntityType;
+ import org.apache.cloudstack.acl.RoleType;
 +import org.apache.cloudstack.acl.SecurityChecker.AccessType;
 +import org.apache.cloudstack.api.ACL;
  import org.apache.cloudstack.api.APICommand;
  import org.apache.cloudstack.api.ApiCommandJobType;
  import org.apache.cloudstack.api.ApiConstants;
  import org.apache.cloudstack.api.ApiErrorCode;
+ import org.apache.cloudstack.api.BaseAsyncVMCmd;
  import org.apache.cloudstack.api.Parameter;
 +import org.apache.cloudstack.api.ResponseObject.ResponseView;
  import org.apache.cloudstack.api.ServerApiException;
  import org.apache.cloudstack.api.response.HostResponse;
  import org.apache.cloudstack.api.response.UserVmResponse;
@@@ -70,6 -68,6 +74,7 @@@ public class StartVMCmd extends BaseAsy
      // ///////////////// Accessors ///////////////////////
      // ///////////////////////////////////////////////////
  
++    @Override
      public Long getId() {
          return id;
      }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/84a528fa/server/src/com/cloud/deploy/DeploymentPlanningManagerImpl.java
----------------------------------------------------------------------
diff --cc server/src/com/cloud/deploy/DeploymentPlanningManagerImpl.java
index c1f336c,5312e15..9cbbb10
--- a/server/src/com/cloud/deploy/DeploymentPlanningManagerImpl.java
+++ b/server/src/com/cloud/deploy/DeploymentPlanningManagerImpl.java
@@@ -1,57 -1,56 +1,56 @@@
 -// 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.deploy;
 -
 -import java.util.ArrayList;
 +// 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.deploy;
 +
 +import java.util.ArrayList;
  import java.util.Arrays;
 -import java.util.Comparator;
 -import java.util.HashMap;
 +import java.util.Comparator;
 +import java.util.HashMap;
  import java.util.HashSet;
 -import java.util.List;
 -import java.util.Map;
 +import java.util.List;
 +import java.util.Map;
  import java.util.Set;
 -import java.util.Timer;
 -import java.util.TreeSet;
 -
 -import javax.ejb.Local;
 -import javax.inject.Inject;
 -import javax.naming.ConfigurationException;
 -
 -import org.apache.cloudstack.affinity.AffinityGroupProcessor;
 -import org.apache.cloudstack.affinity.AffinityGroupService;
 +import java.util.Timer;
 +import java.util.TreeSet;
 +
 +import javax.ejb.Local;
 +import javax.inject.Inject;
 +import javax.naming.ConfigurationException;
 +
- import org.apache.log4j.Logger;
- 
 +import org.apache.cloudstack.affinity.AffinityGroupProcessor;
 +import org.apache.cloudstack.affinity.AffinityGroupService;
  import org.apache.cloudstack.affinity.AffinityGroupVMMapVO;
 -import org.apache.cloudstack.affinity.AffinityGroupVO;
 -import org.apache.cloudstack.affinity.dao.AffinityGroupDao;
 -import org.apache.cloudstack.affinity.dao.AffinityGroupVMMapDao;
 -import org.apache.cloudstack.engine.cloud.entity.api.db.VMReservationVO;
 -import org.apache.cloudstack.engine.cloud.entity.api.db.dao.VMReservationDao;
 -import org.apache.cloudstack.engine.subsystem.api.storage.DataStore;
 -import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreManager;
 -import org.apache.cloudstack.engine.subsystem.api.storage.StoragePoolAllocator;
 -import org.apache.cloudstack.framework.config.dao.ConfigurationDao;
 -import org.apache.cloudstack.framework.messagebus.MessageBus;
 -import org.apache.cloudstack.framework.messagebus.MessageSubscriber;
 -import org.apache.cloudstack.managed.context.ManagedContextTimerTask;
 -import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao;
 -import org.apache.cloudstack.storage.datastore.db.StoragePoolVO;
 -import org.apache.cloudstack.utils.identity.ManagementServerNode;
 +import org.apache.cloudstack.affinity.AffinityGroupVO;
 +import org.apache.cloudstack.affinity.dao.AffinityGroupDao;
 +import org.apache.cloudstack.affinity.dao.AffinityGroupVMMapDao;
 +import org.apache.cloudstack.engine.cloud.entity.api.db.VMReservationVO;
 +import org.apache.cloudstack.engine.cloud.entity.api.db.dao.VMReservationDao;
 +import org.apache.cloudstack.engine.subsystem.api.storage.DataStore;
 +import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreManager;
 +import org.apache.cloudstack.engine.subsystem.api.storage.StoragePoolAllocator;
 +import org.apache.cloudstack.framework.config.dao.ConfigurationDao;
 +import org.apache.cloudstack.framework.messagebus.MessageBus;
 +import org.apache.cloudstack.framework.messagebus.MessageSubscriber;
 +import org.apache.cloudstack.managed.context.ManagedContextTimerTask;
 +import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao;
 +import org.apache.cloudstack.storage.datastore.db.StoragePoolVO;
 +import org.apache.cloudstack.utils.identity.ManagementServerNode;
+ import org.apache.log4j.Logger;
 -
 +
  import com.cloud.agent.AgentManager;
  import com.cloud.agent.Listener;
  import com.cloud.agent.api.AgentControlAnswer;
@@@ -230,99 -229,94 +229,94 @@@ public class DeploymentPlanningManagerI
  
      public void setPlanners(List<DeploymentPlanner> planners) {
          _planners = planners;
 -    }
 +    }
 +
 +    protected List<AffinityGroupProcessor> _affinityProcessors;
  
 -    protected List<AffinityGroupProcessor> _affinityProcessors;
 +    public List<AffinityGroupProcessor> getAffinityGroupProcessors() {
 +        return _affinityProcessors;
 +    }
  
 -    public List<AffinityGroupProcessor> getAffinityGroupProcessors() {
 -        return _affinityProcessors;
 -    }
 -
 -    public void setAffinityGroupProcessors(List<AffinityGroupProcessor> affinityProcessors) {
 +    public void setAffinityGroupProcessors(List<AffinityGroupProcessor> affinityProcessors) {
          _affinityProcessors = affinityProcessors;
 -    }
 -
 -    @Override
 +    }
 +
 +    @Override
      public DeployDestination planDeployment(VirtualMachineProfile vmProfile, DeploymentPlan plan, ExcludeList avoids, DeploymentPlanner planner)
              throws InsufficientServerCapacityException, AffinityConflictException {
 -
 -        // call affinitygroup chain
 -        VirtualMachine vm = vmProfile.getVirtualMachine();
 -        long vmGroupCount = _affinityGroupVMMapDao.countAffinityGroupsForVm(vm.getId());
 +
 +        // call affinitygroup chain
 +        VirtualMachine vm = vmProfile.getVirtualMachine();
 +        long vmGroupCount = _affinityGroupVMMapDao.countAffinityGroupsForVm(vm.getId());
          DataCenter dc = _dcDao.findById(vm.getDataCenterId());
 -
 -        if (vmGroupCount > 0) {
 -            for (AffinityGroupProcessor processor : _affinityProcessors) {
 -                processor.process(vmProfile, plan, avoids);
 -            }
 +
 +        if (vmGroupCount > 0) {
 +            for (AffinityGroupProcessor processor : _affinityProcessors) {
 +                processor.process(vmProfile, plan, avoids);
 +            }
 +        }
 +
 +        if (vm.getType() == VirtualMachine.Type.User) {
 +            checkForNonDedicatedResources(vmProfile, dc, avoids);
          }
 -
 -        if (vm.getType() == VirtualMachine.Type.User) {
 -            checkForNonDedicatedResources(vmProfile, dc, avoids);
 -        }
 -        if (s_logger.isDebugEnabled()) {
 +        if (s_logger.isDebugEnabled()) {
              s_logger.debug("Deploy avoids pods: " + avoids.getPodsToAvoid() + ", clusters: " + avoids.getClustersToAvoid() + ", hosts: " + avoids.getHostsToAvoid());
 -        }
 -
 -        // call planners
 +        }
 +
 +        // call planners
          //DataCenter dc = _dcDao.findById(vm.getDataCenterId());
 -        // check if datacenter is in avoid set
 -        if (avoids.shouldAvoid(dc)) {
 -            if (s_logger.isDebugEnabled()) {
 +        // check if datacenter is in avoid set
 +        if (avoids.shouldAvoid(dc)) {
 +            if (s_logger.isDebugEnabled()) {
                  s_logger.debug("DataCenter id = '" + dc.getId() + "' provided is in avoid set, DeploymentPlanner cannot allocate the VM, returning.");
 -            }
 -            return null;
 -        }
 -
 -        ServiceOffering offering = vmProfile.getServiceOffering();
 +            }
 +            return null;
 +        }
 +
 +        ServiceOffering offering = vmProfile.getServiceOffering();
          if(planner == null){
 -            String plannerName = offering.getDeploymentPlanner();
 -            if (plannerName == null) {
 -                if (vm.getHypervisorType() == HypervisorType.BareMetal) {
 -                    plannerName = "BareMetalPlanner";
 -                } else {
 -                    plannerName = _configDao.getValue(Config.VmDeploymentPlanner.key());
 -                }
 -            }
 +        String plannerName = offering.getDeploymentPlanner();
 +        if (plannerName == null) {
 +            if (vm.getHypervisorType() == HypervisorType.BareMetal) {
 +                plannerName = "BareMetalPlanner";
 +            } else {
 +                plannerName = _configDao.getValue(Config.VmDeploymentPlanner.key());
 +            }
 +        }
-         for (DeploymentPlanner plannerInList : _planners) {
-             if (plannerName.equals(plannerInList.getName())) {
-                 planner = plannerInList;
-                 break;
-             }
-         }
+             planner = getDeploymentPlannerByName(plannerName);
          }
 -
 -        int cpu_requested = offering.getCpu() * offering.getSpeed();
 -        long ram_requested = offering.getRamSize() * 1024L * 1024L;
 -
 -        if (s_logger.isDebugEnabled()) {
 -            s_logger.debug("DeploymentPlanner allocation algorithm: " + planner);
 -
 +
 +        int cpu_requested = offering.getCpu() * offering.getSpeed();
 +        long ram_requested = offering.getRamSize() * 1024L * 1024L;
 +
 +        if (s_logger.isDebugEnabled()) {
 +            s_logger.debug("DeploymentPlanner allocation algorithm: " + planner);
 +
              s_logger.debug("Trying to allocate a host and storage pools from dc:" + plan.getDataCenterId() + ", pod:" + plan.getPodId() + ",cluster:" +
                  plan.getClusterId() + ", requested cpu: " + cpu_requested + ", requested ram: " + ram_requested);
 -
 +
              s_logger.debug("Is ROOT volume READY (pool already allocated)?: " + (plan.getPoolId() != null ? "Yes" : "No"));
 -        }
 -
 +        }
 +
          String haVmTag = (String)vmProfile.getParameter(VirtualMachineProfile.Param.HaTag);
 -
 -        if (plan.getHostId() != null && haVmTag == null) {
 -            Long hostIdSpecified = plan.getHostId();
 -            if (s_logger.isDebugEnabled()) {
 +
 +        if (plan.getHostId() != null && haVmTag == null) {
 +            Long hostIdSpecified = plan.getHostId();
 +            if (s_logger.isDebugEnabled()) {
                  s_logger.debug("DeploymentPlan has host_id specified, choosing this host and making no checks on this host: " + hostIdSpecified);
 -            }
 -            HostVO host = _hostDao.findById(hostIdSpecified);
 -            if (host == null) {
 -                s_logger.debug("The specified host cannot be found");
 -            } else if (avoids.shouldAvoid(host)) {
 -                s_logger.debug("The specified host is in avoid set");
 -            } else {
 -                if (s_logger.isDebugEnabled()) {
 +            }
 +            HostVO host = _hostDao.findById(hostIdSpecified);
 +            if (host == null) {
 +                s_logger.debug("The specified host cannot be found");
 +            } else if (avoids.shouldAvoid(host)) {
 +                s_logger.debug("The specified host is in avoid set");
 +            } else {
 +                if (s_logger.isDebugEnabled()) {
                      s_logger.debug("Looking for suitable pools for this host under zone: " + host.getDataCenterId() + ", pod: " + host.getPodId() + ", cluster: " +
                          host.getClusterId());
 -                }
 -
 -                // search for storage under the zone, pod, cluster of the host.
 +                }
 +
 +                // search for storage under the zone, pod, cluster of the host.
                  DataCenterDeployment lastPlan =
                      new DataCenterDeployment(host.getDataCenterId(), host.getPodId(), host.getClusterId(), hostIdSpecified, plan.getPoolId(), null,
                          plan.getReservationContext());
@@@ -440,100 -434,114 +434,114 @@@
                  } else {
                      s_logger.debug("The last host of this VM is not UP or is not enabled, host status is: " + host.getStatus().name() + ", host resource state is: " +
                          host.getResourceState());
 -                }
 -            }
 -            s_logger.debug("Cannot choose the last host to deploy this VM ");
 -        }
 -
 -        DeployDestination dest = null;
 -        List<Long> clusterList = null;
 -
 -        if (planner != null && planner.canHandle(vmProfile, plan, avoids)) {
 -            while (true) {
 -                if (planner instanceof DeploymentClusterPlanner) {
 -
 +                }
 +            }
 +            s_logger.debug("Cannot choose the last host to deploy this VM ");
 +        }
 +
 +        DeployDestination dest = null;
 +        List<Long> clusterList = null;
 +
 +        if (planner != null && planner.canHandle(vmProfile, plan, avoids)) {
 +            while (true) {
- 
 +                if (planner instanceof DeploymentClusterPlanner) {
 +
                      ExcludeList plannerAvoidInput =
                          new ExcludeList(avoids.getDataCentersToAvoid(), avoids.getPodsToAvoid(), avoids.getClustersToAvoid(), avoids.getHostsToAvoid(),
 -                            avoids.getPoolsToAvoid());
 -
 +                            avoids.getPoolsToAvoid());
 +
                      clusterList = ((DeploymentClusterPlanner)planner).orderClusters(vmProfile, plan, avoids);
 -
 -                    if (clusterList != null && !clusterList.isEmpty()) {
 -                        // planner refactoring. call allocators to list hosts
 +
 +                    if (clusterList != null && !clusterList.isEmpty()) {
 +                        // planner refactoring. call allocators to list hosts
                          ExcludeList plannerAvoidOutput =
                              new ExcludeList(avoids.getDataCentersToAvoid(), avoids.getPodsToAvoid(), avoids.getClustersToAvoid(), avoids.getHostsToAvoid(),
 -                                avoids.getPoolsToAvoid());
 -
 -                        resetAvoidSet(plannerAvoidOutput, plannerAvoidInput);
 -
 +                                avoids.getPoolsToAvoid());
 +
 +                        resetAvoidSet(plannerAvoidOutput, plannerAvoidInput);
 +
                          dest =
                              checkClustersforDestination(clusterList, vmProfile, plan, avoids, dc, getPlannerUsage(planner, vmProfile, plan, avoids), plannerAvoidOutput);
 -                        if (dest != null) {
 -                            return dest;
 -                        }
 -                        // reset the avoid input to the planners
 -                        resetAvoidSet(avoids, plannerAvoidOutput);
 -
 -                    } else {
 -                        return null;
 -                    }
 -                } else {
 -                    dest = planner.plan(vmProfile, plan, avoids);
 -                    if (dest != null) {
 -                        long hostId = dest.getHost().getId();
 -                        avoids.addHost(dest.getHost().getId());
 -
 -                        if (checkIfHostFitsPlannerUsage(hostId, DeploymentPlanner.PlannerResourceUsage.Shared)) {
 -                            // found destination
 -                            return dest;
 -                        } else {
 -                            // find another host - seems some concurrent
 -                            // deployment picked it up for dedicated access
 -                            continue;
 -                        }
 -                    } else {
 -                        return null;
 -                    }
 -                }
 -            }
 -        }
 -
 -        return dest;
 -    }
 -
 +                        if (dest != null) {
 +                            return dest;
 +                        }
 +                        // reset the avoid input to the planners
 +                        resetAvoidSet(avoids, plannerAvoidOutput);
 +
 +                    } else {
 +                        return null;
 +                    }
 +                } else {
 +                    dest = planner.plan(vmProfile, plan, avoids);
 +                    if (dest != null) {
 +                        long hostId = dest.getHost().getId();
 +                        avoids.addHost(dest.getHost().getId());
 +
 +                        if (checkIfHostFitsPlannerUsage(hostId, DeploymentPlanner.PlannerResourceUsage.Shared)) {
 +                            // found destination
 +                            return dest;
 +                        } else {
 +                            // find another host - seems some concurrent
 +                            // deployment picked it up for dedicated access
 +                            continue;
 +                        }
 +                    } else {
 +                        return null;
 +                    }
 +                }
 +            }
 +        }
 +
 +        return dest;
 +    }
 +
+     @Override
+     public DeploymentPlanner getDeploymentPlannerByName(String plannerName) {
+         if (plannerName != null) {
+             for (DeploymentPlanner plannerInList : _planners) {
+                 if (plannerName != null) {
+                 }
+                 if (plannerName.equalsIgnoreCase(plannerInList.getName())) {
+                     return plannerInList;
+                 }
+             }
+         }
+ 
+         return null;
+     }
+ 
      private void checkForNonDedicatedResources(VirtualMachineProfile vmProfile, DataCenter dc, ExcludeList avoids) {
 -        boolean isExplicit = false;
 -        VirtualMachine vm = vmProfile.getVirtualMachine();
 -
 -        // check if zone is dedicated. if yes check if vm owner has acess to it.
 -        DedicatedResourceVO dedicatedZone = _dedicatedDao.findByZoneId(dc.getId());
 -        if (dedicatedZone != null && !_accountMgr.isRootAdmin(vmProfile.getOwner().getType())) {
 -            long accountDomainId = vmProfile.getOwner().getDomainId();
 -            long accountId = vmProfile.getOwner().getAccountId();
 -
 -            // If a zone is dedicated to an account then all hosts in this zone
 -            // will be explicitly dedicated to
 -            // that account. So there won't be any shared hosts in the zone, the
 -            // only way to deploy vms from that
 -            // account will be to use explicit dedication affinity group.
 -            if (dedicatedZone.getAccountId() != null) {
 -                if (dedicatedZone.getAccountId().equals(accountId)) {
 -                    return;
 -                } else {
 +        boolean isExplicit = false;
 +        VirtualMachine vm = vmProfile.getVirtualMachine();
 +
 +        // check if zone is dedicated. if yes check if vm owner has acess to it.
 +        DedicatedResourceVO dedicatedZone = _dedicatedDao.findByZoneId(dc.getId());
 +        if (dedicatedZone != null && !_accountMgr.isRootAdmin(vmProfile.getOwner().getId())) {
 +            long accountDomainId = vmProfile.getOwner().getDomainId();
 +            long accountId = vmProfile.getOwner().getAccountId();
 +
 +            // If a zone is dedicated to an account then all hosts in this zone
 +            // will be explicitly dedicated to
 +            // that account. So there won't be any shared hosts in the zone, the
 +            // only way to deploy vms from that
 +            // account will be to use explicit dedication affinity group.
 +            if (dedicatedZone.getAccountId() != null) {
 +                if (dedicatedZone.getAccountId().equals(accountId)) {
 +                    return;
 +                } else {
                      throw new CloudRuntimeException("Failed to deploy VM, Zone " + dc.getName() + " not available for the user account " + vmProfile.getOwner());
 -                }
 -            }
 -
 -            // if zone is dedicated to a domain. Check owner's access to the
 -            // domain level dedication group
 +                }
 +            }
 +
 +            // if zone is dedicated to a domain. Check owner's access to the
 +            // domain level dedication group
              if (!_affinityGroupService.isAffinityGroupAvailableInDomain(dedicatedZone.getAffinityGroupId(), accountDomainId)) {
                  throw new CloudRuntimeException("Failed to deploy VM, Zone " + dc.getName() + " not available for the user domain " + vmProfile.getOwner());
 -            }
 -
 -        }
 -
 -        // check affinity group of type Explicit dedication exists. If No put
 +            }
 +
 +        }
 +
 +        // check affinity group of type Explicit dedication exists. If No put
          // dedicated pod/cluster/host in avoid list
          List<AffinityGroupVMMapVO> vmGroupMappings = _affinityGroupVMMapDao.findByVmIdType(vm.getId(), "ExplicitDedication");
  
@@@ -1302,111 -1310,114 +1310,114 @@@
              avoid.getPoolsToAvoid().addAll(poolsToAvoidOutput);
          }
  
 -        if (suitableVolumeStoragePools.isEmpty()) {
 -            s_logger.debug("No suitable pools found");
 -        }
 -
 -        return new Pair<Map<Volume, List<StoragePool>>, List<Volume>>(suitableVolumeStoragePools, readyAndReusedVolumes);
 -    }
 -
 -    private boolean isEnabledForAllocation(long zoneId, Long podId, Long clusterId) {
 -        // Check if the zone exists in the system
 -        DataCenterVO zone = _dcDao.findById(zoneId);
 -        if (zone != null && Grouping.AllocationState.Disabled == zone.getAllocationState()) {
 -            s_logger.info("Zone is currently disabled, cannot allocate to this zone: " + zoneId);
 -            return false;
 -        }
 -
 -        Pod pod = _podDao.findById(podId);
 -        if (pod != null && Grouping.AllocationState.Disabled == pod.getAllocationState()) {
 -            s_logger.info("Pod is currently disabled, cannot allocate to this pod: " + podId);
 -            return false;
 -        }
 -
 -        Cluster cluster = _clusterDao.findById(clusterId);
 -        if (cluster != null && Grouping.AllocationState.Disabled == cluster.getAllocationState()) {
 -            s_logger.info("Cluster is currently disabled, cannot allocate to this cluster: " + clusterId);
 -            return false;
 -        }
 -
 -        return true;
 -    }
 -
 -    private boolean isRootAdmin(ReservationContext reservationContext) {
 -        if (reservationContext != null) {
 -            if (reservationContext.getAccount() != null) {
 -                return _accountMgr.isRootAdmin(reservationContext.getAccount().getType());
 -            } else {
 -                return false;
 -            }
 -        }
 -        return false;
 -    }
 -
 -    @DB
 -    @Override
 +        if (suitableVolumeStoragePools.isEmpty()) {
 +            s_logger.debug("No suitable pools found");
 +        }
 +
 +        return new Pair<Map<Volume, List<StoragePool>>, List<Volume>>(suitableVolumeStoragePools, readyAndReusedVolumes);
 +    }
 +
 +    private boolean isEnabledForAllocation(long zoneId, Long podId, Long clusterId) {
 +        // Check if the zone exists in the system
 +        DataCenterVO zone = _dcDao.findById(zoneId);
 +        if (zone != null && Grouping.AllocationState.Disabled == zone.getAllocationState()) {
 +            s_logger.info("Zone is currently disabled, cannot allocate to this zone: " + zoneId);
 +            return false;
 +        }
 +
 +        Pod pod = _podDao.findById(podId);
 +        if (pod != null && Grouping.AllocationState.Disabled == pod.getAllocationState()) {
 +            s_logger.info("Pod is currently disabled, cannot allocate to this pod: " + podId);
 +            return false;
 +        }
 +
 +        Cluster cluster = _clusterDao.findById(clusterId);
 +        if (cluster != null && Grouping.AllocationState.Disabled == cluster.getAllocationState()) {
 +            s_logger.info("Cluster is currently disabled, cannot allocate to this cluster: " + clusterId);
 +            return false;
 +        }
 +
 +        return true;
 +    }
 +
 +    private boolean isRootAdmin(ReservationContext reservationContext) {
 +        if (reservationContext != null) {
 +            if (reservationContext.getAccount() != null) {
 +                return _accountMgr.isRootAdmin(reservationContext.getAccount().getId());
 +            } else {
 +                return false;
 +            }
 +        }
 +        return false;
 +    }
 +
 +    @DB
 +    @Override
-     public String finalizeReservation(final DeployDestination plannedDestination, final VirtualMachineProfile vmProfile, DeploymentPlan plan, ExcludeList avoids)
+     public String finalizeReservation(final DeployDestination plannedDestination, final VirtualMachineProfile vmProfile, DeploymentPlan plan, ExcludeList avoids, final DeploymentPlanner planner)
 -        throws InsufficientServerCapacityException, AffinityConflictException {
 -
 -        final VirtualMachine vm = vmProfile.getVirtualMachine();
 -        final long vmGroupCount = _affinityGroupVMMapDao.countAffinityGroupsForVm(vm.getId());
 -
 -        return Transaction.execute(new TransactionCallback<String>() {
 -            @Override
 -            public String doInTransaction(TransactionStatus status) {
 -                boolean saveReservation = true;
 -
 -                if (vmGroupCount > 0) {
 -                    List<Long> groupIds = _affinityGroupVMMapDao.listAffinityGroupIdsByVmId(vm.getId());
 -                    SearchCriteria<AffinityGroupVO> criteria = _affinityGroupDao.createSearchCriteria();
 -                    criteria.addAnd("id", SearchCriteria.Op.IN, groupIds.toArray(new Object[groupIds.size()]));
 -                    List<AffinityGroupVO> groups = _affinityGroupDao.lockRows(criteria, null, true);
 -
 -                    for (AffinityGroupProcessor processor : _affinityProcessors) {
 -                        if (!processor.check(vmProfile, plannedDestination)) {
 -                            saveReservation = false;
 -                            break;
 -                        }
 -                    }
 -                }
 -
 -                if (saveReservation) {
 +            throws InsufficientServerCapacityException, AffinityConflictException {
 +
 +        final VirtualMachine vm = vmProfile.getVirtualMachine();
 +        final long vmGroupCount = _affinityGroupVMMapDao.countAffinityGroupsForVm(vm.getId());
 +
 +        return Transaction.execute(new TransactionCallback<String>() {
 +            @Override
 +            public String doInTransaction(TransactionStatus status) {
 +        boolean saveReservation = true;
 +
 +            if (vmGroupCount > 0) {
 +                List<Long> groupIds = _affinityGroupVMMapDao.listAffinityGroupIdsByVmId(vm.getId());
 +                SearchCriteria<AffinityGroupVO> criteria = _affinityGroupDao.createSearchCriteria();
 +                criteria.addAnd("id", SearchCriteria.Op.IN, groupIds.toArray(new Object[groupIds.size()]));
 +                List<AffinityGroupVO> groups = _affinityGroupDao.lockRows(criteria, null, true);
 +
 +                for (AffinityGroupProcessor processor : _affinityProcessors) {
 +                    if (!processor.check(vmProfile, plannedDestination)) {
 +                        saveReservation = false;
 +                        break;
 +                    }
 +                }
 +            }
 +
 +            if (saveReservation) {
                      VMReservationVO vmReservation =
                          new VMReservationVO(vm.getId(), plannedDestination.getDataCenter().getId(), plannedDestination.getPod().getId(), plannedDestination.getCluster()
                              .getId(), plannedDestination.getHost().getId());
+                     if (planner != null) {
+                         vmReservation.setDeploymentPlanner(planner.getName());
+                     }
 -                    Map<Long, Long> volumeReservationMap = new HashMap<Long, Long>();
 -
 -                    if (vm.getHypervisorType() != HypervisorType.BareMetal) {
 -                        for (Volume vo : plannedDestination.getStorageForDisks().keySet()) {
 -                            volumeReservationMap.put(vo.getId(), plannedDestination.getStorageForDisks().get(vo).getId());
 -                        }
 -                        vmReservation.setVolumeReservation(volumeReservationMap);
 -                    }
 -                    _reservationDao.persist(vmReservation);
 -                    return vmReservation.getUuid();
 -                }
 -
 -                return null;
 -            }
 -        });
 -    }
 -
 -    @Override
 +                Map<Long, Long> volumeReservationMap = new HashMap<Long, Long>();
 +
 +                if (vm.getHypervisorType() != HypervisorType.BareMetal) {
 +                    for (Volume vo : plannedDestination.getStorageForDisks().keySet()) {
 +                        volumeReservationMap.put(vo.getId(), plannedDestination.getStorageForDisks().get(vo).getId());
 +                    }
 +                    vmReservation.setVolumeReservation(volumeReservationMap);
 +                }
 +                _reservationDao.persist(vmReservation);
 +                return vmReservation.getUuid();
 +            }
 +
 +        return null;
 +    }
 +        });
 +    }
 +
 +    @Override
      public boolean preStateTransitionEvent(State oldState, Event event, State newState, VirtualMachine vo, boolean status, Object opaque) {
 -        return true;
 -    }
 -
 -    @Override
 +        return true;
 +    }
 +
 +    @Override
      public boolean postStateTransitionEvent(State oldState, Event event, State newState, VirtualMachine vo, boolean status, Object opaque) {
 -        if (!status) {
 -            return false;
 -        }
 -        if ((oldState == State.Starting) && (newState != State.Starting)) {
 -            // cleanup all VM reservation entries
 -            SearchCriteria<VMReservationVO> sc = _reservationDao.createSearchCriteria();
 -            sc.addAnd("vmId", SearchCriteria.Op.EQ, vo.getId());
 -            _reservationDao.expunge(sc);
 -        }
 -        return true;
 -    }
 -}
 +        if (!status) {
 +            return false;
 +        }
 +        if ((oldState == State.Starting) && (newState != State.Starting)) {
 +            // cleanup all VM reservation entries
 +            SearchCriteria<VMReservationVO> sc = _reservationDao.createSearchCriteria();
 +            sc.addAnd("vmId", SearchCriteria.Op.EQ, vo.getId());
 +            _reservationDao.expunge(sc);
 +        }
 +        return true;
 +    }
 +}

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/84a528fa/server/src/com/cloud/deploy/FirstFitPlanner.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/84a528fa/server/src/com/cloud/network/IpAddressManagerImpl.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/84a528fa/server/src/com/cloud/network/as/AutoScaleManagerImpl.java
----------------------------------------------------------------------
diff --cc server/src/com/cloud/network/as/AutoScaleManagerImpl.java
index 755fc54,61b7f4b..99189fe
--- a/server/src/com/cloud/network/as/AutoScaleManagerImpl.java
+++ b/server/src/com/cloud/network/as/AutoScaleManagerImpl.java
@@@ -1375,18 -1366,18 +1375,18 @@@ public class AutoScaleManagerImpl<Type
          return sdf.format(current);
      }
  
 -    private boolean startNewVM(final long vmId) {
 +    private boolean startNewVM(long vmId) {
          try {
              CallContext.current().setEventDetails("Vm Id: " + vmId);
-             _userVmManager.startVirtualMachine(vmId, null, null);
-         } catch (ResourceUnavailableException ex) {
+             _userVmManager.startVirtualMachine(vmId, null, null, null);
+         } catch (final ResourceUnavailableException ex) {
              s_logger.warn("Exception: ", ex);
              throw new ServerApiException(ApiErrorCode.RESOURCE_UNAVAILABLE_ERROR, ex.getMessage());
 -        } catch (final ConcurrentOperationException ex) {
 +        } catch (ConcurrentOperationException ex) {
              s_logger.warn("Exception: ", ex);
              throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, ex.getMessage());
 -        } catch (final InsufficientCapacityException ex) {
 -            final StringBuilder message = new StringBuilder(ex.getMessage());
 +        } catch (InsufficientCapacityException ex) {
 +            StringBuilder message = new StringBuilder(ex.getMessage());
              if (ex instanceof InsufficientServerCapacityException) {
                  if (((InsufficientServerCapacityException)ex).isAffinityApplied()) {
                      message.append(", Please check the affinity groups provided, there may not be sufficient capacity to follow them");

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/84a528fa/server/src/com/cloud/server/ManagementServerImpl.java
----------------------------------------------------------------------
diff --cc server/src/com/cloud/server/ManagementServerImpl.java
index 09823d7,2b63ae9..073cf47
--- a/server/src/com/cloud/server/ManagementServerImpl.java
+++ b/server/src/com/cloud/server/ManagementServerImpl.java
@@@ -40,11 -40,7 +40,10 @@@ import javax.crypto.spec.SecretKeySpec
  import javax.inject.Inject;
  import javax.naming.ConfigurationException;
  
 +import org.apache.commons.codec.binary.Base64;
 +import org.apache.log4j.Logger;
 +
  import org.apache.cloudstack.acl.ControlledEntity;
- import org.apache.cloudstack.acl.SecurityChecker.AccessType;
  import org.apache.cloudstack.affinity.AffinityGroupProcessor;
  import org.apache.cloudstack.affinity.dao.AffinityGroupVMMapDao;
  import org.apache.cloudstack.api.ApiConstants;
@@@ -735,10 -723,7 +726,9 @@@ public class ManagementServerImpl exten
      @Inject
      private UserVmManager _userVmMgr;
      @Inject
 +    private AccountService _accountService;
 +    @Inject
      private ServiceOfferingDao _offeringDao;
- 
      @Inject
      private DeploymentPlanningManager _dpMgr;
  
@@@ -1708,210 -1692,108 +1697,6 @@@
          return new Pair<List<? extends Configuration>, Integer>(result.first(), result.second());
      }
  
--    /* TODO: this method should go away. Keep here just in case that our latest refactoring using template_store_ref missed anything
--     * in handling Swift or S3.
--    private Set<Pair<Long, Long>> listTemplates(Long templateId, String name, String keyword, TemplateFilter templateFilter, boolean isIso,
--            Boolean bootable, Long pageSize, Long startIndex, Long zoneId, HypervisorType hyperType, boolean showDomr, boolean onlyReady,
--            List<Account> permittedAccounts, Account caller, ListProjectResourcesCriteria listProjectResourcesCriteria, Map<String, String> tags, String zoneType) {
--
--        VMTemplateVO template = null;
--        if (templateId != null) {
--            template = _templateDao.findById(templateId);
--            if (template == null) {
--                throw new InvalidParameterValueException("Please specify a valid template ID.");
--            }// If ISO requested then it should be ISO.
--            if (isIso && template.getFormat() != ImageFormat.ISO) {
--                s_logger.error("Template Id " + templateId + " is not an ISO");
--                InvalidParameterValueException ex = new InvalidParameterValueException("Specified Template Id is not an ISO");
--                ex.addProxyObject(template.getUuid(), "templateId");
--                throw ex;
--            }// If ISO not requested then it shouldn't be an ISO.
--            if (!isIso && template.getFormat() == ImageFormat.ISO) {
--                s_logger.error("Incorrect format of the template id " + templateId);
--                InvalidParameterValueException ex = new InvalidParameterValueException("Incorrect format " + template.getFormat()
--                        + " of the specified template id");
--                ex.addProxyObject(template.getUuid(), "templateId");
--                throw ex;
--            }
--        }
--
--        DomainVO domain = null;
--        if (!permittedAccounts.isEmpty()) {
--            domain = _domainDao.findById(permittedAccounts.get(0).getDomainId());
--        } else {
--            domain = _domainDao.findById(DomainVO.ROOT_DOMAIN);
--        }
--
--        List<HypervisorType> hypers = null;
--        if (!isIso) {
--            hypers = _resourceMgr.listAvailHypervisorInZone(null, null);
--        }
--        Set<Pair<Long, Long>> templateZonePairSet = new HashSet<Pair<Long, Long>>();
--        if (_swiftMgr.isSwiftEnabled()) {
--            if (template == null) {
--                templateZonePairSet = _templateDao.searchSwiftTemplates(name, keyword, templateFilter, isIso, hypers, bootable, domain, pageSize,
--                        startIndex, zoneId, hyperType, onlyReady, showDomr, permittedAccounts, caller, tags);
--                Set<Pair<Long, Long>> templateZonePairSet2 = new HashSet<Pair<Long, Long>>();
--                templateZonePairSet2 = _templateDao.searchTemplates(name, keyword, templateFilter, isIso, hypers, bootable, domain, pageSize,
--                        startIndex, zoneId, hyperType, onlyReady, showDomr, permittedAccounts, caller, listProjectResourcesCriteria, tags, zoneType);
--
--                for (Pair<Long, Long> tmpltPair : templateZonePairSet2) {
--                    if (!templateZonePairSet.contains(new Pair<Long, Long>(tmpltPair.first(), -1L))) {
--                        templateZonePairSet.add(tmpltPair);
--                    }
--                }
--
--            } else {
--                // if template is not public, perform permission check here
--                if (!template.isPublicTemplate() && caller.getType() != Account.ACCOUNT_TYPE_ADMIN) {
--                    Account owner = _accountMgr.getAccount(template.getAccountId());
--                    _accountMgr.checkAccess(caller, null, true, owner);
--                }
--                templateZonePairSet.add(new Pair<Long, Long>(template.getId(), zoneId));
--            }
--        } else if (_s3Mgr.isS3Enabled()) {
--            if (template == null) {
--                templateZonePairSet = _templateDao.searchSwiftTemplates(name, keyword, templateFilter, isIso,
--                        hypers, bootable, domain, pageSize, startIndex, zoneId, hyperType, onlyReady, showDomr,
--                        permittedAccounts, caller, tags);
--                Set<Pair<Long, Long>> templateZonePairSet2 = new HashSet<Pair<Long, Long>>();
--                templateZonePairSet2 = _templateDao.searchTemplates(name, keyword, templateFilter, isIso, hypers,
--                        bootable, domain, pageSize, startIndex, zoneId, hyperType, onlyReady, showDomr,
--                        permittedAccounts, caller, listProjectResourcesCriteria, tags, zoneType);
--
--                for (Pair<Long, Long> tmpltPair : templateZonePairSet2) {
--                    if (!templateZonePairSet.contains(new Pair<Long, Long>(tmpltPair.first(), -1L))) {
--                        templateZonePairSet.add(tmpltPair);
--                    }
--                }
--            } else {
--                // if template is not public, perform permission check here
--                if (!template.isPublicTemplate() && caller.getType() != Account.ACCOUNT_TYPE_ADMIN) {
--                    Account owner = _accountMgr.getAccount(template.getAccountId());
--                    _accountMgr.checkAccess(caller, null, true, owner);
--                }
--                templateZonePairSet.add(new Pair<Long, Long>(template.getId(), zoneId));
--            }
--        } else {
--            if (template == null) {
--                templateZonePairSet = _templateDao.searchTemplates(name, keyword, templateFilter, isIso, hypers, bootable, domain, pageSize,
--                        startIndex, zoneId, hyperType, onlyReady, showDomr, permittedAccounts, caller, listProjectResourcesCriteria, tags, zoneType);
--            } else {
--                // if template is not public, perform permission check here
--                if (!template.isPublicTemplate() && caller.getType() != Account.ACCOUNT_TYPE_ADMIN) {
--                    Account owner = _accountMgr.getAccount(template.getAccountId());
--                    _accountMgr.checkAccess(caller, null, true, owner);
--                }
--                templateZonePairSet.add(new Pair<Long, Long>(template.getId(), zoneId));
--            }
--        }
--
--        return templateZonePairSet;
--    }
--     */
--
-     private VMTemplateVO updateTemplateOrIso(BaseUpdateTemplateOrIsoCmd cmd) {
-         Long id = cmd.getId();
-         String name = cmd.getTemplateName();
-         String displayText = cmd.getDisplayText();
-         String format = cmd.getFormat();
-         Long guestOSId = cmd.getOsTypeId();
-         Boolean passwordEnabled = cmd.isPasswordEnabled();
-         Boolean bootable = cmd.isBootable();
-         Integer sortKey = cmd.getSortKey();
-         Boolean isDynamicallyScalable = cmd.isDynamicallyScalable();
-         Boolean isRoutingTemplate = cmd.isRoutingType();
-         Account account = CallContext.current().getCallingAccount();
- 
-         // verify that template exists
-         VMTemplateVO template = _templateDao.findById(id);
-         if (template == null || template.getRemoved() != null) {
-             InvalidParameterValueException ex = new InvalidParameterValueException("unable to find template/iso with specified id");
-             ex.addProxyObject(id.toString(), "templateId");
-             throw ex;
-         }
- 
-         // Don't allow to modify system template
-         if (id.equals(Long.valueOf(1))) {
-             InvalidParameterValueException ex = new InvalidParameterValueException("Unable to update template/iso of specified id");
-             ex.addProxyObject(template.getUuid(), "templateId");
-             throw ex;
-         }
- 
-         // do a permission check
-         _accountMgr.checkAccess(account, AccessType.OperateEntry, true, template);
- 
-         if(cmd.isRoutingType() != null){
-             if (!_accountService.isRootAdmin(account.getId())) {
-                 throw new PermissionDeniedException("Parameter isrouting can only be specified by a Root Admin, permission denied");
-             }
-         }
-         boolean updateNeeded = !(name == null && displayText == null && format == null && guestOSId == null && passwordEnabled == null && bootable == null && sortKey == null
-                 && isDynamicallyScalable == null && isRoutingTemplate == null);
-         if (!updateNeeded) {
-             return template;
-         }
- 
-         template = _templateDao.createForUpdate(id);
- 
-         if (name != null) {
-             template.setName(name);
-         }
- 
-         if (displayText != null) {
-             template.setDisplayText(displayText);
-         }
- 
-         if (sortKey != null) {
-             template.setSortKey(sortKey);
-         }
- 
-         ImageFormat imageFormat = null;
-         if (format != null) {
-             try {
-                 imageFormat = ImageFormat.valueOf(format.toUpperCase());
-             } catch (IllegalArgumentException e) {
-                 throw new InvalidParameterValueException("Image format: " + format + " is incorrect. Supported formats are " + EnumUtils.listValues(ImageFormat.values()));
-             }
- 
-             template.setFormat(imageFormat);
-         }
- 
-         if (guestOSId != null) {
-             GuestOSVO guestOS = _guestOSDao.findById(guestOSId);
- 
-             if (guestOS == null) {
-                 throw new InvalidParameterValueException("Please specify a valid guest OS ID.");
-             } else {
-                 template.setGuestOSId(guestOSId);
-             }
-         }
- 
-         if (passwordEnabled != null) {
-             template.setEnablePassword(passwordEnabled);
-         }
- 
-         if (bootable != null) {
-             template.setBootable(bootable);
-         }
- 
-         if (isDynamicallyScalable != null) {
-             template.setDynamicallyScalable(isDynamicallyScalable);
-         }
- 
-         if (isRoutingTemplate != null) {
-             if (isRoutingTemplate) {
-                 template.setTemplateType(TemplateType.ROUTING);
-             } else {
-                 template.setTemplateType(TemplateType.USER);
-             }
-         }
- 
-         _templateDao.update(id, template);
- 
-         return _templateDao.findById(id);
-     }
- 
      @Override
      public Pair<List<? extends IpAddress>, Integer> searchForIPAddresses(ListPublicIpAddressesCmd cmd) {
          Object keyword = cmd.getKeyword();

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/84a528fa/server/src/com/cloud/vm/UserVmManager.java
----------------------------------------------------------------------
diff --cc server/src/com/cloud/vm/UserVmManager.java
index 0e48414,11b110f..afe1002
--- a/server/src/com/cloud/vm/UserVmManager.java
+++ b/server/src/com/cloud/vm/UserVmManager.java
@@@ -88,7 -92,23 +88,7 @@@ public interface UserVmManager extends 
  
      boolean expunge(UserVmVO vm, long callerUserId, Account caller);
  
-     Pair<UserVmVO, Map<VirtualMachineProfile.Param, Object>> startVirtualMachine(long vmId, Long hostId, Map<VirtualMachineProfile.Param, Object> additionalParams)
 -    /**
 -     * Obtains a list of virtual machines by the specified search criteria.
 -     * Can search by: "userId", "name", "state", "dataCenterId", "podId", "hostId"
 -     * @param c
 -     * @param caller TODO
 -     * @param domainId TODO
 -     * @param isRecursive TODO
 -     * @param permittedAccounts TODO
 -     * @param listAll TODO
 -     * @param listProjectResourcesCriteria TODO
 -     * @param tags TODO
 -     * @return List of UserVMs + count
 -     */
 -    Pair<List<UserVmJoinVO>, Integer> searchForUserVMs(Criteria c, Account caller, Long domainId, boolean isRecursive, List<Long> permittedAccounts, boolean listAll,
 -        ListProjectResourcesCriteria listProjectResourcesCriteria, Map<String, String> tags);
 -
+     Pair<UserVmVO, Map<VirtualMachineProfile.Param, Object>> startVirtualMachine(long vmId, Long hostId, Map<VirtualMachineProfile.Param, Object> additionalParams, String deploymentPlannerToUse)
          throws ConcurrentOperationException, ResourceUnavailableException, InsufficientCapacityException;
  
      boolean upgradeVirtualMachine(Long id, Long serviceOfferingId, Map<String, String> customParameters) throws ResourceUnavailableException,

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/84a528fa/server/src/com/cloud/vm/UserVmManagerImpl.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/84a528fa/setup/db/db/schema-430to440.sql
----------------------------------------------------------------------


[5/6] git commit: updated refs/heads/rbac to 84a528f

Posted by mc...@apache.org.
Fixed some problems reported by FindBugs


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

Branch: refs/heads/rbac
Commit: 90c485e5d659afdd8a6a09ec3b81e54ab7398296
Parents: 67ab321
Author: Alena Prokharchyk <al...@citrix.com>
Authored: Thu Mar 13 13:29:25 2014 -0700
Committer: Alena Prokharchyk <al...@citrix.com>
Committed: Thu Mar 13 13:45:30 2014 -0700

----------------------------------------------------------------------
 .../org/apache/cloudstack/api/BaseListCmd.java  |   2 +-
 .../security/dao/VmRulesetLogDaoImpl.java       |   2 +-
 .../src/com/cloud/projects/ProjectVO.java       |   5 +
 .../jobs/impl/JobSerializerHelper.java          |   5 +-
 .../mom/rabbitmq/RabbitMQEventBus.java          |  18 ++-
 .../src/com/cloud/dc/DedicatedResourceVO.java   |   7 ++
 .../com/cloud/network/IpAddressManagerImpl.java |   4 +-
 .../com/cloud/server/ManagementServerImpl.java  | 123 +------------------
 8 files changed, 29 insertions(+), 137 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/90c485e5/api/src/org/apache/cloudstack/api/BaseListCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/BaseListCmd.java b/api/src/org/apache/cloudstack/api/BaseListCmd.java
index f280003..407ad22 100644
--- a/api/src/org/apache/cloudstack/api/BaseListCmd.java
+++ b/api/src/org/apache/cloudstack/api/BaseListCmd.java
@@ -24,7 +24,7 @@ import com.cloud.utils.exception.CSExceptionErrorCode;
 public abstract class BaseListCmd extends BaseCmd {
 
     private static Long s_maxPageSize = null;
-    public static Long s_pageSizeUnlimited = -1L;
+    public static final Long s_pageSizeUnlimited = -1L;
 
     // ///////////////////////////////////////////////////
     // ///////// BaseList API parameters /////////////////

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/90c485e5/engine/schema/src/com/cloud/network/security/dao/VmRulesetLogDaoImpl.java
----------------------------------------------------------------------
diff --git a/engine/schema/src/com/cloud/network/security/dao/VmRulesetLogDaoImpl.java b/engine/schema/src/com/cloud/network/security/dao/VmRulesetLogDaoImpl.java
index c941055..90f8349 100644
--- a/engine/schema/src/com/cloud/network/security/dao/VmRulesetLogDaoImpl.java
+++ b/engine/schema/src/com/cloud/network/security/dao/VmRulesetLogDaoImpl.java
@@ -39,7 +39,7 @@ import com.cloud.utils.db.TransactionLegacy;
 @Component
 @Local(value = {VmRulesetLogDao.class})
 public class VmRulesetLogDaoImpl extends GenericDaoBase<VmRulesetLogVO, Long> implements VmRulesetLogDao {
-    protected static Logger s_logger = Logger.getLogger(VmRulesetLogDaoImpl.class);
+    protected static final Logger s_logger = Logger.getLogger(VmRulesetLogDaoImpl.class);
     private SearchBuilder<VmRulesetLogVO> VmIdSearch;
     private String InsertOrUpdateSQl = "INSERT INTO op_vm_ruleset_log (instance_id, created, logsequence) "
         + " VALUES(?, now(), 1) ON DUPLICATE KEY UPDATE logsequence=logsequence+1";

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/90c485e5/engine/schema/src/com/cloud/projects/ProjectVO.java
----------------------------------------------------------------------
diff --git a/engine/schema/src/com/cloud/projects/ProjectVO.java b/engine/schema/src/com/cloud/projects/ProjectVO.java
index d49e484..77eed40 100644
--- a/engine/schema/src/com/cloud/projects/ProjectVO.java
+++ b/engine/schema/src/com/cloud/projects/ProjectVO.java
@@ -31,6 +31,7 @@ import javax.persistence.Table;
 import org.apache.cloudstack.api.Identity;
 import org.apache.cloudstack.api.InternalIdentity;
 
+import com.cloud.utils.NumbersUtil;
 import com.cloud.utils.db.GenericDao;
 
 @Entity
@@ -161,4 +162,8 @@ public class ProjectVO implements Project, Identity, InternalIdentity {
         this.uuid = uuid;
     }
 
+    @Override
+    public int hashCode() {
+        return NumbersUtil.hash(id);
+    }
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/90c485e5/framework/jobs/src/org/apache/cloudstack/framework/jobs/impl/JobSerializerHelper.java
----------------------------------------------------------------------
diff --git a/framework/jobs/src/org/apache/cloudstack/framework/jobs/impl/JobSerializerHelper.java b/framework/jobs/src/org/apache/cloudstack/framework/jobs/impl/JobSerializerHelper.java
index 67c4b86..735d7cf 100644
--- a/framework/jobs/src/org/apache/cloudstack/framework/jobs/impl/JobSerializerHelper.java
+++ b/framework/jobs/src/org/apache/cloudstack/framework/jobs/impl/JobSerializerHelper.java
@@ -29,6 +29,7 @@ import java.lang.reflect.Type;
 import org.apache.commons.codec.binary.Base64;
 import org.apache.log4j.Logger;
 
+import com.cloud.utils.exception.CloudRuntimeException;
 import com.google.gson.Gson;
 import com.google.gson.GsonBuilder;
 import com.google.gson.JsonDeserializationContext;
@@ -40,14 +41,12 @@ import com.google.gson.JsonPrimitive;
 import com.google.gson.JsonSerializationContext;
 import com.google.gson.JsonSerializer;
 
-import com.cloud.utils.exception.CloudRuntimeException;
-
 /**
  * Note: toPairList and appendPairList only support simple POJO objects currently
  */
 public class JobSerializerHelper {
     private static final Logger s_logger = Logger.getLogger(JobSerializerHelper.class);
-    public static String token = "/";
+    public static final String token = "/";
 
     private static Gson s_gson;
     static {

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/90c485e5/plugins/event-bus/rabbitmq/src/org/apache/cloudstack/mom/rabbitmq/RabbitMQEventBus.java
----------------------------------------------------------------------
diff --git a/plugins/event-bus/rabbitmq/src/org/apache/cloudstack/mom/rabbitmq/RabbitMQEventBus.java b/plugins/event-bus/rabbitmq/src/org/apache/cloudstack/mom/rabbitmq/RabbitMQEventBus.java
index 8ad7033..8403271 100644
--- a/plugins/event-bus/rabbitmq/src/org/apache/cloudstack/mom/rabbitmq/RabbitMQEventBus.java
+++ b/plugins/event-bus/rabbitmq/src/org/apache/cloudstack/mom/rabbitmq/RabbitMQEventBus.java
@@ -30,8 +30,16 @@ import java.util.concurrent.Executors;
 import javax.ejb.Local;
 import javax.naming.ConfigurationException;
 
+import org.apache.cloudstack.framework.events.Event;
+import org.apache.cloudstack.framework.events.EventBus;
+import org.apache.cloudstack.framework.events.EventBusException;
+import org.apache.cloudstack.framework.events.EventSubscriber;
+import org.apache.cloudstack.framework.events.EventTopic;
+import org.apache.cloudstack.managed.context.ManagedContextRunnable;
 import org.apache.log4j.Logger;
 
+import com.cloud.utils.Ternary;
+import com.cloud.utils.component.ManagerBase;
 import com.rabbitmq.client.AMQP;
 import com.rabbitmq.client.AlreadyClosedException;
 import com.rabbitmq.client.Channel;
@@ -43,16 +51,6 @@ import com.rabbitmq.client.MessageProperties;
 import com.rabbitmq.client.ShutdownListener;
 import com.rabbitmq.client.ShutdownSignalException;
 
-import org.apache.cloudstack.framework.events.Event;
-import org.apache.cloudstack.framework.events.EventBus;
-import org.apache.cloudstack.framework.events.EventBusException;
-import org.apache.cloudstack.framework.events.EventSubscriber;
-import org.apache.cloudstack.framework.events.EventTopic;
-import org.apache.cloudstack.managed.context.ManagedContextRunnable;
-
-import com.cloud.utils.Ternary;
-import com.cloud.utils.component.ManagerBase;
-
 @Local(value = EventBus.class)
 public class RabbitMQEventBus extends ManagerBase implements EventBus {
 

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/90c485e5/server/src/com/cloud/dc/DedicatedResourceVO.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/dc/DedicatedResourceVO.java b/server/src/com/cloud/dc/DedicatedResourceVO.java
index 2e0fde7..79c563c 100644
--- a/server/src/com/cloud/dc/DedicatedResourceVO.java
+++ b/server/src/com/cloud/dc/DedicatedResourceVO.java
@@ -25,6 +25,8 @@ import javax.persistence.GenerationType;
 import javax.persistence.Id;
 import javax.persistence.Table;
 
+import com.cloud.utils.NumbersUtil;
+
 @Entity
 @Table(name = "dedicated_resources")
 public class DedicatedResourceVO implements DedicatedResources {
@@ -163,4 +165,9 @@ public class DedicatedResourceVO implements DedicatedResources {
             return false;
         }
     }
+
+    @Override
+    public int hashCode() {
+        return NumbersUtil.hash(id);
+    }
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/90c485e5/server/src/com/cloud/network/IpAddressManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/IpAddressManagerImpl.java b/server/src/com/cloud/network/IpAddressManagerImpl.java
index 15d1458..20eae3a 100644
--- a/server/src/com/cloud/network/IpAddressManagerImpl.java
+++ b/server/src/com/cloud/network/IpAddressManagerImpl.java
@@ -1346,7 +1346,7 @@ public class IpAddressManagerImpl extends ManagerBase implements IpAddressManage
         PublicIp publicIp = PublicIp.createFromAddrAndVlan(ipToAssoc, _vlanDao.findById(ipToAssoc.getVlanId()));
         ipList.add(publicIp);
         Map<PublicIpAddress, Set<Service>> ipToServices = _networkModel.getIpToServices(ipList, false, true);
-        if (ipToServices != null & !ipToServices.isEmpty()) {
+        if (!ipToServices.isEmpty()) {
             Set<Service> services = ipToServices.get(publicIp);
             if (services != null && !services.isEmpty()) {
                 throw new InvalidParameterValueException("IP " + ipToAssoc + " has services and rules associated in the network " + networkId);
@@ -1387,7 +1387,7 @@ public class IpAddressManagerImpl extends ManagerBase implements IpAddressManage
         PublicIp publicIp = PublicIp.createFromAddrAndVlan(ip, _vlanDao.findById(ip.getVlanId()));
         ipList.add(publicIp);
         Map<PublicIpAddress, Set<Service>> ipToServices = _networkModel.getIpToServices(ipList, false, true);
-        if (ipToServices != null & !ipToServices.isEmpty()) {
+        if (!ipToServices.isEmpty()) {
             Set<Service> ipServices = ipToServices.get(publicIp);
             if (ipServices != null && !ipServices.isEmpty()) {
                 return false;

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/90c485e5/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 cb73519..2b63ae9 100755
--- a/server/src/com/cloud/server/ManagementServerImpl.java
+++ b/server/src/com/cloud/server/ManagementServerImpl.java
@@ -40,15 +40,10 @@ import javax.crypto.spec.SecretKeySpec;
 import javax.inject.Inject;
 import javax.naming.ConfigurationException;
 
-import org.apache.commons.codec.binary.Base64;
-import org.apache.log4j.Logger;
-
 import org.apache.cloudstack.acl.ControlledEntity;
-import org.apache.cloudstack.acl.SecurityChecker.AccessType;
 import org.apache.cloudstack.affinity.AffinityGroupProcessor;
 import org.apache.cloudstack.affinity.dao.AffinityGroupVMMapDao;
 import org.apache.cloudstack.api.ApiConstants;
-import org.apache.cloudstack.api.BaseUpdateTemplateOrIsoCmd;
 import org.apache.cloudstack.api.command.admin.account.CreateAccountCmd;
 import org.apache.cloudstack.api.command.admin.account.DeleteAccountCmd;
 import org.apache.cloudstack.api.command.admin.account.DisableAccountCmd;
@@ -465,6 +460,8 @@ import org.apache.cloudstack.storage.datastore.db.ImageStoreVO;
 import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao;
 import org.apache.cloudstack.storage.datastore.db.StoragePoolVO;
 import org.apache.cloudstack.utils.identity.ManagementServerNode;
+import org.apache.commons.codec.binary.Base64;
+import org.apache.log4j.Logger;
 
 import com.cloud.agent.AgentManager;
 import com.cloud.agent.api.GetVncPortAnswer;
@@ -556,18 +553,14 @@ import com.cloud.storage.GuestOSHypervisor;
 import com.cloud.storage.GuestOSHypervisorVO;
 import com.cloud.storage.GuestOSVO;
 import com.cloud.storage.GuestOsCategory;
-import com.cloud.storage.Storage.ImageFormat;
-import com.cloud.storage.Storage.TemplateType;
 import com.cloud.storage.StorageManager;
 import com.cloud.storage.StoragePool;
-import com.cloud.storage.VMTemplateVO;
 import com.cloud.storage.Volume;
 import com.cloud.storage.VolumeVO;
 import com.cloud.storage.dao.DiskOfferingDao;
 import com.cloud.storage.dao.GuestOSCategoryDao;
 import com.cloud.storage.dao.GuestOSDao;
 import com.cloud.storage.dao.GuestOSHypervisorDao;
-import com.cloud.storage.dao.VMTemplateDao;
 import com.cloud.storage.dao.VolumeDao;
 import com.cloud.storage.secondary.SecondaryStorageVmManager;
 import com.cloud.tags.ResourceTagVO;
@@ -575,7 +568,6 @@ import com.cloud.tags.dao.ResourceTagDao;
 import com.cloud.template.TemplateManager;
 import com.cloud.user.Account;
 import com.cloud.user.AccountManager;
-import com.cloud.user.AccountService;
 import com.cloud.user.SSHKeyPair;
 import com.cloud.user.SSHKeyPairVO;
 import com.cloud.user.User;
@@ -583,7 +575,6 @@ import com.cloud.user.UserVO;
 import com.cloud.user.dao.AccountDao;
 import com.cloud.user.dao.SSHKeyPairDao;
 import com.cloud.user.dao.UserDao;
-import com.cloud.utils.EnumUtils;
 import com.cloud.utils.NumbersUtil;
 import com.cloud.utils.Pair;
 import com.cloud.utils.PasswordGenerator;
@@ -668,8 +659,6 @@ public class ManagementServerImpl extends ManagerBase implements ManagementServe
     @Inject
     private DiskOfferingDao _diskOfferingDao;
     @Inject
-    private VMTemplateDao _templateDao;
-    @Inject
     private DomainDao _domainDao;
     @Inject
     private AccountDao _accountDao;
@@ -734,15 +723,11 @@ public class ManagementServerImpl extends ManagerBase implements ManagementServe
     @Inject
     private UserVmManager _userVmMgr;
     @Inject
-    private AccountService _accountService;
-    @Inject
     private ServiceOfferingDao _offeringDao;
-
     @Inject
     private DeploymentPlanningManager _dpMgr;
 
     private LockMasterListener _lockMasterListener;
-
     private final ScheduledExecutorService _eventExecutor = Executors.newScheduledThreadPool(1, new NamedThreadFactory("EventChecker"));
     private final ScheduledExecutorService _alertExecutor = Executors.newScheduledThreadPool(1, new NamedThreadFactory("AlertChecker"));
     @Inject
@@ -1809,108 +1794,6 @@ public class ManagementServerImpl extends ManagerBase implements ManagementServe
     }
      */
 
-    private VMTemplateVO updateTemplateOrIso(BaseUpdateTemplateOrIsoCmd cmd) {
-        Long id = cmd.getId();
-        String name = cmd.getTemplateName();
-        String displayText = cmd.getDisplayText();
-        String format = cmd.getFormat();
-        Long guestOSId = cmd.getOsTypeId();
-        Boolean passwordEnabled = cmd.isPasswordEnabled();
-        Boolean bootable = cmd.isBootable();
-        Integer sortKey = cmd.getSortKey();
-        Boolean isDynamicallyScalable = cmd.isDynamicallyScalable();
-        Boolean isRoutingTemplate = cmd.isRoutingType();
-        Account account = CallContext.current().getCallingAccount();
-
-        // verify that template exists
-        VMTemplateVO template = _templateDao.findById(id);
-        if (template == null || template.getRemoved() != null) {
-            InvalidParameterValueException ex = new InvalidParameterValueException("unable to find template/iso with specified id");
-            ex.addProxyObject(id.toString(), "templateId");
-            throw ex;
-        }
-
-        // Don't allow to modify system template
-        if (id.equals(Long.valueOf(1))) {
-            InvalidParameterValueException ex = new InvalidParameterValueException("Unable to update template/iso of specified id");
-            ex.addProxyObject(template.getUuid(), "templateId");
-            throw ex;
-        }
-
-        // do a permission check
-        _accountMgr.checkAccess(account, AccessType.ModifyEntry, true, template);
-
-        if (cmd.isRoutingType() != null) {
-            if (!_accountService.isRootAdmin(account.getType())) {
-                throw new PermissionDeniedException("Parameter isrouting can only be specified by a Root Admin, permission denied");
-            }
-        }
-        boolean updateNeeded = !(name == null && displayText == null && format == null && guestOSId == null && passwordEnabled == null && bootable == null && sortKey == null
-                && isDynamicallyScalable == null && isRoutingTemplate == null);
-        if (!updateNeeded) {
-            return template;
-        }
-
-        template = _templateDao.createForUpdate(id);
-
-        if (name != null) {
-            template.setName(name);
-        }
-
-        if (displayText != null) {
-            template.setDisplayText(displayText);
-        }
-
-        if (sortKey != null) {
-            template.setSortKey(sortKey);
-        }
-
-        ImageFormat imageFormat = null;
-        if (format != null) {
-            try {
-                imageFormat = ImageFormat.valueOf(format.toUpperCase());
-            } catch (IllegalArgumentException e) {
-                throw new InvalidParameterValueException("Image format: " + format + " is incorrect. Supported formats are " + EnumUtils.listValues(ImageFormat.values()));
-            }
-
-            template.setFormat(imageFormat);
-        }
-
-        if (guestOSId != null) {
-            GuestOSVO guestOS = _guestOSDao.findById(guestOSId);
-
-            if (guestOS == null) {
-                throw new InvalidParameterValueException("Please specify a valid guest OS ID.");
-            } else {
-                template.setGuestOSId(guestOSId);
-            }
-        }
-
-        if (passwordEnabled != null) {
-            template.setEnablePassword(passwordEnabled);
-        }
-
-        if (bootable != null) {
-            template.setBootable(bootable);
-        }
-
-        if (isDynamicallyScalable != null) {
-            template.setDynamicallyScalable(isDynamicallyScalable);
-        }
-
-        if (isRoutingTemplate != null) {
-            if (isRoutingTemplate) {
-                template.setTemplateType(TemplateType.ROUTING);
-            } else {
-                template.setTemplateType(TemplateType.USER);
-            }
-        }
-
-        _templateDao.update(id, template);
-
-        return _templateDao.findById(id);
-    }
-
     @Override
     public Pair<List<? extends IpAddress>, Integer> searchForIPAddresses(ListPublicIpAddressesCmd cmd) {
         Object keyword = cmd.getKeyword();
@@ -3462,7 +3345,7 @@ public class ManagementServerImpl extends ManagerBase implements ManagementServe
             }
         }
 
-        long diskOffMaxSize = _volumeMgr.CustomDiskOfferingMaxSize.value();
+        long diskOffMaxSize = VolumeOrchestrationService.CustomDiskOfferingMaxSize.value();
         KVMSnapshotEnabled = Boolean.parseBoolean(_configDao.getValue("KVM.snapshot.enabled"));
 
         boolean userPublicTemplateEnabled = TemplateManager.AllowPublicUserTemplates.valueIn(caller.getId());