You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by ch...@apache.org on 2013/07/17 19:35:00 UTC

[01/50] [abbrv] git commit: updated refs/heads/ldapplugin to 7bc705e

Updated Branches:
  refs/heads/ldapplugin c50d9fece -> 7bc705e9e


CLOUDSTACK-2155: Anti-Affinity -When Vm deployment is done in parallel , anti-affinity rule is not honored.

Changes:
- Locking the group and save reservation mechanism done by DPM
- Added admin operation to cleanup VM reservations
- DPM will also cleanup VM reservations on startup


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

Branch: refs/heads/ldapplugin
Commit: fa9ca72f360959d84ea61b341c83bf0a1cd0ae6e
Parents: 6610889
Author: Prachi Damle <pr...@cloud.com>
Authored: Tue Jul 16 00:52:52 2013 -0700
Committer: Prachi Damle <pr...@cloud.com>
Committed: Tue Jul 16 10:53:06 2013 -0700

----------------------------------------------------------------------
 api/src/com/cloud/event/EventTypes.java         |  4 +-
 api/src/com/cloud/server/ManagementService.java | 14 +--
 .../admin/resource/CleanVMReservationsCmd.java  | 80 ++++++++++++++++
 client/tomcatconf/commands.properties.in        |  1 +
 .../cloud/entity/api/VMEntityManagerImpl.java   | 33 ++-----
 .../affinity/dao/AffinityGroupVMMapDao.java     |  3 +-
 .../affinity/dao/AffinityGroupVMMapDaoImpl.java | 17 +++-
 .../affinity/HostAntiAffinityProcessor.java     | 36 +++----
 .../cloud/deploy/DeploymentPlanningManager.java |  4 +-
 .../deploy/DeploymentPlanningManagerImpl.java   | 98 ++++++++++++++++++--
 .../com/cloud/server/ManagementServerImpl.java  | 14 +++
 .../vm/DeploymentPlanningManagerImplTest.java   |  6 ++
 12 files changed, 239 insertions(+), 71 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/fa9ca72f/api/src/com/cloud/event/EventTypes.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/event/EventTypes.java b/api/src/com/cloud/event/EventTypes.java
index ed4ba12..ca764e9 100755
--- a/api/src/com/cloud/event/EventTypes.java
+++ b/api/src/com/cloud/event/EventTypes.java
@@ -424,7 +424,7 @@ public class EventTypes {
     public static final String EVENT_AFFINITY_GROUP_ASSIGN = "AG.ASSIGN";
     public static final String EVENT_AFFINITY_GROUP_REMOVE = "AG.REMOVE";
     public static final String EVENT_VM_AFFINITY_GROUP_UPDATE = "VM.AG.UPDATE";
-    
+
     public static final String EVENT_INTERNAL_LB_VM_START = "INTERNALLBVM.START";
     public static final String EVENT_INTERNAL_LB_VM_STOP = "INTERNALLBVM.STOP";
 
@@ -442,6 +442,8 @@ public class EventTypes {
     public static final String EVENT_DEDICATE_RESOURCE = "DEDICATE.RESOURCE";
     public static final String EVENT_DEDICATE_RESOURCE_RELEASE = "DEDICATE.RESOURCE.RELEASE";
 
+    public static final String EVENT_CLEANUP_VM_RESERVATION = "VM.RESERVATION.CLEANUP";
+
     static {
 
         // TODO: need a way to force author adding event types to declare the entity details as well, with out braking

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/fa9ca72f/api/src/com/cloud/server/ManagementService.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/server/ManagementService.java b/api/src/com/cloud/server/ManagementService.java
index e943a8c..7591ab1 100755
--- a/api/src/com/cloud/server/ManagementService.java
+++ b/api/src/com/cloud/server/ManagementService.java
@@ -16,12 +16,9 @@
 // under the License.
 package com.cloud.server;
 
-import java.net.URISyntaxException;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
-import java.util.Set;
-
 import com.cloud.exception.*;
 import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.command.admin.cluster.ListClustersCmd;
@@ -43,18 +40,12 @@ import org.apache.cloudstack.api.command.user.event.ArchiveEventsCmd;
 import org.apache.cloudstack.api.command.user.event.DeleteEventsCmd;
 import org.apache.cloudstack.api.command.user.guest.ListGuestOsCategoriesCmd;
 import org.apache.cloudstack.api.command.user.guest.ListGuestOsCmd;
-import org.apache.cloudstack.api.command.user.iso.ListIsosCmd;
-import org.apache.cloudstack.api.command.user.iso.UpdateIsoCmd;
 import org.apache.cloudstack.api.command.user.ssh.CreateSSHKeyPairCmd;
 import org.apache.cloudstack.api.command.user.ssh.DeleteSSHKeyPairCmd;
 import org.apache.cloudstack.api.command.user.ssh.ListSSHKeyPairsCmd;
 import org.apache.cloudstack.api.command.user.ssh.RegisterSSHKeyPairCmd;
-import org.apache.cloudstack.api.command.user.template.ListTemplatesCmd;
-import org.apache.cloudstack.api.command.user.template.UpdateTemplateCmd;
 import org.apache.cloudstack.api.command.user.vm.GetVMPasswordCmd;
 import org.apache.cloudstack.api.command.user.vmgroup.UpdateVMGroupCmd;
-import org.apache.cloudstack.api.command.user.volume.ExtractVolumeCmd;
-
 import com.cloud.alert.Alert;
 import com.cloud.capacity.Capacity;
 import com.cloud.configuration.Configuration;
@@ -69,7 +60,6 @@ import com.cloud.org.Cluster;
 import com.cloud.storage.GuestOS;
 import com.cloud.storage.GuestOsCategory;
 import com.cloud.storage.StoragePool;
-import com.cloud.template.VirtualMachineTemplate;
 import com.cloud.user.SSHKeyPair;
 import com.cloud.utils.Pair;
 import com.cloud.utils.Ternary;
@@ -371,6 +361,8 @@ public interface ManagementService {
     List<String> listDeploymentPlanners();
 
     VirtualMachine upgradeSystemVM(ScaleSystemVMCmd cmd) throws ResourceUnavailableException, ManagementServerException, VirtualMachineMigrationException, ConcurrentOperationException;
-    
+
     boolean getExecuteInSequence();
+
+    void cleanupVMReservations();
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/fa9ca72f/api/src/org/apache/cloudstack/api/command/admin/resource/CleanVMReservationsCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/admin/resource/CleanVMReservationsCmd.java b/api/src/org/apache/cloudstack/api/command/admin/resource/CleanVMReservationsCmd.java
new file mode 100644
index 0000000..b0be7b2
--- /dev/null
+++ b/api/src/org/apache/cloudstack/api/command/admin/resource/CleanVMReservationsCmd.java
@@ -0,0 +1,80 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+package org.apache.cloudstack.api.command.admin.resource;
+
+import org.apache.cloudstack.api.APICommand;
+import org.apache.cloudstack.api.ApiErrorCode;
+import org.apache.cloudstack.api.BaseAsyncCmd;
+import org.apache.cloudstack.api.ServerApiException;
+import org.apache.cloudstack.api.response.SuccessResponse;
+import org.apache.log4j.Logger;
+
+import com.cloud.event.EventTypes;
+import com.cloud.user.Account;
+import com.cloud.user.UserContext;
+
+@APICommand(name = "cleanVMReservations", description = "Cleanups VM reservations in the database.", responseObject = SuccessResponse.class)
+public class CleanVMReservationsCmd extends BaseAsyncCmd {
+    public static final Logger s_logger = Logger.getLogger(CleanVMReservationsCmd.class.getName());
+
+    private static final String s_name = "cleanvmreservationresponse";
+
+    /////////////////////////////////////////////////////
+    /////////////////// Accessors ///////////////////////
+    /////////////////////////////////////////////////////
+
+
+    /////////////////////////////////////////////////////
+    /////////////// API Implementation///////////////////
+    /////////////////////////////////////////////////////
+
+    @Override
+    public String getCommandName() {
+        return s_name;
+    }
+
+    @Override
+    public long getEntityOwnerId() {
+        Account account = UserContext.current().getCaller();
+        if (account != null) {
+            return account.getId();
+        }
+
+        return Account.ACCOUNT_ID_SYSTEM;
+    }
+
+    @Override
+    public String getEventType() {
+        return EventTypes.EVENT_CLEANUP_VM_RESERVATION;
+    }
+
+    @Override
+    public String getEventDescription() {
+        return "cleaning vm reservations in database";
+    }
+
+    @Override
+    public void execute(){
+        try {
+            _mgr.cleanupVMReservations();
+            SuccessResponse response = new SuccessResponse(getCommandName());
+            this.setResponseObject(response);
+        } catch (Exception ex) {
+            throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to clean vm reservations");
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/fa9ca72f/client/tomcatconf/commands.properties.in
----------------------------------------------------------------------
diff --git a/client/tomcatconf/commands.properties.in b/client/tomcatconf/commands.properties.in
index ad70471..d8d176f 100644
--- a/client/tomcatconf/commands.properties.in
+++ b/client/tomcatconf/commands.properties.in
@@ -214,6 +214,7 @@ ldapConfig=1
 ldapRemove=1
 listCapabilities=15
 listDeploymentPlanners=1
+cleanVMReservations=1
 
 #### pod commands
 createPod=1

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/fa9ca72f/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 961d085..0822b92 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
@@ -16,7 +16,6 @@
 // under the License.
 package org.apache.cloudstack.engine.cloud.entity.api;
 
-import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.UUID;
@@ -30,6 +29,7 @@ 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;
@@ -46,12 +46,10 @@ import com.cloud.exception.InsufficientCapacityException;
 import com.cloud.exception.InsufficientServerCapacityException;
 import com.cloud.exception.OperationTimedoutException;
 import com.cloud.exception.ResourceUnavailableException;
-import com.cloud.hypervisor.Hypervisor.HypervisorType;
 import com.cloud.network.dao.NetworkDao;
 import com.cloud.org.Cluster;
 import com.cloud.service.dao.ServiceOfferingDao;
 import com.cloud.storage.StoragePool;
-import com.cloud.storage.Volume;
 import com.cloud.storage.VolumeVO;
 import com.cloud.storage.dao.DiskOfferingDao;
 import com.cloud.storage.dao.VMTemplateDao;
@@ -69,6 +67,8 @@ import com.cloud.vm.dao.VMInstanceDao;
 @Component
 public class VMEntityManagerImpl implements VMEntityManager {
 
+    private static final Logger s_logger = Logger.getLogger(VMEntityManagerImpl.class);
+
     @Inject
     protected VMInstanceDao _vmDao;
     @Inject
@@ -190,28 +190,15 @@ public class VMEntityManagerImpl implements VMEntityManager {
             }
 
             if (dest != null) {
-                if (_dpMgr.finalizeReservation(dest, vmProfile, plan, exclude)) {
-                    // save destination with VMEntityVO
-                    VMReservationVO vmReservation = new VMReservationVO(vm.getId(), dest.getDataCenter().getId(), dest
-                            .getPod().getId(), dest.getCluster().getId(), dest.getHost().getId());
-                    Map<Long, Long> volumeReservationMap = new HashMap<Long, Long>();
-
-                    if (vm.getHypervisorType() != HypervisorType.BareMetal) {
-                        for (Volume vo : dest.getStorageForDisks().keySet()) {
-                            volumeReservationMap.put(vo.getId(), dest.getStorageForDisks().get(vo).getId());
-                        }
-                        vmReservation.setVolumeReservation(volumeReservationMap);
-                    }
-
-                    vmEntityVO.setVmReservation(vmReservation);
-                    _vmEntityDao.persist(vmEntityVO);
-
-                    return vmReservation.getUuid();
+                String reservationId = _dpMgr.finalizeReservation(dest, vmProfile, plan, exclude);
+                if(reservationId != null){
+                    return reservationId;
                 } else {
-                    try {
-                        Thread.sleep(10000);
-                    } catch (final InterruptedException e) {
+                    if (s_logger.isDebugEnabled()) {
+                        s_logger.debug("Cannot finalize the VM reservation for this destination found, retrying");
                     }
+
+                    exclude.addHost(dest.getHost().getId());
                     continue;
                 }
             } else if (planChangedByReadyVolume) {

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/fa9ca72f/engine/schema/src/org/apache/cloudstack/affinity/dao/AffinityGroupVMMapDao.java
----------------------------------------------------------------------
diff --git a/engine/schema/src/org/apache/cloudstack/affinity/dao/AffinityGroupVMMapDao.java b/engine/schema/src/org/apache/cloudstack/affinity/dao/AffinityGroupVMMapDao.java
index f2951bc..5e62b17 100644
--- a/engine/schema/src/org/apache/cloudstack/affinity/dao/AffinityGroupVMMapDao.java
+++ b/engine/schema/src/org/apache/cloudstack/affinity/dao/AffinityGroupVMMapDao.java
@@ -23,7 +23,6 @@ import org.apache.cloudstack.affinity.AffinityGroupVMMapVO;
 import com.cloud.utils.Pair;
 import com.cloud.utils.db.Filter;
 import com.cloud.utils.db.GenericDao;
-import com.cloud.vm.VirtualMachine.State;
 
 public interface AffinityGroupVMMapDao extends GenericDao<AffinityGroupVMMapVO, Long> {
 
@@ -44,4 +43,6 @@ public interface AffinityGroupVMMapDao extends GenericDao<AffinityGroupVMMapVO,
     List<AffinityGroupVMMapVO> findByVmIdType(long instanceId, String type);
 
     void updateMap(Long vmId, List<Long> affinityGroupIds);
+
+    List<Long> listAffinityGroupIdsByVmId(long instanceId);
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/fa9ca72f/engine/schema/src/org/apache/cloudstack/affinity/dao/AffinityGroupVMMapDaoImpl.java
----------------------------------------------------------------------
diff --git a/engine/schema/src/org/apache/cloudstack/affinity/dao/AffinityGroupVMMapDaoImpl.java b/engine/schema/src/org/apache/cloudstack/affinity/dao/AffinityGroupVMMapDaoImpl.java
index e03e73c..89dfa5a 100644
--- a/engine/schema/src/org/apache/cloudstack/affinity/dao/AffinityGroupVMMapDaoImpl.java
+++ b/engine/schema/src/org/apache/cloudstack/affinity/dao/AffinityGroupVMMapDaoImpl.java
@@ -24,9 +24,6 @@ import javax.inject.Inject;
 
 import org.apache.cloudstack.affinity.AffinityGroupVMMapVO;
 import org.apache.cloudstack.affinity.AffinityGroupVO;
-import org.springframework.stereotype.Component;
-
-import com.cloud.host.HostTagVO;
 import com.cloud.utils.Pair;
 import com.cloud.utils.db.Filter;
 import com.cloud.utils.db.GenericDaoBase;
@@ -46,6 +43,7 @@ public class AffinityGroupVMMapDaoImpl extends GenericDaoBase<AffinityGroupVMMap
     private GenericSearchBuilder<AffinityGroupVMMapVO, Long> ListVmIdByAffinityGroup;
     private SearchBuilder<AffinityGroupVMMapVO> ListByAffinityGroup;
     private SearchBuilder<AffinityGroupVMMapVO> ListByVmIdType;
+    private GenericSearchBuilder<AffinityGroupVMMapVO, Long> ListAffinityGroupIdByVm;
 
     @Inject
     protected AffinityGroupDao _affinityGroupDao;
@@ -87,6 +85,12 @@ public class AffinityGroupVMMapDaoImpl extends GenericDaoBase<AffinityGroupVMMap
         CountSGForVm.select(null, Func.COUNT, null);
         CountSGForVm.and("vmId", CountSGForVm.entity().getInstanceId(), SearchCriteria.Op.EQ);
         CountSGForVm.done();
+
+        ListAffinityGroupIdByVm = createSearchBuilder(Long.class);
+        ListAffinityGroupIdByVm.and("instanceId", ListAffinityGroupIdByVm.entity().getInstanceId(),
+                SearchCriteria.Op.EQ);
+        ListAffinityGroupIdByVm.selectField(ListAffinityGroupIdByVm.entity().getAffinityGroupId());
+        ListAffinityGroupIdByVm.done();
     }
 
     @Override
@@ -148,6 +152,13 @@ public class AffinityGroupVMMapDaoImpl extends GenericDaoBase<AffinityGroupVMMap
     }
 
     @Override
+    public List<Long> listAffinityGroupIdsByVmId(long instanceId) {
+        SearchCriteria<Long> sc = ListAffinityGroupIdByVm.create();
+        sc.setParameters("instanceId", instanceId);
+        return customSearchIncludingRemoved(sc, null);
+    }
+
+    @Override
     public void updateMap(Long vmId, List<Long> affinityGroupIds) {
         Transaction txn = Transaction.currentTxn();
         txn.start();

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/fa9ca72f/plugins/affinity-group-processors/host-anti-affinity/src/org/apache/cloudstack/affinity/HostAntiAffinityProcessor.java
----------------------------------------------------------------------
diff --git a/plugins/affinity-group-processors/host-anti-affinity/src/org/apache/cloudstack/affinity/HostAntiAffinityProcessor.java b/plugins/affinity-group-processors/host-anti-affinity/src/org/apache/cloudstack/affinity/HostAntiAffinityProcessor.java
index e3c27f0..1569c7e 100644
--- a/plugins/affinity-group-processors/host-anti-affinity/src/org/apache/cloudstack/affinity/HostAntiAffinityProcessor.java
+++ b/plugins/affinity-group-processors/host-anti-affinity/src/org/apache/cloudstack/affinity/HostAntiAffinityProcessor.java
@@ -117,7 +117,6 @@ public class HostAntiAffinityProcessor extends AffinityProcessorBase implements
         return true;
     }
 
-    @DB
     @Override
     public boolean check(VirtualMachineProfile<? extends VirtualMachine> vmProfile, DeployDestination plannedDestination)
             throws AffinityConflictException {
@@ -132,31 +131,24 @@ public class HostAntiAffinityProcessor extends AffinityProcessorBase implements
         List<AffinityGroupVMMapVO> vmGroupMappings = _affinityGroupVMMapDao.findByVmIdType(vm.getId(), getType());
 
         for (AffinityGroupVMMapVO vmGroupMapping : vmGroupMappings) {
-            final Transaction txn = Transaction.currentTxn();
-            try {
-                txn.start();
-                // lock the group
-                AffinityGroupVO group = _affinityGroupDao.lockRow(vmGroupMapping.getAffinityGroupId(), true);
-                // if more than 1 VM's are present in the group then check for
-                // conflict due to parallel deployment
-                List<Long> groupVMIds = _affinityGroupVMMapDao.listVmIdsByAffinityGroup(vmGroupMapping
-                        .getAffinityGroupId());
-                groupVMIds.remove(vm.getId());
-
-                for (Long groupVMId : groupVMIds) {
-                    VMReservationVO vmReservation = _reservationDao.findByVmId(groupVMId);
-                    if (vmReservation.getHostId() != null && vmReservation.getHostId().equals(plannedHostId)) {
-                        return false;
+            // if more than 1 VM's are present in the group then check for
+            // conflict due to parallel deployment
+            List<Long> groupVMIds = _affinityGroupVMMapDao
+                    .listVmIdsByAffinityGroup(vmGroupMapping.getAffinityGroupId());
+            groupVMIds.remove(vm.getId());
+
+            for (Long groupVMId : groupVMIds) {
+                VMReservationVO vmReservation = _reservationDao.findByVmId(groupVMId);
+                if (vmReservation != null && vmReservation.getHostId() != null
+                        && vmReservation.getHostId().equals(plannedHostId)) {
+                    if (s_logger.isDebugEnabled()) {
+                        s_logger.debug("Planned destination for VM " + vm.getId() + " conflicts with an existing VM "
+                                + vmReservation.getVmId() + " reserved on the same host " + plannedHostId);
                     }
+                    return false;
                 }
-
-                return true;
-
-            } finally {
-                txn.commit();
             }
         }
-
         return true;
     }
 

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/fa9ca72f/server/src/com/cloud/deploy/DeploymentPlanningManager.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/deploy/DeploymentPlanningManager.java b/server/src/com/cloud/deploy/DeploymentPlanningManager.java
index 8e8dc58..9458df2 100644
--- a/server/src/com/cloud/deploy/DeploymentPlanningManager.java
+++ b/server/src/com/cloud/deploy/DeploymentPlanningManager.java
@@ -43,7 +43,9 @@ public interface DeploymentPlanningManager extends Manager {
     DeployDestination planDeployment(VirtualMachineProfile<? extends VirtualMachine> vmProfile, DeploymentPlan plan,
             ExcludeList avoids) throws InsufficientServerCapacityException, AffinityConflictException;
 
-    boolean finalizeReservation(DeployDestination plannedDestination,
+    String finalizeReservation(DeployDestination plannedDestination,
             VirtualMachineProfile<? extends VirtualMachine> vmProfile, DeploymentPlan plan, ExcludeList avoids)
             throws InsufficientServerCapacityException, AffinityConflictException;
+
+    void cleanupVMReservations();
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/fa9ca72f/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 5d2d7f2..ebf2b0c 100644
--- a/server/src/com/cloud/deploy/DeploymentPlanningManagerImpl.java
+++ b/server/src/com/cloud/deploy/DeploymentPlanningManagerImpl.java
@@ -31,9 +31,12 @@ import javax.naming.ConfigurationException;
 
 import org.apache.cloudstack.affinity.AffinityGroupProcessor;
 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.DataStoreManager;
 import org.apache.cloudstack.engine.subsystem.api.storage.StoragePoolAllocator;
 import org.apache.cloudstack.framework.messagebus.MessageBus;
@@ -94,12 +97,17 @@ import com.cloud.utils.Pair;
 import com.cloud.utils.component.Manager;
 import com.cloud.utils.component.ManagerBase;
 import com.cloud.utils.db.DB;
+import com.cloud.utils.db.JoinBuilder;
+import com.cloud.utils.db.SearchBuilder;
+import com.cloud.utils.db.SearchCriteria;
 import com.cloud.utils.db.Transaction;
 import com.cloud.utils.exception.CloudRuntimeException;
+import com.cloud.utils.fsm.StateListener;
 import com.cloud.vm.DiskProfile;
 import com.cloud.vm.ReservationContext;
 import com.cloud.vm.VMInstanceVO;
 import com.cloud.vm.VirtualMachine;
+import com.cloud.vm.VirtualMachine.Event;
 import com.cloud.vm.VirtualMachineProfile;
 import com.cloud.vm.VirtualMachine.State;
 import com.cloud.vm.dao.UserVmDao;
@@ -116,7 +124,8 @@ import com.cloud.agent.manager.allocator.HostAllocator;
 
 
 @Local(value = { DeploymentPlanningManager.class })
-public class DeploymentPlanningManagerImpl extends ManagerBase implements DeploymentPlanningManager, Manager, Listener {
+public class DeploymentPlanningManagerImpl extends ManagerBase implements DeploymentPlanningManager, Manager, Listener,
+        StateListener<State, VirtualMachine.Event, VirtualMachine> {
 
     private static final Logger s_logger = Logger.getLogger(DeploymentPlanningManagerImpl.class);
     @Inject
@@ -138,6 +147,8 @@ public class DeploymentPlanningManagerImpl extends ManagerBase implements Deploy
     MessageBus _messageBus;
     private Timer _timer = null;
     private long _hostReservationReleasePeriod = 60L * 60L * 1000L; // one hour by default
+    @Inject
+    protected VMReservationDao _reservationDao;
 
     private static final long INITIAL_RESERVATION_RELEASE_CHECKER_DELAY = 30L * 1000L; // thirty seconds expressed in milliseconds
     protected long _nodeId = -1;
@@ -766,6 +777,7 @@ public class DeploymentPlanningManagerImpl extends ManagerBase implements Deploy
     @Override
     public boolean configure(final String name, final Map<String, Object> params) throws ConfigurationException {
         _agentMgr.registerForHostEvents(this, true, false, true);
+        VirtualMachine.State.getStateMachine().registerListener(this);
         _messageBus.subscribe("VM_ReservedCapacity_Free", new MessageSubscriber() {
             @Override
             public void onPublishMessage(String senderAddress, String subject, Object obj) {
@@ -798,6 +810,7 @@ public class DeploymentPlanningManagerImpl extends ManagerBase implements Deploy
     public boolean start() {
         _timer.schedule(new HostReservationReleaseChecker(), INITIAL_RESERVATION_RELEASE_CHECKER_DELAY,
                 _hostReservationReleasePeriod);
+        cleanupVMReservations();
         return true;
     }
 
@@ -807,6 +820,26 @@ public class DeploymentPlanningManagerImpl extends ManagerBase implements Deploy
         return true;
     }
 
+    @Override
+    public void cleanupVMReservations() {
+        List<VMReservationVO> reservations = _reservationDao.listAll();
+
+        for (VMReservationVO reserv : reservations) {
+            VMInstanceVO vm = _vmInstanceDao.findById(reserv.getVmId());
+            if (vm != null) {
+                if (vm.getState() == State.Starting || (vm.getState() == State.Stopped && vm.getLastHostId() == null)) {
+                    continue;
+                } else {
+                    // delete reservation
+                    _reservationDao.remove(reserv.getId());
+                }
+            } else {
+                // delete reservation
+                _reservationDao.remove(reserv.getId());
+            }
+        }
+    }
+
     // /refactoring planner methods
     private DeployDestination checkClustersforDestination(List<Long> clusterList,
             VirtualMachineProfile<? extends VirtualMachine> vmProfile, DeploymentPlan plan, ExcludeList avoid,
@@ -1182,25 +1215,72 @@ public class DeploymentPlanningManagerImpl extends ManagerBase implements Deploy
         return false;
     }
 
+    @DB
     @Override
-    public boolean finalizeReservation(DeployDestination plannedDestination,
+    public String finalizeReservation(DeployDestination plannedDestination,
             VirtualMachineProfile<? extends VirtualMachine> vmProfile, DeploymentPlan plan, ExcludeList avoids)
             throws InsufficientServerCapacityException, AffinityConflictException {
 
         VirtualMachine vm = vmProfile.getVirtualMachine();
         long vmGroupCount = _affinityGroupVMMapDao.countAffinityGroupsForVm(vm.getId());
-        DataCenter dc = _dcDao.findById(vm.getDataCenterId());
 
-        if (vmGroupCount > 0) {
-            // uses affinity groups. For every group check if processor flags
-            // that the destination is ok
-            for (AffinityGroupProcessor processor : _affinityProcessors) {
-                if (!processor.check(vmProfile, plannedDestination)) {
-                    return false;
+        boolean saveReservation = true;
+        final Transaction txn = Transaction.currentTxn();
+        try {
+            txn.start();
+            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());
+                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();
+            }
+        } finally {
+            txn.commit();
         }
+        return null;
+    }
 
+    @Override
+    public boolean preStateTransitionEvent(State oldState, Event event, State newState, VirtualMachine vo,
+            boolean status, Object opaque) {
+        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;
     }
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/fa9ca72f/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 29272dd..f7fc834 100755
--- a/server/src/com/cloud/server/ManagementServerImpl.java
+++ b/server/src/com/cloud/server/ManagementServerImpl.java
@@ -126,6 +126,7 @@ import org.apache.cloudstack.api.command.admin.pod.DeletePodCmd;
 import org.apache.cloudstack.api.command.admin.pod.ListPodsByCmd;
 import org.apache.cloudstack.api.command.admin.pod.UpdatePodCmd;
 import org.apache.cloudstack.api.command.admin.resource.ArchiveAlertsCmd;
+import org.apache.cloudstack.api.command.admin.resource.CleanVMReservationsCmd;
 import org.apache.cloudstack.api.command.admin.resource.DeleteAlertsCmd;
 import org.apache.cloudstack.api.command.admin.resource.ListAlertsCmd;
 import org.apache.cloudstack.api.command.admin.resource.ListCapacityCmd;
@@ -442,6 +443,7 @@ import com.cloud.dc.dao.VlanDao;
 import com.cloud.deploy.DataCenterDeployment;
 import com.cloud.deploy.DeploymentPlanner;
 import com.cloud.deploy.DeploymentPlanner.ExcludeList;
+import com.cloud.deploy.DeploymentPlanningManager;
 import com.cloud.domain.DomainVO;
 import com.cloud.domain.dao.DomainDao;
 import com.cloud.event.ActionEvent;
@@ -682,6 +684,9 @@ public class ManagementServerImpl extends ManagerBase implements ManagementServe
     @Inject
     AccountService _accountService;
 
+    @Inject
+    DeploymentPlanningManager _dpMgr;
+
     private final ScheduledExecutorService _eventExecutor = Executors.newScheduledThreadPool(1, new NamedThreadFactory("EventChecker"));
     private final ScheduledExecutorService _alertExecutor = Executors.newScheduledThreadPool(1, new NamedThreadFactory("AlertChecker"));
     @Inject private KeystoreManager _ksMgr;
@@ -2807,6 +2812,7 @@ public class ManagementServerImpl extends ManagerBase implements ManagementServe
         cmdList.add(ListNetworkACLListsCmd.class);
         cmdList.add(ReplaceNetworkACLListCmd.class);
         cmdList.add(UpdateNetworkACLItemCmd.class);
+        cmdList.add(CleanVMReservationsCmd.class);
         return cmdList;
     }
 
@@ -3787,4 +3793,12 @@ public class ManagementServerImpl extends ManagerBase implements ManagementServe
         return plannersAvailable;
     }
 
+    @Override
+    public void cleanupVMReservations() {
+        if (s_logger.isDebugEnabled()) {
+            s_logger.debug("Processing cleanupVMReservations");
+        }
+
+        _dpMgr.cleanupVMReservations();
+    }
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/fa9ca72f/server/test/com/cloud/vm/DeploymentPlanningManagerImplTest.java
----------------------------------------------------------------------
diff --git a/server/test/com/cloud/vm/DeploymentPlanningManagerImplTest.java b/server/test/com/cloud/vm/DeploymentPlanningManagerImplTest.java
index 442c2be..10e23d7 100644
--- a/server/test/com/cloud/vm/DeploymentPlanningManagerImplTest.java
+++ b/server/test/com/cloud/vm/DeploymentPlanningManagerImplTest.java
@@ -54,6 +54,7 @@ import com.cloud.deploy.dao.PlannerHostReservationDao;
 import org.apache.cloudstack.affinity.AffinityGroupProcessor;
 import org.apache.cloudstack.affinity.dao.AffinityGroupDao;
 import org.apache.cloudstack.affinity.dao.AffinityGroupVMMapDao;
+import org.apache.cloudstack.engine.cloud.entity.api.db.dao.VMReservationDao;
 import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreManager;
 import org.apache.cloudstack.framework.messagebus.MessageBus;
 import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao;
@@ -356,6 +357,11 @@ public class DeploymentPlanningManagerImplTest {
             return Mockito.mock(DataCenterDao.class);
         }
 
+        @Bean
+        public VMReservationDao reservationDao() {
+            return Mockito.mock(VMReservationDao.class);
+        }
+
         public static class Library implements TypeFilter {
 
             @Override


[43/50] [abbrv] git commit: updated refs/heads/ldapplugin to 7bc705e

Posted by ch...@apache.org.
CLOUDSTACK-2273: cleanup using user api client for domain admins

Signed-off-by: Prasanna Santhanam <ts...@apache.org>


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

Branch: refs/heads/ldapplugin
Commit: 9f9510be9189346ed72ff92705d284de91d53c6f
Parents: cfd892f
Author: ashutoshkelkar <as...@clogeny.com>
Authored: Wed Jul 17 15:26:34 2013 +0530
Committer: Prasanna Santhanam <ts...@apache.org>
Committed: Wed Jul 17 19:23:57 2013 +0530

----------------------------------------------------------------------
 test/integration/component/test_assign_vm.py | 29 +++++++++++++++++++----
 1 file changed, 24 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/9f9510be/test/integration/component/test_assign_vm.py
----------------------------------------------------------------------
diff --git a/test/integration/component/test_assign_vm.py b/test/integration/component/test_assign_vm.py
index 8bc98fe..55c174b 100644
--- a/test/integration/component/test_assign_vm.py
+++ b/test/integration/component/test_assign_vm.py
@@ -353,8 +353,11 @@ class TestVMOwnership(cloudstackTestCase):
         # 1. deploy VM in sub subdomain1
         # 2. stop VM in sub subdomain1
         # 3. assignVirtualMachine to subdomain2
+        userapiclient = self.testClient.getUserApiClient(account=self.sdomain_account_user1['account'].name,
+                                                         domain=self.sdomain_account_user1['domain'].name,
+                                                         type=2)
         self.create_vm(self.sdomain_account_user1['account'], self.sdomain_account_user1['domain'])
-        self.assertRaises(Exception, self.virtual_machine.assign_virtual_machine, self.apiclient, self.sdomain_account_user2['account'].name ,self.sdomain_account_user2['domain'].id)
+        self.assertRaises(Exception, self.virtual_machine.assign_virtual_machine, userapiclient, self.sdomain_account_user2['account'].name ,self.sdomain_account_user2['domain'].id)
 
     @attr(tags = ["advanced"])
     @log_test_exceptions
@@ -386,8 +389,11 @@ class TestVMOwnership(cloudstackTestCase):
         # Validate the following:
         # 1. deploy VM in sub subdomain1 with volumes.
         # 3. assignVirtualMachine to subdomain2
+        userapiclient = self.testClient.getUserApiClient(account=self.sdomain_account_user1['account'].name,
+                                                         domain=self.sdomain_account_user1['domain'].name,
+                                                         type=2)
         self.create_vm(self.sdomain_account_user1['account'], self.sdomain_account_user1['domain'],volume=self.sdomain_account_user1['volume'])
-        self.assertRaises(Exception, self.virtual_machine.assign_virtual_machine, self.apiclient, self.sdomain_account_user2['account'].name ,self.sdomain_account_user2['domain'].id)
+        self.assertRaises(Exception, self.virtual_machine.assign_virtual_machine, userapiclient, self.sdomain_account_user2['account'].name ,self.sdomain_account_user2['domain'].id)
          # Check all volumes attached to same VM
         list_volume_response = list_volumes(self.apiclient,
                                             virtualmachineid=self.virtual_machine.id,
@@ -398,6 +404,8 @@ class TestVMOwnership(cloudstackTestCase):
                          "Check list volumes response for valid list")
 
         self.assertNotEqual(list_volume_response[0].domainid, self.sdomain_account_user2['domain'].id, "Volume ownership not changed.")
+        self.virtual_machine.detach_volume(self.apiclient,
+                                           self.sdomain_account_user1['volume'])
 
     @attr(tags = ["advanced"])
     @log_test_exceptions
@@ -423,8 +431,11 @@ class TestVMOwnership(cloudstackTestCase):
         # Validate the following:
         # 1. deploy VM in sub subdomain1 with snapshot.
         # 3. assignVirtualMachine to subdomain2
+        userapiclient = self.testClient.getUserApiClient(account=self.sdomain_account_user1['account'].name,
+                                                         domain=self.sdomain_account_user1['domain'].name,
+                                                         type=2)
         self.create_vm(self.sdomain_account_user1['account'], self.sdomain_account_user1['domain'], project=self.sdomain_account_user1['project'])
-        self.assertRaises(Exception, self.virtual_machine.assign_virtual_machine, self.apiclient, self.sdomain_account_user2['account'].name ,self.sdomain_account_user2['domain'].id)
+        self.assertRaises(Exception, self.virtual_machine.assign_virtual_machine, userapiclient, self.sdomain_account_user2['account'].name ,self.sdomain_account_user2['domain'].id)
 
     @attr(tags = ["advanced"])
     @log_test_exceptions
@@ -439,8 +450,11 @@ class TestVMOwnership(cloudstackTestCase):
                               account=self.sdomain_account_user2['account'].name,
                               domainid=self.sdomain_account_user2['domain'].id,
                               max=0)
+        userapiclient = self.testClient.getUserApiClient(account=self.sdomain_account_user1['account'].name,
+                                                         domain=self.sdomain_account_user1['domain'].name,
+                                                         type=2)
         self.create_vm(self.sdomain_account_user1['account'], self.sdomain_account_user1['domain'], snapshot=True)
-        self.assertRaises(Exception, self.virtual_machine.assign_virtual_machine, self.apiclient, self.sdomain_account_user2['account'].name ,self.sdomain_account_user2['domain'].id)
+        self.assertRaises(Exception, self.virtual_machine.assign_virtual_machine, userapiclient, self.sdomain_account_user2['account'].name ,self.sdomain_account_user2['domain'].id)
 
     @attr(tags = ["advanced"])
     @log_test_exceptions
@@ -456,5 +470,10 @@ class TestVMOwnership(cloudstackTestCase):
                               account=self.sdomain_account_user2['account'].name,
                               domainid=self.sdomain_account_user2['domain'].id,
                               max=0)
+        userapiclient = self.testClient.getUserApiClient(account=self.sdomain_account_user1['account'].name,
+                                                         domain=self.sdomain_account_user1['domain'].name,
+                                                         type=2)
         self.create_vm(self.sdomain_account_user1['account'], self.sdomain_account_user1['domain'], snapshot=True, volume=self.sdomain_account_user1['volume'])
-        self.assertRaises(Exception, self.virtual_machine.assign_virtual_machine, self.apiclient, self.sdomain_account_user2['account'].name ,self.sdomain_account_user2['domain'].id)
+        self.assertRaises(Exception, self.virtual_machine.assign_virtual_machine, userapiclient, self.sdomain_account_user2['account'].name ,self.sdomain_account_user2['domain'].id)
+        self.virtual_machine.detach_volume(self.apiclient,
+                                            self.sdomain_account_user1['volume'])


[10/50] [abbrv] UserContext switched to CallContext. Added generic storage mechanism for other code to carry information throughout a call. Made the calling User and Account a must have. Added an interface to carry entities in error. Fixed up the cod

Posted by ch...@apache.org.
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/user/template/ExtractTemplateCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/template/ExtractTemplateCmd.java b/api/src/org/apache/cloudstack/api/command/user/template/ExtractTemplateCmd.java
index 595ba96..0f1b3c6 100644
--- a/api/src/org/apache/cloudstack/api/command/user/template/ExtractTemplateCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/template/ExtractTemplateCmd.java
@@ -26,6 +26,7 @@ import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.ExtractResponse;
 import org.apache.cloudstack.api.response.TemplateResponse;
 import org.apache.cloudstack.api.response.ZoneResponse;
+import org.apache.cloudstack.context.CallContext;
 
 import org.apache.log4j.Logger;
 
@@ -33,7 +34,6 @@ import com.cloud.event.EventTypes;
 import com.cloud.exception.InternalErrorException;
 import com.cloud.template.VirtualMachineTemplate;
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
 import com.cloud.utils.Pair;
 
 @APICommand(name = "extractTemplate", description="Extracts a template", responseObject=ExtractResponse.class)
@@ -125,7 +125,7 @@ public class ExtractTemplateCmd extends BaseAsyncCmd {
     @Override
     public void execute(){
         try {
-            UserContext.current().setEventDetails(getEventDescription());
+            CallContext.current().setEventDetails(getEventDescription());
             String uploadUrl = _templateService.extract(this);
             if (uploadUrl != null) {
                 ExtractResponse response = _responseGenerator.createExtractResponse(id, zoneId, getEntityOwnerId(), mode, uploadUrl);

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/user/template/ListTemplatesCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/template/ListTemplatesCmd.java b/api/src/org/apache/cloudstack/api/command/user/template/ListTemplatesCmd.java
index 08a35d4..4b34909 100644
--- a/api/src/org/apache/cloudstack/api/command/user/template/ListTemplatesCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/template/ListTemplatesCmd.java
@@ -29,11 +29,12 @@ import org.apache.cloudstack.api.response.ListResponse;
 import org.apache.cloudstack.api.response.TemplateResponse;
 import org.apache.cloudstack.api.response.VolumeResponse;
 import org.apache.cloudstack.api.response.ZoneResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.template.VirtualMachineTemplate.TemplateFilter;
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
 import com.cloud.utils.Pair;
 
 @APICommand(name = "listTemplates", description="List all public, private, and privileged templates.", responseObject=TemplateResponse.class)
@@ -95,7 +96,7 @@ public class ListTemplatesCmd extends BaseListTaggedResourcesCmd {
 
     public boolean listInReadyState() {
 
-        Account account = UserContext.current().getCaller();
+        Account account = CallContext.current().getCallingAccount();
         // It is account specific if account is admin type and domainId and accountName are not null
         boolean isAccountSpecific = (account == null || isAdmin(account.getType())) && (getAccountName() != null) && (getDomainId() != null);
         // Show only those that are downloaded.

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/user/template/RegisterTemplateCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/template/RegisterTemplateCmd.java b/api/src/org/apache/cloudstack/api/command/user/template/RegisterTemplateCmd.java
index b26d920..bba90bf 100644
--- a/api/src/org/apache/cloudstack/api/command/user/template/RegisterTemplateCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/template/RegisterTemplateCmd.java
@@ -34,11 +34,12 @@ import org.apache.cloudstack.api.response.ListResponse;
 import org.apache.cloudstack.api.response.ProjectResponse;
 import org.apache.cloudstack.api.response.TemplateResponse;
 import org.apache.cloudstack.api.response.ZoneResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.exception.ResourceAllocationException;
 import com.cloud.template.VirtualMachineTemplate;
-import com.cloud.user.UserContext;
 
 @APICommand(name = "registerTemplate", description="Registers an existing template into the CloudStack cloud. ", responseObject=TemplateResponse.class)
 public class RegisterTemplateCmd extends BaseCmd {
@@ -232,7 +233,7 @@ public class RegisterTemplateCmd extends BaseCmd {
     public long getEntityOwnerId() {
         Long accountId = finalyzeAccountId(accountName, domainId, projectId, true);
         if (accountId == null) {
-            return UserContext.current().getCaller().getId();
+            return CallContext.current().getCallingAccount().getId();
         }
 
         return accountId;

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/user/vm/AddIpToVmNicCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/vm/AddIpToVmNicCmd.java b/api/src/org/apache/cloudstack/api/command/user/vm/AddIpToVmNicCmd.java
index 41584d2..b5e2239 100644
--- a/api/src/org/apache/cloudstack/api/command/user/vm/AddIpToVmNicCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/vm/AddIpToVmNicCmd.java
@@ -17,6 +17,7 @@
 package org.apache.cloudstack.api.command.user.vm;
 
 import com.cloud.vm.NicSecondaryIp;
+
 import org.apache.log4j.Logger;
 
 import org.apache.cloudstack.api.APICommand;
@@ -28,6 +29,7 @@ import org.apache.cloudstack.api.Parameter;
 import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.NicResponse;
 import org.apache.cloudstack.api.response.NicSecondaryIpResponse;
+import org.apache.cloudstack.context.CallContext;
 
 import com.cloud.dc.DataCenter;
 import com.cloud.dc.DataCenter.NetworkType;
@@ -40,7 +42,6 @@ import com.cloud.exception.ResourceAllocationException;
 import com.cloud.exception.ResourceUnavailableException;
 import com.cloud.network.Network;
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
 import com.cloud.utils.net.NetUtils;
 import com.cloud.vm.Nic;
 
@@ -69,11 +70,11 @@ public class AddIpToVmNicCmd extends BaseAsyncCmd {
     }
 
     public String getAccountName() {
-        return UserContext.current().getCaller().getAccountName();
+        return CallContext.current().getCallingAccount().getAccountName();
     }
 
     public long getDomainId() {
-        return UserContext.current().getCaller().getDomainId();
+        return CallContext.current().getCallingAccount().getDomainId();
     }
 
     private long getZoneId() {
@@ -113,7 +114,7 @@ public class AddIpToVmNicCmd extends BaseAsyncCmd {
 
     @Override
     public long getEntityOwnerId() {
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
         return caller.getAccountId();
     }
 
@@ -145,7 +146,7 @@ public class AddIpToVmNicCmd extends BaseAsyncCmd {
     public void execute() throws ResourceUnavailableException, ResourceAllocationException,
     ConcurrentOperationException, InsufficientCapacityException {
 
-        UserContext.current().setEventDetails("Nic Id: " + getNicId() );
+        CallContext.current().setEventDetails("Nic Id: " + getNicId() );
         String ip;
         NicSecondaryIp result;
         String secondaryIp = null;

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/user/vm/AddNicToVMCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/vm/AddNicToVMCmd.java b/api/src/org/apache/cloudstack/api/command/user/vm/AddNicToVMCmd.java
index 4334000..520e91c 100644
--- a/api/src/org/apache/cloudstack/api/command/user/vm/AddNicToVMCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/vm/AddNicToVMCmd.java
@@ -25,13 +25,14 @@ import org.apache.cloudstack.api.*;
 import org.apache.cloudstack.api.ApiConstants.VMDetails;
 import org.apache.cloudstack.api.response.UserVmResponse;
 import org.apache.cloudstack.api.response.NetworkResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import com.cloud.event.EventTypes;
 import com.cloud.exception.ConcurrentOperationException;
 import com.cloud.exception.InsufficientCapacityException;
 import com.cloud.exception.ResourceAllocationException;
 import com.cloud.exception.ResourceUnavailableException;
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
 import com.cloud.uservm.UserVm;
 
 @APICommand(name = "addNicToVirtualMachine", description="Adds VM to specified network by creating a NIC", responseObject=UserVmResponse.class)
@@ -105,7 +106,7 @@ public class AddNicToVMCmd extends BaseAsyncCmd {
 
     @Override
     public void execute(){
-        UserContext.current().setEventDetails("Vm Id: " + getVmId() + " Network Id: " + getNetworkId());
+        CallContext.current().setEventDetails("Vm Id: " + getVmId() + " Network Id: " + getNetworkId());
         UserVm result = _userVmService.addNicToVirtualMachine(this);
         ArrayList<VMDetails> dc = new ArrayList<VMDetails>();
         dc.add(VMDetails.valueOf("nics"));

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/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 5c8fecd..40ad8e0 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
@@ -44,6 +44,8 @@ import org.apache.cloudstack.api.response.ServiceOfferingResponse;
 import org.apache.cloudstack.api.response.TemplateResponse;
 import org.apache.cloudstack.api.response.UserVmResponse;
 import org.apache.cloudstack.api.response.ZoneResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.dc.DataCenter;
@@ -62,7 +64,6 @@ import com.cloud.offering.DiskOffering;
 import com.cloud.offering.ServiceOffering;
 import com.cloud.template.VirtualMachineTemplate;
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
 import com.cloud.uservm.UserVm;
 
 
@@ -194,7 +195,7 @@ public class DeployVMCmd extends BaseAsyncCreateCmd {
 
     public String getAccountName() {
         if (accountName == null) {
-            return UserContext.current().getCaller().getAccountName();
+            return CallContext.current().getCallingAccount().getAccountName();
         }
         return accountName;
     }
@@ -209,7 +210,7 @@ public class DeployVMCmd extends BaseAsyncCreateCmd {
 
     public Long getDomainId() {
         if (domainId == null) {
-            return UserContext.current().getCaller().getDomainId();
+            return CallContext.current().getCallingAccount().getDomainId();
         }
         return domainId;
     }
@@ -379,7 +380,7 @@ public class DeployVMCmd extends BaseAsyncCreateCmd {
     public long getEntityOwnerId() {
         Long accountId = finalyzeAccountId(accountName, domainId, projectId, true);
         if (accountId == null) {
-            return UserContext.current().getCaller().getId();
+            return CallContext.current().getCallingAccount().getId();
         }
 
         return accountId;
@@ -416,7 +417,7 @@ public class DeployVMCmd extends BaseAsyncCreateCmd {
 
         if (getStartVm()) {
             try {
-                UserContext.current().setEventDetails("Vm Id: "+getEntityId());
+                CallContext.current().setEventDetails("Vm Id: "+getEntityId());
                 result = _userVmService.startVirtualMachine(this);
             } catch (ResourceUnavailableException ex) {
                 s_logger.warn("Exception: ", ex);

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/user/vm/DestroyVMCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/vm/DestroyVMCmd.java b/api/src/org/apache/cloudstack/api/command/user/vm/DestroyVMCmd.java
index 4add4ce..06959c1 100644
--- a/api/src/org/apache/cloudstack/api/command/user/vm/DestroyVMCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/vm/DestroyVMCmd.java
@@ -24,6 +24,8 @@ import org.apache.cloudstack.api.BaseAsyncCmd;
 import org.apache.cloudstack.api.Parameter;
 import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.UserVmResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.event.EventTypes;
@@ -31,7 +33,6 @@ import com.cloud.exception.ConcurrentOperationException;
 import com.cloud.exception.ResourceUnavailableException;
 import com.cloud.hypervisor.Hypervisor.HypervisorType;
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
 import com.cloud.uservm.UserVm;
 
 @APICommand(name = "destroyVirtualMachine", description="Destroys a virtual machine. Once destroyed, only the administrator can recover it.", responseObject=UserVmResponse.class)
@@ -95,7 +96,7 @@ public class DestroyVMCmd extends BaseAsyncCmd {
 
     @Override
     public void execute() throws ResourceUnavailableException, ConcurrentOperationException{
-        UserContext.current().setEventDetails("Vm Id: "+getId());
+        CallContext.current().setEventDetails("Vm Id: "+getId());
         UserVm result;
         result = _userVmService.destroyVm(this);
 

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/user/vm/ListNicsCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/vm/ListNicsCmd.java b/api/src/org/apache/cloudstack/api/command/user/vm/ListNicsCmd.java
index 2aa6ffd..ad3c230 100644
--- a/api/src/org/apache/cloudstack/api/command/user/vm/ListNicsCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/vm/ListNicsCmd.java
@@ -31,13 +31,13 @@ import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.ListResponse;
 import org.apache.cloudstack.api.response.NicResponse;
 import org.apache.cloudstack.api.response.UserVmResponse;
+import org.apache.cloudstack.context.CallContext;
 
 import com.cloud.exception.ConcurrentOperationException;
 import com.cloud.exception.InsufficientCapacityException;
 import com.cloud.exception.ResourceAllocationException;
 import com.cloud.exception.ResourceUnavailableException;
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
 import com.cloud.vm.Nic;
 import com.cloud.vm.NicSecondaryIp;
 
@@ -67,11 +67,11 @@ public class ListNicsCmd extends BaseListCmd {
     }
 
     public String getAccountName() {
-        return UserContext.current().getCaller().getAccountName();
+        return CallContext.current().getCallingAccount().getAccountName();
     }
 
     public long getDomainId() {
-        return UserContext.current().getCaller().getDomainId();
+        return CallContext.current().getCallingAccount().getDomainId();
     }
 
     public Long getNicId() {
@@ -84,7 +84,7 @@ public class ListNicsCmd extends BaseListCmd {
 
     @Override
     public long getEntityOwnerId() {
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
         return caller.getAccountId();
     }
 

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/user/vm/RebootVMCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/vm/RebootVMCmd.java b/api/src/org/apache/cloudstack/api/command/user/vm/RebootVMCmd.java
index 794e1b5..86bcc19 100644
--- a/api/src/org/apache/cloudstack/api/command/user/vm/RebootVMCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/vm/RebootVMCmd.java
@@ -24,6 +24,8 @@ import org.apache.cloudstack.api.BaseAsyncCmd;
 import org.apache.cloudstack.api.Parameter;
 import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.UserVmResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.event.EventTypes;
@@ -31,7 +33,6 @@ import com.cloud.exception.InsufficientCapacityException;
 import com.cloud.exception.ResourceUnavailableException;
 import com.cloud.hypervisor.Hypervisor.HypervisorType;
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
 import com.cloud.uservm.UserVm;
 
 @APICommand(name = "rebootVirtualMachine", description="Reboots a virtual machine.", responseObject=UserVmResponse.class)
@@ -94,7 +95,7 @@ public class RebootVMCmd extends BaseAsyncCmd {
 
     @Override
     public void execute() throws ResourceUnavailableException, InsufficientCapacityException{
-        UserContext.current().setEventDetails("Vm Id: "+getId());
+        CallContext.current().setEventDetails("Vm Id: "+getId());
         UserVm result;
         result = _userVmService.rebootVirtualMachine(this);
 

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/user/vm/RemoveIpFromVmNicCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/vm/RemoveIpFromVmNicCmd.java b/api/src/org/apache/cloudstack/api/command/user/vm/RemoveIpFromVmNicCmd.java
index 852f073..408f69f 100644
--- a/api/src/org/apache/cloudstack/api/command/user/vm/RemoveIpFromVmNicCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/vm/RemoveIpFromVmNicCmd.java
@@ -27,6 +27,7 @@ import org.apache.cloudstack.api.Parameter;
 import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.NicSecondaryIpResponse;
 import org.apache.cloudstack.api.response.SuccessResponse;
+import org.apache.cloudstack.context.CallContext;
 
 import com.cloud.dc.DataCenter;
 import com.cloud.dc.DataCenter.NetworkType;
@@ -35,7 +36,6 @@ import com.cloud.exception.InsufficientAddressCapacityException;
 import com.cloud.exception.InvalidParameterValueException;
 import com.cloud.network.Network;
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
 import com.cloud.vm.Nic;
 import com.cloud.vm.NicSecondaryIp;
 
@@ -69,16 +69,16 @@ public class RemoveIpFromVmNicCmd extends BaseAsyncCmd {
     }
 
     public String getAccountName() {
-        return UserContext.current().getCaller().getAccountName();
+        return CallContext.current().getCallingAccount().getAccountName();
     }
 
     public long getDomainId() {
-        return UserContext.current().getCaller().getDomainId();
+        return CallContext.current().getCallingAccount().getDomainId();
     }
 
     @Override
     public long getEntityOwnerId() {
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
         return caller.getAccountId();
     }
 
@@ -131,7 +131,7 @@ public class RemoveIpFromVmNicCmd extends BaseAsyncCmd {
 
     @Override
     public void execute() throws InvalidParameterValueException {
-        UserContext.current().setEventDetails("Ip Id: " + id);
+        CallContext.current().setEventDetails("Ip Id: " + id);
         NicSecondaryIp nicSecIp = getIpEntry();
 
         if (nicSecIp == null) {

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/user/vm/RemoveNicFromVMCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/vm/RemoveNicFromVMCmd.java b/api/src/org/apache/cloudstack/api/command/user/vm/RemoveNicFromVMCmd.java
index b1a870e..ef133d9 100644
--- a/api/src/org/apache/cloudstack/api/command/user/vm/RemoveNicFromVMCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/vm/RemoveNicFromVMCmd.java
@@ -25,13 +25,14 @@ import org.apache.cloudstack.api.*;
 import org.apache.cloudstack.api.ApiConstants.VMDetails;
 import org.apache.cloudstack.api.response.UserVmResponse;
 import org.apache.cloudstack.api.response.NicResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import com.cloud.event.EventTypes;
 import com.cloud.exception.ConcurrentOperationException;
 import com.cloud.exception.InsufficientCapacityException;
 import com.cloud.exception.ResourceAllocationException;
 import com.cloud.exception.ResourceUnavailableException;
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
 import com.cloud.uservm.UserVm;
 
 @APICommand(name = "removeNicFromVirtualMachine", description="Removes VM from specified network by deleting a NIC", responseObject=UserVmResponse.class)
@@ -99,7 +100,7 @@ public class RemoveNicFromVMCmd extends BaseAsyncCmd {
 
     @Override
     public void execute(){
-        UserContext.current().setEventDetails("Vm Id: "+getVmId() + " Nic Id: " + getNicId());
+        CallContext.current().setEventDetails("Vm Id: "+getVmId() + " Nic Id: " + getNicId());
         UserVm result = _userVmService.removeNicFromVirtualMachine(this);
         ArrayList<VMDetails> dc = new ArrayList<VMDetails>();
         dc.add(VMDetails.valueOf("nics"));

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/user/vm/ResetVMPasswordCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/vm/ResetVMPasswordCmd.java b/api/src/org/apache/cloudstack/api/command/user/vm/ResetVMPasswordCmd.java
index 271d37f..c8ab5e8 100644
--- a/api/src/org/apache/cloudstack/api/command/user/vm/ResetVMPasswordCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/vm/ResetVMPasswordCmd.java
@@ -24,13 +24,14 @@ import org.apache.cloudstack.api.BaseAsyncCmd;
 import org.apache.cloudstack.api.Parameter;
 import org.apache.cloudstack.api.ServerApiException;
 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.InsufficientCapacityException;
 import com.cloud.exception.ResourceUnavailableException;
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
 import com.cloud.uservm.UserVm;
 
 @APICommand(name = "resetPasswordForVirtualMachine", responseObject=UserVmResponse.class, description="Resets the password for virtual machine. " +
@@ -109,7 +110,7 @@ public class ResetVMPasswordCmd extends BaseAsyncCmd {
     @Override
     public void execute() throws ResourceUnavailableException, InsufficientCapacityException{
         password = _mgr.generateRandomPassword();
-        UserContext.current().setEventDetails("Vm Id: "+getId());
+        CallContext.current().setEventDetails("Vm Id: "+getId());
         UserVm result = _userVmService.resetVMPassword(this, password);
         if (result != null){
             UserVmResponse response = _responseGenerator.createUserVmResponse("virtualmachine", result).get(0);

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/user/vm/ResetVMSSHKeyCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/vm/ResetVMSSHKeyCmd.java b/api/src/org/apache/cloudstack/api/command/user/vm/ResetVMSSHKeyCmd.java
index 372f2bc..fa06344 100644
--- a/api/src/org/apache/cloudstack/api/command/user/vm/ResetVMSSHKeyCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/vm/ResetVMSSHKeyCmd.java
@@ -30,9 +30,9 @@ import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.UserVmResponse;
 import org.apache.cloudstack.api.response.DomainResponse;
 import org.apache.cloudstack.api.response.ProjectResponse;
+import org.apache.cloudstack.context.CallContext;
 
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
 import com.cloud.uservm.UserVm;
 import com.cloud.event.EventTypes;
 import com.cloud.exception.InsufficientCapacityException;
@@ -137,7 +137,7 @@ public class ResetVMSSHKeyCmd extends BaseAsyncCmd {
     public void execute() throws ResourceUnavailableException,
             InsufficientCapacityException {
 
-        UserContext.current().setEventDetails("Vm Id: " + getId());
+        CallContext.current().setEventDetails("Vm Id: " + getId());
         UserVm result = _userVmService.resetVMSSHKey(this);
 
         if (result != null) {

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/user/vm/RestoreVMCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/vm/RestoreVMCmd.java b/api/src/org/apache/cloudstack/api/command/user/vm/RestoreVMCmd.java
index 2f7d8e1..2cfcc97 100644
--- a/api/src/org/apache/cloudstack/api/command/user/vm/RestoreVMCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/vm/RestoreVMCmd.java
@@ -24,6 +24,8 @@ import org.apache.cloudstack.api.Parameter;
 import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.TemplateResponse;
 import org.apache.cloudstack.api.response.UserVmResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.event.EventTypes;
@@ -32,7 +34,6 @@ import com.cloud.exception.InsufficientCapacityException;
 import com.cloud.exception.ResourceAllocationException;
 import com.cloud.exception.ResourceUnavailableException;
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
 import com.cloud.uservm.UserVm;
 
 @APICommand(name = "restoreVirtualMachine", description="Restore a VM to original template/ISO or new template/ISO", responseObject=UserVmResponse.class, since="3.0.0")
@@ -62,7 +63,7 @@ public class RestoreVMCmd extends BaseAsyncCmd {
     public void execute() throws ResourceUnavailableException, InsufficientCapacityException, ServerApiException, ConcurrentOperationException,
             ResourceAllocationException {
         UserVm result;
-        UserContext.current().setEventDetails("Vm Id: " + getVmId());
+        CallContext.current().setEventDetails("Vm Id: " + getVmId());
         result = _userVmService.restoreVM(this);
         if (result != null) {
             UserVmResponse response = _responseGenerator.createUserVmResponse("virtualmachine", result).get(0);

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/user/vm/ScaleVMCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/vm/ScaleVMCmd.java b/api/src/org/apache/cloudstack/api/command/user/vm/ScaleVMCmd.java
index 758d9c1..ac04419 100644
--- a/api/src/org/apache/cloudstack/api/command/user/vm/ScaleVMCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/vm/ScaleVMCmd.java
@@ -19,12 +19,14 @@ package org.apache.cloudstack.api.command.user.vm;
 import com.cloud.event.EventTypes;
 import com.cloud.exception.*;
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
 import com.cloud.uservm.UserVm;
+
 import org.apache.cloudstack.api.*;
 import org.apache.cloudstack.api.response.ServiceOfferingResponse;
 import org.apache.cloudstack.api.response.SuccessResponse;
 import org.apache.cloudstack.api.response.UserVmResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import java.util.List;

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/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 2fc6646..8441ac6 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
@@ -25,6 +25,8 @@ 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;
@@ -35,7 +37,6 @@ import com.cloud.exception.ResourceAllocationException;
 import com.cloud.exception.ResourceUnavailableException;
 import com.cloud.exception.StorageUnavailableException;
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
 import com.cloud.uservm.UserVm;
 import com.cloud.utils.exception.ExecutionException;
 
@@ -114,7 +115,7 @@ public class StartVMCmd extends BaseAsyncCmd {
     @Override
     public void execute() throws ResourceUnavailableException, ResourceAllocationException {
         try {
-            UserContext.current().setEventDetails("Vm Id: " + getId());
+            CallContext.current().setEventDetails("Vm Id: " + getId());
 
             UserVm result ;
             result = _userVmService.startVirtualMachine(this);

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/user/vm/StopVMCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/vm/StopVMCmd.java b/api/src/org/apache/cloudstack/api/command/user/vm/StopVMCmd.java
index f06b0f5..90d565d 100644
--- a/api/src/org/apache/cloudstack/api/command/user/vm/StopVMCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/vm/StopVMCmd.java
@@ -25,13 +25,14 @@ import org.apache.cloudstack.api.BaseAsyncCmd;
 import org.apache.cloudstack.api.Parameter;
 import org.apache.cloudstack.api.ServerApiException;
 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;
 import com.cloud.hypervisor.Hypervisor.HypervisorType;
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
 import com.cloud.uservm.UserVm;
 
 @APICommand(name = "stopVirtualMachine", responseObject = UserVmResponse.class, description = "Stops a virtual machine.")
@@ -111,7 +112,7 @@ public class StopVMCmd extends BaseAsyncCmd {
 
     @Override
     public void execute() throws ServerApiException, ConcurrentOperationException {
-        UserContext.current().setEventDetails("Vm Id: " + getId());
+        CallContext.current().setEventDetails("Vm Id: " + getId());
         UserVm result;
 
         result = _userVmService.stopVirtualMachine(getId(), isForced());

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/user/vm/UpdateDefaultNicForVMCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/vm/UpdateDefaultNicForVMCmd.java b/api/src/org/apache/cloudstack/api/command/user/vm/UpdateDefaultNicForVMCmd.java
index 07518c9..57ec9fb 100644
--- a/api/src/org/apache/cloudstack/api/command/user/vm/UpdateDefaultNicForVMCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/vm/UpdateDefaultNicForVMCmd.java
@@ -25,13 +25,14 @@ import org.apache.cloudstack.api.*;
 import org.apache.cloudstack.api.ApiConstants.VMDetails;
 import org.apache.cloudstack.api.response.UserVmResponse;
 import org.apache.cloudstack.api.response.NicResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import com.cloud.event.EventTypes;
 import com.cloud.exception.ConcurrentOperationException;
 import com.cloud.exception.InsufficientCapacityException;
 import com.cloud.exception.ResourceAllocationException;
 import com.cloud.exception.ResourceUnavailableException;
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
 import com.cloud.uservm.UserVm;
 
 @APICommand(name = "updateDefaultNicForVirtualMachine", description="Changes the default NIC on a VM", responseObject=UserVmResponse.class)
@@ -99,7 +100,7 @@ public class UpdateDefaultNicForVMCmd extends BaseAsyncCmd {
 
     @Override
     public void execute(){
-        UserContext.current().setEventDetails("Vm Id: "+getVmId() + " Nic Id: " + getNicId());
+        CallContext.current().setEventDetails("Vm Id: "+getVmId() + " Nic Id: " + getNicId());
         UserVm result = _userVmService.updateDefaultNicForVirtualMachine(this);
         ArrayList<VMDetails> dc = new ArrayList<VMDetails>();
         dc.add(VMDetails.valueOf("nics"));

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/user/vm/UpdateVMCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/vm/UpdateVMCmd.java b/api/src/org/apache/cloudstack/api/command/user/vm/UpdateVMCmd.java
index 26e5609..ba466b0 100644
--- a/api/src/org/apache/cloudstack/api/command/user/vm/UpdateVMCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/vm/UpdateVMCmd.java
@@ -24,12 +24,13 @@ import org.apache.cloudstack.api.Parameter;
 import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.GuestOSResponse;
 import org.apache.cloudstack.api.response.UserVmResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.exception.InsufficientCapacityException;
 import com.cloud.exception.ResourceUnavailableException;
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
 import com.cloud.uservm.UserVm;
 
 
@@ -133,7 +134,7 @@ public class UpdateVMCmd extends BaseCmd{
     @Override
     public void execute() throws ResourceUnavailableException,
             InsufficientCapacityException, ServerApiException {
-        UserContext.current().setEventDetails("Vm Id: "+getId());
+        CallContext.current().setEventDetails("Vm Id: "+getId());
         UserVm result = _userVmService.updateVirtualMachine(this);
         if (result != null){
             UserVmResponse response = _responseGenerator.createUserVmResponse("virtualmachine", result).get(0);

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/user/vm/UpgradeVMCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/vm/UpgradeVMCmd.java b/api/src/org/apache/cloudstack/api/command/user/vm/UpgradeVMCmd.java
index fb62000..671a61b 100644
--- a/api/src/org/apache/cloudstack/api/command/user/vm/UpgradeVMCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/vm/UpgradeVMCmd.java
@@ -24,13 +24,14 @@ import org.apache.cloudstack.api.Parameter;
 import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.ServiceOfferingResponse;
 import org.apache.cloudstack.api.response.UserVmResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.exception.InvalidParameterValueException;
 import com.cloud.exception.ResourceAllocationException;
 import com.cloud.offering.ServiceOffering;
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
 import com.cloud.uservm.UserVm;
 
 @APICommand(name = "changeServiceForVirtualMachine", responseObject=UserVmResponse.class, description="Changes the service offering for a virtual machine. " +
@@ -89,7 +90,7 @@ public class UpgradeVMCmd extends BaseCmd {
 
     @Override
     public void execute() throws ResourceAllocationException{
-        UserContext.current().setEventDetails("Vm Id: "+getId());
+        CallContext.current().setEventDetails("Vm Id: "+getId());
 
         ServiceOffering serviceOffering = _configService.getServiceOffering(serviceOfferingId);
         if (serviceOffering == null) {

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/user/vmgroup/CreateVMGroupCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/vmgroup/CreateVMGroupCmd.java b/api/src/org/apache/cloudstack/api/command/user/vmgroup/CreateVMGroupCmd.java
index bcb7bda..daaf094 100644
--- a/api/src/org/apache/cloudstack/api/command/user/vmgroup/CreateVMGroupCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/vmgroup/CreateVMGroupCmd.java
@@ -25,9 +25,10 @@ import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.DomainResponse;
 import org.apache.cloudstack.api.response.InstanceGroupResponse;
 import org.apache.cloudstack.api.response.ProjectAccountResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
-import com.cloud.user.UserContext;
 import com.cloud.vm.InstanceGroup;
 
 @APICommand(name = "createInstanceGroup", description = "Creates a vm group", responseObject = InstanceGroupResponse.class)
@@ -88,7 +89,7 @@ public class CreateVMGroupCmd extends BaseCmd {
     public long getEntityOwnerId() {
         Long accountId = finalyzeAccountId(accountName, domainId, projectId, true);
         if (accountId == null) {
-            return UserContext.current().getCaller().getId();
+            return CallContext.current().getCallingAccount().getId();
         }
 
         return accountId;

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/user/vmsnapshot/CreateVMSnapshotCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/vmsnapshot/CreateVMSnapshotCmd.java b/api/src/org/apache/cloudstack/api/command/user/vmsnapshot/CreateVMSnapshotCmd.java
index aa9feb8..542215a 100644
--- a/api/src/org/apache/cloudstack/api/command/user/vmsnapshot/CreateVMSnapshotCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/vmsnapshot/CreateVMSnapshotCmd.java
@@ -27,10 +27,10 @@ import org.apache.cloudstack.api.Parameter;
 import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.UserVmResponse;
 import org.apache.cloudstack.api.response.VMSnapshotResponse;
+import org.apache.cloudstack.context.CallContext;
 
 import com.cloud.event.EventTypes;
 import com.cloud.exception.ResourceAllocationException;
-import com.cloud.user.UserContext;
 import com.cloud.uservm.UserVm;
 import com.cloud.vm.snapshot.VMSnapshot;
 
@@ -96,7 +96,7 @@ public class CreateVMSnapshotCmd extends BaseAsyncCreateCmd {
 
     @Override
     public void execute() {
-        UserContext.current().setEventDetails("VM Id: " + getVmId());
+        CallContext.current().setEventDetails("VM Id: " + getVmId());
         VMSnapshot result = _vmSnapshotService.creatVMSnapshot(getVmId(),getEntityId());
         if (result != null) {
             VMSnapshotResponse response = _responseGenerator

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/user/vmsnapshot/DeleteVMSnapshotCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/vmsnapshot/DeleteVMSnapshotCmd.java b/api/src/org/apache/cloudstack/api/command/user/vmsnapshot/DeleteVMSnapshotCmd.java
index bda84c8..24f8462 100644
--- a/api/src/org/apache/cloudstack/api/command/user/vmsnapshot/DeleteVMSnapshotCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/vmsnapshot/DeleteVMSnapshotCmd.java
@@ -25,11 +25,12 @@ import org.apache.cloudstack.api.Parameter;
 import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.SuccessResponse;
 import org.apache.cloudstack.api.response.VMSnapshotResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.event.EventTypes;
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
 import com.cloud.vm.snapshot.VMSnapshot;
 
 @APICommand(name="deleteVMSnapshot", description = "Deletes a vmsnapshot.", responseObject = SuccessResponse.class, since="4.2.0")
@@ -62,7 +63,7 @@ public class DeleteVMSnapshotCmd extends BaseAsyncCmd {
 
     @Override
     public void execute() {
-        UserContext.current().setEventDetails("vmsnapshot id: " + getId());
+        CallContext.current().setEventDetails("vmsnapshot id: " + getId());
         boolean result = _vmSnapshotService.deleteVMSnapshot(getId());
         if (result) {
             SuccessResponse response = new SuccessResponse(getCommandName());

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/user/vmsnapshot/RevertToVMSnapshotCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/vmsnapshot/RevertToVMSnapshotCmd.java b/api/src/org/apache/cloudstack/api/command/user/vmsnapshot/RevertToVMSnapshotCmd.java
index f6d8b2c..9344406 100644
--- a/api/src/org/apache/cloudstack/api/command/user/vmsnapshot/RevertToVMSnapshotCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/vmsnapshot/RevertToVMSnapshotCmd.java
@@ -26,6 +26,7 @@ import org.apache.cloudstack.api.Parameter;
 import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.UserVmResponse;
 import org.apache.cloudstack.api.response.VMSnapshotResponse;
+import org.apache.cloudstack.context.CallContext;
 
 import com.cloud.event.EventTypes;
 import com.cloud.exception.ConcurrentOperationException;
@@ -33,7 +34,6 @@ import com.cloud.exception.InsufficientCapacityException;
 import com.cloud.exception.ResourceAllocationException;
 import com.cloud.exception.ResourceUnavailableException;
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
 import com.cloud.uservm.UserVm;
 import com.cloud.vm.snapshot.VMSnapshot;
 
@@ -66,7 +66,7 @@ public class RevertToVMSnapshotCmd extends BaseAsyncCmd {
 
     @Override
     public void execute() throws  ResourceUnavailableException, InsufficientCapacityException, ResourceAllocationException, ConcurrentOperationException {
-        UserContext.current().setEventDetails(
+        CallContext.current().setEventDetails(
                 "vmsnapshot id: " + getVmSnapShotId());
         UserVm result = _vmSnapshotService.revertToSnapshot(getVmSnapShotId());
         if (result != null) {

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/user/volume/AddResourceDetailCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/volume/AddResourceDetailCmd.java b/api/src/org/apache/cloudstack/api/command/user/volume/AddResourceDetailCmd.java
index de5832d..be3eb22 100644
--- a/api/src/org/apache/cloudstack/api/command/user/volume/AddResourceDetailCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/volume/AddResourceDetailCmd.java
@@ -17,6 +17,7 @@
 package org.apache.cloudstack.api.command.user.volume;
 
 import com.cloud.server.ResourceTag;
+
 import org.apache.cloudstack.api.APICommand;
 import org.apache.cloudstack.api.ApiConstants;
 import org.apache.cloudstack.api.ApiErrorCode;
@@ -26,13 +27,14 @@ import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.SuccessResponse;
 import org.apache.cloudstack.api.response.UserVmResponse;
 import org.apache.cloudstack.api.response.VolumeResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.async.AsyncJob;
 import com.cloud.event.EventTypes;
 import com.cloud.storage.Volume;
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
 
 import java.util.*;
 

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/user/volume/AttachVolumeCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/volume/AttachVolumeCmd.java b/api/src/org/apache/cloudstack/api/command/user/volume/AttachVolumeCmd.java
index bd729ea..baec44f 100644
--- a/api/src/org/apache/cloudstack/api/command/user/volume/AttachVolumeCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/volume/AttachVolumeCmd.java
@@ -25,12 +25,13 @@ import org.apache.cloudstack.api.Parameter;
 import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.UserVmResponse;
 import org.apache.cloudstack.api.response.VolumeResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.event.EventTypes;
 import com.cloud.storage.Volume;
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
 
 @APICommand(name = "attachVolume", description="Attaches a disk volume to a virtual machine.", responseObject=VolumeResponse.class)
 public class AttachVolumeCmd extends BaseAsyncCmd {
@@ -118,7 +119,7 @@ public class AttachVolumeCmd extends BaseAsyncCmd {
 
     @Override
     public void execute(){
-        UserContext.current().setEventDetails("Volume Id: "+getId()+" VmId: "+getVirtualMachineId());
+        CallContext.current().setEventDetails("Volume Id: "+getId()+" VmId: "+getVirtualMachineId());
         Volume result = _volumeService.attachVolumeToVM(this);
         if (result != null) {
             VolumeResponse response = _responseGenerator.createVolumeResponse(result);

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/user/volume/CreateVolumeCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/volume/CreateVolumeCmd.java b/api/src/org/apache/cloudstack/api/command/user/volume/CreateVolumeCmd.java
index 6a5d4e5..e5c7a51 100644
--- a/api/src/org/apache/cloudstack/api/command/user/volume/CreateVolumeCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/volume/CreateVolumeCmd.java
@@ -29,13 +29,14 @@ import org.apache.cloudstack.api.response.ProjectResponse;
 import org.apache.cloudstack.api.response.SnapshotResponse;
 import org.apache.cloudstack.api.response.VolumeResponse;
 import org.apache.cloudstack.api.response.ZoneResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.event.EventTypes;
 import com.cloud.exception.ResourceAllocationException;
 import com.cloud.storage.Snapshot;
 import com.cloud.storage.Volume;
-import com.cloud.user.UserContext;
 
 @APICommand(name = "createVolume", responseObject=VolumeResponse.class, description="Creates a disk volume from a disk offering. This disk volume must still be attached to a virtual machine to make use of it.")
 public class CreateVolumeCmd extends BaseAsyncCreateCmd {
@@ -155,7 +156,7 @@ public class CreateVolumeCmd extends BaseAsyncCreateCmd {
     public long getEntityOwnerId() {
         Long accountId = finalyzeAccountId(accountName, domainId, projectId, true);
         if (accountId == null) {
-            return UserContext.current().getCaller().getId();
+            return CallContext.current().getCallingAccount().getId();
         }
 
         return accountId;
@@ -185,7 +186,7 @@ public class CreateVolumeCmd extends BaseAsyncCreateCmd {
 
     @Override
     public void execute(){
-        UserContext.current().setEventDetails("Volume Id: "+getEntityId()+((getSnapshotId() == null) ? "" : " from snapshot: " + getSnapshotId()));
+        CallContext.current().setEventDetails("Volume Id: "+getEntityId()+((getSnapshotId() == null) ? "" : " from snapshot: " + getSnapshotId()));
         Volume volume = _volumeService.createVolume(this);
         if (volume != null) {
             VolumeResponse response = _responseGenerator.createVolumeResponse(volume);

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/user/volume/DeleteVolumeCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/volume/DeleteVolumeCmd.java b/api/src/org/apache/cloudstack/api/command/user/volume/DeleteVolumeCmd.java
index 394b009..73cc827 100644
--- a/api/src/org/apache/cloudstack/api/command/user/volume/DeleteVolumeCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/volume/DeleteVolumeCmd.java
@@ -24,12 +24,13 @@ import org.apache.cloudstack.api.Parameter;
 import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.SuccessResponse;
 import org.apache.cloudstack.api.response.VolumeResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.exception.ConcurrentOperationException;
 import com.cloud.storage.Volume;
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
 
 @APICommand(name = "deleteVolume", description="Deletes a detached disk volume.", responseObject=SuccessResponse.class)
 public class DeleteVolumeCmd extends BaseCmd {
@@ -79,8 +80,8 @@ public class DeleteVolumeCmd extends BaseCmd {
 
     @Override
     public void execute() throws ConcurrentOperationException {
-        UserContext.current().setEventDetails("Volume Id: "+getId());
-        boolean result = this._volumeService.deleteVolume(id, UserContext.current().getCaller());
+        CallContext.current().setEventDetails("Volume Id: "+getId());
+        boolean result = this._volumeService.deleteVolume(id, CallContext.current().getCallingAccount());
         if (result) {
             SuccessResponse response = new SuccessResponse(getCommandName());
             this.setResponseObject(response);

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/user/volume/DetachVolumeCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/volume/DetachVolumeCmd.java b/api/src/org/apache/cloudstack/api/command/user/volume/DetachVolumeCmd.java
index 24dd113..f2fe0cd 100644
--- a/api/src/org/apache/cloudstack/api/command/user/volume/DetachVolumeCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/volume/DetachVolumeCmd.java
@@ -25,12 +25,13 @@ import org.apache.cloudstack.api.Parameter;
 import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.UserVmResponse;
 import org.apache.cloudstack.api.response.VolumeResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.event.EventTypes;
 import com.cloud.storage.Volume;
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
 import com.cloud.uservm.UserVm;
 
 @APICommand(name = "detachVolume", description="Detaches a disk volume from a virtual machine.", responseObject=VolumeResponse.class)
@@ -129,7 +130,7 @@ public class DetachVolumeCmd extends BaseAsyncCmd {
 
     @Override
     public void execute(){
-        UserContext.current().setEventDetails("Volume Id: "+getId()+" VmId: "+getVirtualMachineId());
+        CallContext.current().setEventDetails("Volume Id: "+getId()+" VmId: "+getVirtualMachineId());
         Volume result = _volumeService.detachVolumeFromVM(this);
         if (result != null){
             VolumeResponse response = _responseGenerator.createVolumeResponse(result);

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/user/volume/ExtractVolumeCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/volume/ExtractVolumeCmd.java b/api/src/org/apache/cloudstack/api/command/user/volume/ExtractVolumeCmd.java
index 8588153..08116fc 100644
--- a/api/src/org/apache/cloudstack/api/command/user/volume/ExtractVolumeCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/volume/ExtractVolumeCmd.java
@@ -28,6 +28,8 @@ import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.ExtractResponse;
 import org.apache.cloudstack.api.response.VolumeResponse;
 import org.apache.cloudstack.api.response.ZoneResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.dc.DataCenter;
@@ -35,7 +37,6 @@ import com.cloud.event.EventTypes;
 import com.cloud.storage.Upload;
 import com.cloud.storage.Volume;
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
 
 @APICommand(name = "extractVolume", description="Extracts volume", responseObject=ExtractResponse.class)
 public class ExtractVolumeCmd extends BaseAsyncCmd {
@@ -126,7 +127,7 @@ public class ExtractVolumeCmd extends BaseAsyncCmd {
 
     @Override
     public void execute(){
-        UserContext.current().setEventDetails("Volume Id: " + getId());
+        CallContext.current().setEventDetails("Volume Id: " + getId());
         String uploadUrl = _volumeService.extractVolume(this);
         if (uploadUrl != null) {
             ExtractResponse response = new ExtractResponse();

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/user/volume/RemoveResourceDetailCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/volume/RemoveResourceDetailCmd.java b/api/src/org/apache/cloudstack/api/command/user/volume/RemoveResourceDetailCmd.java
index 445f435..8be70f3 100644
--- a/api/src/org/apache/cloudstack/api/command/user/volume/RemoveResourceDetailCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/volume/RemoveResourceDetailCmd.java
@@ -17,6 +17,7 @@
 package org.apache.cloudstack.api.command.user.volume;
 
 import com.cloud.server.ResourceTag;
+
 import org.apache.cloudstack.api.APICommand;
 import org.apache.cloudstack.api.ApiCommandJobType;
 import org.apache.cloudstack.api.ApiConstants;
@@ -27,12 +28,13 @@ import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.SuccessResponse;
 import org.apache.cloudstack.api.response.UserVmResponse;
 import org.apache.cloudstack.api.response.VolumeResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.event.EventTypes;
 import com.cloud.storage.Volume;
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
 
 import java.util.*;
 

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/user/volume/ResizeVolumeCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/volume/ResizeVolumeCmd.java b/api/src/org/apache/cloudstack/api/command/user/volume/ResizeVolumeCmd.java
index 0b7ff0d..811440d 100644
--- a/api/src/org/apache/cloudstack/api/command/user/volume/ResizeVolumeCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/volume/ResizeVolumeCmd.java
@@ -25,6 +25,8 @@ import org.apache.cloudstack.api.Parameter;
 import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.DiskOfferingResponse;
 import org.apache.cloudstack.api.response.VolumeResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.event.EventTypes;
@@ -34,7 +36,6 @@ import com.cloud.exception.ResourceAllocationException;
 import com.cloud.projects.Project;
 import com.cloud.storage.Volume;
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
 
 
 @APICommand(name="resizeVolume", description="Resizes a volume", responseObject=VolumeResponse.class)
@@ -133,7 +134,7 @@ public class ResizeVolumeCmd extends BaseAsyncCmd {
 
     @Override
     public void execute() throws ResourceAllocationException{
-        UserContext.current().setEventDetails("Volume Id: " + getEntityId() + " to size " + getSize() + "G");
+        CallContext.current().setEventDetails("Volume Id: " + getEntityId() + " to size " + getSize() + "G");
     	Volume volume = _volumeService.resizeVolume(this);
     	if (volume != null) {
             VolumeResponse response = _responseGenerator.createVolumeResponse(volume);

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/user/volume/UpdateVolumeCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/volume/UpdateVolumeCmd.java b/api/src/org/apache/cloudstack/api/command/user/volume/UpdateVolumeCmd.java
index f1e68e9..ad7c992 100644
--- a/api/src/org/apache/cloudstack/api/command/user/volume/UpdateVolumeCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/volume/UpdateVolumeCmd.java
@@ -25,12 +25,13 @@ import org.apache.cloudstack.api.Parameter;
 import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.UserVmResponse;
 import org.apache.cloudstack.api.response.VolumeResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.event.EventTypes;
 import com.cloud.storage.Volume;
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
 
 @APICommand(name = "updateVolume", description="Updates the volume.", responseObject=VolumeResponse.class)
 public class UpdateVolumeCmd extends BaseAsyncCmd {
@@ -99,7 +100,7 @@ public class UpdateVolumeCmd extends BaseAsyncCmd {
 
     @Override
     public void execute(){
-        UserContext.current().setEventDetails("Volume Id: "+getId());
+        CallContext.current().setEventDetails("Volume Id: "+getId());
         Volume result = _volumeService.updateVolume(this);
         if (result != null) {
             VolumeResponse response = _responseGenerator.createVolumeResponse(result);

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/user/volume/UploadVolumeCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/volume/UploadVolumeCmd.java b/api/src/org/apache/cloudstack/api/command/user/volume/UploadVolumeCmd.java
index fea3e04..f9104f7 100644
--- a/api/src/org/apache/cloudstack/api/command/user/volume/UploadVolumeCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/volume/UploadVolumeCmd.java
@@ -27,6 +27,8 @@ import org.apache.cloudstack.api.response.DomainResponse;
 import org.apache.cloudstack.api.response.ProjectResponse;
 import org.apache.cloudstack.api.response.VolumeResponse;
 import org.apache.cloudstack.api.response.ZoneResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.event.EventTypes;
@@ -36,7 +38,6 @@ import com.cloud.exception.NetworkRuleConflictException;
 import com.cloud.exception.ResourceAllocationException;
 import com.cloud.exception.ResourceUnavailableException;
 import com.cloud.storage.Volume;
-import com.cloud.user.UserContext;
 
 @APICommand(name = "uploadVolume", description="Uploads a data disk.", responseObject=VolumeResponse.class)
 public class UploadVolumeCmd extends BaseAsyncCmd {
@@ -143,7 +144,7 @@ public class UploadVolumeCmd extends BaseAsyncCmd {
     public long getEntityOwnerId() {
         Long accountId = finalyzeAccountId(accountName, domainId, projectId, true);
         if (accountId == null) {
-            return UserContext.current().getCaller().getId();
+            return CallContext.current().getCallingAccount().getId();
         }
 
         return accountId;

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/user/vpc/CreateStaticRouteCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/vpc/CreateStaticRouteCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpc/CreateStaticRouteCmd.java
index e0cfe00..91aecef 100644
--- a/api/src/org/apache/cloudstack/api/command/user/vpc/CreateStaticRouteCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/vpc/CreateStaticRouteCmd.java
@@ -26,6 +26,8 @@ import org.apache.cloudstack.api.Parameter;
 import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.PrivateGatewayResponse;
 import org.apache.cloudstack.api.response.StaticRouteResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.event.EventTypes;
@@ -35,7 +37,6 @@ import com.cloud.exception.ResourceAllocationException;
 import com.cloud.exception.ResourceUnavailableException;
 import com.cloud.network.vpc.StaticRoute;
 import com.cloud.network.vpc.VpcGateway;
-import com.cloud.user.UserContext;
 
 @APICommand(name = "createStaticRoute", description="Creates a static route", responseObject=StaticRouteResponse.class)
 public class CreateStaticRouteCmd extends BaseAsyncCreateCmd{
@@ -92,7 +93,7 @@ public class CreateStaticRouteCmd extends BaseAsyncCreateCmd{
         boolean success = false;
         StaticRoute route = _entityMgr.findById(StaticRoute.class, getEntityId());
         try {
-            UserContext.current().setEventDetails("Static route Id: " + getEntityId());
+            CallContext.current().setEventDetails("Static route Id: " + getEntityId());
             success = _vpcService.applyStaticRoutes(route.getVpcId());
 
             // State is different after the route is applied, so get new object here

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/user/vpc/CreateVPCCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/vpc/CreateVPCCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpc/CreateVPCCmd.java
index 04a7788..78e4363d 100644
--- a/api/src/org/apache/cloudstack/api/command/user/vpc/CreateVPCCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/vpc/CreateVPCCmd.java
@@ -27,6 +27,8 @@ import org.apache.cloudstack.api.response.ProjectResponse;
 import org.apache.cloudstack.api.response.VpcOfferingResponse;
 import org.apache.cloudstack.api.response.VpcResponse;
 import org.apache.cloudstack.api.response.ZoneResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.event.EventTypes;
@@ -35,7 +37,6 @@ import com.cloud.exception.InsufficientCapacityException;
 import com.cloud.exception.ResourceAllocationException;
 import com.cloud.exception.ResourceUnavailableException;
 import com.cloud.network.vpc.Vpc;
-import com.cloud.user.UserContext;
 
 @APICommand(name = "createVPC", description="Creates a VPC", responseObject=VpcResponse.class)
 public class CreateVPCCmd extends BaseAsyncCreateCmd{
@@ -179,7 +180,7 @@ public class CreateVPCCmd extends BaseAsyncCreateCmd{
     public long getEntityOwnerId() {
         Long accountId = finalyzeAccountId(accountName, domainId, projectId, true);
         if (accountId == null) {
-            return UserContext.current().getCaller().getId();
+            return CallContext.current().getCallingAccount().getId();
         }
 
         return accountId;

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/user/vpc/DeleteStaticRouteCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/vpc/DeleteStaticRouteCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpc/DeleteStaticRouteCmd.java
index 87c1c9d..502b7a2 100644
--- a/api/src/org/apache/cloudstack/api/command/user/vpc/DeleteStaticRouteCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/vpc/DeleteStaticRouteCmd.java
@@ -26,13 +26,14 @@ import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.AccountResponse;
 import org.apache.cloudstack.api.response.StaticRouteResponse;
 import org.apache.cloudstack.api.response.SuccessResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.event.EventTypes;
 import com.cloud.exception.InvalidParameterValueException;
 import com.cloud.exception.ResourceUnavailableException;
 import com.cloud.network.vpc.StaticRoute;
-import com.cloud.user.UserContext;
 
 @APICommand(name = "deleteStaticRoute", description="Deletes a static route", responseObject=SuccessResponse.class)
 public class DeleteStaticRouteCmd extends BaseAsyncCmd{
@@ -92,7 +93,7 @@ public class DeleteStaticRouteCmd extends BaseAsyncCmd{
 
     @Override
     public void execute() throws ResourceUnavailableException {
-        UserContext.current().setEventDetails("Route Id: " + id);
+        CallContext.current().setEventDetails("Route Id: " + id);
         boolean result = _vpcService.revokeStaticRoute(id);
 
         if (result) {

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/user/vpn/AddVpnUserCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/vpn/AddVpnUserCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpn/AddVpnUserCmd.java
index 0618e34..7625b0d 100644
--- a/api/src/org/apache/cloudstack/api/command/user/vpn/AddVpnUserCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/vpn/AddVpnUserCmd.java
@@ -25,13 +25,14 @@ import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.DomainResponse;
 import org.apache.cloudstack.api.response.ProjectResponse;
 import org.apache.cloudstack.api.response.VpnUsersResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.domain.Domain;
 import com.cloud.event.EventTypes;
 import com.cloud.network.VpnUser;
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
 
 @APICommand(name = "addVpnUser", description="Adds vpn users", responseObject=VpnUsersResponse.class)
 public class AddVpnUserCmd extends BaseAsyncCreateCmd {
@@ -97,7 +98,7 @@ public class AddVpnUserCmd extends BaseAsyncCreateCmd {
     public long getEntityOwnerId() {
         Long accountId = finalyzeAccountId(accountName, domainId, projectId, true);
         if (accountId == null) {
-            return UserContext.current().getCaller().getId();
+            return CallContext.current().getCallingAccount().getId();
         }
 
         return accountId;

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/user/vpn/CreateVpnCustomerGatewayCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/vpn/CreateVpnCustomerGatewayCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpn/CreateVpnCustomerGatewayCmd.java
index 38b40b5..1602c29 100644
--- a/api/src/org/apache/cloudstack/api/command/user/vpn/CreateVpnCustomerGatewayCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/vpn/CreateVpnCustomerGatewayCmd.java
@@ -24,11 +24,12 @@ import org.apache.cloudstack.api.Parameter;
 import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.DomainResponse;
 import org.apache.cloudstack.api.response.Site2SiteCustomerGatewayResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.event.EventTypes;
 import com.cloud.network.Site2SiteCustomerGateway;
-import com.cloud.user.UserContext;
 
 @APICommand(name = "createVpnCustomerGateway", description="Creates site to site vpn customer gateway", responseObject=Site2SiteCustomerGatewayResponse.class)
 public class CreateVpnCustomerGatewayCmd extends BaseAsyncCmd {
@@ -137,7 +138,7 @@ public class CreateVpnCustomerGatewayCmd extends BaseAsyncCmd {
     public long getEntityOwnerId() {
         Long accountId = finalyzeAccountId(accountName, domainId, null, true);
         if (accountId == null) {
-            accountId = UserContext.current().getCaller().getId();
+            accountId = CallContext.current().getCallingAccount().getId();
         }
         return accountId;
     }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/user/vpn/DeleteRemoteAccessVpnCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/vpn/DeleteRemoteAccessVpnCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpn/DeleteRemoteAccessVpnCmd.java
index 06c2530..640a89a 100644
--- a/api/src/org/apache/cloudstack/api/command/user/vpn/DeleteRemoteAccessVpnCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/vpn/DeleteRemoteAccessVpnCmd.java
@@ -23,13 +23,14 @@ import org.apache.cloudstack.api.Parameter;
 import org.apache.cloudstack.api.response.AccountResponse;
 import org.apache.cloudstack.api.response.IPAddressResponse;
 import org.apache.cloudstack.api.response.SuccessResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.event.EventTypes;
 import com.cloud.exception.InvalidParameterValueException;
 import com.cloud.exception.ResourceUnavailableException;
 import com.cloud.network.RemoteAccessVpn;
-import com.cloud.user.UserContext;
 
 @APICommand(name = "deleteRemoteAccessVpn", description="Destroys a l2tp/ipsec remote access vpn", responseObject=SuccessResponse.class)
 public class DeleteRemoteAccessVpnCmd extends BaseAsyncCmd {
@@ -84,7 +85,7 @@ public class DeleteRemoteAccessVpnCmd extends BaseAsyncCmd {
 
     @Override
     public void execute() throws ResourceUnavailableException {
-        _ravService.destroyRemoteAccessVpnForIp(publicIpId, UserContext.current().getCaller());
+        _ravService.destroyRemoteAccessVpnForIp(publicIpId, CallContext.current().getCallingAccount());
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/user/vpn/RemoveVpnUserCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/vpn/RemoveVpnUserCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpn/RemoveVpnUserCmd.java
index 9520e80..9b3fa70 100644
--- a/api/src/org/apache/cloudstack/api/command/user/vpn/RemoveVpnUserCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/vpn/RemoveVpnUserCmd.java
@@ -25,11 +25,12 @@ import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.DomainResponse;
 import org.apache.cloudstack.api.response.ProjectResponse;
 import org.apache.cloudstack.api.response.SuccessResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.event.EventTypes;
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
 
 @APICommand(name = "removeVpnUser", description="Removes vpn user", responseObject=SuccessResponse.class)
 public class RemoveVpnUserCmd extends BaseAsyncCmd {
@@ -89,7 +90,7 @@ public class RemoveVpnUserCmd extends BaseAsyncCmd {
     public long getEntityOwnerId() {
         Long accountId = finalyzeAccountId(accountName, domainId, projectId, true);
         if (accountId == null) {
-            return UserContext.current().getCaller().getId();
+            return CallContext.current().getCallingAccount().getId();
         }
 
         return accountId;
@@ -108,7 +109,7 @@ public class RemoveVpnUserCmd extends BaseAsyncCmd {
     @Override
     public void execute(){
         Account owner = _accountService.getAccount(getEntityOwnerId());
-        boolean result = _ravService.removeVpnUser(owner.getId(), userName, UserContext.current().getCaller());
+        boolean result = _ravService.removeVpnUser(owner.getId(), userName, CallContext.current().getCallingAccount());
         if (!result) {
             throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to remove vpn user");
         }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/user/vpn/ResetVpnConnectionCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/vpn/ResetVpnConnectionCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpn/ResetVpnConnectionCmd.java
index d9f38d2..6caa571 100644
--- a/api/src/org/apache/cloudstack/api/command/user/vpn/ResetVpnConnectionCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/vpn/ResetVpnConnectionCmd.java
@@ -24,13 +24,14 @@ import org.apache.cloudstack.api.Parameter;
 import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.DomainResponse;
 import org.apache.cloudstack.api.response.Site2SiteVpnConnectionResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.event.EventTypes;
 import com.cloud.exception.ResourceUnavailableException;
 import com.cloud.network.Site2SiteVpnConnection;
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
 
 @APICommand(name = "resetVpnConnection", description="Reset site to site vpn connection", responseObject=Site2SiteVpnConnectionResponse.class)
 public class ResetVpnConnectionCmd extends BaseAsyncCmd {
@@ -84,7 +85,7 @@ public class ResetVpnConnectionCmd extends BaseAsyncCmd {
     public long getEntityOwnerId() {
         Long accountId = finalyzeAccountId(accountName, domainId, null, true);
         if (accountId == null) {
-            return UserContext.current().getCaller().getId();
+            return CallContext.current().getCallingAccount().getId();
         }
         return Account.ACCOUNT_ID_SYSTEM;
     }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/user/vpn/UpdateVpnCustomerGatewayCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/vpn/UpdateVpnCustomerGatewayCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpn/UpdateVpnCustomerGatewayCmd.java
index 3aca5cd..72ecf8f 100644
--- a/api/src/org/apache/cloudstack/api/command/user/vpn/UpdateVpnCustomerGatewayCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/vpn/UpdateVpnCustomerGatewayCmd.java
@@ -24,11 +24,12 @@ import org.apache.cloudstack.api.Parameter;
 import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.DomainResponse;
 import org.apache.cloudstack.api.response.Site2SiteCustomerGatewayResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.event.EventTypes;
 import com.cloud.network.Site2SiteCustomerGateway;
-import com.cloud.user.UserContext;
 
 @APICommand(name = "updateVpnCustomerGateway", description="Update site to site vpn customer gateway", responseObject=Site2SiteCustomerGatewayResponse.class)
 public class UpdateVpnCustomerGatewayCmd extends BaseAsyncCmd {
@@ -136,7 +137,7 @@ public class UpdateVpnCustomerGatewayCmd extends BaseAsyncCmd {
     public long getEntityOwnerId() {
         Long accountId = finalyzeAccountId(accountName, domainId, null, true);
         if (accountId == null) {
-            accountId = UserContext.current().getCaller().getId();
+            accountId = CallContext.current().getCallingAccount().getId();
         }
         return accountId;
     }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/context/CallContext.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/context/CallContext.java b/api/src/org/apache/cloudstack/context/CallContext.java
new file mode 100644
index 0000000..c98908a
--- /dev/null
+++ b/api/src/org/apache/cloudstack/context/CallContext.java
@@ -0,0 +1,218 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+package org.apache.cloudstack.context;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.UUID;
+
+import org.apache.log4j.Logger;
+import org.apache.log4j.NDC;
+
+import com.cloud.dao.EntityManager;
+import com.cloud.exception.CloudAuthenticationException;
+import com.cloud.user.Account;
+import com.cloud.user.User;
+import com.cloud.utils.UuidUtils;
+import com.cloud.utils.exception.CloudRuntimeException;
+
+/**
+ * CallContext records information about the environment the call is made.  This
+ * class must be always be available in all CloudStack code.  Every thread
+ * entry point must set the context and remove it when the thread finishes.
+ */
+public class CallContext {
+    private static final Logger s_logger = Logger.getLogger(CallContext.class);
+    private static ThreadLocal<CallContext> s_currentContext = new ThreadLocal<CallContext>();
+
+    private String contextId;
+    private Account account;
+    private long startEventId = 0;
+    private String eventDetails;
+    private User user;
+    private final Map<Object, Object> context = new HashMap<Object, Object>();
+
+    private static EntityManager s_entityMgr;
+
+    public static void init(EntityManager entityMgr) {
+        s_entityMgr = entityMgr;
+    }
+
+    protected CallContext() {
+    }
+
+    protected CallContext(User user, Account account, String contextId) {
+        this.user = user;
+        this.account = account;
+        this.contextId = contextId;
+    }
+
+    public void putContextParameter(Object key, Object value) {
+        context.put(key, value);
+    }
+
+    public Object getContextParameter(Object key) {
+        return context.get(key);
+    }
+
+    public long getCallingUserId() {
+        return user.getId();
+    }
+
+    public User getCallingUser() {
+        return user;
+    }
+
+    public String getContextId() {
+        return contextId;
+    }
+
+    public Account getCallingAccount() {
+        return account;
+    }
+
+    public static CallContext current() {
+        return s_currentContext.get();
+    }
+
+    /**
+     * This method should only be called if you can propagate the context id
+     * from another CallContext.
+     * 
+     * @param callingUser calling user
+     * @param callingAccount calling account
+     * @param contextId context id propagated from another call context
+     * @return CallContext
+     */
+    public static CallContext register(User callingUser, Account callingAccount, String contextId) {
+        /*
+                Unit tests will have multiple times of setup/tear-down call to this, remove assertions to all unit test to run
+                 
+                assert s_currentContext.get() == null : "There's a context already so what does this new register context mean? " + s_currentContext.get().toString();
+                if (s_currentContext.get() != null) { // FIXME: This should be removed soon.  I added this check only to surface all the places that have this problem.
+                    throw new CloudRuntimeException("There's a context already so what does this new register context mean? " + s_currentContext.get().toString());
+                }
+        */
+        CallContext callingContext = new CallContext(callingUser, callingAccount, contextId);
+        s_currentContext.set(callingContext);
+        NDC.push("ctx-" + UuidUtils.first(contextId));
+        s_logger.debug("Setting calling context: " + callingContext);
+        return callingContext;
+    }
+
+    public static CallContext register(User callingUser, Account callingAccount) {
+        return register(callingUser, callingAccount, UUID.randomUUID().toString());
+    }
+
+    public static CallContext registerSystemCallContextOnceOnly() {
+        try {
+            CallContext context = s_currentContext.get();
+            if (context == null) {
+                return register(User.UID_SYSTEM, Account.ACCOUNT_ID_SYSTEM);
+            }
+            assert context.getCallingUserId() == User.UID_SYSTEM : "You are calling a very specific method that registers a one time system context.  This method is meant for background threads that does processing.";
+            return context;
+        } catch (Exception e) {
+            s_logger.fatal("Exiting the system because we're unable to register the system call context.", e);
+            System.exit(1);
+            throw new CloudRuntimeException("Should never hit this");
+        }
+    }
+
+    public static CallContext register(String callingUserUuid, String callingAccountUuid) {
+        Account account = s_entityMgr.findByUuid(Account.class, callingAccountUuid);
+        if (account == null) {
+            throw new CloudAuthenticationException("The account is no longer current.").add(Account.class, callingAccountUuid);
+        }
+
+        User user = s_entityMgr.findByUuid(User.class, callingUserUuid);
+        if (user == null) {
+            throw new CloudAuthenticationException("The user is no longer current.").add(User.class, callingUserUuid);
+        }
+        return register(user, account);
+    }
+
+    public static CallContext register(long callingUserId, long callingAccountId) throws CloudAuthenticationException {
+        Account account = s_entityMgr.findById(Account.class, callingAccountId);
+        if (account == null) {
+            throw new CloudAuthenticationException("The account is no longer current.").add(Account.class, Long.toString(callingAccountId));
+        }
+        User user = s_entityMgr.findById(User.class, callingUserId);
+        if (user == null) {
+            throw new CloudAuthenticationException("The user is no longer current.").add(User.class, Long.toString(callingUserId));
+        }
+        return register(user, account);
+    }
+
+    public static CallContext unregister() {
+        CallContext context = s_currentContext.get();
+        if (context == null) {
+            s_logger.trace("No context to remove");
+            return null;
+        }
+        s_currentContext.remove();
+        s_logger.debug("Context removed " + context);
+        String contextId = context.getContextId();
+        String sessionIdOnStack = null;
+        String sessionIdPushedToNDC = "ctx-" + UuidUtils.first(contextId);
+        while ((sessionIdOnStack = NDC.pop()) != null) {
+            if (sessionIdPushedToNDC.equals(sessionIdOnStack)) {
+                break;
+            }
+            if (s_logger.isTraceEnabled()) {
+                s_logger.trace("Popping from NDC: " + contextId);
+            }
+        }
+        return context;
+    }
+
+    public void setStartEventId(long startEventId) {
+        this.startEventId = startEventId;
+    }
+
+    public long getStartEventId() {
+        return startEventId;
+    }
+
+    public long getCallingAccountId() {
+        return account.getId();
+    }
+
+    public String getCallingAccountUuid() {
+        return account.getUuid();
+    }
+
+    public String getCallingUserUuid() {
+        return user.getUuid();
+    }
+
+    public void setEventDetails(String eventDetails) {
+        this.eventDetails = eventDetails;
+    }
+
+    public String getEventDetails() {
+        return eventDetails;
+    }
+
+    @Override
+    public String toString() {
+        return new StringBuffer("CallContext[acct=").append(account.getId())
+                .append("; user=").append(user.getId())
+                .append("; session=").append(contextId)
+                .append("]").toString();
+    }
+}

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/client/tomcatconf/applicationContext.xml.in
----------------------------------------------------------------------
diff --git a/client/tomcatconf/applicationContext.xml.in b/client/tomcatconf/applicationContext.xml.in
index c717b56..0f3d328 100644
--- a/client/tomcatconf/applicationContext.xml.in
+++ b/client/tomcatconf/applicationContext.xml.in
@@ -832,7 +832,6 @@
   <bean id="statsCollector" class="com.cloud.server.StatsCollector" />
   <bean id="storagePoolAutomationImpl" class="com.cloud.storage.StoragePoolAutomationImpl" />
   <bean id="usageEventUtils" class="com.cloud.event.UsageEventUtils" />
-  <bean id="userContextInitializer" class="com.cloud.user.UserContextInitializer" />
   <bean id="vMEntityManagerImpl" class="org.apache.cloudstack.engine.cloud.entity.api.VMEntityManagerImpl" />
   <bean id="virtualMachineEntityFactory" class="org.apache.cloudstack.engine.cloud.entity.api.VirtualMachineEntityFactory" />
   <bean id="virtualMachineEntityImpl" class="org.apache.cloudstack.engine.cloud.entity.api.VirtualMachineEntityImpl" />

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/plugins/api/discovery/src/org/apache/cloudstack/api/command/user/discovery/ListApisCmd.java
----------------------------------------------------------------------
diff --git a/plugins/api/discovery/src/org/apache/cloudstack/api/command/user/discovery/ListApisCmd.java b/plugins/api/discovery/src/org/apache/cloudstack/api/command/user/discovery/ListApisCmd.java
index 5de04f0..5b6d7ce 100644
--- a/plugins/api/discovery/src/org/apache/cloudstack/api/command/user/discovery/ListApisCmd.java
+++ b/plugins/api/discovery/src/org/apache/cloudstack/api/command/user/discovery/ListApisCmd.java
@@ -26,11 +26,12 @@ import org.apache.cloudstack.api.Parameter;
 import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.ApiDiscoveryResponse;
 import org.apache.cloudstack.api.response.ListResponse;
+import org.apache.cloudstack.context.CallContext;
 import org.apache.cloudstack.discovery.ApiDiscoveryService;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.user.User;
-import com.cloud.user.UserContext;
 
 @APICommand(name = "listApis", responseObject = ApiDiscoveryResponse.class, description = "lists all available apis on the server, provided by the Api Discovery plugin", since = "4.1.0")
 public class ListApisCmd extends BaseCmd {
@@ -47,7 +48,7 @@ public class ListApisCmd extends BaseCmd {
     @Override
     public void execute() throws ServerApiException {
         if (_apiDiscoveryService != null) {
-            User user = UserContext.current().getCallerUser();
+            User user = CallContext.current().getCallingUser();
             ListResponse<ApiDiscoveryResponse> response = (ListResponse<ApiDiscoveryResponse>) _apiDiscoveryService.listApis(user, name);
             if (response == null) {
                 throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Api Discovery plugin was unable to find an api by that name or process any apis");


[15/50] [abbrv] git commit: updated refs/heads/ldapplugin to 7bc705e

Posted by ch...@apache.org.
CLOUDSTACK-3563: UI > Network menu > Guest Netework section > provide "Add Guest Network" option where root-admin can create shared networks from.


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

Branch: refs/heads/ldapplugin
Commit: be0dedefa8875d1d36baca0686243334daae6964
Parents: 686f9ae
Author: Jessica Wang <je...@apache.org>
Authored: Tue Jul 16 13:28:16 2013 -0700
Committer: Jessica Wang <je...@apache.org>
Committed: Tue Jul 16 13:38:28 2013 -0700

----------------------------------------------------------------------
 ui/scripts/network.js         |   5 +-
 ui/scripts/sharedFunctions.js | 512 +++++++++++++++++++++++++++++++++++++
 ui/scripts/system.js          | 414 +-----------------------------
 3 files changed, 517 insertions(+), 414 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/be0dedef/ui/scripts/network.js
----------------------------------------------------------------------
diff --git a/ui/scripts/network.js b/ui/scripts/network.js
index c52b85a..0822d44 100755
--- a/ui/scripts/network.js
+++ b/ui/scripts/network.js
@@ -550,7 +550,10 @@
               messages: {
                 notification: function() { return 'Add Isolated Guest Network'; }
               }
-            }
+            },
+            
+            rootAdminAddGuestNetwork: $.extend( {}, addGuestNetworkDialog.def, {isHeader: true} )
+            
           },
           id: 'networks',
           fields: {

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/be0dedef/ui/scripts/sharedFunctions.js
----------------------------------------------------------------------
diff --git a/ui/scripts/sharedFunctions.js b/ui/scripts/sharedFunctions.js
index bf6464c..a9f833c 100644
--- a/ui/scripts/sharedFunctions.js
+++ b/ui/scripts/sharedFunctions.js
@@ -134,6 +134,518 @@ var lbProviderMap = {
   }
 };
 
+//Add Guest Network in Advanced zone (for root-admin only)
+var addGuestNetworkDialog = {
+  zoneObjs: [],   
+  physicalNetworkObjs: [],
+  networkOfferingObjs: [],
+  def: {
+    label: 'label.add.guest.network',
+
+    messages: {     
+      notification: function(args) {
+        return 'label.add.guest.network';
+      }
+    },
+
+    preFilter: function(args) {      
+      if(isAdmin()) 
+        return true;     
+      else
+        return false;      
+    },
+    
+    createForm: {
+      title: 'label.add.guest.network',  //Add Shared Network in advanced zone
+
+      preFilter: function(args) {   
+        if('zones' in args.context) {//Infrastructure menu > zone detail > guest traffic type > network tab (only shown in advanced zone) > add guest network dialog
+          args.$form.find('.form-item[rel=zoneId]').hide();
+          args.$form.find('.form-item[rel=physicalNetworkId]').hide();
+        }
+        else {//Network menu > guest network section > add guest network dialog
+          args.$form.find('.form-item[rel=zoneId]').css('display', 'inline-block');
+          args.$form.find('.form-item[rel=physicalNetworkId]').css('display', 'inline-block');
+        }  
+      },
+      
+      fields: {
+        name: {
+          docID: 'helpGuestNetworkZoneName',
+          label: 'label.name',
+          validation: { required: true }
+        },
+        description: {
+          label: 'label.description',
+          docID: 'helpGuestNetworkZoneDescription',
+          validation: { required: true }
+        },        
+        
+        zoneId: {
+          label: 'label.zone',
+          validation: { required: true },
+          docID: 'helpGuestNetworkZone',
+          select: function(args) {   
+            if('zones' in args.context) {//Infrastructure menu > zone detail > guest traffic type > network tab (only shown in advanced zone) > add guest network dialog
+              addGuestNetworkDialog.zoneObjs = args.context.zones; //i.e. only one zone entry
+            }
+            else {//Network menu > guest network section > add guest network dialog
+              $.ajax({
+                url: createURL('listZones'),
+                async: false,
+                success: function(json) {
+                  addGuestNetworkDialog.zoneObjs = []; //reset                   
+                  var items = json.listzonesresponse.zone;
+                  if(items != null) {
+                    for(var i = 0; i < items.length; i++) {
+                      if(items[i].networktype == 'Advanced') {
+                        addGuestNetworkDialog.zoneObjs.push(items[i]);
+                      }
+                    }
+                  }                     
+                }
+              });
+            }              
+            args.response.success({
+              data: $.map(addGuestNetworkDialog.zoneObjs, function(zone) {
+                return {
+                  id: zone.id,
+                  description: zone.name
+                };
+              })
+            });    
+          },
+          isHidden: true
+        },   
+        
+        physicalNetworkId: {
+          label: 'label.physical.network',
+          dependsOn: 'zoneId',
+          select: function(args) {   
+            if('physicalNetworks' in args.context) {
+              addGuestNetworkDialog.physicalNetworkObjs = args.context.physicalNetworks;
+            }
+            else {
+              var selectedZoneId = args.$form.find('.form-item[rel=zoneId]').find('select').val();
+              $.ajax({
+                url: createURL('listPhysicalNetworks'),
+                data: {
+                  zoneid: selectedZoneId
+                },
+                async: false,
+                success: function(json) {               
+                  addGuestNetworkDialog.physicalNetworkObjs = json.listphysicalnetworksresponse.physicalnetwork;                  
+                }
+              });
+            }        
+            var items = [];
+            if(addGuestNetworkDialog.physicalNetworkObjs != null) {
+              for(var i = 0; i < addGuestNetworkDialog.physicalNetworkObjs.length; i++) {
+                items.push({ id: addGuestNetworkDialog.physicalNetworkObjs[i].id, description: addGuestNetworkDialog.physicalNetworkObjs[i].name });
+              }
+            }
+            args.response.success({data: items});            
+          },
+          isHidden: true
+        },
+        
+        vlanId: {
+          label: 'label.vlan.id',
+          docID: 'helpGuestNetworkZoneVLANID'
+        },
+        isolatedpvlanId: {
+          label: 'Secondary Isolated VLAN ID'                           
+        },
+        
+        scope: {
+          label: 'label.scope',
+          docID: 'helpGuestNetworkZoneScope',
+          select: function(args) {
+            var selectedZoneId = args.$form.find('.form-item[rel=zoneId]').find('select').val();
+            var selectedZoneObj = {};
+            if(addGuestNetworkDialog.zoneObjs != null && selectedZoneId != "") {
+              for(var i = 0; i < addGuestNetworkDialog.zoneObjs.length; i++) {
+                if(addGuestNetworkDialog.zoneObjs[i].id == selectedZoneId) {
+                  selectedZoneObj = addGuestNetworkDialog.zoneObjs[i];
+                  break;
+                }
+              }
+            }      
+                        
+            var array1 = [];                              
+            if(selectedZoneObj.networktype == "Advanced" && selectedZoneObj.securitygroupsenabled == true) {                                
+              array1.push({id: 'zone-wide', description: 'All'});
+            }
+            else {                              
+              array1.push({id: 'zone-wide', description: 'All'});
+              array1.push({id: 'domain-specific', description: 'Domain'});
+              array1.push({id: 'account-specific', description: 'Account'});
+              array1.push({id: 'project-specific', description: 'Project'});
+            }
+            args.response.success({data: array1});
+
+            args.$select.change(function() {
+              var $form = $(this).closest('form');
+              if($(this).val() == "zone-wide") {
+                $form.find('.form-item[rel=domainId]').hide();
+                $form.find('.form-item[rel=subdomainaccess]').hide();
+                $form.find('.form-item[rel=account]').hide();
+                $form.find('.form-item[rel=projectId]').hide();
+              }
+              else if ($(this).val() == "domain-specific") {
+                $form.find('.form-item[rel=domainId]').css('display', 'inline-block');
+                $form.find('.form-item[rel=subdomainaccess]').css('display', 'inline-block');
+                $form.find('.form-item[rel=account]').hide();
+                $form.find('.form-item[rel=projectId]').hide();
+              }
+              else if($(this).val() == "account-specific") {
+                $form.find('.form-item[rel=domainId]').css('display', 'inline-block');
+                $form.find('.form-item[rel=subdomainaccess]').hide();
+                $form.find('.form-item[rel=account]').css('display', 'inline-block');
+                $form.find('.form-item[rel=projectId]').hide();
+              }
+              else if($(this).val() == "project-specific") {
+                $form.find('.form-item[rel=domainId]').css('display', 'inline-block');
+                $form.find('.form-item[rel=subdomainaccess]').hide();
+                $form.find('.form-item[rel=account]').hide();
+                $form.find('.form-item[rel=projectId]').css('display', 'inline-block');
+              }
+            });
+          }
+        },
+        domainId: {
+          label: 'label.domain',
+          validation: { required: true },
+          select: function(args) {
+            var items = [];
+            var selectedZoneId = args.$form.find('.form-item[rel=zoneId]').find('select').val();
+            var selectedZoneObj = {};
+            if(addGuestNetworkDialog.zoneObjs != null && selectedZoneId != "") {
+              for(var i = 0; i < addGuestNetworkDialog.zoneObjs.length; i++) {
+                if(addGuestNetworkDialog.zoneObjs[i].id == selectedZoneId) {
+                  selectedZoneObj = addGuestNetworkDialog.zoneObjs[i];
+                  break;
+                }
+              }
+            }            
+            if(selectedZoneObj.domainid != null) { //list only domains under selectedZoneObj.domainid
+              $.ajax({
+                url: createURL("listDomainChildren&id=" + selectedZoneObj.domainid + "&isrecursive=true"),
+                dataType: "json",
+                async: false,
+                success: function(json) {
+                  var domainObjs = json.listdomainchildrenresponse.domain;
+                  $(domainObjs).each(function() {
+                    items.push({id: this.id, description: this.path});
+                  });
+                }
+              });
+              $.ajax({
+                url: createURL("listDomains&id=" + selectedZoneObj.domainid),
+                dataType: "json",
+                async: false,
+                success: function(json) {
+                  var domainObjs = json.listdomainsresponse.domain;
+                  $(domainObjs).each(function() {
+                    items.push({id: this.id, description: this.path});
+                  });
+                }
+              });
+            }
+            else { //list all domains
+              $.ajax({
+                url: createURL("listDomains&listAll=true"),
+                dataType: "json",
+                async: false,
+                success: function(json) {
+                  var domainObjs = json.listdomainsresponse.domain;
+                  $(domainObjs).each(function() {
+                    items.push({id: this.id, description: this.path});
+                  });
+                }
+              });
+            }
+            args.response.success({data: items});
+          }
+        },
+        subdomainaccess: {
+          label: 'label.subdomain.access', isBoolean: true, isHidden: true,
+        },
+        account: { label: 'label.account' },
+
+        projectId: {
+          label: 'label.project',
+          validation: { required: true },
+          select: function(args) {
+            var items = [];
+            $.ajax({
+              url: createURL("listProjects&listAll=true"),
+              dataType: "json",
+              async: false,
+              success: function(json) {
+                projectObjs = json.listprojectsresponse.project;
+                $(projectObjs).each(function() {
+                  items.push({id: this.id, description: this.name});
+                });
+              }
+            });
+            args.response.success({data: items});
+          }
+        },
+        
+        networkOfferingId: {
+          label: 'label.network.offering',
+          docID: 'helpGuestNetworkZoneNetworkOffering',
+          dependsOn: 'scope',
+          select: function(args) {   
+            var data = {
+              state: 'Enabled',
+              zoneid: args.$form.find('.form-item[rel=zoneId]').find('select').val()
+            };
+                        
+            var selectedPhysicalNetworkObj = [];
+            var selectedPhysicalNetworkId = args.$form.find('.form-item[rel=physicalNetworkId]').find('select').val();
+            if(addGuestNetworkDialog.physicalNetworkObjs != null) {
+              for(var i = 0; i < addGuestNetworkDialog.physicalNetworkObjs.length; i++) {
+                if(addGuestNetworkDialog.physicalNetworkObjs[i].id == selectedPhysicalNetworkId) {
+                  selectedPhysicalNetworkObj = addGuestNetworkDialog.physicalNetworkObjs[i];
+                  break;
+                }
+              }
+            }     
+            if(selectedPhysicalNetworkObj.tags != null && selectedPhysicalNetworkObj.tags.length > 0) {
+              $.extend(data, {
+                tags: selectedPhysicalNetworkObj.tags
+              });              
+            }            
+            
+            //Network tab in Guest Traffic Type in Infrastructure menu is only available when it's under Advanced zone.
+            //zone dropdown in add guest network dialog includes only Advanced zones.  
+            if(args.scope == "zone-wide" || args.scope == "domain-specific") {
+              $.extend(data, {
+                guestiptype: 'Shared'
+              });
+            }
+
+            var items= [];             
+            $.ajax({
+              url: createURL('listNetworkOfferings'),
+              data: data,
+              async: false,
+              success: function(json) {        
+                addGuestNetworkDialog.networkOfferingObjs = json.listnetworkofferingsresponse.networkoffering;
+                if (addGuestNetworkDialog.networkOfferingObjs != null && addGuestNetworkDialog.networkOfferingObjs.length > 0) {                  
+                  var selectedZoneId = args.$form.find('.form-item[rel=zoneId]').find('select').val();
+                  var selectedZoneObj = {};
+                  if(addGuestNetworkDialog.zoneObjs != null && selectedZoneId != "") {
+                    for(var i = 0; i < addGuestNetworkDialog.zoneObjs.length; i++) {
+                      if(addGuestNetworkDialog.zoneObjs[i].id == selectedZoneId) {
+                        selectedZoneObj = addGuestNetworkDialog.zoneObjs[i];
+                        break;
+                      }
+                    }
+                  }     
+                  for (var i = 0; i < addGuestNetworkDialog.networkOfferingObjs.length; i++) {    
+                    //for zone-wide network in Advanced SG-enabled zone, list only SG network offerings 
+                    if(selectedZoneObj.networktype == 'Advanced' && selectedZoneObj.securitygroupsenabled == true) {                                    
+                      if(args.scope == "zone-wide") { 
+                        var includingSecurityGroup = false;
+                        var serviceObjArray = addGuestNetworkDialog.networkOfferingObjs[i].service;
+                        for(var k = 0; k < serviceObjArray.length; k++) {                                           
+                          if(serviceObjArray[k].name == "SecurityGroup") {
+                            includingSecurityGroup = true;
+                            break;
+                          }
+                        }
+                        if(includingSecurityGroup == false)
+                          continue; //skip to next network offering
+                      }
+                    }                    
+                    items.push({id: addGuestNetworkDialog.networkOfferingObjs[i].id, description: addGuestNetworkDialog.networkOfferingObjs[i].displaytext});
+                  }
+                }
+              }
+            });            
+            args.response.success({data: items});
+
+            args.$select.change(function(){
+              var $form = $(this).closest("form");
+              var selectedNetworkOfferingId = $(this).val();
+              $(addGuestNetworkDialog.networkOfferingObjs).each(function(){
+                if(this.id == selectedNetworkOfferingId) {                                    
+                  if(this.specifyvlan == false) {
+                    $form.find('.form-item[rel=vlanId]').hide();
+                    cloudStack.dialog.createFormField.validation.required.remove($form.find('.form-item[rel=vlanId]')); //make vlanId optional  
+                    
+                    $form.find('.form-item[rel=isolatedpvlanId]').hide();
+                  }
+                  else {
+                    $form.find('.form-item[rel=vlanId]').css('display', 'inline-block');                                      
+                    cloudStack.dialog.createFormField.validation.required.add($form.find('.form-item[rel=vlanId]'));    //make vlanId required  
+                    
+                    $form.find('.form-item[rel=isolatedpvlanId]').css('display', 'inline-block');             
+                  }
+                  return false; //break each loop
+                }
+              });
+            });
+          }
+        },
+
+        //IPv4 (begin)
+        ip4gateway: {
+          label: 'IPv4 Gateway',
+          docID: 'helpGuestNetworkZoneGateway'
+        },
+        ip4Netmask: {
+          label: 'IPv4 Netmask',
+          docID: 'helpGuestNetworkZoneNetmask'
+        },
+        startipv4: { 
+          label: 'IPv4 Start IP',               
+          docID: 'helpGuestNetworkZoneStartIP'
+        },
+        endipv4: { 
+          label: 'IPv4 End IP',               
+          docID: 'helpGuestNetworkZoneEndIP'
+        },
+        //IPv4 (end)
+        
+        //IPv6 (begin)
+        ip6gateway: {
+          label: 'IPv6 Gateway',
+          docID: 'helpGuestNetworkZoneGateway'
+        },
+        ip6cidr: {
+          label: 'IPv6 CIDR'
+        },
+        startipv6: { 
+          label: 'IPv6 Start IP',               
+          docID: 'helpGuestNetworkZoneStartIP'
+        },
+        endipv6: { 
+          label: 'IPv6 End IP',               
+          docID: 'helpGuestNetworkZoneEndIP'
+        },
+        //IPv6 (end)
+
+        networkdomain: {
+          label: 'label.network.domain',
+          docID: 'helpGuestNetworkZoneNetworkDomain'
+        }
+      }
+    },
+
+    action: function(args) { //Add guest network in advanced zone                       
+      if (
+        ((args.data.ip4gateway.length == 0) && (args.data.ip4Netmask.length == 0) && (args.data.startipv4.length == 0) && (args.data.endipv4.length == 0))
+        && 
+        ((args.data.ip6gateway.length == 0) && (args.data.ip6cidr.length == 0) && (args.data.startipv6.length == 0) && (args.data.endipv6.length == 0))
+      )
+      {
+        args.response.error("Either IPv4 fields or IPv6 fields need to be filled when adding a guest network");
+        return;
+      }
+    
+      var $form = args.$form;
+
+      var array1 = [];  
+      array1.push("&zoneId=" + args.data.zoneId);
+      array1.push("&networkOfferingId=" + args.data.networkOfferingId);
+
+      //Pass physical network ID to createNetwork API only when network offering's guestiptype is Shared.
+      var selectedNetworkOfferingObj;
+      if(addGuestNetworkDialog.networkOfferingObjs != null) {
+        for(var i = 0; i < addGuestNetworkDialog.networkOfferingObjs.length; i++) {
+          if(addGuestNetworkDialog.networkOfferingObjs[i].id == args.data.networkOfferingId) {
+            selectedNetworkOfferingObj = addGuestNetworkDialog.networkOfferingObjs[i]
+            break;
+          }
+        }
+      }
+      
+      if(selectedNetworkOfferingObj.guestiptype == "Shared")
+        array1.push("&physicalnetworkid=" + args.data.physicalNetworkId);
+
+      array1.push("&name=" + todb(args.data.name));
+      array1.push("&displayText=" + todb(args.data.description));
+
+      if(($form.find('.form-item[rel=vlanId]').css("display") != "none") && (args.data.vlanId != null && args.data.vlanId.length > 0))
+        array1.push("&vlan=" + todb(args.data.vlanId));
+      
+      if(($form.find('.form-item[rel=isolatedpvlanId]').css("display") != "none") && (args.data.isolatedpvlanId != null && args.data.isolatedpvlanId.length > 0))
+        array1.push("&isolatedpvlan=" + todb(args.data.isolatedpvlanId));
+                              
+      if($form.find('.form-item[rel=domainId]').css("display") != "none") {
+        array1.push("&domainId=" + args.data.domainId);
+
+        if($form.find('.form-item[rel=account]').css("display") != "none") {  //account-specific
+          array1.push("&account=" + args.data.account);
+          array1.push("&acltype=account");
+        }
+        else if($form.find('.form-item[rel=projectId]').css("display") != "none") {  //project-specific
+          array1.push("&projectid=" + args.data.projectId);
+          array1.push("&acltype=account");                            
+        }
+        else {  //domain-specific
+          array1.push("&acltype=domain");
+
+          if ($form.find('.form-item[rel=subdomainaccess]:visible input:checked').size())
+            array1.push("&subdomainaccess=true");
+          else
+            array1.push("&subdomainaccess=false");
+        }
+      }
+      else { //zone-wide
+        array1.push("&acltype=domain"); //server-side will make it Root domain (i.e. domainid=1)
+      }
+
+      //IPv4 (begin)
+      if(args.data.ip4gateway != null && args.data.ip4gateway.length > 0)
+        array1.push("&gateway=" + args.data.ip4gateway);
+      if(args.data.ip4Netmask != null && args.data.ip4Netmask.length > 0)
+        array1.push("&netmask=" + args.data.ip4Netmask);
+      if(($form.find('.form-item[rel=startipv4]').css("display") != "none") && (args.data.startipv4 != null && args.data.startipv4.length > 0))
+        array1.push("&startip=" + args.data.startipv4);
+      if(($form.find('.form-item[rel=endipv4]').css("display") != "none") && (args.data.endipv4 != null && args.data.endipv4.length > 0))
+        array1.push("&endip=" + args.data.endipv4);
+      //IPv4 (end)
+      
+      //IPv6 (begin)
+      if(args.data.ip6gateway != null && args.data.ip6gateway.length > 0)
+        array1.push("&ip6gateway=" + args.data.ip6gateway);
+      if(args.data.ip6cidr != null && args.data.ip6cidr.length > 0)
+        array1.push("&ip6cidr=" + args.data.ip6cidr);
+      if(($form.find('.form-item[rel=startipv6]').css("display") != "none") && (args.data.startipv6 != null && args.data.startipv6.length > 0))
+        array1.push("&startipv6=" + args.data.startipv6);
+      if(($form.find('.form-item[rel=endipv6]').css("display") != "none") && (args.data.endipv6 != null && args.data.endipv6.length > 0))
+        array1.push("&endipv6=" + args.data.endipv6);
+      //IPv6 (end)
+      
+      if(args.data.networkdomain != null && args.data.networkdomain.length > 0)
+        array1.push("&networkdomain=" + todb(args.data.networkdomain));
+
+      $.ajax({
+        url: createURL("createNetwork" + array1.join("")),
+        dataType: "json",
+        success: function(json) {
+          var item = json.createnetworkresponse.network;
+          args.response.success({data:item});
+        },
+        error: function(XMLHttpResponse) {
+          var errorMsg = parseXMLHttpResponse(XMLHttpResponse);
+          args.response.error(errorMsg);
+        }
+      });
+    },
+    notification: {
+      poll: function(args) {
+        args.complete();
+      }
+    }
+  }    
+}
+  
 
 // Role Functions
 function isAdmin() {

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/be0dedef/ui/scripts/system.js
----------------------------------------------------------------------
diff --git a/ui/scripts/system.js b/ui/scripts/system.js
index 18c3df4..3038a8a 100644
--- a/ui/scripts/system.js
+++ b/ui/scripts/system.js
@@ -1309,419 +1309,7 @@
                     //scope: { label: 'label.scope' }
                   },
                   actions: {
-                    add: {
-                      label: 'label.add.guest.network',
-
-                      messages: {
-                        confirm: function(args) {
-                          return 'message.add.guest.network';
-                        },
-                        notification: function(args) {
-                          return 'label.add.guest.network';
-                        }
-                      },
-
-                      createForm: {
-                        title: 'label.add.guest.network',  //Add guest network in advanced zone
-
-                        fields: {
-                          name: {
-                            docID: 'helpGuestNetworkZoneName',
-                            label: 'label.name',
-                            validation: { required: true }
-                          },
-                          description: {
-                            label: 'label.description',
-                            docID: 'helpGuestNetworkZoneDescription',
-                            validation: { required: true }
-                          },
-                          vlanId: {
-                            label: 'label.vlan.id',
-                            docID: 'helpGuestNetworkZoneVLANID'
-                          },
-                          isolatedpvlanId: {
-                            label: 'Secondary Isolated VLAN ID'                           
-                          },
-                          
-                          scope: {
-                            label: 'label.scope',
-                            docID: 'helpGuestNetworkZoneScope',
-                            select: function(args) {
-                              var array1 = [];															
-															if(args.context.zones[0].networktype == "Advanced" && args.context.zones[0].securitygroupsenabled	== true) {															  
-																array1.push({id: 'zone-wide', description: 'All'});
-															}
-															else {															
-																array1.push({id: 'zone-wide', description: 'All'});
-																array1.push({id: 'domain-specific', description: 'Domain'});
-																array1.push({id: 'account-specific', description: 'Account'});
-																array1.push({id: 'project-specific', description: 'Project'});
-															}
-                              args.response.success({data: array1});
-
-                              args.$select.change(function() {
-                                var $form = $(this).closest('form');
-                                if($(this).val() == "zone-wide") {
-                                  $form.find('.form-item[rel=domainId]').hide();
-                                  $form.find('.form-item[rel=subdomainaccess]').hide();
-                                  $form.find('.form-item[rel=account]').hide();
-																	$form.find('.form-item[rel=projectId]').hide();
-                                }
-                                else if ($(this).val() == "domain-specific") {
-                                  $form.find('.form-item[rel=domainId]').css('display', 'inline-block');
-                                  $form.find('.form-item[rel=subdomainaccess]').css('display', 'inline-block');
-                                  $form.find('.form-item[rel=account]').hide();
-																	$form.find('.form-item[rel=projectId]').hide();
-                                }
-                                else if($(this).val() == "account-specific") {
-                                  $form.find('.form-item[rel=domainId]').css('display', 'inline-block');
-                                  $form.find('.form-item[rel=subdomainaccess]').hide();
-                                  $form.find('.form-item[rel=account]').css('display', 'inline-block');
-																	$form.find('.form-item[rel=projectId]').hide();
-                                }
-																else if($(this).val() == "project-specific") {
-                                  $form.find('.form-item[rel=domainId]').css('display', 'inline-block');
-                                  $form.find('.form-item[rel=subdomainaccess]').hide();
-                                  $form.find('.form-item[rel=account]').hide();
-																	$form.find('.form-item[rel=projectId]').css('display', 'inline-block');
-                                }
-                              });
-                            }
-                          },
-                          domainId: {
-                            label: 'label.domain',
-                            validation: { required: true },
-                            select: function(args) {
-                              var items = [];
-                              if(selectedZoneObj.domainid != null) { //list only domains under selectedZoneObj.domainid
-                                $.ajax({
-                                  url: createURL("listDomainChildren&id=" + selectedZoneObj.domainid + "&isrecursive=true"),
-                                  dataType: "json",
-                                  async: false,
-                                  success: function(json) {
-                                    var domainObjs = json.listdomainchildrenresponse.domain;
-                                    $(domainObjs).each(function() {
-                                      items.push({id: this.id, description: this.path});
-                                    });
-                                  }
-                                });
-                                $.ajax({
-                                  url: createURL("listDomains&id=" + selectedZoneObj.domainid),
-                                  dataType: "json",
-                                  async: false,
-                                  success: function(json) {
-                                    var domainObjs = json.listdomainsresponse.domain;
-                                    $(domainObjs).each(function() {
-                                      items.push({id: this.id, description: this.path});
-                                    });
-                                  }
-                                });
-                              }
-                              else { //list all domains
-                                $.ajax({
-                                  url: createURL("listDomains&listAll=true"),
-                                  dataType: "json",
-                                  async: false,
-                                  success: function(json) {
-                                    var domainObjs = json.listdomainsresponse.domain;
-                                    $(domainObjs).each(function() {
-                                      items.push({id: this.id, description: this.path});
-                                    });
-                                  }
-                                });
-                              }
-                              args.response.success({data: items});
-                            }
-                          },
-                          subdomainaccess: {
-                            label: 'label.subdomain.access', isBoolean: true, isHidden: true,
-                          },
-                          account: { label: 'label.account' },
-
-													projectId: {
-                            label: 'label.project',
-                            validation: { required: true },
-                            select: function(args) {
-                              var items = [];
-                              $.ajax({
-															  url: createURL("listProjects&listAll=true"),
-																dataType: "json",
-																async: false,
-																success: function(json) {
-																  projectObjs = json.listprojectsresponse.project;
-																  $(projectObjs).each(function() {
-                                    items.push({id: this.id, description: this.name});
-                                  });
-																}
-															});
-                              args.response.success({data: items});
-                            }
-                          },
-
-                          networkOfferingId: {
-                            label: 'label.network.offering',
-                            docID: 'helpGuestNetworkZoneNetworkOffering',
-                            dependsOn: 'scope',
-                            select: function(args) {
-															$.ajax({
-																url: createURL('listPhysicalNetworks'),
-																data: {
-																	id: args.context.physicalNetworks[0].id
-																},
-																async: false,
-																success: function(json) {
-																	args.context.physicalNetworks[0] = json.listphysicalnetworksresponse.physicalnetwork[0];
-																}
-															});
-
-                              var apiCmd = "listNetworkOfferings&state=Enabled&zoneid=" + selectedZoneObj.id;
-															var array1 = [];
-
-															if(physicalNetworkObjs.length > 1) { //multiple physical networks
-															  var guestTrafficTypeTotal = 0;
-															  for(var i = 0; i < physicalNetworkObjs.length; i++) {
-																  if(guestTrafficTypeTotal > 1) //as long as guestTrafficTypeTotal > 1, break for loop, don't need to continue to count. It doesn't matter whether guestTrafficTypeTotal is 2 or 3 or 4 or 5 or more. We only care whether guestTrafficTypeTotal is greater than 1.
-																	  break;
-																  $.ajax({
-																	  url: createURL("listTrafficTypes&physicalnetworkid=" + physicalNetworkObjs[i].id),
-																		dataType: "json",
-																		async: false,
-																		success: function(json) {
-																			var items = json.listtraffictypesresponse.traffictype;
-																			for(var k = 0; k < items.length; k++) {
-																			  if(items[k].traffictype == "Guest") {
-																				  guestTrafficTypeTotal++;
-																				  break;
-																				}
-																			}
-																		}
-																	});
-																}
-
-															  if(guestTrafficTypeTotal > 1) {
-																	if(args.context.physicalNetworks[0].tags != null && args.context.physicalNetworks[0].tags.length > 0) {
-																		array1.push("&tags=" + args.context.physicalNetworks[0].tags);
-																	}
-																	else {
-																		alert(dictionary['error.please.specify.physical.network.tags']);
-																		return;
-																	}
-																}
-															}
-
-                              //this tab (Network tab in guest network) only shows when it's under an Advanced zone
-															if(args.scope == "zone-wide" || args.scope == "domain-specific") {
-																array1.push("&guestiptype=Shared");
-															}
-
-															var networkOfferingArray = [];
-															
-                              $.ajax({
-                                url: createURL(apiCmd + array1.join("")),
-                                dataType: "json",
-                                async: false,
-                                success: function(json) {																  
-                                  networkOfferingObjs = json.listnetworkofferingsresponse.networkoffering;
-                                  if (networkOfferingObjs != null && networkOfferingObjs.length > 0) {
-                                    for (var i = 0; i < networkOfferingObjs.length; i++) {    
-																			//for zone-wide network in Advanced SG-enabled zone, list only SG network offerings 
-																			if(args.context.zones[0].networktype == 'Advanced' && args.context.zones[0].securitygroupsenabled == true) {																		
-																				if(args.scope == "zone-wide") { 
-																					var includingSecurityGroup = false;
-																					var serviceObjArray = networkOfferingObjs[i].service;
-																					for(var k = 0; k < serviceObjArray.length; k++) {																					  
-																						if(serviceObjArray[k].name == "SecurityGroup") {
-																							includingSecurityGroup = true;
-																							break;
-																						}
-																					}
-																					if(includingSecurityGroup == false)
-																						continue; //skip to next network offering
-																				}
-																			}
-																			
-                                      networkOfferingArray.push({id: networkOfferingObjs[i].id, description: networkOfferingObjs[i].displaytext});
-                                    }
-                                  }
-                                }
-                              });
-
-                              args.response.success({data: networkOfferingArray});
-
-
-															args.$select.change(function(){
-															  var $form = $(this).closest("form");
-																var selectedNetworkOfferingId = $(this).val();
-																$(networkOfferingObjs).each(function(){
-																  if(this.id == selectedNetworkOfferingId) {																		
-																		if(this.specifyvlan == false) {
-																		  $form.find('.form-item[rel=vlanId]').hide();
-																			cloudStack.dialog.createFormField.validation.required.remove($form.find('.form-item[rel=vlanId]'));	//make vlanId optional 	
-																			
-																			$form.find('.form-item[rel=isolatedpvlanId]').hide();
-																		}
-																		else {
-																		  $form.find('.form-item[rel=vlanId]').css('display', 'inline-block');																			
-																			cloudStack.dialog.createFormField.validation.required.add($form.find('.form-item[rel=vlanId]'));		//make vlanId required	
-																			
-																			$form.find('.form-item[rel=isolatedpvlanId]').css('display', 'inline-block');             
-																		}
-																		return false; //break each loop
-																	}
-																});
-															});
-                            }
-                          },
-
-                          //IPv4 (begin)
-                          ip4gateway: {
-                            label: 'IPv4 Gateway',
-                            docID: 'helpGuestNetworkZoneGateway'
-                          },
-                          ip4Netmask: {
-                            label: 'IPv4 Netmask',
-                            docID: 'helpGuestNetworkZoneNetmask'
-                          },
-                          startipv4: { 
-							label: 'IPv4 Start IP', 							
-                            docID: 'helpGuestNetworkZoneStartIP'
-						  },
-                          endipv4: { 
-							label: 'IPv4 End IP', 							
-                            docID: 'helpGuestNetworkZoneEndIP'
-						  },
-						//IPv4 (end)
-						  
-						//IPv6 (begin)
-                          ip6gateway: {
-                            label: 'IPv6 Gateway',
-                            docID: 'helpGuestNetworkZoneGateway'
-                          },
-                          ip6cidr: {
-                            label: 'IPv6 CIDR'
-                          },
-                          startipv6: { 
-							label: 'IPv6 Start IP', 							
-                            docID: 'helpGuestNetworkZoneStartIP'
-						  },
-                          endipv6: { 
-							label: 'IPv6 End IP', 							
-                            docID: 'helpGuestNetworkZoneEndIP'
-						  },
-						//IPv6 (end)
-						  
-                          networkdomain: {
-                            label: 'label.network.domain',
-                            docID: 'helpGuestNetworkZoneNetworkDomain'
-                          }
-                        }
-                      },
-
-                      action: function(args) { //Add guest network in advanced zone											  
-												if (
-													((args.data.ip4gateway.length == 0) && (args.data.ip4Netmask.length == 0) && (args.data.startipv4.length == 0) && (args.data.endipv4.length == 0))
-													&& 
-													((args.data.ip6gateway.length == 0) && (args.data.ip6cidr.length == 0) && (args.data.startipv6.length == 0) && (args.data.endipv6.length == 0))
-												)
-												{
-												  args.response.error("Either IPv4 fields or IPv6 fields need to be filled when adding a guest network");
-													return;
-												}
-											
-                        var $form = args.$form;
-
-												var array1 = [];
-                        array1.push("&zoneId=" + selectedZoneObj.id);
-												array1.push("&networkOfferingId=" + args.data.networkOfferingId);
-
-												//Pass physical network ID to createNetwork API only when network offering's guestiptype is Shared.
-												var selectedNetworkOfferingObj;
-												$(networkOfferingObjs).each(function(){
-													if(this.id == args.data.networkOfferingId) {
-													  selectedNetworkOfferingObj = this;
-														return false; //break each loop
-													}
-												});
-												if(selectedNetworkOfferingObj.guestiptype == "Shared")
-												  array1.push("&physicalnetworkid=" + selectedPhysicalNetworkObj.id);
-
-                        array1.push("&name=" + todb(args.data.name));
-                        array1.push("&displayText=" + todb(args.data.description));
-
-											  if(($form.find('.form-item[rel=vlanId]').css("display") != "none") && (args.data.vlanId != null && args.data.vlanId.length > 0))
-												  array1.push("&vlan=" + todb(args.data.vlanId));
-											  
-											  if(($form.find('.form-item[rel=isolatedpvlanId]').css("display") != "none") && (args.data.isolatedpvlanId != null && args.data.isolatedpvlanId.length > 0))
-                          array1.push("&isolatedpvlan=" + todb(args.data.isolatedpvlanId));
-											  											  
-												if($form.find('.form-item[rel=domainId]').css("display") != "none") {
-												  array1.push("&domainId=" + args.data.domainId);
-
-													if($form.find('.form-item[rel=account]').css("display") != "none") {  //account-specific
-														array1.push("&account=" + args.data.account);
-														array1.push("&acltype=account");
-													}
-													else if($form.find('.form-item[rel=projectId]').css("display") != "none") {  //project-specific
-														array1.push("&projectid=" + args.data.projectId);
-														array1.push("&acltype=account");														
-													}
-													else {  //domain-specific
-														array1.push("&acltype=domain");
-
-                            if ($form.find('.form-item[rel=subdomainaccess]:visible input:checked').size())
-															array1.push("&subdomainaccess=true");
-														else
-															array1.push("&subdomainaccess=false");
-													}
-												}
-												else { //zone-wide
-													array1.push("&acltype=domain"); //server-side will make it Root domain (i.e. domainid=1)
-												}
-
-												//IPv4 (begin)
-											    if(args.data.ip4gateway != null && args.data.ip4gateway.length > 0)
-												  array1.push("&gateway=" + args.data.ip4gateway);
-												if(args.data.ip4Netmask != null && args.data.ip4Netmask.length > 0)
-												  array1.push("&netmask=" + args.data.ip4Netmask);
-												if(($form.find('.form-item[rel=startipv4]').css("display") != "none") && (args.data.startipv4 != null && args.data.startipv4.length > 0))
-												  array1.push("&startip=" + args.data.startipv4);
-												if(($form.find('.form-item[rel=endipv4]').css("display") != "none") && (args.data.endipv4 != null && args.data.endipv4.length > 0))
-												  array1.push("&endip=" + args.data.endipv4);
-												//IPv4 (end)
-												
-												//IPv6 (begin)
-											    if(args.data.ip6gateway != null && args.data.ip6gateway.length > 0)
-												  array1.push("&ip6gateway=" + args.data.ip6gateway);
-												if(args.data.ip6cidr != null && args.data.ip6cidr.length > 0)
-												  array1.push("&ip6cidr=" + args.data.ip6cidr);
-												if(($form.find('.form-item[rel=startipv6]').css("display") != "none") && (args.data.startipv6 != null && args.data.startipv6.length > 0))
-												  array1.push("&startipv6=" + args.data.startipv6);
-												if(($form.find('.form-item[rel=endipv6]').css("display") != "none") && (args.data.endipv6 != null && args.data.endipv6.length > 0))
-												  array1.push("&endipv6=" + args.data.endipv6);
-												//IPv6 (end)
-												
-												if(args.data.networkdomain != null && args.data.networkdomain.length > 0)
-													array1.push("&networkdomain=" + todb(args.data.networkdomain));
-
-                        $.ajax({
-                          url: createURL("createNetwork" + array1.join("")),
-                          dataType: "json",
-                          success: function(json) {
-                            var item = json.createnetworkresponse.network;
-                            args.response.success({data:item});
-                          },
-                          error: function(XMLHttpResponse) {
-                            var errorMsg = parseXMLHttpResponse(XMLHttpResponse);
-                            args.response.error(errorMsg);
-                          }
-                        });
-                      },
-                      notification: {
-                        poll: function(args) {
-                          args.complete();
-                        }
-                      }
-                    }
+                    add: addGuestNetworkDialog.def
                   },
 
                   dataProvider: function(args) {


[03/50] [abbrv] UserContext switched to CallContext. Added generic storage mechanism for other code to carry information throughout a call. Made the calling User and Account a must have. Added an interface to carry entities in error. Fixed up the cod

Posted by ch...@apache.org.
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/server/test/com/cloud/vpc/NetworkACLServiceTest.java
----------------------------------------------------------------------
diff --git a/server/test/com/cloud/vpc/NetworkACLServiceTest.java b/server/test/com/cloud/vpc/NetworkACLServiceTest.java
index e71fabf..b2588aa 100644
--- a/server/test/com/cloud/vpc/NetworkACLServiceTest.java
+++ b/server/test/com/cloud/vpc/NetworkACLServiceTest.java
@@ -15,23 +15,15 @@
 
 package com.cloud.vpc;
 
-import com.cloud.exception.InvalidParameterValueException;
-import com.cloud.network.NetworkManager;
-import com.cloud.network.NetworkModel;
-import com.cloud.network.dao.NetworkDao;
-import com.cloud.network.vpc.*;
-import com.cloud.network.vpc.dao.NetworkACLDao;
-import com.cloud.network.vpc.dao.VpcGatewayDao;
-import com.cloud.tags.dao.ResourceTagDao;
-import com.cloud.user.Account;
-import com.cloud.user.AccountManager;
-import com.cloud.user.AccountVO;
-import com.cloud.user.UserContext;
-import com.cloud.utils.component.ComponentContext;
+import java.io.IOException;
+import java.util.UUID;
+
+import javax.inject.Inject;
+
 import junit.framework.TestCase;
-import org.apache.cloudstack.api.command.user.network.CreateNetworkACLCmd;
-import org.apache.cloudstack.test.utils.SpringUtils;
+
 import org.apache.log4j.Logger;
+import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -47,9 +39,31 @@ import org.springframework.test.context.ContextConfiguration;
 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
 import org.springframework.test.context.support.AnnotationConfigContextLoader;
 
-import javax.inject.Inject;
-import java.io.IOException;
-import java.util.UUID;
+import org.apache.cloudstack.api.command.user.network.CreateNetworkACLCmd;
+import org.apache.cloudstack.context.CallContext;
+import org.apache.cloudstack.test.utils.SpringUtils;
+
+import com.cloud.exception.InvalidParameterValueException;
+import com.cloud.network.NetworkManager;
+import com.cloud.network.NetworkModel;
+import com.cloud.network.dao.NetworkDao;
+import com.cloud.network.vpc.NetworkACLItem;
+import com.cloud.network.vpc.NetworkACLItemDao;
+import com.cloud.network.vpc.NetworkACLItemVO;
+import com.cloud.network.vpc.NetworkACLManager;
+import com.cloud.network.vpc.NetworkACLService;
+import com.cloud.network.vpc.NetworkACLServiceImpl;
+import com.cloud.network.vpc.NetworkACLVO;
+import com.cloud.network.vpc.VpcManager;
+import com.cloud.network.vpc.VpcVO;
+import com.cloud.network.vpc.dao.NetworkACLDao;
+import com.cloud.network.vpc.dao.VpcGatewayDao;
+import com.cloud.tags.dao.ResourceTagDao;
+import com.cloud.user.Account;
+import com.cloud.user.AccountManager;
+import com.cloud.user.AccountVO;
+import com.cloud.user.UserVO;
+import com.cloud.utils.component.ComponentContext;
 
 @RunWith(SpringJUnit4ClassRunner.class)
 @ContextConfiguration(loader = AnnotationConfigContextLoader.class)
@@ -74,11 +88,14 @@ public class NetworkACLServiceTest extends TestCase{
 
     private static final Logger s_logger = Logger.getLogger( NetworkACLServiceTest.class);
 
+    @Override
     @Before
     public void setUp() {
         ComponentContext.initComponentsLifeCycle();
         Account account = new AccountVO("testaccount", 1, "testdomain", (short) 0, UUID.randomUUID().toString());
-        UserContext.registerContext(1, account, null, true);
+        UserVO user = new UserVO(1, "testuser", "password", "firstname", "lastName", "email", "timezone", UUID.randomUUID().toString());
+
+        CallContext.register(user, account);
 
         createACLItemCmd = new CreateNetworkACLCmd(){
             @Override
@@ -118,6 +135,12 @@ public class NetworkACLServiceTest extends TestCase{
         };
     }
 
+    @Override
+    @After
+    public void tearDown() {
+        CallContext.unregister();
+    }
+
     @Test
     public void testCreateACL() throws Exception {
         Mockito.when(_vpcMgr.getVpc(Mockito.anyLong())).thenReturn(new VpcVO());

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/server/test/com/cloud/vpc/VpcTest.java
----------------------------------------------------------------------
diff --git a/server/test/com/cloud/vpc/VpcTest.java b/server/test/com/cloud/vpc/VpcTest.java
index 52e837e..24c011b 100644
--- a/server/test/com/cloud/vpc/VpcTest.java
+++ b/server/test/com/cloud/vpc/VpcTest.java
@@ -15,6 +15,33 @@
 
 package com.cloud.vpc;
 
+import java.io.IOException;
+import java.util.UUID;
+
+import javax.inject.Inject;
+
+import junit.framework.TestCase;
+
+import org.apache.log4j.Logger;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mockito;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.FilterType;
+import org.springframework.core.type.classreading.MetadataReader;
+import org.springframework.core.type.classreading.MetadataReaderFactory;
+import org.springframework.core.type.filter.TypeFilter;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+import org.springframework.test.context.support.AnnotationConfigContextLoader;
+
+import org.apache.cloudstack.context.CallContext;
+import org.apache.cloudstack.test.utils.SpringUtils;
+
 import com.cloud.configuration.ConfigurationManager;
 import com.cloud.configuration.dao.ConfigurationDao;
 import com.cloud.dc.dao.DataCenterDao;
@@ -27,7 +54,12 @@ import com.cloud.network.dao.IPAddressDao;
 import com.cloud.network.dao.NetworkDao;
 import com.cloud.network.dao.PhysicalNetworkDao;
 import com.cloud.network.dao.Site2SiteVpnGatewayDao;
-import com.cloud.network.vpc.*;
+import com.cloud.network.vpc.NetworkACLManager;
+import com.cloud.network.vpc.Vpc;
+import com.cloud.network.vpc.VpcManager;
+import com.cloud.network.vpc.VpcOfferingVO;
+import com.cloud.network.vpc.VpcService;
+import com.cloud.network.vpc.VpcVO;
 import com.cloud.network.vpc.dao.PrivateIpDao;
 import com.cloud.network.vpc.dao.StaticRouteDao;
 import com.cloud.network.vpc.dao.VpcDao;
@@ -43,34 +75,10 @@ import com.cloud.user.Account;
 import com.cloud.user.AccountManager;
 import com.cloud.user.AccountVO;
 import com.cloud.user.ResourceLimitService;
-import com.cloud.user.UserContext;
+import com.cloud.user.UserVO;
 import com.cloud.utils.component.ComponentContext;
 import com.cloud.vm.dao.DomainRouterDao;
 
-import junit.framework.TestCase;
-import org.apache.cloudstack.api.command.user.network.CreateNetworkACLCmd;
-import org.apache.cloudstack.api.command.user.vpc.CreateVPCCmd;
-import org.apache.cloudstack.test.utils.SpringUtils;
-import org.apache.log4j.Logger;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Mockito;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.ComponentScan;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.context.annotation.FilterType;
-import org.springframework.core.type.classreading.MetadataReader;
-import org.springframework.core.type.classreading.MetadataReaderFactory;
-import org.springframework.core.type.filter.TypeFilter;
-import org.springframework.test.context.ContextConfiguration;
-import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
-import org.springframework.test.context.support.AnnotationConfigContextLoader;
-
-import javax.inject.Inject;
-import java.io.IOException;
-import java.util.UUID;
-
 @RunWith(SpringJUnit4ClassRunner.class)
 @ContextConfiguration(loader = AnnotationConfigContextLoader.class)
 public class VpcTest extends TestCase {
@@ -93,14 +101,23 @@ public class VpcTest extends TestCase {
     private VpcVO vpc;
     private static final Logger s_logger = Logger.getLogger(VpcTest.class);
 
+    @Override
     @Before
     public void setUp() {
         ComponentContext.initComponentsLifeCycle();
         Account account = new AccountVO("testaccount", 1, "testdomain", (short) 0, UUID.randomUUID().toString());
-        UserContext.registerContext(1, account, null, true);
+        UserVO user = new UserVO(1, "testuser", "password", "firstname", "lastName", "email", "timezone", UUID.randomUUID().toString());
+
+        CallContext.register(user, account);
         vpc = new VpcVO(1, "myvpc", "myvpc", 2, 1, 1, "10.0.1.0/16", "mydomain");
     }
 
+    @Override
+    @After
+    public void tearDown() {
+        CallContext.unregister();
+    }
+
     @Test
     public void testCreateVpc() throws Exception {
         Mockito.when(

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/server/test/org/apache/cloudstack/affinity/AffinityApiUnitTest.java
----------------------------------------------------------------------
diff --git a/server/test/org/apache/cloudstack/affinity/AffinityApiUnitTest.java b/server/test/org/apache/cloudstack/affinity/AffinityApiUnitTest.java
index 8c1c114..d62b4ff 100644
--- a/server/test/org/apache/cloudstack/affinity/AffinityApiUnitTest.java
+++ b/server/test/org/apache/cloudstack/affinity/AffinityApiUnitTest.java
@@ -17,7 +17,6 @@
 package org.apache.cloudstack.affinity;
 
 import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
 import static org.mockito.Matchers.anyBoolean;
 import static org.mockito.Matchers.anyLong;
 import static org.mockito.Matchers.anyObject;
@@ -28,13 +27,12 @@ import static org.mockito.Mockito.when;
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.UUID;
 
 import javax.inject.Inject;
 import javax.naming.ConfigurationException;
 
-import org.apache.cloudstack.affinity.dao.AffinityGroupDao;
-import org.apache.cloudstack.affinity.dao.AffinityGroupVMMapDao;
-import org.apache.cloudstack.test.utils.SpringUtils;
+import org.junit.After;
 import org.junit.Before;
 import org.junit.BeforeClass;
 import org.junit.Test;
@@ -52,8 +50,13 @@ import org.springframework.test.context.ContextConfiguration;
 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
 import org.springframework.test.context.support.AnnotationConfigContextLoader;
 
-import com.cloud.dc.dao.DedicatedResourceDao;
-import com.cloud.event.ActionEventUtils;
+import org.apache.cloudstack.affinity.dao.AffinityGroupDao;
+import org.apache.cloudstack.affinity.dao.AffinityGroupVMMapDao;
+import org.apache.cloudstack.context.CallContext;
+import org.apache.cloudstack.test.utils.SpringUtils;
+
+import com.cloud.dc.dao.DedicatedResourceDao;
+import com.cloud.event.ActionEventUtils;
 import com.cloud.event.EventVO;
 import com.cloud.event.dao.EventDao;
 import com.cloud.exception.InvalidParameterValueException;
@@ -63,14 +66,12 @@ import com.cloud.user.Account;
 import com.cloud.user.AccountManager;
 import com.cloud.user.AccountService;
 import com.cloud.user.AccountVO;
-import com.cloud.user.UserContext;
+import com.cloud.user.UserVO;
 import com.cloud.user.dao.AccountDao;
+import com.cloud.user.dao.UserDao;
 import com.cloud.utils.component.ComponentContext;
-import com.cloud.utils.db.SearchBuilder;
-import com.cloud.utils.db.SearchCriteria;
 import com.cloud.vm.UserVmVO;
 import com.cloud.vm.VirtualMachine;
-import com.cloud.user.dao.UserDao;
 import com.cloud.vm.dao.UserVmDao;
 
 @RunWith(SpringJUnit4ClassRunner.class)
@@ -115,18 +116,20 @@ public class AffinityApiUnitTest {
 
 
     @BeforeClass
-    public static void setUp() throws ConfigurationException {
+    public static void setUpClass() throws ConfigurationException {
     }
 
     @Before
-    public void testSetUp() {
+    public void setUp() {
         ComponentContext.initComponentsLifeCycle();
         AccountVO acct = new AccountVO(200L);
         acct.setType(Account.ACCOUNT_TYPE_NORMAL);
         acct.setAccountName("user");
         acct.setDomainId(domainId);
 
-        UserContext.registerContext(1, acct, null, true);
+        UserVO user = new UserVO(1, "testuser", "password", "firstname", "lastName", "email", "timezone", UUID.randomUUID().toString());
+
+        CallContext.register(user, acct);
 
         when(_acctMgr.finalizeOwner((Account) anyObject(), anyString(), anyLong(), anyLong())).thenReturn(acct);
         when(_processor.getType()).thenReturn("mock");
@@ -141,6 +144,11 @@ public class AffinityApiUnitTest {
         Mockito.when(_eventDao.persist(Mockito.any(EventVO.class))).thenReturn(new EventVO());
     }
 
+    @After
+    public void tearDown() {
+        CallContext.unregister();
+    }
+
     @Test
     public void createAffinityGroupTest() {
         when(_groupDao.isNameInUse(anyLong(), anyLong(), eq("group1"))).thenReturn(false);

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/server/test/org/apache/cloudstack/lb/ApplicationLoadBalancerTest.java
----------------------------------------------------------------------
diff --git a/server/test/org/apache/cloudstack/lb/ApplicationLoadBalancerTest.java b/server/test/org/apache/cloudstack/lb/ApplicationLoadBalancerTest.java
index 461cbbd..bd2374f 100644
--- a/server/test/org/apache/cloudstack/lb/ApplicationLoadBalancerTest.java
+++ b/server/test/org/apache/cloudstack/lb/ApplicationLoadBalancerTest.java
@@ -5,7 +5,7 @@
 // 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,
@@ -24,9 +24,7 @@ import javax.inject.Inject;
 
 import junit.framework.TestCase;
 
-import org.apache.cloudstack.lb.dao.ApplicationLoadBalancerRuleDao;
-import org.apache.cloudstack.network.lb.ApplicationLoadBalancerManagerImpl;
-import org.apache.cloudstack.network.lb.ApplicationLoadBalancerRule;
+import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -34,6 +32,11 @@ import org.mockito.Mockito;
 import org.springframework.test.context.ContextConfiguration;
 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
 
+import org.apache.cloudstack.context.CallContext;
+import org.apache.cloudstack.lb.dao.ApplicationLoadBalancerRuleDao;
+import org.apache.cloudstack.network.lb.ApplicationLoadBalancerManagerImpl;
+import org.apache.cloudstack.network.lb.ApplicationLoadBalancerRule;
+
 import com.cloud.event.dao.UsageEventDao;
 import com.cloud.exception.InsufficientAddressCapacityException;
 import com.cloud.exception.InsufficientVirtualNetworkCapcityException;
@@ -53,7 +56,6 @@ import com.cloud.network.rules.FirewallRuleVO;
 import com.cloud.network.rules.LoadBalancerContainer.Scheme;
 import com.cloud.user.AccountManager;
 import com.cloud.user.AccountVO;
-import com.cloud.user.UserContext;
 import com.cloud.user.UserVO;
 import com.cloud.utils.component.ComponentContext;
 import com.cloud.utils.exception.CloudRuntimeException;
@@ -94,6 +96,7 @@ public class ApplicationLoadBalancerTest extends TestCase{
 
 
     
+    @Override
     @Before
     public void setUp() {
         ComponentContext.initComponentsLifeCycle();
@@ -133,7 +136,7 @@ public class ApplicationLoadBalancerTest extends TestCase{
         
         Mockito.when(_accountMgr.getSystemUser()).thenReturn(new UserVO(1));
         Mockito.when(_accountMgr.getSystemAccount()).thenReturn(new AccountVO(2));
-        UserContext.registerContext(_accountMgr.getSystemUser().getId(), _accountMgr.getSystemAccount(), null, false);
+        CallContext.register(_accountMgr.getSystemUser(), _accountMgr.getSystemAccount());
         
         Mockito.when(_ntwkModel.areServicesSupportedInNetwork(Mockito.anyLong(), Mockito.any(Network.Service.class))).thenReturn(true);
         
@@ -146,6 +149,12 @@ public class ApplicationLoadBalancerTest extends TestCase{
         
     }
     
+    @Override
+    @After
+    public void tearDown() {
+        CallContext.unregister();
+    }
+
     /**
      * TESTS FOR .getApplicationLoadBalancer
      */
@@ -165,7 +174,7 @@ public class ApplicationLoadBalancerTest extends TestCase{
         try {
             rule = _appLbSvc.getApplicationLoadBalancer(nonExistingLbId);
             if (rule != null) {
-                notFound = false; 
+                notFound = false;
             }
         } catch (InvalidParameterValueException ex) {
             notFound = true;
@@ -182,11 +191,11 @@ public class ApplicationLoadBalancerTest extends TestCase{
     @Test
     //Positive test - delete existing lb
     public void deleteExistingLoadBalancer() {
-        boolean result = false; 
+        boolean result = false;
         try {
             result = _appLbSvc.deleteApplicationLoadBalancer(existingLbId);
         } finally {
-            assertTrue("Couldn't delete existing application load balancer", result);   
+            assertTrue("Couldn't delete existing application load balancer", result);
         }
     }
     
@@ -204,17 +213,17 @@ public class ApplicationLoadBalancerTest extends TestCase{
     
     /**
      * TESTS FOR .createApplicationLoadBalancer
-     * @throws NetworkRuleConflictException 
-     * @throws InsufficientVirtualNetworkCapcityException 
-     * @throws InsufficientAddressCapacityException 
+     * @throws NetworkRuleConflictException
+     * @throws InsufficientVirtualNetworkCapcityException
+     * @throws InsufficientAddressCapacityException
      */
     
     @Test (expected = CloudRuntimeException.class)
     //Positive test
     public void createValidLoadBalancer() throws InsufficientAddressCapacityException,
-        InsufficientVirtualNetworkCapcityException, NetworkRuleConflictException {    
+        InsufficientVirtualNetworkCapcityException, NetworkRuleConflictException {
         _appLbSvc.createApplicationLoadBalancer("alena", "alena", Scheme.Internal, validGuestNetworkId, validRequestedIp,
-                            22, 22, "roundrobin", validGuestNetworkId, validAccountId); 
+                            22, 22, "roundrobin", validGuestNetworkId, validAccountId);
     }
     
     
@@ -230,7 +239,7 @@ public class ApplicationLoadBalancerTest extends TestCase{
     @Test(expected = InvalidParameterValueException.class)
     //Negative test - invalid SourcePort
     public void createWithInvalidSourcePort() throws InsufficientAddressCapacityException,
-        InsufficientVirtualNetworkCapcityException, NetworkRuleConflictException {        
+        InsufficientVirtualNetworkCapcityException, NetworkRuleConflictException {
         _appLbSvc.createApplicationLoadBalancer("alena", "alena", Scheme.Internal, validGuestNetworkId, validRequestedIp,
                     65536, 22, "roundrobin", validGuestNetworkId, validAccountId);
     }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/server/test/org/apache/cloudstack/networkoffering/ChildTestConfiguration.java
----------------------------------------------------------------------
diff --git a/server/test/org/apache/cloudstack/networkoffering/ChildTestConfiguration.java b/server/test/org/apache/cloudstack/networkoffering/ChildTestConfiguration.java
index 27faa4d..7760123 100644
--- a/server/test/org/apache/cloudstack/networkoffering/ChildTestConfiguration.java
+++ b/server/test/org/apache/cloudstack/networkoffering/ChildTestConfiguration.java
@@ -19,12 +19,6 @@ package org.apache.cloudstack.networkoffering;
 
 import java.io.IOException;
 
-
-import org.apache.cloudstack.acl.SecurityChecker;
-import org.apache.cloudstack.region.PortableIpDaoImpl;
-import org.apache.cloudstack.region.dao.RegionDaoImpl;
-import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDaoImpl;
-import org.apache.cloudstack.test.utils.SpringUtils;
 import org.mockito.Mockito;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.ComponentScan;
@@ -35,7 +29,15 @@ import org.springframework.core.type.classreading.MetadataReader;
 import org.springframework.core.type.classreading.MetadataReaderFactory;
 import org.springframework.core.type.filter.TypeFilter;
 
+import org.apache.cloudstack.acl.SecurityChecker;
+import org.apache.cloudstack.context.CallContext;
 import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreManager;
+import org.apache.cloudstack.region.PortableIpDaoImpl;
+import org.apache.cloudstack.region.PortableIpRangeDaoImpl;
+import org.apache.cloudstack.region.dao.RegionDaoImpl;
+import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDaoImpl;
+import org.apache.cloudstack.test.utils.SpringUtils;
+
 import com.cloud.agent.AgentManager;
 import com.cloud.alert.AlertManager;
 import com.cloud.api.query.dao.UserAccountJoinDaoImpl;
@@ -106,8 +108,6 @@ import com.cloud.tags.dao.ResourceTagsDaoImpl;
 import com.cloud.user.AccountDetailsDao;
 import com.cloud.user.AccountManager;
 import com.cloud.user.ResourceLimitService;
-import com.cloud.user.UserContext;
-import com.cloud.user.UserContextInitializer;
 import com.cloud.user.dao.AccountDaoImpl;
 import com.cloud.user.dao.UserDaoImpl;
 import com.cloud.vm.dao.InstanceGroupDaoImpl;
@@ -115,7 +115,6 @@ import com.cloud.vm.dao.NicDaoImpl;
 import com.cloud.vm.dao.NicSecondaryIpDaoImpl;
 import com.cloud.vm.dao.UserVmDao;
 import com.cloud.vm.dao.VMInstanceDaoImpl;
-import org.apache.cloudstack.region.PortableIpRangeDaoImpl;
 
 @Configuration
 @ComponentScan(basePackageClasses={
@@ -296,13 +295,8 @@ public class ChildTestConfiguration {
     }
 
     @Bean
-    public UserContext userContext() {
-        return Mockito.mock(UserContext.class);
-    }
-
-    @Bean
-    public UserContextInitializer userContextInitializer() {
-        return Mockito.mock(UserContextInitializer.class);
+    public CallContext userContext() {
+        return Mockito.mock(CallContext.class);
     }
 
     @Bean

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/server/test/org/apache/cloudstack/networkoffering/CreateNetworkOfferingTest.java
----------------------------------------------------------------------
diff --git a/server/test/org/apache/cloudstack/networkoffering/CreateNetworkOfferingTest.java b/server/test/org/apache/cloudstack/networkoffering/CreateNetworkOfferingTest.java
index 36564d9..9825cab 100644
--- a/server/test/org/apache/cloudstack/networkoffering/CreateNetworkOfferingTest.java
+++ b/server/test/org/apache/cloudstack/networkoffering/CreateNetworkOfferingTest.java
@@ -17,6 +17,25 @@
 
 package org.apache.cloudstack.networkoffering;
 
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+import javax.inject.Inject;
+
+import junit.framework.TestCase;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mockito;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+
+import org.apache.cloudstack.context.CallContext;
+
 import com.cloud.configuration.ConfigurationManager;
 import com.cloud.configuration.ConfigurationVO;
 import com.cloud.configuration.dao.ConfigurationDao;
@@ -33,22 +52,8 @@ import com.cloud.offerings.dao.NetworkOfferingDao;
 import com.cloud.offerings.dao.NetworkOfferingServiceMapDao;
 import com.cloud.user.AccountManager;
 import com.cloud.user.AccountVO;
-import com.cloud.user.UserContext;
 import com.cloud.user.UserVO;
 import com.cloud.utils.component.ComponentContext;
-import junit.framework.TestCase;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Mockito;
-import org.springframework.test.context.ContextConfiguration;
-import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
-
-import javax.inject.Inject;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Map;
-import java.util.Set;
 
 @RunWith(SpringJUnit4ClassRunner.class)
 @ContextConfiguration(locations="classpath:/createNetworkOffering.xml")
@@ -73,6 +78,7 @@ public class CreateNetworkOfferingTest extends TestCase{
     @Inject
     VpcManager vpcMgr;
 
+    @Override
     @Before
     public void setUp() {
     	ComponentContext.initComponentsLifeCycle();
@@ -86,7 +92,13 @@ public class CreateNetworkOfferingTest extends TestCase{
         Mockito.when(accountMgr.getSystemUser()).thenReturn(new UserVO(1));
         Mockito.when(accountMgr.getSystemAccount()).thenReturn(new AccountVO(2));
 
-        UserContext.registerContext(accountMgr.getSystemUser().getId(), accountMgr.getSystemAccount(), null, false);
+        CallContext.register(accountMgr.getSystemUser(), accountMgr.getSystemAccount());
+    }
+
+    @Override
+    @After
+    public void tearDown() {
+        CallContext.unregister();
     }
 
     //Test Shared network offerings

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/server/test/org/apache/cloudstack/region/RegionManagerTest.java
----------------------------------------------------------------------
diff --git a/server/test/org/apache/cloudstack/region/RegionManagerTest.java b/server/test/org/apache/cloudstack/region/RegionManagerTest.java
index b6d1969..db6bf20 100644
--- a/server/test/org/apache/cloudstack/region/RegionManagerTest.java
+++ b/server/test/org/apache/cloudstack/region/RegionManagerTest.java
@@ -22,7 +22,9 @@ import junit.framework.Assert;
 import junit.framework.TestCase;
 
 import org.apache.cloudstack.api.command.admin.domain.DeleteDomainCmd;
+import org.apache.cloudstack.context.CallContext;
 import org.apache.cloudstack.region.dao.RegionDao;
+
 import org.apache.log4j.Logger;
 import org.junit.Before;
 import org.junit.Test;
@@ -30,7 +32,6 @@ import org.mockito.Mockito;
 
 import com.cloud.exception.InvalidParameterValueException;
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
 import com.cloud.user.dao.AccountDao;
 
 

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/server/test/org/apache/cloudstack/region/gslb/GlobalLoadBalancingRulesServiceImplTest.java
----------------------------------------------------------------------
diff --git a/server/test/org/apache/cloudstack/region/gslb/GlobalLoadBalancingRulesServiceImplTest.java b/server/test/org/apache/cloudstack/region/gslb/GlobalLoadBalancingRulesServiceImplTest.java
index 6d49ec0..2355089 100644
--- a/server/test/org/apache/cloudstack/region/gslb/GlobalLoadBalancingRulesServiceImplTest.java
+++ b/server/test/org/apache/cloudstack/region/gslb/GlobalLoadBalancingRulesServiceImplTest.java
@@ -15,43 +15,72 @@
 
 package org.apache.cloudstack.region.gslb;
 
+import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.anyInt;
+import static org.mockito.Matchers.anyLong;
+import static org.mockito.Mockito.when;
+
+import java.lang.reflect.Field;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.UUID;
+
+import junit.framework.Assert;
+import junit.framework.TestCase;
+
+import org.apache.log4j.Logger;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.mockito.Mockito;
+
+import org.apache.cloudstack.api.command.user.region.ha.gslb.AssignToGlobalLoadBalancerRuleCmd;
+import org.apache.cloudstack.api.command.user.region.ha.gslb.CreateGlobalLoadBalancerRuleCmd;
+import org.apache.cloudstack.api.command.user.region.ha.gslb.DeleteGlobalLoadBalancerRuleCmd;
+import org.apache.cloudstack.api.command.user.region.ha.gslb.RemoveFromGlobalLoadBalancerRuleCmd;
+import org.apache.cloudstack.context.CallContext;
+import org.apache.cloudstack.region.RegionVO;
+import org.apache.cloudstack.region.dao.RegionDao;
+
 import com.cloud.agent.AgentManager;
 import com.cloud.configuration.dao.ConfigurationDao;
 import com.cloud.exception.InvalidParameterValueException;
-import com.cloud.network.dao.*;
+import com.cloud.network.dao.IPAddressDao;
+import com.cloud.network.dao.IPAddressVO;
+import com.cloud.network.dao.LoadBalancerDao;
+import com.cloud.network.dao.LoadBalancerVO;
+import com.cloud.network.dao.NetworkDao;
+import com.cloud.network.dao.NetworkVO;
 import com.cloud.network.rules.FirewallRule;
 import com.cloud.network.rules.RulesManager;
 import com.cloud.region.ha.GlobalLoadBalancerRule;
 import com.cloud.user.Account;
 import com.cloud.user.AccountManager;
 import com.cloud.user.AccountVO;
-import com.cloud.user.UserContext;
+import com.cloud.user.UserVO;
 import com.cloud.utils.db.Transaction;
 import com.cloud.utils.net.Ip;
-import junit.framework.Assert;
-import junit.framework.TestCase;
-import org.apache.cloudstack.api.command.user.region.ha.gslb.AssignToGlobalLoadBalancerRuleCmd;
-import org.apache.cloudstack.api.command.user.region.ha.gslb.CreateGlobalLoadBalancerRuleCmd;
-import org.apache.cloudstack.api.command.user.region.ha.gslb.DeleteGlobalLoadBalancerRuleCmd;
-import org.apache.cloudstack.api.command.user.region.ha.gslb.RemoveFromGlobalLoadBalancerRuleCmd;
-import org.apache.cloudstack.region.RegionVO;
-import org.apache.cloudstack.region.dao.RegionDao;
-import org.apache.log4j.Logger;
-import org.junit.Test;
-import org.mockito.Mockito;
-
-import java.lang.reflect.Field;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.UUID;
-
-import static org.mockito.Matchers.*;
-import static org.mockito.Mockito.when;
 
 public class GlobalLoadBalancingRulesServiceImplTest extends TestCase {
 
     private static final Logger s_logger = Logger.getLogger( GlobalLoadBalancingRulesServiceImplTest.class);
 
+    @Override
+    @Before
+    public void setUp() {
+        Account account = new AccountVO("testaccount", 1, "networkdomain", (short)0, UUID.randomUUID().toString());
+
+        UserVO user = new UserVO(1, "testuser", "password", "firstname", "lastName", "email", "timezone", UUID.randomUUID().toString());
+
+        CallContext.register(user, account);
+    }
+
+    @Override
+    @After
+    public void tearDown() {
+        CallContext.unregister();
+    }
+
     @Test
     public void testCreateGlobalLoadBalancerRule() throws Exception {
 
@@ -157,7 +186,7 @@ public class GlobalLoadBalancingRulesServiceImplTest extends TestCase {
         GlobalLoadBalancingRulesServiceImpl gslbServiceImpl =  new GlobalLoadBalancingRulesServiceImpl();
 
         gslbServiceImpl._accountMgr = Mockito.mock(AccountManager.class);
-        Account account = (Account) new AccountVO("testaccount", 1,
+        Account account = new AccountVO("testaccount", 1,
                 "networkdomain", (short) 0, UUID.randomUUID().toString());
         when(gslbServiceImpl._accountMgr.getAccount(anyLong())).thenReturn(account);
 
@@ -222,7 +251,7 @@ public class GlobalLoadBalancingRulesServiceImplTest extends TestCase {
         GlobalLoadBalancingRulesServiceImpl gslbServiceImpl =  new GlobalLoadBalancingRulesServiceImpl();
 
         gslbServiceImpl._accountMgr = Mockito.mock(AccountManager.class);
-        Account account = (Account) new AccountVO("testaccount", 1,
+        Account account = new AccountVO("testaccount", 1,
                 "networkdomain", (short) 0, UUID.randomUUID().toString());
         when(gslbServiceImpl._accountMgr.getAccount(anyLong())).thenReturn(account);
 
@@ -287,7 +316,7 @@ public class GlobalLoadBalancingRulesServiceImplTest extends TestCase {
         GlobalLoadBalancingRulesServiceImpl gslbServiceImpl =  new GlobalLoadBalancingRulesServiceImpl();
 
         gslbServiceImpl._accountMgr = Mockito.mock(AccountManager.class);
-        Account account = (Account) new AccountVO("testaccount", 1,
+        Account account = new AccountVO("testaccount", 1,
                 "networkdomain", (short) 0, UUID.randomUUID().toString());
         when(gslbServiceImpl._accountMgr.getAccount(anyLong())).thenReturn(account);
 
@@ -352,7 +381,7 @@ public class GlobalLoadBalancingRulesServiceImplTest extends TestCase {
         GlobalLoadBalancingRulesServiceImpl gslbServiceImpl =  new GlobalLoadBalancingRulesServiceImpl();
 
         gslbServiceImpl._accountMgr = Mockito.mock(AccountManager.class);
-        Account account = (Account) new AccountVO("testaccount", 1,
+        Account account = new AccountVO("testaccount", 1,
                 "networkdomain", (short) 0, UUID.randomUUID().toString());
         when(gslbServiceImpl._accountMgr.getAccount(anyLong())).thenReturn(account);
 
@@ -417,7 +446,7 @@ public class GlobalLoadBalancingRulesServiceImplTest extends TestCase {
         GlobalLoadBalancingRulesServiceImpl gslbServiceImpl =  new GlobalLoadBalancingRulesServiceImpl();
 
         gslbServiceImpl._accountMgr = Mockito.mock(AccountManager.class);
-        Account account = (Account) new AccountVO("testaccount", 1,
+        Account account = new AccountVO("testaccount", 1,
                 "networkdomain", (short) 0, UUID.randomUUID().toString());
         when(gslbServiceImpl._accountMgr.getAccount(anyLong())).thenReturn(account);
 
@@ -496,11 +525,9 @@ public class GlobalLoadBalancingRulesServiceImplTest extends TestCase {
         AssignToGlobalLoadBalancerRuleCmd assignCmd = new AssignToGlobalLoadBalancerRuleCmdExtn();
         Class<?> _class = assignCmd.getClass().getSuperclass();
 
-        Account account = (Account) new AccountVO("testaccount", 1, "networkdomain", (short) 0, UUID.randomUUID().toString());
+        Account account = new AccountVO("testaccount", 1, "networkdomain", (short) 0, UUID.randomUUID().toString());
         when(gslbServiceImpl._accountMgr.getAccount(anyLong())).thenReturn(account);
 
-        UserContext.registerContext(1, account, null, true);
-
         Field gslbRuleId = _class.getDeclaredField("id");
         gslbRuleId.setAccessible(true);
         gslbRuleId.set(assignCmd, new Long(1));
@@ -561,11 +588,9 @@ public class GlobalLoadBalancingRulesServiceImplTest extends TestCase {
         AssignToGlobalLoadBalancerRuleCmd assignCmd = new AssignToGlobalLoadBalancerRuleCmdExtn();
         Class<?> _class = assignCmd.getClass().getSuperclass();
 
-        Account account = (Account) new AccountVO("testaccount", 3, "networkdomain", (short) 0, UUID.randomUUID().toString());
+        Account account = new AccountVO("testaccount", 3, "networkdomain", (short) 0, UUID.randomUUID().toString());
         when(gslbServiceImpl._accountMgr.getAccount(anyLong())).thenReturn(account);
 
-        UserContext.registerContext(1, account, null, true);
-
         Field gslbRuleId = _class.getDeclaredField("id");
         gslbRuleId.setAccessible(true);
         gslbRuleId.set(assignCmd, new Long(1));
@@ -648,11 +673,9 @@ public class GlobalLoadBalancingRulesServiceImplTest extends TestCase {
         AssignToGlobalLoadBalancerRuleCmd assignCmd = new AssignToGlobalLoadBalancerRuleCmdExtn();
         Class<?> _class = assignCmd.getClass().getSuperclass();
 
-        Account account = (Account) new AccountVO("testaccount", 1, "networkdomain", (short) 0, UUID.randomUUID().toString());
+        Account account = new AccountVO("testaccount", 1, "networkdomain", (short) 0, UUID.randomUUID().toString());
         when(gslbServiceImpl._accountMgr.getAccount(anyLong())).thenReturn(account);
 
-        UserContext.registerContext(1, account, null, true);
-
         Field gslbRuleId = _class.getDeclaredField("id");
         gslbRuleId.setAccessible(true);
         gslbRuleId.set(assignCmd, new Long(1));
@@ -708,9 +731,8 @@ public class GlobalLoadBalancingRulesServiceImplTest extends TestCase {
         RemoveFromGlobalLoadBalancerRuleCmd removeFromGslbCmd = new RemoveFromGlobalLoadBalancerRuleCmdExtn();
         Class<?> _class = removeFromGslbCmd.getClass().getSuperclass();
 
-        Account account = (Account) new AccountVO("testaccount", 1, "networkdomain", (short) 0, UUID.randomUUID().toString());
+        Account account = new AccountVO("testaccount", 1, "networkdomain", (short) 0, UUID.randomUUID().toString());
         when(gslbServiceImpl._accountMgr.getAccount(anyLong())).thenReturn(account);
-        UserContext.registerContext(1, account, null, true);
 
         Field gslbRuleId = _class.getDeclaredField("id");
         gslbRuleId.setAccessible(true);
@@ -781,9 +803,8 @@ public class GlobalLoadBalancingRulesServiceImplTest extends TestCase {
         RemoveFromGlobalLoadBalancerRuleCmd removeFromGslbCmd = new RemoveFromGlobalLoadBalancerRuleCmdExtn();
         Class<?> _class = removeFromGslbCmd.getClass().getSuperclass();
 
-        Account account = (Account) new AccountVO("testaccount", 1, "networkdomain", (short) 0, UUID.randomUUID().toString());
+        Account account = new AccountVO("testaccount", 1, "networkdomain", (short) 0, UUID.randomUUID().toString());
         when(gslbServiceImpl._accountMgr.getAccount(anyLong())).thenReturn(account);
-        UserContext.registerContext(1, account, null, true);
 
         Field gslbRuleId = _class.getDeclaredField("id");
         gslbRuleId.setAccessible(true);
@@ -843,9 +864,8 @@ public class GlobalLoadBalancingRulesServiceImplTest extends TestCase {
         RemoveFromGlobalLoadBalancerRuleCmd removeFromGslbCmd = new RemoveFromGlobalLoadBalancerRuleCmdExtn();
         Class<?> _class = removeFromGslbCmd.getClass().getSuperclass();
 
-        Account account = (Account) new AccountVO("testaccount", 1, "networkdomain", (short) 0, UUID.randomUUID().toString());
+        Account account = new AccountVO("testaccount", 1, "networkdomain", (short) 0, UUID.randomUUID().toString());
         when(gslbServiceImpl._accountMgr.getAccount(anyLong())).thenReturn(account);
-        UserContext.registerContext(1, account, null, true);
 
         Field gslbRuleId = _class.getDeclaredField("id");
         gslbRuleId.setAccessible(true);
@@ -888,11 +908,9 @@ public class GlobalLoadBalancingRulesServiceImplTest extends TestCase {
         DeleteGlobalLoadBalancerRuleCmd deleteCmd = new DeleteGlobalLoadBalancerRuleCmdExtn();
         Class<?> _class = deleteCmd.getClass().getSuperclass();
 
-        Account account = (Account) new AccountVO("testaccount", 1, "networkdomain", (short) 0, UUID.randomUUID().toString());
+        Account account = new AccountVO("testaccount", 1, "networkdomain", (short) 0, UUID.randomUUID().toString());
         when(gslbServiceImpl._accountMgr.getAccount(anyLong())).thenReturn(account);
 
-        UserContext.registerContext(1, account, null, true);
-
         Field gslbRuleId = _class.getDeclaredField("id");
         gslbRuleId.setAccessible(true);
         gslbRuleId.set(deleteCmd, new Long(1));
@@ -936,11 +954,9 @@ public class GlobalLoadBalancingRulesServiceImplTest extends TestCase {
         DeleteGlobalLoadBalancerRuleCmd deleteCmd = new DeleteGlobalLoadBalancerRuleCmdExtn();
         Class<?> _class = deleteCmd.getClass().getSuperclass();
 
-        Account account = (Account) new AccountVO("testaccount", 1, "networkdomain", (short) 0, UUID.randomUUID().toString());
+        Account account = new AccountVO("testaccount", 1, "networkdomain", (short) 0, UUID.randomUUID().toString());
         when(gslbServiceImpl._accountMgr.getAccount(anyLong())).thenReturn(account);
 
-        UserContext.registerContext(1, account, null, true);
-
         Field gslbRuleId = _class.getDeclaredField("id");
         gslbRuleId.setAccessible(true);
         gslbRuleId.set(deleteCmd, new Long(1));
@@ -965,24 +981,28 @@ public class GlobalLoadBalancingRulesServiceImplTest extends TestCase {
     }
 
     public class CreateGlobalLoadBalancerRuleCmdExtn extends CreateGlobalLoadBalancerRuleCmd {
+        @Override
         public long getEntityOwnerId() {
             return 1;
         }
     }
 
     public class AssignToGlobalLoadBalancerRuleCmdExtn extends AssignToGlobalLoadBalancerRuleCmd {
+        @Override
         public long getEntityOwnerId() {
             return 1;
         }
     }
 
     public class RemoveFromGlobalLoadBalancerRuleCmdExtn extends RemoveFromGlobalLoadBalancerRuleCmd {
+        @Override
         public long getEntityOwnerId() {
             return 1;
         }
     }
 
     public class DeleteGlobalLoadBalancerRuleCmdExtn extends DeleteGlobalLoadBalancerRuleCmd {
+        @Override
         public long getEntityOwnerId() {
             return 1;
         }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/utils/src/com/cloud/utils/exception/CloudRuntimeException.java
----------------------------------------------------------------------
diff --git a/utils/src/com/cloud/utils/exception/CloudRuntimeException.java b/utils/src/com/cloud/utils/exception/CloudRuntimeException.java
index d3b4c19..cea3ac2 100755
--- a/utils/src/com/cloud/utils/exception/CloudRuntimeException.java
+++ b/utils/src/com/cloud/utils/exception/CloudRuntimeException.java
@@ -17,16 +17,20 @@
 package com.cloud.utils.exception;
 
 import java.util.ArrayList;
+import java.util.List;
 
+import com.cloud.utils.Pair;
 import com.cloud.utils.SerialVersionUID;
 
 /**
  * wrap exceptions that you know there's no point in dealing with.
  */
-public class CloudRuntimeException extends RuntimeException {
+public class CloudRuntimeException extends RuntimeException implements ErrorContext {
 
     private static final long serialVersionUID = SerialVersionUID.CloudRuntimeException;
 
+    protected ArrayList<Pair<Class<?>, String>> uuidList = new ArrayList<Pair<Class<?>, String>>();
+
     // This holds a list of uuids and their descriptive names.
     protected ArrayList<ExceptionProxyObject> idList = new ArrayList<ExceptionProxyObject>();
 
@@ -66,14 +70,25 @@ public class CloudRuntimeException extends RuntimeException {
     }
 
     public void setCSErrorCode(int cserrcode) {
-        this.csErrorCode = cserrcode;
+        csErrorCode = cserrcode;
     }
 
     public int getCSErrorCode() {
-        return this.csErrorCode;
+        return csErrorCode;
     }
 
     public CloudRuntimeException(Throwable t) {
         super(t);
     }
+
+    @Override
+    public CloudRuntimeException add(Class<?> entity, String uuid) {
+        uuidList.add(new Pair<Class<?>, String>(entity, uuid));
+        return this;
+    }
+
+    @Override
+    public List<Pair<Class<?>, String>> getEntitiesInError() {
+        return uuidList;
+    }
 }


[33/50] [abbrv] git commit: updated refs/heads/ldapplugin to 7bc705e

Posted by ch...@apache.org.
Fix typo netscaler_1 in TestAddMultipleNSDiffZone

Signed-off-by: Prasanna Santhanam <ts...@apache.org>


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

Branch: refs/heads/ldapplugin
Commit: 51b7f5de9195ab203adb651d5cdd0a0c0c1aec4f
Parents: f50e26e
Author: Sowmya Krishnan <so...@citrix.com>
Authored: Wed Jul 17 09:46:30 2013 +0530
Committer: Prasanna Santhanam <ts...@apache.org>
Committed: Wed Jul 17 12:14:11 2013 +0530

----------------------------------------------------------------------
 test/integration/component/test_netscaler_nw_off.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/51b7f5de/test/integration/component/test_netscaler_nw_off.py
----------------------------------------------------------------------
diff --git a/test/integration/component/test_netscaler_nw_off.py b/test/integration/component/test_netscaler_nw_off.py
index a5fe5b1..9539d1b 100644
--- a/test/integration/component/test_netscaler_nw_off.py
+++ b/test/integration/component/test_netscaler_nw_off.py
@@ -404,7 +404,7 @@ class TestAddMultipleNSDiffZone(cloudstackTestCase):
         physical_network = physical_networks[0]
         self.debug("Adding netscaler device: %s" %
                                     self.services["netscaler_1"]["ipaddress"])
-        netscaler = NetScaler.add(
+        netscaler_1 = NetScaler.add(
                                   self.apiclient,
                                   self.services["netscaler_1"],
                                   physicalnetworkid=physical_network.id


[41/50] [abbrv] git commit: updated refs/heads/ldapplugin to 7bc705e

Posted by ch...@apache.org.
CLOUDSTACK-2433 Enable rps and rfs in virtual router


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

Branch: refs/heads/ldapplugin
Commit: 2d6644d961e6a35e30798490e65d60a9ea800b2b
Parents: f76bf5b
Author: Jayapal <ja...@apache.org>
Authored: Wed Jul 17 16:59:32 2013 +0530
Committer: Jayapal <ja...@apache.org>
Committed: Wed Jul 17 16:59:59 2013 +0530

----------------------------------------------------------------------
 .../virtualnetwork/VirtualRoutingResource.java  |  9 +++-
 .../debian/config/etc/init.d/cloud-early-config | 41 ++++++++++++++++++
 .../debian/config/opt/cloud/bin/ipassoc.sh      | 45 ++++++++++++++++++--
 .../kvm/resource/LibvirtComputingResource.java  |  4 +-
 .../vmware/resource/VmwareResource.java         |  4 ++
 .../xen/resource/CitrixResourceBase.java        |  5 +++
 6 files changed, 102 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/2d6644d9/core/src/com/cloud/agent/resource/virtualnetwork/VirtualRoutingResource.java
----------------------------------------------------------------------
diff --git a/core/src/com/cloud/agent/resource/virtualnetwork/VirtualRoutingResource.java b/core/src/com/cloud/agent/resource/virtualnetwork/VirtualRoutingResource.java
index 32fd728..0b26220 100755
--- a/core/src/com/cloud/agent/resource/virtualnetwork/VirtualRoutingResource.java
+++ b/core/src/com/cloud/agent/resource/virtualnetwork/VirtualRoutingResource.java
@@ -531,7 +531,7 @@ public class VirtualRoutingResource implements Manager {
         for (IpAddressTO ip : ips) {
             result = assignPublicIpAddress(routerName, routerIp, ip.getPublicIp(), ip.isAdd(), 
                      ip.isFirstIP(), ip.isSourceNat(), ip.getVlanId(), ip.getVlanGateway(), ip.getVlanNetmask(),
-                     ip.getVifMacAddress(), 2);
+                     ip.getVifMacAddress(), 2, false);
             if (result != null) {
                 results[i++] = IpAssocAnswer.errorResult;
             } else {
@@ -1019,7 +1019,7 @@ public class VirtualRoutingResource implements Manager {
             final String privateIpAddress, final String publicIpAddress,
             final boolean add, final boolean firstIP, final boolean sourceNat,
             final String vlanId, final String vlanGateway,
-            final String vlanNetmask, final String vifMacAddress, int nicNum){
+            final String vlanNetmask, final String vifMacAddress, int nicNum, boolean newNic){
 
         String args = "";
         if (add) {
@@ -1043,6 +1043,11 @@ public class VirtualRoutingResource implements Manager {
 
         args +=" -g ";
         args += vlanGateway;
+
+        if (newNic) {
+            args += " -n";
+        }
+
         return routerProxy("ipassoc.sh", privateIpAddress, args);
     }
     

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/2d6644d9/patches/systemvm/debian/config/etc/init.d/cloud-early-config
----------------------------------------------------------------------
diff --git a/patches/systemvm/debian/config/etc/init.d/cloud-early-config b/patches/systemvm/debian/config/etc/init.d/cloud-early-config
index 5835c4d..c04ff90 100755
--- a/patches/systemvm/debian/config/etc/init.d/cloud-early-config
+++ b/patches/systemvm/debian/config/etc/init.d/cloud-early-config
@@ -366,6 +366,46 @@ disable_hvc() {
   [  -d /proc/xen ] && sed -i 's/^#vc/vc/' /etc/inittab && telinit q
 }
 
+enable_rpsrfs() {
+  local enable=$1
+
+  if [ $eanble -eq 0]
+  then
+      echo 0 > /etc/rpsrfsenable
+      return 0
+  fi
+
+  if [ ! -f /sys/class/net/eth0/queues/rx-0/rps_cpus ]
+  then
+      echo "rps is not enabled in the kernel"
+      echo 0 > /etc/rpsrfsenable
+      return 0
+  fi
+
+  proc=$(cat /proc/cpuinfo | grep "processor" | wc -l)
+  if [ $proc -le 1 ]
+  then
+      echo 0 > /etc/rpsrfsenable
+      return 0;
+  fi
+
+  echo 1 > /etc/rpsrfsenable
+  num=1
+  num=$(($num<<$proc))
+  num=$(($num-1));
+  echo $num;
+  hex=$(printf "%x\n" $num)
+  echo $hex;
+  #enable rps
+  echo $hex > /sys/class/net/eth0/queues/rx-0/rps_cpus
+  echo $hex > /sys/class/net/eth2/queues/rx-0/rps_cpus
+
+  #enble rps
+  echo 256 > /proc/sys/net/core/rps_sock_flow_entries
+  echo 256 > /sys/class/net/eth0/queues/rx-0/rps_flow_cnt
+  echo 256 > /sys/class/net/eth2/queues/rx-0/rps_flow_cnt
+}
+
 setup_common() {
   init_interfaces $1 $2 $3
   if [ -n "$ETH0_IP" ]
@@ -731,6 +771,7 @@ setup_router() {
   enable_svc cloud 0
   disable_rpfilter_domR
   enable_fwding 1
+  enable_rpsrfs 1
   chkconfig nfs-common off
   cp /etc/iptables/iptables-router /etc/iptables/rules.v4
 #for old templates

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/2d6644d9/patches/systemvm/debian/config/opt/cloud/bin/ipassoc.sh
----------------------------------------------------------------------
diff --git a/patches/systemvm/debian/config/opt/cloud/bin/ipassoc.sh b/patches/systemvm/debian/config/opt/cloud/bin/ipassoc.sh
index 9efae26..ae2d7e4 100755
--- a/patches/systemvm/debian/config/opt/cloud/bin/ipassoc.sh
+++ b/patches/systemvm/debian/config/opt/cloud/bin/ipassoc.sh
@@ -230,7 +230,7 @@ add_first_ip() {
       sudo arping -c 1 -I $ethDev -A -U -s $ipNoMask $ipNoMask;
       sudo arping -c 1 -I $ethDev -A -U -s $ipNoMask $ipNoMask;
   fi
-  add_routing $1 
+  add_routing $1
 
   return 0
 }
@@ -277,7 +277,7 @@ add_an_ip () {
       sudo arping -c 1 -I $ethDev -A -U -s $ipNoMask $ipNoMask;
       sudo arping -c 1 -I $ethDev -A -U -s $ipNoMask $ipNoMask;
   fi
-  add_routing $1 
+  add_routing $1
   return $?
    
 }
@@ -303,11 +303,41 @@ remove_an_ip () {
   return 0
 }
 
+enable_rpsrfs() {
+    #enable rps and rfs for this new interface
+    if [  -f /etc/rpsrfsenable ]
+    then
+        enable=$(cat /etc/rpsrfsenable)
+        if [ $enable -eq 1 ]
+        then
+          proc=$(cat /proc/cpuinfo | grep "processor" | wc -l)
+          if [ $proc -le 1 ]
+          then
+              return $status;
+          fi
+
+          num=1
+          num=$(($num<<$proc))
+          num=$(($num-1));
+          echo $num;
+          hex=$(printf "%x\n" $num)
+          echo $hex;
+          #enable rps
+          echo $hex > /sys/class/net/$ethDev/queues/rx-0/rps_cpus
+
+          #enable rfs
+          echo 256 > /sys/class/net/$ethDev/queues/rx-0/rps_flow_cnt
+
+         fi
+     fi
+}
+
 #set -x
 sflag=0
 lflag=
 fflag=
 cflag=
+nflag=
 op=""
 
 is_master=0
@@ -328,7 +358,7 @@ then
     if_keep_state=1
 fi
 
-while getopts 'sfADa:l:c:g:' OPTION
+while getopts 'sfADna:l:c:g:' OPTION
 do
   case $OPTION in
   A)	Aflag=1
@@ -350,6 +380,8 @@ do
   g)	gflag=1
   		defaultGwIP="$OPTARG"
   		;;
+  n)   nflag=1
+        ;;
   ?)	usage
                 unlock_exit 2 $lock $locked
 		;;
@@ -370,6 +402,13 @@ then
 fi
 
 
+if [ "$Aflag" == "1" ] && [ "$nflag" == "1" ]
+then
+    #enable rps, rfs for the new interface
+    enable_rpsrfs
+
+ fi
+
 if [ "$fflag" == "1" ] && [ "$Aflag" == "1" ]
 then
   add_first_ip  $publicIp  &&

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/2d6644d9/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
index da86612..571bcc8 100755
--- a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
+++ b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
@@ -1922,19 +1922,21 @@ ServerResource {
             int i = 0;
             String result = null;
             int nicNum = 0;
+            boolean newNic = false;
             for (IpAddressTO ip : ips) {
                 if (!vlanAllocatedToVM.containsKey(ip.getVlanId())) {
                     /* plug a vif into router */
                     VifHotPlug(conn, routerName, ip.getVlanId(),
                             ip.getVifMacAddress());
                     vlanAllocatedToVM.put(ip.getVlanId(), nicPos++);
+                    newNic = true;
                 }
                 nicNum = vlanAllocatedToVM.get(ip.getVlanId());
                 networkUsage(routerIp, "addVif", "eth" + nicNum);
                 result = _virtRouterResource.assignPublicIpAddress(routerName,
                         routerIp, ip.getPublicIp(), ip.isAdd(), ip.isFirstIP(),
                         ip.isSourceNat(), ip.getVlanId(), ip.getVlanGateway(),
-                        ip.getVlanNetmask(), ip.getVifMacAddress(), nicNum);
+                        ip.getVlanNetmask(), ip.getVifMacAddress(), nicNum, newNic);
 
                 if (result != null) {
                     results[i++] = IpAssocAnswer.errorResult;

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/2d6644d9/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java
index a45a8ce..f0e9e08 100755
--- a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java
+++ b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java
@@ -1769,6 +1769,10 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa
         args += " -g ";
         args += vlanGateway;
 
+        if (addVif) {
+            args += " -n ";
+        }
+
         if (s_logger.isDebugEnabled()) {
             s_logger.debug("Run command on domain router " + privateIpAddress + ", /opt/cloud/bin/ipassoc.sh " + args);
         }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/2d6644d9/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java
index d6d0523..991a890 100644
--- a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java
+++ b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java
@@ -2366,6 +2366,11 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe
             args += " -g ";
             args += vlanGateway;
 
+            if (addVif) {
+                //To indicate this is new interface created
+                args += " -n";
+            }
+
 
             String result = callHostPlugin(conn, "vmops", "routerProxy", "args", args);
             if (result == null || result.isEmpty()) {


[26/50] [abbrv] be able to upload template into swift

Posted by ch...@apache.org.
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/bf32776f/scripts/storage/secondary/swift
----------------------------------------------------------------------
diff --git a/scripts/storage/secondary/swift b/scripts/storage/secondary/swift
index 8224b4d..4138db8 100755
--- a/scripts/storage/secondary/swift
+++ b/scripts/storage/secondary/swift
@@ -1,5 +1,5 @@
 #!/usr/bin/python -u
-# Copyright (c) 2010-2012 OpenStack, LLC.
+# Copyright (c) 2010-2011 OpenStack, LLC.
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
@@ -13,51 +13,896 @@
 # implied.
 # See the License for the specific language governing permissions and
 # limitations under the License.
-import signal
-import socket
-import logging
 
 from errno import EEXIST, ENOENT
 from hashlib import md5
-from optparse import OptionParser, SUPPRESS_HELP
-from os import environ, listdir, makedirs, utime, _exit as os_exit
+from optparse import OptionParser
+from os import environ, listdir, makedirs, utime
 from os.path import basename, dirname, getmtime, getsize, isdir, join
-from Queue import Queue
-from random import shuffle
+from Queue import Empty, Queue
 from sys import argv, exc_info, exit, stderr, stdout
-from threading import Thread
-from time import sleep, time, gmtime, strftime
+from threading import enumerate as threading_enumerate, Thread
+from time import sleep
 from traceback import format_exception
-from urllib import quote, unquote
+
+
+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
+# Inclusion of swift.common.client for convenience of single file distribution
+
+import socket
+from cStringIO import StringIO
+from re import compile, DOTALL
+from tokenize import generate_tokens, STRING, NAME, OP
+from urllib import quote as _quote, unquote
+from urlparse import urlparse, urlunparse
+
+try:
+    from eventlet.green.httplib import HTTPException, HTTPSConnection
+except ImportError:
+    from httplib import HTTPException, HTTPSConnection
 
 try:
-    import simplejson as json
+    from eventlet import sleep
 except ImportError:
-    import json
+    from time import sleep
 
-from swiftclient import Connection, ClientException, HTTPException, utils
-from swiftclient.version import version_info
+try:
+    from swift.common.bufferedhttp \
+        import BufferedHTTPConnection as HTTPConnection
+except ImportError:
+    try:
+        from eventlet.green.httplib import HTTPConnection
+    except ImportError:
+        from httplib import HTTPConnection
 
 
-def get_conn(options):
+def quote(value, safe='/'):
     """
-    Return a connection building it from the options.
+    Patched version of urllib.quote that encodes utf8 strings before quoting
     """
-    return Connection(options.auth,
-                      options.user,
-                      options.key,
-                      auth_version=options.auth_version,
-                      os_options=options.os_options,
-                      snet=options.snet,
-                      cacert=options.os_cacert,
-                      insecure=options.insecure,
-                      ssl_compression=options.ssl_compression)
+    if isinstance(value, unicode):
+        value = value.encode('utf8')
+    return _quote(value, safe)
+
+
+# look for a real json parser first
+try:
+    # simplejson is popular and pretty good
+    from simplejson import loads as json_loads
+except ImportError:
+    try:
+        # 2.6 will have a json module in the stdlib
+        from json import loads as json_loads
+    except ImportError:
+        # fall back on local parser otherwise
+        comments = compile(r'/\*.*\*/|//[^\r\n]*', DOTALL)
+
+        def json_loads(string):
+            '''
+            Fairly competent json parser exploiting the python tokenizer and
+            eval(). -- From python-cloudfiles
+
+            _loads(serialized_json) -> object
+            '''
+            try:
+                res = []
+                consts = {'true': True, 'false': False, 'null': None}
+                string = '(' + comments.sub('', string) + ')'
+                for type, val, _junk, _junk, _junk in \
+                        generate_tokens(StringIO(string).readline):
+                    if (type == OP and val not in '[]{}:,()-') or \
+                            (type == NAME and val not in consts):
+                        raise AttributeError()
+                    elif type == STRING:
+                        res.append('u')
+                        res.append(val.replace('\\/', '/'))
+                    else:
+                        res.append(val)
+                return eval(''.join(res), {}, consts)
+            except Exception:
+                raise AttributeError()
+
+
+class ClientException(Exception):
+
+    def __init__(self, msg, http_scheme='', http_host='', http_port='',
+                 http_path='', http_query='', http_status=0, http_reason='',
+                 http_device=''):
+        Exception.__init__(self, msg)
+        self.msg = msg
+        self.http_scheme = http_scheme
+        self.http_host = http_host
+        self.http_port = http_port
+        self.http_path = http_path
+        self.http_query = http_query
+        self.http_status = http_status
+        self.http_reason = http_reason
+        self.http_device = http_device
+
+    def __str__(self):
+        a = self.msg
+        b = ''
+        if self.http_scheme:
+            b += '%s://' % self.http_scheme
+        if self.http_host:
+            b += self.http_host
+        if self.http_port:
+            b += ':%s' % self.http_port
+        if self.http_path:
+            b += self.http_path
+        if self.http_query:
+            b += '?%s' % self.http_query
+        if self.http_status:
+            if b:
+                b = '%s %s' % (b, self.http_status)
+            else:
+                b = str(self.http_status)
+        if self.http_reason:
+            if b:
+                b = '%s %s' % (b, self.http_reason)
+            else:
+                b = '- %s' % self.http_reason
+        if self.http_device:
+            if b:
+                b = '%s: device %s' % (b, self.http_device)
+            else:
+                b = 'device %s' % self.http_device
+        return b and '%s: %s' % (a, b) or a
+
+
+def http_connection(url, proxy=None):
+    """
+    Make an HTTPConnection or HTTPSConnection
+
+    :param url: url to connect to
+    :param proxy: proxy to connect through, if any; None by default; str of the
+                  format 'http://127.0.0.1:8888' to set one
+    :returns: tuple of (parsed url, connection object)
+    :raises ClientException: Unable to handle protocol scheme
+    """
+    parsed = urlparse(url)
+    proxy_parsed = urlparse(proxy) if proxy else None
+    if parsed.scheme == 'http':
+        conn = HTTPConnection((proxy_parsed if proxy else parsed).netloc)
+    elif parsed.scheme == 'https':
+        conn = HTTPSConnection((proxy_parsed if proxy else parsed).netloc)
+    else:
+        raise ClientException('Cannot handle protocol scheme %s for url %s' %
+                              (parsed.scheme, repr(url)))
+    if proxy:
+        conn._set_tunnel(parsed.hostname, parsed.port)
+    return parsed, conn
+
+
+def get_auth(url, user, key, snet=False):
+    """
+    Get authentication/authorization credentials.
+
+    The snet parameter is used for Rackspace's ServiceNet internal network
+    implementation. In this function, it simply adds *snet-* to the beginning
+    of the host name for the returned storage URL. With Rackspace Cloud Files,
+    use of this network path causes no bandwidth charges but requires the
+    client to be running on Rackspace's ServiceNet network.
+
+    :param url: authentication/authorization URL
+    :param user: user to authenticate as
+    :param key: key or password for authorization
+    :param snet: use SERVICENET internal network (see above), default is False
+    :returns: tuple of (storage URL, auth token)
+    :raises ClientException: HTTP GET request to auth URL failed
+    """
+    parsed, conn = http_connection(url)
+    conn.request('GET', parsed.path, '',
+                 {'X-Auth-User': user, 'X-Auth-Key': key})
+    resp = conn.getresponse()
+    resp.read()
+    if resp.status < 200 or resp.status >= 300:
+        raise ClientException('Auth GET failed', http_scheme=parsed.scheme,
+                http_host=conn.host, http_port=conn.port,
+                http_path=parsed.path, http_status=resp.status,
+                http_reason=resp.reason)
+    url = resp.getheader('x-storage-url')
+    if snet:
+        parsed = list(urlparse(url))
+        # Second item in the list is the netloc
+        parsed[1] = 'snet-' + parsed[1]
+        url = urlunparse(parsed)
+    return url, resp.getheader('x-storage-token',
+                                                resp.getheader('x-auth-token'))
+
+
+def get_account(url, token, marker=None, limit=None, prefix=None,
+                http_conn=None, full_listing=False):
+    """
+    Get a listing of containers for the account.
+
+    :param url: storage URL
+    :param token: auth token
+    :param marker: marker query
+    :param limit: limit query
+    :param prefix: prefix query
+    :param http_conn: HTTP connection object (If None, it will create the
+                      conn object)
+    :param full_listing: if True, return a full listing, else returns a max
+                         of 10000 listings
+    :returns: a tuple of (response headers, a list of containers) The response
+              headers will be a dict and all header names will be lowercase.
+    :raises ClientException: HTTP GET request failed
+    """
+    if not http_conn:
+        http_conn = http_connection(url)
+    if full_listing:
+        rv = get_account(url, token, marker, limit, prefix, http_conn)
+        listing = rv[1]
+        while listing:
+            marker = listing[-1]['name']
+            listing = \
+                get_account(url, token, marker, limit, prefix, http_conn)[1]
+            if listing:
+                rv[1].extend(listing)
+        return rv
+    parsed, conn = http_conn
+    qs = 'format=json'
+    if marker:
+        qs += '&marker=%s' % quote(marker)
+    if limit:
+        qs += '&limit=%d' % limit
+    if prefix:
+        qs += '&prefix=%s' % quote(prefix)
+    conn.request('GET', '%s?%s' % (parsed.path, qs), '',
+                 {'X-Auth-Token': token})
+    resp = conn.getresponse()
+    resp_headers = {}
+    for header, value in resp.getheaders():
+        resp_headers[header.lower()] = value
+    if resp.status < 200 or resp.status >= 300:
+        resp.read()
+        raise ClientException('Account GET failed', http_scheme=parsed.scheme,
+                http_host=conn.host, http_port=conn.port,
+                http_path=parsed.path, http_query=qs, http_status=resp.status,
+                http_reason=resp.reason)
+    if resp.status == 204:
+        resp.read()
+        return resp_headers, []
+    return resp_headers, json_loads(resp.read())
+
+
+def head_account(url, token, http_conn=None):
+    """
+    Get account stats.
+
+    :param url: storage URL
+    :param token: auth token
+    :param http_conn: HTTP connection object (If None, it will create the
+                      conn object)
+    :returns: a dict containing the response's headers (all header names will
+              be lowercase)
+    :raises ClientException: HTTP HEAD request failed
+    """
+    if http_conn:
+        parsed, conn = http_conn
+    else:
+        parsed, conn = http_connection(url)
+    conn.request('HEAD', parsed.path, '', {'X-Auth-Token': token})
+    resp = conn.getresponse()
+    resp.read()
+    if resp.status < 200 or resp.status >= 300:
+        raise ClientException('Account HEAD failed', http_scheme=parsed.scheme,
+                http_host=conn.host, http_port=conn.port,
+                http_path=parsed.path, http_status=resp.status,
+                http_reason=resp.reason)
+    resp_headers = {}
+    for header, value in resp.getheaders():
+        resp_headers[header.lower()] = value
+    return resp_headers
+
+
+def post_account(url, token, headers, http_conn=None):
+    """
+    Update an account's metadata.
+
+    :param url: storage URL
+    :param token: auth token
+    :param headers: additional headers to include in the request
+    :param http_conn: HTTP connection object (If None, it will create the
+                      conn object)
+    :raises ClientException: HTTP POST request failed
+    """
+    if http_conn:
+        parsed, conn = http_conn
+    else:
+        parsed, conn = http_connection(url)
+    headers['X-Auth-Token'] = token
+    conn.request('POST', parsed.path, '', headers)
+    resp = conn.getresponse()
+    resp.read()
+    if resp.status < 200 or resp.status >= 300:
+        raise ClientException('Account POST failed',
+                http_scheme=parsed.scheme, http_host=conn.host,
+                http_port=conn.port, http_path=path, http_status=resp.status,
+                http_reason=resp.reason)
+
+
+def get_container(url, token, container, marker=None, limit=None,
+                  prefix=None, delimiter=None, http_conn=None,
+                  full_listing=False):
+    """
+    Get a listing of objects for the container.
+
+    :param url: storage URL
+    :param token: auth token
+    :param container: container name to get a listing for
+    :param marker: marker query
+    :param limit: limit query
+    :param prefix: prefix query
+    :param delimeter: string to delimit the queries on
+    :param http_conn: HTTP connection object (If None, it will create the
+                      conn object)
+    :param full_listing: if True, return a full listing, else returns a max
+                         of 10000 listings
+    :returns: a tuple of (response headers, a list of objects) The response
+              headers will be a dict and all header names will be lowercase.
+    :raises ClientException: HTTP GET request failed
+    """
+    if not http_conn:
+        http_conn = http_connection(url)
+    if full_listing:
+        rv = get_container(url, token, container, marker, limit, prefix,
+                           delimiter, http_conn)
+        listing = rv[1]
+        while listing:
+            if not delimiter:
+                marker = listing[-1]['name']
+            else:
+                marker = listing[-1].get('name', listing[-1].get('subdir'))
+            listing = get_container(url, token, container, marker, limit,
+                                    prefix, delimiter, http_conn)[1]
+            if listing:
+                rv[1].extend(listing)
+        return rv
+    parsed, conn = http_conn
+    path = '%s/%s' % (parsed.path, quote(container))
+    qs = 'format=json'
+    if marker:
+        qs += '&marker=%s' % quote(marker)
+    if limit:
+        qs += '&limit=%d' % limit
+    if prefix:
+        qs += '&prefix=%s' % quote(prefix)
+    if delimiter:
+        qs += '&delimiter=%s' % quote(delimiter)
+    conn.request('GET', '%s?%s' % (path, qs), '', {'X-Auth-Token': token})
+    resp = conn.getresponse()
+    if resp.status < 200 or resp.status >= 300:
+        resp.read()
+        raise ClientException('Container GET failed',
+                http_scheme=parsed.scheme, http_host=conn.host,
+                http_port=conn.port, http_path=path, http_query=qs,
+                http_status=resp.status, http_reason=resp.reason)
+    resp_headers = {}
+    for header, value in resp.getheaders():
+        resp_headers[header.lower()] = value
+    if resp.status == 204:
+        resp.read()
+        return resp_headers, []
+    return resp_headers, json_loads(resp.read())
+
+
+def head_container(url, token, container, http_conn=None):
+    """
+    Get container stats.
+
+    :param url: storage URL
+    :param token: auth token
+    :param container: container name to get stats for
+    :param http_conn: HTTP connection object (If None, it will create the
+                      conn object)
+    :returns: a dict containing the response's headers (all header names will
+              be lowercase)
+    :raises ClientException: HTTP HEAD request failed
+    """
+    if http_conn:
+        parsed, conn = http_conn
+    else:
+        parsed, conn = http_connection(url)
+    path = '%s/%s' % (parsed.path, quote(container))
+    conn.request('HEAD', path, '', {'X-Auth-Token': token})
+    resp = conn.getresponse()
+    resp.read()
+    if resp.status < 200 or resp.status >= 300:
+        raise ClientException('Container HEAD failed',
+                http_scheme=parsed.scheme, http_host=conn.host,
+                http_port=conn.port, http_path=path, http_status=resp.status,
+                http_reason=resp.reason)
+    resp_headers = {}
+    for header, value in resp.getheaders():
+        resp_headers[header.lower()] = value
+    return resp_headers
+
+
+def put_container(url, token, container, headers=None, http_conn=None):
+    """
+    Create a container
+
+    :param url: storage URL
+    :param token: auth token
+    :param container: container name to create
+    :param headers: additional headers to include in the request
+    :param http_conn: HTTP connection object (If None, it will create the
+                      conn object)
+    :raises ClientException: HTTP PUT request failed
+    """
+    if http_conn:
+        parsed, conn = http_conn
+    else:
+        parsed, conn = http_connection(url)
+    path = '%s/%s' % (parsed.path, quote(container))
+    if not headers:
+        headers = {}
+    headers['X-Auth-Token'] = token
+    conn.request('PUT', path, '', headers)
+    resp = conn.getresponse()
+    resp.read()
+    if resp.status < 200 or resp.status >= 300:
+        raise ClientException('Container PUT failed',
+                http_scheme=parsed.scheme, http_host=conn.host,
+                http_port=conn.port, http_path=path, http_status=resp.status,
+                http_reason=resp.reason)
+
+
+def post_container(url, token, container, headers, http_conn=None):
+    """
+    Update a container's metadata.
+
+    :param url: storage URL
+    :param token: auth token
+    :param container: container name to update
+    :param headers: additional headers to include in the request
+    :param http_conn: HTTP connection object (If None, it will create the
+                      conn object)
+    :raises ClientException: HTTP POST request failed
+    """
+    if http_conn:
+        parsed, conn = http_conn
+    else:
+        parsed, conn = http_connection(url)
+    path = '%s/%s' % (parsed.path, quote(container))
+    headers['X-Auth-Token'] = token
+    conn.request('POST', path, '', headers)
+    resp = conn.getresponse()
+    resp.read()
+    if resp.status < 200 or resp.status >= 300:
+        raise ClientException('Container POST failed',
+                http_scheme=parsed.scheme, http_host=conn.host,
+                http_port=conn.port, http_path=path, http_status=resp.status,
+                http_reason=resp.reason)
+
+
+def delete_container(url, token, container, http_conn=None):
+    """
+    Delete a container
+
+    :param url: storage URL
+    :param token: auth token
+    :param container: container name to delete
+    :param http_conn: HTTP connection object (If None, it will create the
+                      conn object)
+    :raises ClientException: HTTP DELETE request failed
+    """
+    if http_conn:
+        parsed, conn = http_conn
+    else:
+        parsed, conn = http_connection(url)
+    path = '%s/%s' % (parsed.path, quote(container))
+    conn.request('DELETE', path, '', {'X-Auth-Token': token})
+    resp = conn.getresponse()
+    resp.read()
+    if resp.status < 200 or resp.status >= 300:
+        raise ClientException('Container DELETE failed',
+                http_scheme=parsed.scheme, http_host=conn.host,
+                http_port=conn.port, http_path=path, http_status=resp.status,
+                http_reason=resp.reason)
+
+
+def get_object(url, token, container, name, http_conn=None,
+               resp_chunk_size=None):
+    """
+    Get an object
+
+    :param url: storage URL
+    :param token: auth token
+    :param container: container name that the object is in
+    :param name: object name to get
+    :param http_conn: HTTP connection object (If None, it will create the
+                      conn object)
+    :param resp_chunk_size: if defined, chunk size of data to read. NOTE: If
+                            you specify a resp_chunk_size you must fully read
+                            the object's contents before making another
+                            request.
+    :returns: a tuple of (response headers, the object's contents) The response
+              headers will be a dict and all header names will be lowercase.
+    :raises ClientException: HTTP GET request failed
+    """
+    if http_conn:
+        parsed, conn = http_conn
+    else:
+        parsed, conn = http_connection(url)
+    path = '%s/%s/%s' % (parsed.path, quote(container), quote(name))
+    conn.request('GET', path, '', {'X-Auth-Token': token})
+    resp = conn.getresponse()
+    if resp.status < 200 or resp.status >= 300:
+        resp.read()
+        raise ClientException('Object GET failed', http_scheme=parsed.scheme,
+                http_host=conn.host, http_port=conn.port, http_path=path,
+                http_status=resp.status, http_reason=resp.reason)
+    if resp_chunk_size:
+
+        def _object_body():
+            buf = resp.read(resp_chunk_size)
+            while buf:
+                yield buf
+                buf = resp.read(resp_chunk_size)
+        object_body = _object_body()
+    else:
+        object_body = resp.read()
+    resp_headers = {}
+    for header, value in resp.getheaders():
+        resp_headers[header.lower()] = value
+    return resp_headers, object_body
+
+
+def head_object(url, token, container, name, http_conn=None):
+    """
+    Get object info
+
+    :param url: storage URL
+    :param token: auth token
+    :param container: container name that the object is in
+    :param name: object name to get info for
+    :param http_conn: HTTP connection object (If None, it will create the
+                      conn object)
+    :returns: a dict containing the response's headers (all header names will
+              be lowercase)
+    :raises ClientException: HTTP HEAD request failed
+    """
+    if http_conn:
+        parsed, conn = http_conn
+    else:
+        parsed, conn = http_connection(url)
+    path = '%s/%s/%s' % (parsed.path, quote(container), quote(name))
+    conn.request('HEAD', path, '', {'X-Auth-Token': token})
+    resp = conn.getresponse()
+    resp.read()
+    if resp.status < 200 or resp.status >= 300:
+        raise ClientException('Object HEAD failed', http_scheme=parsed.scheme,
+                http_host=conn.host, http_port=conn.port, http_path=path,
+                http_status=resp.status, http_reason=resp.reason)
+    resp_headers = {}
+    for header, value in resp.getheaders():
+        resp_headers[header.lower()] = value
+    return resp_headers
+
+
+def put_object(url, token=None, container=None, name=None, contents=None,
+               content_length=None, etag=None, chunk_size=65536,
+               content_type=None, headers=None, http_conn=None, proxy=None):
+    """
+    Put an object
+
+    :param url: storage URL
+    :param token: auth token; if None, no token will be sent
+    :param container: container name that the object is in; if None, the
+                      container name is expected to be part of the url
+    :param name: object name to put; if None, the object name is expected to be
+                 part of the url
+    :param contents: a string or a file like object to read object data from;
+                     if None, a zero-byte put will be done
+    :param content_length: value to send as content-length header; also limits
+                           the amount read from contents; if None, it will be
+                           computed via the contents or chunked transfer
+                           encoding will be used
+    :param etag: etag of contents; if None, no etag will be sent
+    :param chunk_size: chunk size of data to write; default 65536
+    :param content_type: value to send as content-type header; if None, no
+                         content-type will be set (remote end will likely try
+                         to auto-detect it)
+    :param headers: additional headers to include in the request, if any
+    :param http_conn: HTTP connection object (If None, it will create the
+                      conn object)
+    :param proxy: proxy to connect through, if any; None by default; str of the
+                  format 'http://127.0.0.1:8888' to set one
+    :returns: etag from server response
+    :raises ClientException: HTTP PUT request failed
+    """
+    if http_conn:
+        parsed, conn = http_conn
+    else:
+        parsed, conn = http_connection(url, proxy=proxy)
+    path = parsed.path
+    if container:
+        path = '%s/%s' % (path.rstrip('/'), quote(container))
+    if name:
+        path = '%s/%s' % (path.rstrip('/'), quote(name))
+    if headers:
+        headers = dict(headers)
+    else:
+        headers = {}
+    if token:
+        headers['X-Auth-Token'] = token
+    if etag:
+        headers['ETag'] = etag.strip('"')
+    if content_length is not None:
+        headers['Content-Length'] = str(content_length)
+    else:
+        for n, v in headers.iteritems():
+            if n.lower() == 'content-length':
+                content_length = int(v)
+    if content_type is not None:
+        headers['Content-Type'] = content_type
+    if not contents:
+        headers['Content-Length'] = '0'
+    if hasattr(contents, 'read'):
+        conn.putrequest('PUT', path)
+        for header, value in headers.iteritems():
+            conn.putheader(header, value)
+        if content_length is None:
+            conn.putheader('Transfer-Encoding', 'chunked')
+            conn.endheaders()
+            chunk = contents.read(chunk_size)
+            while chunk:
+                conn.send('%x\r\n%s\r\n' % (len(chunk), chunk))
+                chunk = contents.read(chunk_size)
+            conn.send('0\r\n\r\n')
+        else:
+            conn.endheaders()
+            left = content_length
+            while left > 0:
+                size = chunk_size
+                if size > left:
+                    size = left
+                chunk = contents.read(size)
+                conn.send(chunk)
+                left -= len(chunk)
+    else:
+        conn.request('PUT', path, contents, headers)
+    resp = conn.getresponse()
+    resp.read()
+    if resp.status < 200 or resp.status >= 300:
+        raise ClientException('Object PUT failed', http_scheme=parsed.scheme,
+                http_host=conn.host, http_port=conn.port, http_path=path,
+                http_status=resp.status, http_reason=resp.reason)
+    return resp.getheader('etag', '').strip('"')
+
+
+def post_object(url, token, container, name, headers, http_conn=None):
+    """
+    Update object metadata
+
+    :param url: storage URL
+    :param token: auth token
+    :param container: container name that the object is in
+    :param name: name of the object to update
+    :param headers: additional headers to include in the request
+    :param http_conn: HTTP connection object (If None, it will create the
+                      conn object)
+    :raises ClientException: HTTP POST request failed
+    """
+    if http_conn:
+        parsed, conn = http_conn
+    else:
+        parsed, conn = http_connection(url)
+    path = '%s/%s/%s' % (parsed.path, quote(container), quote(name))
+    headers['X-Auth-Token'] = token
+    conn.request('POST', path, '', headers)
+    resp = conn.getresponse()
+    resp.read()
+    if resp.status < 200 or resp.status >= 300:
+        raise ClientException('Object POST failed', http_scheme=parsed.scheme,
+                http_host=conn.host, http_port=conn.port, http_path=path,
+                http_status=resp.status, http_reason=resp.reason)
+
+
+def delete_object(url, token=None, container=None, name=None, http_conn=None,
+                  headers=None, proxy=None):
+    """
+    Delete object
+
+    :param url: storage URL
+    :param token: auth token; if None, no token will be sent
+    :param container: container name that the object is in; if None, the
+                      container name is expected to be part of the url
+    :param name: object name to delete; if None, the object name is expected to
+                 be part of the url
+    :param http_conn: HTTP connection object (If None, it will create the
+                      conn object)
+    :param headers: additional headers to include in the request
+    :param proxy: proxy to connect through, if any; None by default; str of the
+                  format 'http://127.0.0.1:8888' to set one
+    :raises ClientException: HTTP DELETE request failed
+    """
+    if http_conn:
+        parsed, conn = http_conn
+    else:
+        parsed, conn = http_connection(url, proxy=proxy)
+    path = parsed.path
+    if container:
+        path = '%s/%s' % (path.rstrip('/'), quote(container))
+    if name:
+        path = '%s/%s' % (path.rstrip('/'), quote(name))
+    if headers:
+        headers = dict(headers)
+    else:
+        headers = {}
+    if token:
+        headers['X-Auth-Token'] = token
+    conn.request('DELETE', path, '', headers)
+    resp = conn.getresponse()
+    resp.read()
+    if resp.status < 200 or resp.status >= 300:
+        raise ClientException('Object DELETE failed',
+                http_scheme=parsed.scheme, http_host=conn.host,
+                http_port=conn.port, http_path=path, http_status=resp.status,
+                http_reason=resp.reason)
+
+
+class Connection(object):
+    """Convenience class to make requests that will also retry the request"""
+
+    def __init__(self, authurl, user, key, retries=5, preauthurl=None,
+                 preauthtoken=None, snet=False, starting_backoff=1):
+        """
+        :param authurl: authenitcation URL
+        :param user: user name to authenticate as
+        :param key: key/password to authenticate with
+        :param retries: Number of times to retry the request before failing
+        :param preauthurl: storage URL (if you have already authenticated)
+        :param preauthtoken: authentication token (if you have already
+                             authenticated)
+        :param snet: use SERVICENET internal network default is False
+        """
+        self.authurl = authurl
+        self.user = user
+        self.key = key
+        self.retries = retries
+        self.http_conn = None
+        self.url = preauthurl
+        self.token = preauthtoken
+        self.attempts = 0
+        self.snet = snet
+        self.starting_backoff = starting_backoff
+
+    def get_auth(self):
+        return get_auth(self.authurl, self.user, self.key, snet=self.snet)
+
+    def http_connection(self):
+        return http_connection(self.url)
+
+    def _retry(self, reset_func, func, *args, **kwargs):
+        self.attempts = 0
+        backoff = self.starting_backoff
+        while self.attempts <= self.retries:
+            self.attempts += 1
+            try:
+                if not self.url or not self.token:
+                    self.url, self.token = self.get_auth()
+                    self.http_conn = None
+                if not self.http_conn:
+                    self.http_conn = self.http_connection()
+                kwargs['http_conn'] = self.http_conn
+                rv = func(self.url, self.token, *args, **kwargs)
+                return rv
+            except (socket.error, HTTPException):
+                if self.attempts > self.retries:
+                    raise
+                self.http_conn = None
+            except ClientException, err:
+                if self.attempts > self.retries:
+                    raise
+                if err.http_status == 401:
+                    self.url = self.token = None
+                    if self.attempts > 1:
+                        raise
+                elif err.http_status == 408:
+                    self.http_conn = None
+                elif 500 <= err.http_status <= 599:
+                    pass
+                else:
+                    raise
+            sleep(backoff)
+            backoff *= 2
+            if reset_func:
+                reset_func(func, *args, **kwargs)
+
+    def head_account(self):
+        """Wrapper for :func:`head_account`"""
+        return self._retry(None, head_account)
+
+    def get_account(self, marker=None, limit=None, prefix=None,
+                    full_listing=False):
+        """Wrapper for :func:`get_account`"""
+        # TODO(unknown): With full_listing=True this will restart the entire
+        # listing with each retry. Need to make a better version that just
+        # retries where it left off.
+        return self._retry(None, get_account, marker=marker, limit=limit,
+                           prefix=prefix, full_listing=full_listing)
+
+    def post_account(self, headers):
+        """Wrapper for :func:`post_account`"""
+        return self._retry(None, post_account, headers)
+
+    def head_container(self, container):
+        """Wrapper for :func:`head_container`"""
+        return self._retry(None, head_container, container)
+
+    def get_container(self, container, marker=None, limit=None, prefix=None,
+                      delimiter=None, full_listing=False):
+        """Wrapper for :func:`get_container`"""
+        # TODO(unknown): With full_listing=True this will restart the entire
+        # listing with each retry. Need to make a better version that just
+        # retries where it left off.
+        return self._retry(None, get_container, container, marker=marker,
+                           limit=limit, prefix=prefix, delimiter=delimiter,
+                           full_listing=full_listing)
+
+    def put_container(self, container, headers=None):
+        """Wrapper for :func:`put_container`"""
+        return self._retry(None, put_container, container, headers=headers)
+
+    def post_container(self, container, headers):
+        """Wrapper for :func:`post_container`"""
+        return self._retry(None, post_container, container, headers)
+
+    def delete_container(self, container):
+        """Wrapper for :func:`delete_container`"""
+        return self._retry(None, delete_container, container)
+
+    def head_object(self, container, obj):
+        """Wrapper for :func:`head_object`"""
+        return self._retry(None, head_object, container, obj)
+
+    def get_object(self, container, obj, resp_chunk_size=None):
+        """Wrapper for :func:`get_object`"""
+        return self._retry(None, get_object, container, obj,
+                           resp_chunk_size=resp_chunk_size)
+
+    def put_object(self, container, obj, contents, content_length=None,
+                   etag=None, chunk_size=65536, content_type=None,
+                   headers=None):
+        """Wrapper for :func:`put_object`"""
+
+        def _default_reset(*args, **kwargs):
+            raise ClientException('put_object(%r, %r, ...) failure and no '
+                'ability to reset contents for reupload.' % (container, obj))
+
+        reset_func = _default_reset
+        tell = getattr(contents, 'tell', None)
+        seek = getattr(contents, 'seek', None)
+        if tell and seek:
+            orig_pos = tell()
+            reset_func = lambda *a, **k: seek(orig_pos)
+        elif not contents:
+            reset_func = lambda *a, **k: None
+
+        return self._retry(reset_func, put_object, container, obj, contents,
+            content_length=content_length, etag=etag, chunk_size=chunk_size,
+            content_type=content_type, headers=headers)
+
+    def post_object(self, container, obj, headers):
+        """Wrapper for :func:`post_object`"""
+        return self._retry(None, post_object, container, obj, headers)
+
+    def delete_object(self, container, obj):
+        """Wrapper for :func:`delete_object`"""
+        return self._retry(None, delete_object, container, obj)
+
+# End inclusion of swift.common.client
+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
 
 
 def mkdirs(path):
     try:
         makedirs(path)
-    except OSError as err:
+    except OSError, err:
         if err.errno != EEXIST:
             raise
 
@@ -80,64 +925,39 @@ def put_errors_from_threads(threads, error_queue):
     return was_error
 
 
-class StopWorkerThreadSignal(object):
-    pass
-
-
 class QueueFunctionThread(Thread):
 
     def __init__(self, queue, func, *args, **kwargs):
-        """
-        Calls func for each item in queue; func is called with a queued
-        item as the first arg followed by *args and **kwargs. Use the
-        PriorityQueue for sending quit signal when Ctrl-C is pressed.
-        """
+        """ Calls func for each item in queue; func is called with a queued
+            item as the first arg followed by *args and **kwargs. Use the abort
+            attribute to have the thread empty the queue (without processing)
+            and exit. """
         Thread.__init__(self)
+        self.abort = False
         self.queue = queue
         self.func = func
         self.args = args
         self.kwargs = kwargs
         self.exc_infos = []
-        self.results = []
-        self.store_results = kwargs.pop('store_results', False)
 
     def run(self):
-        while True:
-            try:
-                item = self.queue.get()
-                if isinstance(item, StopWorkerThreadSignal):
-                    break
-            except:
-                # This catch is important and it may occur when ctrl-C is
-                # pressed, in this case simply quit the thread
-                break
-            else:
+        try:
+            while True:
                 try:
-                    self.func(item, *self.args, **self.kwargs)
-                except Exception:
-                    self.exc_infos.append(exc_info())
-
-
-def shutdown_worker_threads(queue, thread_list):
-    """
-    Takes a job queue and a list of associated QueueFunctionThread objects,
-    puts a StopWorkerThreadSignal object into the queue, and waits for the
-    queue to flush.
-    """
-    for thread in [t for t in thread_list if t.isAlive()]:
-        queue.put(StopWorkerThreadSignal())
-
-    while any(map(QueueFunctionThread.is_alive, thread_list)):
-        sleep(0.05)
-
-
-def immediate_exit(signum, frame):
-    stderr.write(" Aborted\n")
-    os_exit(2)
+                    item = self.queue.get_nowait()
+                    if not self.abort:
+                        self.func(item, *self.args, **self.kwargs)
+                    self.queue.task_done()
+                except Empty:
+                    if self.abort:
+                        break
+                    sleep(0.01)
+        except Exception:
+            self.exc_infos.append(exc_info())
 
 
 st_delete_help = '''
-delete [options] --all OR delete container [options] [object] [object] ...
+delete --all OR delete container [--leave-segments] [object] [object] ...
     Deletes everything in the account (with --all), or everything in a
     container, or a list of objects depending on the args given. Segments of
     manifest objects will be deleted as well, unless you specify the
@@ -145,21 +965,12 @@ delete [options] --all OR delete container [options] [object] [object] ...
 
 
 def st_delete(parser, args, print_queue, error_queue):
-    parser.add_option(
-        '-a', '--all', action='store_true', dest='yes_all',
+    parser.add_option('-a', '--all', action='store_true', dest='yes_all',
         default=False, help='Indicates that you really want to delete '
         'everything in the account')
-    parser.add_option(
-        '', '--leave-segments', action='store_true',
-        dest='leave_segments', default=False,
-        help='Indicates that you want the segments of manifest'
-             'objects left alone')
-    parser.add_option(
-        '', '--object-threads', type=int,
-        default=10, help='Number of threads to use for deleting objects')
-    parser.add_option('', '--container-threads', type=int,
-                      default=10, help='Number of threads to use for '
-                      'deleting containers')
+    parser.add_option('', '--leave-segments', action='store_true',
+        dest='leave_segments', default=False, help='Indicates that you want '
+        'the segments of manifest objects left alone')
     (options, args) = parse_args(parser, args)
     args = args[1:]
     if (not args and not options.yes_all) or (args and options.yes_all):
@@ -181,34 +992,32 @@ def st_delete(parser, args, print_queue, error_queue):
     def _delete_object((container, obj), conn):
         try:
             old_manifest = None
-            query_string = None
             if not options.leave_segments:
                 try:
-                    headers = conn.head_object(container, obj)
-                    old_manifest = headers.get('x-object-manifest')
-                    if utils.config_true_value(
-                            headers.get('x-static-large-object')):
-                        query_string = 'multipart-manifest=delete'
-                except ClientException as err:
+                    old_manifest = conn.head_object(container, obj).get(
+                        'x-object-manifest')
+                except ClientException, err:
                     if err.http_status != 404:
                         raise
-            conn.delete_object(container, obj, query_string=query_string)
+            conn.delete_object(container, obj)
             if old_manifest:
                 segment_queue = Queue(10000)
                 scontainer, sprefix = old_manifest.split('/', 1)
-                scontainer = unquote(scontainer)
-                sprefix = unquote(sprefix).rstrip('/') + '/'
                 for delobj in conn.get_container(scontainer,
                                                  prefix=sprefix)[1]:
                     segment_queue.put((scontainer, delobj['name']))
                 if not segment_queue.empty():
-                    segment_threads = [QueueFunctionThread(
-                        segment_queue,
+                    segment_threads = [QueueFunctionThread(segment_queue,
                         _delete_segment, create_connection()) for _junk in
-                        xrange(options.object_threads)]
+                        xrange(10)]
                     for thread in segment_threads:
                         thread.start()
-                    shutdown_worker_threads(segment_queue, segment_threads)
+                    while not segment_queue.empty():
+                        sleep(0.01)
+                    for thread in segment_threads:
+                        thread.abort = True
+                        while thread.isAlive():
+                            thread.join(0.01)
                     put_errors_from_threads(segment_threads, error_queue)
             if options.verbose:
                 path = options.yes_all and join(container, obj) or obj
@@ -219,7 +1028,7 @@ def st_delete(parser, args, print_queue, error_queue):
                                     (path, conn.attempts))
                 else:
                     print_queue.put(path)
-        except ClientException as err:
+        except ClientException, err:
             if err.http_status != 404:
                 raise
             error_queue.put('Object %s not found' %
@@ -239,109 +1048,97 @@ def st_delete(parser, args, print_queue, error_queue):
                     object_queue.put((container, obj))
                 marker = objects[-1]
             while not object_queue.empty():
-                sleep(0.05)
+                sleep(0.01)
             attempts = 1
             while True:
                 try:
                     conn.delete_container(container)
                     break
-                except ClientException as err:
+                except ClientException, err:
                     if err.http_status != 409:
                         raise
                     if attempts > 10:
                         raise
                     attempts += 1
                     sleep(1)
-        except ClientException as err:
+        except ClientException, err:
             if err.http_status != 404:
                 raise
             error_queue.put('Container %s not found' % repr(container))
 
-    create_connection = lambda: get_conn(options)
-    object_threads = \
-        [QueueFunctionThread(object_queue, _delete_object, create_connection())
-         for _junk in xrange(options.object_threads)]
+    url, token = get_auth(options.auth, options.user, options.key,
+        snet=options.snet)
+    create_connection = lambda: Connection(options.auth, options.user,
+        options.key, preauthurl=url, preauthtoken=token, snet=options.snet)
+    object_threads = [QueueFunctionThread(object_queue, _delete_object,
+        create_connection()) for _junk in xrange(10)]
     for thread in object_threads:
         thread.start()
-    container_threads = \
-        [QueueFunctionThread(container_queue, _delete_container,
-                             create_connection())
-         for _junk in xrange(options.container_threads)]
+    container_threads = [QueueFunctionThread(container_queue,
+        _delete_container, create_connection()) for _junk in xrange(10)]
     for thread in container_threads:
         thread.start()
+    if not args:
+        conn = create_connection()
+        try:
+            marker = ''
+            while True:
+                containers = \
+                    [c['name'] for c in conn.get_account(marker=marker)[1]]
+                if not containers:
+                    break
+                for container in containers:
+                    container_queue.put(container)
+                marker = containers[-1]
+            while not container_queue.empty():
+                sleep(0.01)
+            while not object_queue.empty():
+                sleep(0.01)
+        except ClientException, err:
+            if err.http_status != 404:
+                raise
+            error_queue.put('Account not found')
+    elif len(args) == 1:
+        if '/' in args[0]:
+            print >> stderr, 'WARNING: / in container name; you might have ' \
+                             'meant %r instead of %r.' % \
+                             (args[0].replace('/', ' ', 1), args[0])
+        conn = create_connection()
+        _delete_container(args[0], conn)
+    else:
+        for obj in args[1:]:
+            object_queue.put((args[0], obj))
+    while not container_queue.empty():
+        sleep(0.01)
+    for thread in container_threads:
+        thread.abort = True
+        while thread.isAlive():
+            thread.join(0.01)
+    put_errors_from_threads(container_threads, error_queue)
+    while not object_queue.empty():
+        sleep(0.01)
+    for thread in object_threads:
+        thread.abort = True
+        while thread.isAlive():
+            thread.join(0.01)
+    put_errors_from_threads(object_threads, error_queue)
 
-    try:
-        if not args:
-            conn = create_connection()
-            try:
-                marker = ''
-                while True:
-                    containers = [
-                        c['name'] for c in conn.get_account(marker=marker)[1]]
-                    if not containers:
-                        break
-                    for container in containers:
-                        container_queue.put(container)
-                    marker = containers[-1]
-            except ClientException as err:
-                if err.http_status != 404:
-                    raise
-                error_queue.put('Account not found')
-        elif len(args) == 1:
-            if '/' in args[0]:
-                print >> stderr, 'WARNING: / in container name; you might ' \
-                    'have meant %r instead of %r.' % (
-                        args[0].replace('/', ' ', 1), args[0])
-            conn = create_connection()
-            _delete_container(args[0], conn)
-        else:
-            for obj in args[1:]:
-                object_queue.put((args[0], obj))
-    finally:
-        shutdown_worker_threads(container_queue, container_threads)
-        put_errors_from_threads(container_threads, error_queue)
 
-        shutdown_worker_threads(object_queue, object_threads)
-        put_errors_from_threads(object_threads, error_queue)
+st_download_help = '''
+download --all OR download container [options] [object] [object] ...
+    Downloads everything in the account (with --all), or everything in a
+    container, or a list of objects depending on the args given. For a single
+    object download, you may use the -o [--output] <filename> option to
+    redirect the output to a specific file or if "-" then just redirect to
+    stdout.'''.strip('\n')
 
 
-st_download_help = '''
-download --all [options] OR download container [options] [object] [object] ...
-    Downloads everything in the account (with --all), or everything in all
-    containers in the account matching a prefix (with --all and -p [--prefix]),
-    or everything in a container, or a subset of a container with -p
-    [--prefix], or a list of objects depending on the args given. -p or
-    --prefix is an option that will only download items beginning with that
-    prefix. For a single object download, you may use the -o [--output]
-    <filename> option to redirect the output to a specific file or if "-" then
-    just redirect to stdout.'''.strip('\n')
-
-
-def st_download(parser, args, print_queue, error_queue):
-    parser.add_option(
-        '-a', '--all', action='store_true', dest='yes_all',
+def st_download(options, args, print_queue, error_queue):
+    parser.add_option('-a', '--all', action='store_true', dest='yes_all',
         default=False, help='Indicates that you really want to download '
         'everything in the account')
-    parser.add_option(
-        '-m', '--marker', dest='marker',
-        default='', help='Marker to use when starting a container or '
-        'account download')
-    parser.add_option(
-        '-p', '--prefix', dest='prefix',
-        help='Will only download items beginning with the prefix')
-    parser.add_option(
-        '-o', '--output', dest='out_file', help='For a single '
+    parser.add_option('-o', '--output', dest='out_file', help='For a single '
         'file download, stream the output to an alternate location ')
-    parser.add_option(
-        '', '--object-threads', type=int,
-        default=10, help='Number of threads to use for downloading objects')
-    parser.add_option(
-        '', '--container-threads', type=int, default=10,
-        help='Number of threads to use for listing containers')
-    parser.add_option(
-        '', '--no-download', action='store_true',
-        default=False,
-        help="Perform download(s), but don't actually write anything to disk")
     (options, args) = parse_args(parser, args)
     args = args[1:]
     if options.out_file == '-':
@@ -364,10 +1161,8 @@ def st_download(parser, args, print_queue, error_queue):
         else:
             raise Exception("Invalid queue_arg length of %s" % len(queue_arg))
         try:
-            start_time = time()
             headers, body = \
                 conn.get_object(container, obj, resp_chunk_size=65536)
-            header_receipt = time()
             content_type = headers.get('content-type')
             if 'content-length' in headers:
                 content_length = int(headers.get('content-length'))
@@ -378,13 +1173,12 @@ def st_download(parser, args, print_queue, error_queue):
             if path[:1] in ('/', '\\'):
                 path = path[1:]
             md5sum = None
-            make_dir = not options.no_download and out_file != "-"
+            make_dir = out_file != "-"
             if content_type.split(';', 1)[0] == 'text/directory':
                 if make_dir and not isdir(path):
                     mkdirs(path)
                 read_length = 0
-                if 'x-object-manifest' not in headers and \
-                        'x-static-large-object' not in headers:
+                if 'x-object-manifest' not in headers:
                     md5sum = md5()
                 for chunk in body:
                     read_length += len(chunk)
@@ -394,47 +1188,37 @@ def st_download(parser, args, print_queue, error_queue):
                 dirpath = dirname(path)
                 if make_dir and dirpath and not isdir(dirpath):
                     mkdirs(dirpath)
-                if not options.no_download:
-                    if out_file == "-":
-                        fp = stdout
-                    elif out_file:
-                        fp = open(out_file, 'wb')
-                    else:
-                        fp = open(path, 'wb')
+                if out_file == "-":
+                    fp = stdout
+                elif out_file:
+                    fp = open(out_file, 'wb')
+                else:
+                    fp = open(path, 'wb')
                 read_length = 0
-                if 'x-object-manifest' not in headers and \
-                        'x-static-large-object' not in headers:
+                if 'x-object-manifest' not in headers:
                     md5sum = md5()
                 for chunk in body:
-                    if not options.no_download:
-                        fp.write(chunk)
+                    fp.write(chunk)
                     read_length += len(chunk)
                     if md5sum:
                         md5sum.update(chunk)
-                if not options.no_download:
-                    fp.close()
+                fp.close()
             if md5sum and md5sum.hexdigest() != etag:
                 error_queue.put('%s: md5sum != etag, %s != %s' %
                                 (path, md5sum.hexdigest(), etag))
             if content_length is not None and read_length != content_length:
                 error_queue.put('%s: read_length != content_length, %d != %d' %
                                 (path, read_length, content_length))
-            if 'x-object-meta-mtime' in headers and not options.out_file \
-                    and not options.no_download:
-
+            if 'x-object-meta-mtime' in headers and not options.out_file:
                 mtime = float(headers['x-object-meta-mtime'])
                 utime(path, (mtime, mtime))
             if options.verbose:
-                finish_time = time()
-                time_str = 'headers %.3fs, total %.3fs, %.3fs MB/s' % (
-                    header_receipt - start_time, finish_time - start_time,
-                    float(read_length) / (finish_time - start_time) / 1000000)
                 if conn.attempts > 1:
-                    print_queue.put('%s [%s after %d attempts]' %
-                                    (path, time_str, conn.attempts))
+                    print_queue.put('%s [after %d attempts' %
+                                    (path, conn.attempts))
                 else:
-                    print_queue.put('%s [%s]' % (path, time_str))
-        except ClientException as err:
+                    print_queue.put(path)
+        except ClientException, err:
             if err.http_status != 404:
                 raise
             error_queue.put('Object %s not found' %
@@ -442,212 +1226,120 @@ def st_download(parser, args, print_queue, error_queue):
 
     container_queue = Queue(10000)
 
-    def _download_container(container, conn, prefix=None):
+    def _download_container(container, conn):
         try:
-            marker = options.marker
+            marker = ''
             while True:
-                objects = [
-                    o['name'] for o in
-                    conn.get_container(container, marker=marker,
-                                       prefix=prefix)[1]]
+                objects = [o['name'] for o in
+                           conn.get_container(container, marker=marker)[1]]
                 if not objects:
                     break
-                marker = objects[-1]
-                shuffle(objects)
                 for obj in objects:
                     object_queue.put((container, obj))
-        except ClientException as err:
+                marker = objects[-1]
+        except ClientException, err:
             if err.http_status != 404:
                 raise
             error_queue.put('Container %s not found' % repr(container))
 
-    create_connection = lambda: get_conn(options)
-    object_threads = [QueueFunctionThread(
-        object_queue, _download_object,
-        create_connection()) for _junk in xrange(options.object_threads)]
+    url, token = get_auth(options.auth, options.user, options.key,
+        snet=options.snet)
+    create_connection = lambda: Connection(options.auth, options.user,
+        options.key, preauthurl=url, preauthtoken=token, snet=options.snet)
+    object_threads = [QueueFunctionThread(object_queue, _download_object,
+        create_connection()) for _junk in xrange(10)]
     for thread in object_threads:
         thread.start()
-    container_threads = [QueueFunctionThread(
-        container_queue,
-        _download_container, create_connection())
-        for _junk in xrange(options.container_threads)]
+    container_threads = [QueueFunctionThread(container_queue,
+        _download_container, create_connection()) for _junk in xrange(10)]
     for thread in container_threads:
         thread.start()
-
-    # We musn't let the main thread die with an exception while non-daemonic
-    # threads exist or the process with hang and ignore Ctrl-C.  So we catch
-    # anything and tidy up the threads in a finally block.
-    try:
-        if not args:
-            # --all case
-            conn = create_connection()
-            try:
-                marker = options.marker
-                while True:
-                    containers = [
-                        c['name'] for c in conn.get_account(
-                            marker=marker, prefix=options.prefix)[1]]
-                    if not containers:
-                        break
-                    marker = containers[-1]
-                    shuffle(containers)
-                    for container in containers:
-                        container_queue.put(container)
-            except ClientException as err:
-                if err.http_status != 404:
-                    raise
-                error_queue.put('Account not found')
-        elif len(args) == 1:
-            if '/' in args[0]:
-                print >> stderr, ('WARNING: / in container name; you might '
-                                  'have meant %r instead of %r.' % (
-                                      args[0].replace('/', ' ', 1), args[0]))
-            _download_container(args[0], create_connection(),
-                                options.prefix)
-        else:
-            if len(args) == 2:
-                obj = args[1]
-                object_queue.put((args[0], obj, options.out_file))
-            else:
-                for obj in args[1:]:
-                    object_queue.put((args[0], obj))
-    finally:
-        shutdown_worker_threads(container_queue, container_threads)
-        put_errors_from_threads(container_threads, error_queue)
-
-        shutdown_worker_threads(object_queue, object_threads)
-        put_errors_from_threads(object_threads, error_queue)
-
-
-def prt_bytes(bytes, human_flag):
-    """
-    convert a number > 1024 to printable format, either in 4 char -h format as
-    with ls -lh or return as 12 char right justified string
-    """
-
-    if human_flag:
-        suffix = ''
-        mods = 'KMGTPEZY'
-        temp = float(bytes)
-        if temp > 0:
-            while (temp > 1023):
-                temp /= 1024.0
-                suffix = mods[0]
-                mods = mods[1:]
-            if suffix != '':
-                if temp >= 10:
-                    bytes = '%3d%s' % (temp, suffix)
-                else:
-                    bytes = '%.1f%s' % (temp, suffix)
-        if suffix == '':    # must be < 1024
-            bytes = '%4s' % bytes
+    if not args:
+        conn = create_connection()
+        try:
+            marker = ''
+            while True:
+                containers = [c['name']
+                              for c in conn.get_account(marker=marker)[1]]
+                if not containers:
+                    break
+                for container in containers:
+                    container_queue.put(container)
+                marker = containers[-1]
+        except ClientException, err:
+            if err.http_status != 404:
+                raise
+            error_queue.put('Account not found')
+    elif len(args) == 1:
+        if '/' in args[0]:
+            print >> stderr, 'WARNING: / in container name; you might have ' \
+                             'meant %r instead of %r.' % \
+                             (args[0].replace('/', ' ', 1), args[0])
+        _download_container(args[0], create_connection())
     else:
-        bytes = '%12s' % bytes
-
-    return(bytes)
+        if len(args) == 2:
+            obj = args[1]
+            object_queue.put((args[0], obj, options.out_file))
+        else:
+            for obj in args[1:]:
+                object_queue.put((args[0], obj))
+    while not container_queue.empty():
+        sleep(0.01)
+    for thread in container_threads:
+        thread.abort = True
+        while thread.isAlive():
+            thread.join(0.01)
+    put_errors_from_threads(container_threads, error_queue)
+    while not object_queue.empty():
+        sleep(0.01)
+    for thread in object_threads:
+        thread.abort = True
+        while thread.isAlive():
+            thread.join(0.01)
+    put_errors_from_threads(object_threads, error_queue)
 
 
 st_list_help = '''
 list [options] [container]
     Lists the containers for the account or the objects for a container. -p or
     --prefix is an option that will only list items beginning with that prefix.
-    -l produces output formatted like 'ls -l' and --lh like 'ls -lh'.
-    -t used with -l or --lh, only report totals
     -d or --delimiter is option (for container listings only) that will roll up
-    items with the given delimiter (see http://docs.openstack.org/
-        api/openstack-object-storage/1.0/content/list-objects.html)
+    items with the given delimiter (see Cloud Files general documentation for
+    what this means).
 '''.strip('\n')
 
 
-def st_list(parser, args, print_queue, error_queue):
-    parser.add_option(
-        '-l', '--long', dest='long', help='Long listing '
-        'similar to ls -l command', action='store_true', default=False)
-    parser.add_option(
-        '--lh', dest='human', help='report sizes as human '
-        "similar to ls -lh switch, but -h taken", action='store_true',
-        default=False)
-    parser.add_option(
-        '-t', dest='totals', help='used with -l or --ls, only report totals',
-        action='store_true', default=False)
-    parser.add_option(
-        '-p', '--prefix', dest='prefix',
-        help='Will only list items beginning with the prefix')
-    parser.add_option(
-        '-d', '--delimiter', dest='delimiter',
-        help='Will roll up items with the given delimiter'
-        ' (see OpenStack Swift API documentation for what this means)')
+def st_list(options, args, print_queue, error_queue):
+    parser.add_option('-p', '--prefix', dest='prefix', help='Will only list '
+        'items beginning with the prefix')
+    parser.add_option('-d', '--delimiter', dest='delimiter', help='Will roll '
+        'up items with the given delimiter (see Cloud Files general '
+        'documentation for what this means)')
     (options, args) = parse_args(parser, args)
     args = args[1:]
     if options.delimiter and not args:
         exit('-d option only allowed for container listings')
-    if len(args) > 1 or len(args) == 1 and args[0].find('/') >= 0:
+    if len(args) > 1:
         error_queue.put('Usage: %s [options] %s' %
                         (basename(argv[0]), st_list_help))
         return
-
-    conn = get_conn(options)
+    conn = Connection(options.auth, options.user, options.key,
+        snet=options.snet)
     try:
         marker = ''
-        total_count = total_bytes = 0
         while True:
             if not args:
                 items = \
                     conn.get_account(marker=marker, prefix=options.prefix)[1]
             else:
-                items = conn.get_container(
-                    args[0], marker=marker,
+                items = conn.get_container(args[0], marker=marker,
                     prefix=options.prefix, delimiter=options.delimiter)[1]
             if not items:
                 break
             for item in items:
-                item_name = item.get('name')
-
-                if not options.long and not options.human:
-                    print_queue.put(item.get('name', item.get('subdir')))
-                else:
-                    item_bytes = item.get('bytes')
-                    total_bytes += item_bytes
-                    if len(args) == 0:    # listing containers
-                        bytes = prt_bytes(item_bytes, options.human)
-                        count = item.get('count')
-                        total_count += count
-                        try:
-                            meta = conn.head_container(item_name)
-                            utc = gmtime(float(meta.get('x-timestamp')))
-                            datestamp = strftime('%Y-%m-%d %H:%M:%S', utc)
-                        except ClientException:
-                            datestamp = '????-??-?? ??:??:??'
-                        if not options.totals:
-                            print_queue.put("%5s %s %s %s" %
-                                            (count, bytes, datestamp,
-                                             item_name))
-                    else:    # list container contents
-                        subdir = item.get('subdir')
-                        if subdir is None:
-                            bytes = prt_bytes(item_bytes, options.human)
-                            date, xtime = item.get('last_modified').split('T')
-                            xtime = xtime.split('.')[0]
-                        else:
-                            bytes = prt_bytes(0, options.human)
-                            date = xtime = ''
-                            item_name = subdir
-                        if not options.totals:
-                            print_queue.put("%s %10s %8s %s" %
-                                            (bytes, date, xtime, item_name))
-
-                marker = items[-1].get('name', items[-1].get('subdir'))
-
-        # report totals
-        if options.long or options.human:
-            if len(args) == 0:
-                print_queue.put("%5s %s" % (prt_bytes(total_count, True),
-                                            prt_bytes(total_bytes,
-                                                      options.human)))
-            else:
-                print_queue.put("%s" % (prt_bytes(total_bytes, options.human)))
-
-    except ClientException as err:
+                print_queue.put(item.get('name', item.get('subdir')))
+            marker = items[-1].get('name', items[-1].get('subdir'))
+    except ClientException, err:
         if err.http_status != 404:
             raise
         if not args:
@@ -655,20 +1347,17 @@ def st_list(parser, args, print_queue, error_queue):
         else:
             error_queue.put('Container %s not found' % repr(args[0]))
 
+
 st_stat_help = '''
 stat [container] [object]
     Displays information for the account, container, or object depending on the
-    args given (if any). --lh will print number of objects and total sizes
-    like 'list --lh' noting number of objs a multiple of 1024'''.strip('\n')
+    args given (if any).'''.strip('\n')
 
 
-def st_stat(parser, args, print_queue, error_queue):
-    parser.add_option(
-        '--lh', dest='human', help="report totals like 'list --lh'",
-        action='store_true', default=False)
+def st_stat(options, args, print_queue, error_queue):
     (options, args) = parse_args(parser, args)
     args = args[1:]
-    conn = get_conn(options)
+    conn = Connection(options.auth, options.user, options.key)
     if not args:
         try:
             headers = conn.head_account()
@@ -678,20 +1367,17 @@ StorageURL: %s
 Auth Token: %s
 '''.strip('\n') % (conn.url, conn.token))
             container_count = int(headers.get('x-account-container-count', 0))
-            object_count = prt_bytes(headers.get('x-account-object-count', 0),
-                                     options.human).lstrip()
-            bytes_used = prt_bytes(headers.get('x-account-bytes-used', 0),
-                                   options.human).lstrip()
+            object_count = int(headers.get('x-account-object-count', 0))
+            bytes_used = int(headers.get('x-account-bytes-used', 0))
             print_queue.put('''
    Account: %s
 Containers: %d
-   Objects: %s
-     Bytes: %s'''.strip('\n') % (conn.url.rsplit('/', 1)[-1], container_count,
+   Objects: %d
+     Bytes: %d'''.strip('\n') % (conn.url.rsplit('/', 1)[-1], container_count,
                                  object_count, bytes_used))
             for key, value in headers.items():
                 if key.startswith('x-account-meta-'):
-                    print_queue.put(
-                        '%10s: %s' % ('Meta %s' %
+                    print_queue.put('%10s: %s' % ('Meta %s' %
                         key[len('x-account-meta-'):].title(), value))
             for key, value in headers.items():
                 if not key.startswith('x-account-meta-') and key not in (
@@ -699,7 +1385,7 @@ Containers: %d
                         'x-account-object-count', 'x-account-bytes-used'):
                     print_queue.put(
                         '%10s: %s' % (key.title(), value))
-        except ClientException as err:
+        except ClientException, err:
             if err.http_status != 404:
                 raise
             error_queue.put('Account not found')
@@ -710,16 +1396,13 @@ Containers: %d
                              (args[0].replace('/', ' ', 1), args[0])
         try:
             headers = conn.head_container(args[0])
-            object_count = prt_bytes(
-                headers.get('x-container-object-count', 0),
-                options.human).lstrip()
-            bytes_used = prt_bytes(headers.get('x-container-bytes-used', 0),
-                                   options.human).lstrip()
+            object_count = int(headers.get('x-container-object-count', 0))
+            bytes_used = int(headers.get('x-container-bytes-used', 0))
             print_queue.put('''
   Account: %s
 Container: %s
-  Objects: %s
-    Bytes: %s
+  Objects: %d
+    Bytes: %d
  Read ACL: %s
 Write ACL: %s
   Sync To: %s
@@ -731,8 +1414,7 @@ Write ACL: %s
                                 headers.get('x-container-sync-key', '')))
             for key, value in headers.items():
                 if key.startswith('x-container-meta-'):
-                    print_queue.put(
-                        '%9s: %s' % ('Meta %s' %
+                    print_queue.put('%9s: %s' % ('Meta %s' %
                         key[len('x-container-meta-'):].title(), value))
             for key, value in headers.items():
                 if not key.startswith('x-container-meta-') and key not in (
@@ -742,7 +1424,7 @@ Write ACL: %s
                         'x-container-sync-key'):
                     print_queue.put(
                         '%9s: %s' % (key.title(), value))
-        except ClientException as err:
+        except ClientException, err:
             if err.http_status != 404:
                 raise
             error_queue.put('Container %s not found' % repr(args[0]))
@@ -757,8 +1439,7 @@ Write ACL: %s
                                      args[1], headers.get('content-type')))
             if 'content-length' in headers:
                 print_queue.put('Content Length: %s' %
-                                prt_bytes(headers['content-length'],
-                                          options.human).lstrip())
+                                headers['content-length'])
             if 'last-modified' in headers:
                 print_queue.put(' Last Modified: %s' %
                                 headers['last-modified'])
@@ -769,8 +1450,7 @@ Write ACL: %s
                                 headers['x-object-manifest'])
             for key, value in headers.items():
                 if key.startswith('x-object-meta-'):
-                    print_queue.put(
-                        '%14s: %s' % ('Meta %s' %
+                    print_queue.put('%14s: %s' % ('Meta %s' %
                         key[len('x-object-meta-'):].title(), value))
             for key, value in headers.items():
                 if not key.startswith('x-object-meta-') and key not in (
@@ -778,7 +1458,7 @@ Write ACL: %s
                         'etag', 'date', 'x-object-manifest'):
                     print_queue.put(
                         '%14s: %s' % (key.title(), value))
-        except ClientException as err:
+        except ClientException, err:
             if err.http_status != 404:
                 raise
             error_queue.put('Object %s not found' %
@@ -799,41 +1479,35 @@ post [options] [container] [object]
     post -m Color:Blue -m Size:Large'''.strip('\n')
 
 
-def st_post(parser, args, print_queue, error_queue):
-    parser.add_option(
-        '-r', '--read-acl', dest='read_acl', help='Sets the '
+def st_post(options, args, print_queue, error_queue):
+    parser.add_option('-r', '--read-acl', dest='read_acl', help='Sets the '
         'Read ACL for containers. Quick summary of ACL syntax: .r:*, '
         '.r:-.example.com, .r:www.example.com, account1, account2:user2')
-    parser.add_option(
-        '-w', '--write-acl', dest='write_acl', help='Sets the '
+    parser.add_option('-w', '--write-acl', dest='write_acl', help='Sets the '
         'Write ACL for containers. Quick summary of ACL syntax: account1, '
         'account2:user2')
-    parser.add_option(
-        '-t', '--sync-to', dest='sync_to', help='Sets the '
+    parser.add_option('-t', '--sync-to', dest='sync_to', help='Sets the '
         'Sync To for containers, for multi-cluster replication.')
-    parser.add_option(
-        '-k', '--sync-key', dest='sync_key', help='Sets the '
+    parser.add_option('-k', '--sync-key', dest='sync_key', help='Sets the '
         'Sync Key for containers, for multi-cluster replication.')
-    parser.add_option(
-        '-m', '--meta', action='append', dest='meta', default=[],
+    parser.add_option('-m', '--meta', action='append', dest='meta', default=[],
         help='Sets a meta data item with the syntax name:value. This option '
         'may be repeated. Example: -m Color:Blue -m Size:Large')
-    parser.add_option(
-        '-H', '--header', action='append', dest='header',
-        default=[], help='Set request headers with the syntax header:value. '
-        ' This option may be repeated. Example -H content-type:text/plain '
-        '-H "Content-Length: 4000"')
     (options, args) = parse_args(parser, args)
     args = args[1:]
     if (options.read_acl or options.write_acl or options.sync_to or
-            options.sync_key) and not args:
+        options.sync_key) and not args:
         exit('-r, -w, -t, and -k options only allowed for containers')
-    conn = get_conn(options)
+    conn = Connection(options.auth, options.user, options.key)
     if not args:
-        headers = split_headers(options.meta, 'X-Account-Meta-', error_queue)
+        headers = {}
+        for item in options.meta:
+            split_item = item.split(':')
+            headers['X-Account-Meta-' + split_item[0]] = \
+                len(split_item) > 1 and split_item[1]
         try:
             conn.post_account(headers=headers)
-        except ClientException as err:
+        except ClientException, err:
             if err.http_status != 404:
                 raise
             error_queue.put('Account not found')
@@ -842,7 +1516,11 @@ def st_post(parser, args, print_queue, error_queue):
             print >> stderr, 'WARNING: / in container name; you might have ' \
                              'meant %r instead of %r.' % \
                              (args[0].replace('/', ' ', 1), args[0])
-        headers = split_headers(options.meta, 'X-Container-Meta-', error_queue)
+        headers = {}
+        for item in options.meta:
+            split_item = item.split(':')
+            headers['X-Container-Meta-' + split_item[0]] = \
+                len(split_item) > 1 and split_item[1]
         if options.read_acl is not None:
             headers['X-Container-Read'] = options.read_acl
         if options.write_acl is not None:
@@ -853,17 +1531,19 @@ def st_post(parser, args, print_queue, error_queue):
             headers['X-Container-Sync-Key'] = options.sync_key
         try:
             conn.post_container(args[0], headers=headers)
-        except ClientException as err:
+        except ClientException, err:
             if err.http_status != 404:
                 raise
             conn.put_container(args[0], headers=headers)
     elif len(args) == 2:
-        headers = split_headers(options.meta, 'X-Object-Meta-', error_queue)
-        # add header options to the headers object for the request.
-        headers.update(split_headers(options.header, '', error_queue))
+        headers = {}
+        for item in options.meta:
+            split_item = item.split(':')
+            headers['X-Object-Meta-' + split_item[0]] = \
+                len(split_item) > 1 and split_item[1]
         try:
             conn.post_object(args[0], args[1], headers=headers)
-        except ClientException as err:
+        except ClientException, err:
             if err.http_status != 404:
                 raise
             error_queue.put('Object %s not found' %
@@ -878,48 +1558,24 @@ upload [options] container file_or_directory [file_or_directory] [...]
     Uploads to the given container the files and directories specified by the
     remaining args. -c or --changed is an option that will only upload files
     that have changed since the last upload. -S <size> or --segment-size <size>
-    will upload the files in segments no larger than size. -C <container> or
-    --segment-container <container> will specify the location of the segments
-    to <container>. --leave-segments are options as well (see --help for more).
+    and --leave-segments are options as well (see --help for more).
 '''.strip('\n')
 
 
-def st_upload(parser, args, print_queue, error_queue):
-    parser.add_option(
-        '-c', '--changed', action='store_true', dest='changed',
+def st_upload(options, args, print_queue, error_queue):
+    parser.add_option('-c', '--changed', action='store_true', dest='changed',
         default=False, help='Will only upload files that have changed since '
         'the last upload')
-    parser.add_option(
-        '-S', '--segment-size', dest='segment_size', help='Will '
+    parser.add_option('-S', '--segment-size', dest='segment_size', help='Will '
         'upload files in segments no larger than <size> and then create a '
         '"manifest" file that will download all the segments as if it were '
-        'the original file.')
-    parser.add_option(
-        '-C', '--segment-container', dest='segment_container',
-        help='Will upload the segments into the specified container.'
-        'If not specified, the segments will be uploaded to '
+        'the original file. The segments will be uploaded to a '
         '<container>_segments container so as to not pollute the main '
         '<container> listings.')
-    parser.add_option(
-        '', '--leave-segments', action='store_true',
+    parser.add_option('', '--leave-segments', action='store_true',
         dest='leave_segments', default=False, help='Indicates that you want '
         'the older segments of manifest objects left alone (in the case of '
         'overwrites)')
-    parser.add_option(
-        '', '--object-threads', type=int, default=10,
-        help='Number of threads to use for uploading full objects')
-    parser.add_option(
-        '', '--segment-threads', type=int, default=10,
-        help='Number of threads to use for uploading object segments')
-    parser.add_option(
-        '-H', '--header', action='append', dest='header',
-        default=[], help='Set request headers with the syntax header:value. '
-        ' This option may be repeated. Example -H content-type:text/plain '
-        '-H "Content-Length: 4000"')
-    parser.add_option('', '--use-slo', action='store_true', default=False,
-                      help='When used in conjuction with --segment-size will '
-                      'create a Static Large Object instead of the default '
-                      'Dynamic Large Object.')
     (options, args) = parse_args(parser, args)
     args = args[1:]
     if len(args) < 2:
@@ -934,21 +1590,14 @@ def st_upload(parser, args, print_queue, error_queue):
         else:
             fp = open(job['path'], 'rb')
             fp.seek(job['segment_start'])
-            seg_container = args[0] + '_segments'
-            if options.segment_container:
-                seg_container = options.segment_container
-            etag = conn.put_object(job.get('container', seg_container),
-                                   job['obj'], fp,
-                                   content_length=job['segment_size'])
-            job['segment_location'] = '/%s/%s' % (seg_container, job['obj'])
-            job['segment_etag'] = etag
+            conn.put_object(job.get('container', args[0] + '_segments'),
+                job['obj'], fp, content_length=job['segment_size'])
         if options.verbose and 'log_line' in job:
             if conn.attempts > 1:
                 print_queue.put('%s [after %d attempts]' %
                                 (job['log_line'], conn.attempts))
             else:
                 print_queue.put(job['log_line'])
-        return job
 
     def _object_job(job, conn):
         path = job['path']
@@ -960,7 +1609,7 @@ def st_upload(parser, args, print_queue, error_queue):
                 obj = obj[2:]
             if obj.startswith('/'):
                 obj = obj[1:]
-            put_headers = {'x-object-meta-mtime': "%f" % getmtime(path)}
+            put_headers = {'x-object-meta-mtime': str(getmtime(path))}
             if dir_marker:
                 if options.changed:
                     try:
@@ -974,7 +1623,7 @@ def st_upload(parser, args, print_queue, error_queue):
                                 et == 'd41d8cd98f00b204e9800998ecf8427e' and \
                                 mt == put_headers['x-object-meta-mtime']:
                             return
-                    except ClientException as err:
+                    except ClientException, err:
                         if err.http_status != 404:
                             raise
                 conn.put_object(container, obj, '', content_length=0,
@@ -985,8 +1634,6 @@ def st_upload(parser, args, print_queue, error_queue):
                 # manifest object and need to delete the old segments
                 # ourselves.
                 old_manifest = None
-                old_slo_manifest_paths = []
-                new_slo_manifest_paths = set()
                 if options.changed or not options.leave_segments:
                     try:
                         headers = conn.head_object(container, obj)
@@ -997,134 +1644,73 @@ def st_upload(parser, args, print_queue, error_queue):
                             return
                         if not options.leave_segments:
                             old_manifest = headers.get('x-object-manifest')
-                            if utils.config_true_value(
-                                    headers.get('x-static-large-object')):
-                                headers, manifest_data = conn.get_object(
-                                    container, obj,
-                                    query_string='multipart-manifest=get')
-                                for old_seg in json.loads(manifest_data):
-                                    seg_path = old_seg['name'].lstrip('/')
-                                    if isinstance(seg_path, unicode):
-                                        seg_path = seg_path.encode('utf-8')
-                                    old_slo_manifest_paths.append(seg_path)
-                    except ClientException as err:
+                    except ClientException, err:
                         if err.http_status != 404:
                             raise
-                # Merge the command line header options to the put_headers
-                put_headers.update(split_headers(options.header, '',
-                                                 error_queue))
-                # Don't do segment job if object is not big enough
                 if options.segment_size and \
-                        getsize(path) > int(options.segment_size):
-                    seg_container = container + '_segments'
-                    if options.segment_container:
-                        seg_container = options.segment_container
+                        getsize(path) < options.segment_size:
                     full_size = getsize(path)
                     segment_queue = Queue(10000)
-                    segment_threads = [
-                        QueueFunctionThread(
-                            segment_queue, _segment_job,
-                            create_connection(), store_results=True)
-                        for _junk in xrange(options.segment_threads)]
+                    segment_threads = [QueueFunctionThread(segment_queue,
+                        _segment_job, create_connection()) for _junk in
+                        xrange(10)]
                     for thread in segment_threads:
                         thread.start()
-                    try:
-                        segment = 0
-                        segment_start = 0
-                        while segment_start < full_size:
-                            segment_size = int(options.segment_size)
-                            if segment_start + segment_size > full_size:
-                                segment_size = full_size - segment_start
-                            if options.use_slo:
-                                segment_name = '%s/slo/%s/%s/%s/%08d' % (
-                                    obj, put_headers['x-object-meta-mtime'],
-                                    full_size, options.segment_size, segment)
-                            else:
-                                segment_name = '%s/%s/%s/%s/%08d' % (
-                                    obj, put_headers['x-object-meta-mtime'],
-                                    full_size, options.segment_size, segment)
-                            segment_queue.put(
-                                {'path': path, 'obj': segment_name,
-                                 'segment_start': segment_start,
-                                 'segment_size': segment_size,
-                                 'segment_index': segment,
-                                 'log_line': '%s segment %s' % (obj, segment)})
-                            segment += 1
-                            segment_start += segment_size
-                    finally:
-                        shutdown_worker_threads(segment_queue, segment_threads)
-                        if put_errors_from_threads(segment_threads,
-                                                   error_queue):
-                            raise ClientException(
-                                'Aborting manifest creation '
-                                'because not all segments could be uploaded. '
-                                '%s/%s' % (container, obj))
-                    if options.use_slo:
-                        slo_segments = []
-                        for thread in segment_threads:
-                            slo_segments += thread.results
-                        slo_segments.sort(key=lambda d: d['segment_index'])
-                        for seg in slo_segments:
-                            seg_loc = seg['segment_location'].lstrip('/')
-                            if isinstance(seg_loc, unicode):
-                                seg_loc = seg_loc.encode('utf-8')
-                            new_slo_manifest_paths.add(seg_loc)
-
-                        manifest_data = json.dumps([
-                            {'path': d['segment_location'],
-                             'etag': d['segment_etag'],
-                             'size_b

<TRUNCATED>

[17/50] [abbrv] git commit: updated refs/heads/ldapplugin to 7bc705e

Posted by ch...@apache.org.
Fix typos in JS which break IE < 9


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

Branch: refs/heads/ldapplugin
Commit: 1b4900a8a97f463c33af956f5e861b5dbccc2baf
Parents: af921c4
Author: Brian Federle <br...@citrix.com>
Authored: Tue Jul 16 14:39:28 2013 -0700
Committer: Brian Federle <br...@citrix.com>
Committed: Tue Jul 16 14:39:38 2013 -0700

----------------------------------------------------------------------
 ui/scripts/lbStickyPolicy.js | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/1b4900a8/ui/scripts/lbStickyPolicy.js
----------------------------------------------------------------------
diff --git a/ui/scripts/lbStickyPolicy.js b/ui/scripts/lbStickyPolicy.js
index 02ebabe..c0e2bfa 100644
--- a/ui/scripts/lbStickyPolicy.js
+++ b/ui/scripts/lbStickyPolicy.js
@@ -259,7 +259,7 @@
           }
         });
       },
-      delete: function(stickyRuleID, complete, error) {
+      'delete': function(stickyRuleID, complete, error) {
         $.ajax({
           url: createURL('deleteLBStickinessPolicy'),
           data: {
@@ -296,10 +296,10 @@
         };
         
         // Delete existing rule
-        if (data.methodname != 'None') {
+        if (data.methodname !== 'None') {
           addStickyPolicy();
         } else {
-          cloudStack.lbStickyPolicy.actions.delete(stickyRuleID, complete, error);
+          cloudStack.lbStickyPolicy.actions['delete'](stickyRuleID, complete, error);
         }
       }
     }


[46/50] [abbrv] git commit: updated refs/heads/ldapplugin to 7bc705e

Posted by ch...@apache.org.
CLOUDSTACK-1301: fixed issues and add fields descriptions for disk I/O throttling


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

Branch: refs/heads/ldapplugin
Commit: bfe76b44daafe7f7844531ef53ee264c2e71c2ea
Parents: 22cb5be
Author: Wei Zhou <w....@leaseweb.com>
Authored: Wed Jul 17 16:35:51 2013 +0200
Committer: Wei Zhou <w....@leaseweb.com>
Committed: Wed Jul 17 16:35:51 2013 +0200

----------------------------------------------------------------------
 .../classes/resources/messages.properties       |  4 +-
 ui/scripts/configuration.js                     | 22 +++++++--
 ui/scripts/docs.js                              | 48 ++++++++++++++++++++
 3 files changed, 67 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/bfe76b44/client/WEB-INF/classes/resources/messages.properties
----------------------------------------------------------------------
diff --git a/client/WEB-INF/classes/resources/messages.properties b/client/WEB-INF/classes/resources/messages.properties
index fab8dbd..367459b 100644
--- a/client/WEB-INF/classes/resources/messages.properties
+++ b/client/WEB-INF/classes/resources/messages.properties
@@ -790,8 +790,8 @@ label.network.offering.display.text=Network Offering Display Text
 label.network.offering.id=Network Offering ID
 label.network.offering.name=Network Offering Name
 label.network.offering=Network Offering
-label.network.rate.megabytes=Network Rate (Mb/s)
-label.network.rate=Network Rate
+label.network.rate.megabytes=Network Rate (MB/s)
+label.network.rate=Network Rate (Mb/s)
 label.network.read=Network Read
 label.network.service.providers=Network Service Providers
 label.network.type=Network Type

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/bfe76b44/ui/scripts/configuration.js
----------------------------------------------------------------------
diff --git a/ui/scripts/configuration.js b/ui/scripts/configuration.js
index aa8fafd..8bc40d6 100644
--- a/ui/scripts/configuration.js
+++ b/ui/scripts/configuration.js
@@ -112,6 +112,7 @@
                   },
                   diskBytesReadRate: {
                       label: 'label.disk.bytes.read.rate',
+                      docID: 'helpComputeOfferingDiskBytesReadRate',
                       validation: {
                         required: false, //optional
                         number: true
@@ -119,6 +120,7 @@
                   },
                   diskBytesWriteRate: {
                       label: 'label.disk.bytes.write.rate',
+                      docID: 'helpComputeOfferingDiskBytesWriteRate',
                       validation: {
                         required: false, //optional
                         number: true
@@ -126,6 +128,7 @@
                   },
                   diskIopsReadRate: {
                       label: 'label.disk.iops.read.rate',
+                      docID: 'helpComputeOfferingDiskIopsReadRate',
                       validation: {
                         required: false, //optional
                         number: true
@@ -133,6 +136,7 @@
                   },
                   diskIopsWriteRate: {
                       label: 'label.disk.iops.write.rate',
+                      docID: 'helpComputeOfferingDiskIopsWriteRate',
                       validation: {
                         required: false, //optional
                         number: true
@@ -588,6 +592,7 @@
                   },
                   diskBytesReadRate: {
                       label: 'label.disk.bytes.read.rate',
+                      docID: 'helpSystemOfferingDiskBytesReadRate',
                       validation: {
                         required: false, //optional
                         number: true
@@ -595,6 +600,7 @@
                   },
                   diskBytesWriteRate: {
                       label: 'label.disk.bytes.write.rate',
+                      docID: 'helpSystemOfferingDiskBytesWriteRate',
                       validation: {
                         required: false, //optional
                         number: true
@@ -602,6 +608,7 @@
                   },
                   diskIopsReadRate: {
                       label: 'label.disk.iops.read.rate',
+                      docID: 'helpSystemOfferingDiskIopsReadRate',
                       validation: {
                         required: false, //optional
                         number: true
@@ -609,6 +616,7 @@
                   },
                   diskIopsWriteRate: {
                       label: 'label.disk.iops.write.rate',
+                      docID: 'helpSystemOfferingDiskIopsWriteRate',
                       validation: {
                         required: false, //optional
                         number: true
@@ -1046,13 +1054,13 @@
                           $isCustomizedIops.css('display', 'inline-block');
 
                           if ($isCustomizedIops == true) {
-                            $minIops.css('display', 'inline-block');
-                            $maxIops.css('display', 'inline-block');
-                          }
-                          else {
                             $minIops.hide();
                             $maxIops.hide();
                           }
+                          else {
+                            $minIops.css('display', 'inline-block');
+                            $maxIops.css('display', 'inline-block');
+                          }
                         }
                         else if (qosId == 'hypervisor') { // Hypervisor Qos
                           $isCustomizedIops.hide();
@@ -1097,6 +1105,7 @@
                   },
                   diskBytesReadRate: {
                       label: 'label.disk.bytes.read.rate',
+                      docID: 'helpDiskOfferingDiskBytesReadRate',
                       validation: {
                         required: false, //optional
                         number: true
@@ -1104,6 +1113,7 @@
                   },
                   diskBytesWriteRate: {
                       label: 'label.disk.bytes.write.rate',
+                      docID: 'helpDiskOfferingDiskBytesWriteRate',
                       validation: {
                         required: false, //optional
                         number: true
@@ -1111,6 +1121,7 @@
                   },
                   diskIopsReadRate: {
                       label: 'label.disk.iops.read.rate',
+                      docID: 'helpDiskOfferingDiskIopsReadRate',
                       validation: {
                         required: false, //optional
                         number: true
@@ -1118,6 +1129,7 @@
                   },
                   diskIopsWriteRate: {
                       label: 'label.disk.iops.write.rate',
+                      docID: 'helpDiskOfferingDiskIopsWriteRate',
                       validation: {
                         required: false, //optional
                         number: true
@@ -1784,7 +1796,7 @@
 
                   displayText: { label: 'label.description', validation: { required: true }, docID: 'helpNetworkOfferingDescription' },
 
-                  networkRate: { label: 'label.network.rate.megabytes', docID: 'helpNetworkOfferingNetworkRate' },
+                  networkRate: { label: 'label.network.rate', docID: 'helpNetworkOfferingNetworkRate' },
 
 									/*
                   trafficType: {

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/bfe76b44/ui/scripts/docs.js
----------------------------------------------------------------------
diff --git a/ui/scripts/docs.js b/ui/scripts/docs.js
index 635e619..c8ef0d9 100755
--- a/ui/scripts/docs.js
+++ b/ui/scripts/docs.js
@@ -234,6 +234,22 @@ cloudStack.docs = {
   desc: 'Allowed data transfer rate in megabits(Mb) per second',
   externalLink: ''
   },
+  helpComputeOfferingDiskBytesReadRate: {
+  desc: 'Allowed disk read rate in bytes per second',
+  externalLink: ''
+  },
+  helpComputeOfferingDiskBytesWriteRate: {
+  desc: 'Allowed disk write rate in bytes per second',
+  externalLink: ''
+  },
+  helpComputeOfferingDiskIopsReadRate: {
+  desc: 'Allowed disk read rate in I/O requests per second',
+  externalLink: ''
+  },
+  helpComputeOfferingDiskIopsWriteRate: {
+  desc: 'Allowed disk write rate in I/O requests per second',
+  externalLink: ''
+  },
   helpComputeOfferingHA: {
   desc: 'If yes, the administrator can choose to have the VM be monitored and as highly available as possible',
   externalLink: ''
@@ -282,6 +298,22 @@ cloudStack.docs = {
   desc: 'Appears only if Custom Disk Size is not selected. Define the volume size in GB.',
   externalLink: ''
   },
+  helpDiskOfferingDiskBytesReadRate: {
+  desc: 'Allowed disk read rate in bytes per second',
+  externalLink: ''
+  },
+  helpDiskOfferingDiskBytesWriteRate: {
+  desc: 'Allowed disk write rate in bytes per second',
+  externalLink: ''
+  },
+  helpDiskOfferingDiskIopsReadRate: {
+  desc: 'Allowed disk read rate in I/O requests per second',
+  externalLink: ''
+  },
+  helpDiskOfferingDiskIopsWriteRate: {
+  desc: 'Allowed disk write rate in I/O requests per second',
+  externalLink: ''
+  },
   helpDiskOfferingCustomDiskIops: {
   desc: 'If checked, the user can set Min and Max IOPS. If not checked, the root administrator can define such values.',
   externalLink: ''
@@ -718,6 +750,22 @@ cloudStack.docs = {
   desc: 'Allowed data transfer rate in megabits(Mb) per second',
   externalLink: ''
   },
+  helpSystemOfferingDiskBytesReadRate: {
+  desc: 'Allowed disk read rate in bytes per second',
+  externalLink: ''
+  },
+  helpSystemOfferingDiskBytesWriteRate: {
+  desc: 'Allowed disk write rate in bytes per second',
+  externalLink: ''
+  },
+  helpSystemOfferingDiskIopsReadRate: {
+  desc: 'Allowed disk read rate in I/O requests per second',
+  externalLink: ''
+  },
+  helpSystemOfferingDiskIopsWriteRate: {
+  desc: 'Allowed disk write rate in I/O requests per second',
+  externalLink: ''
+  },
   helpSystemOfferingHA: {
   desc: 'If yes, the administrator can choose to have the system VM be monitored and as highly available as possible',
   externalLink: ''


[27/50] [abbrv] git commit: updated refs/heads/ldapplugin to 7bc705e

Posted by ch...@apache.org.
be able to upload template into swift


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

Branch: refs/heads/ldapplugin
Commit: bf32776f9f89b6b40c0a3093f8f3ddb5c1a1830e
Parents: 2849f81
Author: Edison Su <su...@gmail.com>
Authored: Tue Jul 16 18:04:29 2013 -0700
Committer: Edison Su <su...@gmail.com>
Committed: Tue Jul 16 18:07:06 2013 -0700

----------------------------------------------------------------------
 api/src/com/cloud/agent/api/to/NfsTO.java       |    2 +-
 .../cloudstack/storage/LocalHostEndpoint.java   |   18 +-
 .../kvm/resource/LibvirtComputingResource.java  |    4 +-
 scripts/storage/qcow2/managesnapshot.sh         |   13 +-
 scripts/storage/secondary/swift                 | 2010 +++++++++++-------
 .../test/com/cloud/async/CleanupDelegate.java   |   29 -
 server/test/com/cloud/async/TestAsync.java      |  281 ---
 .../com/cloud/async/TestAsyncJobManager.java    |  252 ---
 .../com/cloud/async/TestSyncQueueManager.java   |  208 --
 .../upgrade/AdvanceZone217To224UpgradeTest.java |  117 -
 .../upgrade/AdvanceZone223To224UpgradeTest.java |   57 -
 .../upgrade/BasicZone218To224UpgradeTest.java   |  211 --
 .../test/com/cloud/upgrade/DbUpgrade22Test.java |   29 -
 .../cloud/upgrade/HostCapacity218to22Test.java  |   66 -
 .../InstanceGroup218To224UpgradeTest.java       |  216 --
 .../PortForwarding218To224UpgradeTest.java      |  132 --
 .../upgrade/Sanity220To224UpgradeTest.java      |   95 -
 .../upgrade/Sanity222To224UpgradeTest.java      |   96 -
 .../upgrade/Sanity223To225UpgradeTest.java      |   94 -
 .../upgrade/Sanity224To225UpgradeTest.java      |   95 -
 .../upgrade/Template2214To30UpgradeTest.java    |  123 --
 .../cloud/upgrade/Test2214To30DBUpgrade.java    |  199 --
 .../cloud/upgrade/Usage217To224UpgradeTest.java |   94 -
 .../upgrade/UsageEvents218To224UpgradeTest.java |   91 -
 services/secondary-storage/pom.xml              |    8 +
 .../LocalNfsSecondaryStorageResource.java       |   11 +-
 .../resource/NfsSecondaryStorageResource.java   |   28 +-
 .../LocalNfsSecondaryStorageResourceTest.java   |   90 +
 tools/marvin/marvin/deployDataCenter.py         |    2 +-
 utils/src/com/cloud/utils/SwiftUtil.java        |    1 +
 30 files changed, 1367 insertions(+), 3305 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/bf32776f/api/src/com/cloud/agent/api/to/NfsTO.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/agent/api/to/NfsTO.java b/api/src/com/cloud/agent/api/to/NfsTO.java
index 5490fd1..415c95c 100644
--- a/api/src/com/cloud/agent/api/to/NfsTO.java
+++ b/api/src/com/cloud/agent/api/to/NfsTO.java
@@ -18,7 +18,7 @@ package com.cloud.agent.api.to;
 
 import com.cloud.storage.DataStoreRole;
 
-public final class NfsTO implements DataStoreTO {
+public class NfsTO implements DataStoreTO {
 
     private String _url;
     private DataStoreRole _role;

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/bf32776f/engine/storage/src/org/apache/cloudstack/storage/LocalHostEndpoint.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/LocalHostEndpoint.java b/engine/storage/src/org/apache/cloudstack/storage/LocalHostEndpoint.java
index 18fcd71..932a07f 100644
--- a/engine/storage/src/org/apache/cloudstack/storage/LocalHostEndpoint.java
+++ b/engine/storage/src/org/apache/cloudstack/storage/LocalHostEndpoint.java
@@ -16,10 +16,14 @@
 // under the License.
 package org.apache.cloudstack.storage;
 
+import java.io.File;
 import java.util.concurrent.Executors;
 import java.util.concurrent.ScheduledExecutorService;
 import java.util.concurrent.TimeUnit;
 
+import com.cloud.configuration.Config;
+import com.cloud.configuration.dao.ConfigurationDao;
+import com.cloud.configuration.dao.ConfigurationDaoImpl;
 import org.apache.cloudstack.engine.subsystem.api.storage.EndPoint;
 import org.apache.cloudstack.framework.async.AsyncCompletionCallback;
 import org.apache.cloudstack.storage.command.CopyCommand;
@@ -31,12 +35,24 @@ import com.cloud.agent.api.Command;
 import com.cloud.resource.ServerResource;
 import com.cloud.utils.net.NetUtils;
 
+import javax.inject.Inject;
+
 public class LocalHostEndpoint implements EndPoint {
     private ScheduledExecutorService executor;
     protected ServerResource resource;
+    @Inject
+    ConfigurationDao configDao;
 
     public LocalHostEndpoint() {
-        resource = new LocalNfsSecondaryStorageResource();
+        // get mount parent folder configured in global setting, if set, this will overwrite _parent in NfsSecondaryStorageResource to work
+        // around permission issue for default /mnt folder
+        String mountParent = configDao.getValue(Config.MountParent.key());
+
+        String path =  mountParent + File.separator + "secStorage";
+
+        LocalNfsSecondaryStorageResource localResource = new LocalNfsSecondaryStorageResource();
+        localResource.setParentPath(path);
+        resource = localResource;
         executor = Executors.newScheduledThreadPool(10);
     }
 

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/bf32776f/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
index e51fbda..da86612 100755
--- a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
+++ b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
@@ -1072,13 +1072,13 @@ ServerResource {
 
     private void passCmdLine(String vmName, String cmdLine)
             throws InternalErrorException {
-        final Script command = new Script(_patchViaSocketPath, _timeout, s_logger);
+        final Script command = new Script(_patchViaSocketPath, 5*1000, s_logger);
         String result;
         command.add("-n",vmName);
         command.add("-p", cmdLine.replaceAll(" ", "%"));
         result = command.execute();
         if (result != null) {
-            throw new InternalErrorException(result);
+            s_logger.debug("passcmd failed:" + result);
         }
     }
 

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/bf32776f/scripts/storage/qcow2/managesnapshot.sh
----------------------------------------------------------------------
diff --git a/scripts/storage/qcow2/managesnapshot.sh b/scripts/storage/qcow2/managesnapshot.sh
index 30148de..368ff54 100755
--- a/scripts/storage/qcow2/managesnapshot.sh
+++ b/scripts/storage/qcow2/managesnapshot.sh
@@ -67,8 +67,10 @@ create_snapshot() {
   local disk=$1
   local snapshotname="$2"
   local failed=0
+  is_lv ${disk}
+  islv_ret=$?
 
-  if [ ${dmsnapshot} = "yes" ] && is_lv ${disk}; then
+  if [ ${dmsnapshot} = "yes" ] && [ "$islv_ret" == "1" ]; then
     local lv=`get_lv ${disk}`
     local vg=`get_vg ${disk}`
     local lv_dm=`double_hyphens ${lv}`
@@ -120,8 +122,10 @@ destroy_snapshot() {
   local disk=$1
   local snapshotname="$2"
   local failed=0
+  is_lv ${disk}
+  islv_ret=$?
 
-  if is_lv ${disk}; then
+  if [ "$islv_ret" == "1" ]; then
     local lv=`get_lv ${disk}`
     local vg=`get_vg ${disk}`
     local lv_dm=`double_hyphens ${lv}`
@@ -187,7 +191,10 @@ backup_snapshot() {
      fi
   fi
 
-  if [ ${dmsnapshot} = "yes" ] && is_lv ${disk}; then
+  is_lv ${disk}
+  islv_ret=$?
+
+  if [ ${dmsnapshot} = "yes" ] && [ "$islv_ret" == "1" ] ; then
     local vg=`get_vg ${disk}`
     local vg_dm=`double_hyphens ${vg}`
     local scriptdir=`dirname ${0}`


[19/50] [abbrv] git commit: updated refs/heads/ldapplugin to 7bc705e

Posted by ch...@apache.org.
CLOUDSTACK-2159 Anti-Affinity - When "HostAntiAffinityProcessor" plugin is not included in the deployment , deployVirtualMachine() command does not error out when passing the affiitygroupnames parameter.

Changes:
- Added a check during vm deployment to see if a processor for the affinity group type is available


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

Branch: refs/heads/ldapplugin
Commit: ee664a1cac9030f1e9902a6d9a574788ae34f9a6
Parents: 9f019ec
Author: Prachi Damle <pr...@cloud.com>
Authored: Tue Jul 16 15:21:14 2013 -0700
Committer: Prachi Damle <pr...@cloud.com>
Committed: Tue Jul 16 15:48:07 2013 -0700

----------------------------------------------------------------------
 .../affinity/AffinityGroupService.java          |  2 ++
 client/tomcatconf/applicationContext.xml.in     |  4 +++-
 server/src/com/cloud/vm/UserVmManagerImpl.java  |  8 +++++++-
 .../affinity/AffinityGroupServiceImpl.java      | 20 ++++++++++++++++++++
 4 files changed, 32 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ee664a1c/api/src/org/apache/cloudstack/affinity/AffinityGroupService.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/affinity/AffinityGroupService.java b/api/src/org/apache/cloudstack/affinity/AffinityGroupService.java
index 7423c48..1b30e58 100644
--- a/api/src/org/apache/cloudstack/affinity/AffinityGroupService.java
+++ b/api/src/org/apache/cloudstack/affinity/AffinityGroupService.java
@@ -73,4 +73,6 @@ public interface AffinityGroupService {
 
     UserVm updateVMAffinityGroups(Long vmId, List<Long> affinityGroupIds);
 
+    boolean isAffinityGroupProcessorAvailable(String affinityGroupType);
+
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ee664a1c/client/tomcatconf/applicationContext.xml.in
----------------------------------------------------------------------
diff --git a/client/tomcatconf/applicationContext.xml.in b/client/tomcatconf/applicationContext.xml.in
index 0f3d328..fa52d3f 100644
--- a/client/tomcatconf/applicationContext.xml.in
+++ b/client/tomcatconf/applicationContext.xml.in
@@ -899,7 +899,9 @@
 
   <bean id="UcsManager" class="com.cloud.ucs.manager.UcsManagerImpl" />
 
-  <bean id="AffinityGroupServiceImpl" class="org.apache.cloudstack.affinity.AffinityGroupServiceImpl"/>
+  <bean id="AffinityGroupServiceImpl" class="org.apache.cloudstack.affinity.AffinityGroupServiceImpl">
+  	<property name="AffinityGroupProcessors" value="#{affinityProcessors.Adapters}" />
+  </bean>
   <bean id="DeploymentPlanningManager" class="com.cloud.deploy.DeploymentPlanningManagerImpl">
     <property name="Planners" value="#{deploymentPlanners.Adapters}" />
 	<property name="AffinityGroupProcessors" value="#{affinityProcessors.Adapters}" />

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ee664a1c/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 bd7a791..461176e 100755
--- a/server/src/com/cloud/vm/UserVmManagerImpl.java
+++ b/server/src/com/cloud/vm/UserVmManagerImpl.java
@@ -37,6 +37,7 @@ import org.apache.log4j.Logger;
 
 import org.apache.cloudstack.acl.ControlledEntity.ACLType;
 import org.apache.cloudstack.acl.SecurityChecker.AccessType;
+import org.apache.cloudstack.affinity.AffinityGroupService;
 import org.apache.cloudstack.affinity.AffinityGroupVO;
 import org.apache.cloudstack.affinity.dao.AffinityGroupDao;
 import org.apache.cloudstack.affinity.dao.AffinityGroupVMMapDao;
@@ -414,6 +415,8 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Use
     DedicatedResourceDao _dedicatedDao;
     @Inject
     ConfigurationServer _configServer;
+    @Inject
+    AffinityGroupService _affinityGroupService;
 
     protected ScheduledExecutorService _executor = null;
     protected int _expungeInterval;
@@ -2488,7 +2491,10 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Use
             for (Long affinityGroupId : affinityGroupIdList) {
                 AffinityGroupVO ag = _affinityGroupDao.findById(affinityGroupId);
                 if (ag == null) {
-                    throw new InvalidParameterValueException("Unable to find affinity group by id " + affinityGroupId);
+                    throw new InvalidParameterValueException("Unable to find affinity group " + ag);
+                } else if (!_affinityGroupService.isAffinityGroupProcessorAvailable(ag.getType())) {
+                    throw new InvalidParameterValueException("Affinity group type is not supported for group: " + ag
+                            + " ,type: " + ag.getType() + " , Please try again after removing the affinity group");
                 } else {
                     // verify permissions
                     _accountMgr.checkAccess(caller, null, true, owner, ag);

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ee664a1c/server/src/org/apache/cloudstack/affinity/AffinityGroupServiceImpl.java
----------------------------------------------------------------------
diff --git a/server/src/org/apache/cloudstack/affinity/AffinityGroupServiceImpl.java b/server/src/org/apache/cloudstack/affinity/AffinityGroupServiceImpl.java
index 287e622..e1fba1d 100644
--- a/server/src/org/apache/cloudstack/affinity/AffinityGroupServiceImpl.java
+++ b/server/src/org/apache/cloudstack/affinity/AffinityGroupServiceImpl.java
@@ -82,6 +82,16 @@ public class AffinityGroupServiceImpl extends ManagerBase implements AffinityGro
     @Inject
     private UserVmDao _userVmDao;
 
+    protected List<AffinityGroupProcessor> _affinityProcessors;
+
+    public List<AffinityGroupProcessor> getAffinityGroupProcessors() {
+        return _affinityProcessors;
+    }
+
+    public void setAffinityGroupProcessors(List<AffinityGroupProcessor> affinityProcessors) {
+        this._affinityProcessors = affinityProcessors;
+    }
+
     @Override
     @ActionEvent(eventType = EventTypes.EVENT_AFFINITY_GROUP_CREATE, eventDescription = "Creating Affinity Group", create = true)
     public AffinityGroup createAffinityGroup(String account, Long domainId, String affinityGroupName,
@@ -361,4 +371,14 @@ public class AffinityGroupServiceImpl extends ManagerBase implements AffinityGro
 
     }
 
+    @Override
+    public boolean isAffinityGroupProcessorAvailable(String affinityGroupType) {
+        for (AffinityGroupProcessor processor : _affinityProcessors) {
+            if (affinityGroupType != null && affinityGroupType.equals(processor.getType())) {
+                return true;
+            }
+        }
+        return false;
+    }
+
 }


[42/50] [abbrv] git commit: updated refs/heads/ldapplugin to 7bc705e

Posted by ch...@apache.org.
Fixes CLOUDSTACK-3582

Signed-off-by: Prasanna Santhanam <ts...@apache.org>


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

Branch: refs/heads/ldapplugin
Commit: cfd892fc3b72def40ab4cde78a7b844510bb860a
Parents: 2d6644d
Author: Sowmya Krishnan <so...@citrix.com>
Authored: Wed Jul 17 12:16:53 2013 +0530
Committer: Prasanna Santhanam <ts...@apache.org>
Committed: Wed Jul 17 19:23:57 2013 +0530

----------------------------------------------------------------------
 test/integration/component/test_netscaler_lb.py | 20 ++++++++++++++++++--
 1 file changed, 18 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/cfd892fc/test/integration/component/test_netscaler_lb.py
----------------------------------------------------------------------
diff --git a/test/integration/component/test_netscaler_lb.py b/test/integration/component/test_netscaler_lb.py
index 146b4c6..4253ada 100644
--- a/test/integration/component/test_netscaler_lb.py
+++ b/test/integration/component/test_netscaler_lb.py
@@ -2778,11 +2778,27 @@ class TestVmWithLb(cloudstackTestCase):
             hostnames.append(result)
             self.debug("Hostnames: %s" % str(hostnames))
 
-            self.assertNotEqual(
+            if hostnames[0] == hostnames[1]:
+                ssh_3 = self.vm_2.get_ssh_client(
+                                ipaddress=self.public_ip_1.ipaddress.ipaddress,
+                                reconnect=True
+                                )
+                self.debug("Command: hostname")
+                result = ssh_3.execute("hostname")
+                self.debug("Output: %s" % result)
+                hostnames.append(result)
+
+                self.assertNotEqual(
                     hostnames[0],
-                    hostnames[1],
+                    hostnames[2],
                     "Both request should be served by different instances"
                 )
+            else:
+                 self.assertNotEqual(
+                    hostnames[0],
+                    hostnames[1],
+                    "Both request should be served by different instances"
+                 )
         except Exception as e:
             self.fail("Exception occured during SSH: %s - %s" % (
                                         self.public_ip_1.ipaddress.ipaddress,


[25/50] [abbrv] be able to upload template into swift

Posted by ch...@apache.org.
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/bf32776f/server/test/com/cloud/async/CleanupDelegate.java
----------------------------------------------------------------------
diff --git a/server/test/com/cloud/async/CleanupDelegate.java b/server/test/com/cloud/async/CleanupDelegate.java
deleted file mode 100644
index 385e4cb..0000000
--- a/server/test/com/cloud/async/CleanupDelegate.java
+++ /dev/null
@@ -1,29 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-package com.cloud.async;
-
-import org.apache.log4j.Logger;
-
-public class CleanupDelegate implements com.cloud.utils.CleanupDelegate<String, Object> {
-    private static final Logger s_logger = Logger.getLogger(CleanupDelegate.class);
-
-	@Override
-	public boolean cleanup(String param, Object managerContext) {
-		s_logger.info("Action called with param: " + param);
-		return true;
-	}
-}

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/bf32776f/server/test/com/cloud/async/TestAsync.java
----------------------------------------------------------------------
diff --git a/server/test/com/cloud/async/TestAsync.java b/server/test/com/cloud/async/TestAsync.java
deleted file mode 100644
index 6f67fe2..0000000
--- a/server/test/com/cloud/async/TestAsync.java
+++ /dev/null
@@ -1,281 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-package com.cloud.async;
-
-
-import java.util.List;
-
-import junit.framework.Assert;
-
-import org.apache.log4j.Logger;
-
-import com.cloud.cluster.CheckPointVO;
-import com.cloud.cluster.dao.StackMaidDao;
-import com.cloud.cluster.dao.StackMaidDaoImpl;
-import com.cloud.utils.db.Transaction;
-import com.cloud.utils.testcase.Log4jEnabledTestCase;
-
-
-public class TestAsync extends Log4jEnabledTestCase {
-    private static final Logger s_logger = Logger.getLogger(TestAsync.class);
-
-    /*
-	public static class SampleAsyncResult {
-		@Param(name="name", propName="name")
-		private final String _name;
-
-		@Param
-		private final int count;
-
-		public SampleAsyncResult(String name, int count) {
-			_name = name;
-			this.count = count;
-		}
-
-		public String getName() { return _name; }
-		public int getCount() { return count; }
-	}
-
-	public void testDao() {
-		AsyncJobDao dao = new AsyncJobDaoImpl();
-		AsyncJobVO job = new AsyncJobVO(1, 1, "TestCmd", null);
-		job.setInstanceType("user_vm");
-		job.setInstanceId(1000L);
-
-		char[] buf = new char[1024];
-		for(int i = 0; i < 1024; i++)
-			buf[i] = 'a';
-
-		job.setResult(new String(buf));
-		dao.persist(job);
-
-		AsyncJobVO jobVerify = dao.findById(job.getId());
-
-		Assert.assertTrue(jobVerify.getCmd().equals(job.getCmd()));
-		Assert.assertTrue(jobVerify.getUserId() == 1);
-		Assert.assertTrue(jobVerify.getAccountId() == 1);
-
-		String result = jobVerify.getResult();
-		for(int i = 0; i < 1024; i++)
-			Assert.assertTrue(result.charAt(i) == 'a');
-
-		jobVerify = dao.findInstancePendingAsyncJob("user_vm", 1000L);
-		Assert.assertTrue(jobVerify != null);
-		Assert.assertTrue(jobVerify.getCmd().equals(job.getCmd()));
-		Assert.assertTrue(jobVerify.getUserId() == 1);
-		Assert.assertTrue(jobVerify.getAccountId() == 1);
-	}
-
-	public void testSerialization() {
-		List<Pair<String, Object>> l;
-		int value = 1;
-		l = SerializerHelper.toPairList(value, "result");
-		Assert.assertTrue(l.size() == 1);
-		Assert.assertTrue(l.get(0).first().equals("result"));
-		Assert.assertTrue(l.get(0).second().equals("1"));
-		l.clear();
-
-		SampleAsyncResult result = new SampleAsyncResult("vmops", 1);
-		l = SerializerHelper.toPairList(result, "result");
-
-		Assert.assertTrue(l.size() == 2);
-		Assert.assertTrue(l.get(0).first().equals("name"));
-		Assert.assertTrue(l.get(0).second().equals("vmops"));
-		Assert.assertTrue(l.get(1).first().equals("count"));
-		Assert.assertTrue(l.get(1).second().equals("1"));
-	}
-
-	public void testAsyncResult() {
-		AsyncJobResult result = new AsyncJobResult(1);
-
-		result.setResultObject(100);
-		Assert.assertTrue(result.getResult().equals("java.lang.Integer/100"));
-
-		Object obj = result.getResultObject();
-		Assert.assertTrue(obj instanceof Integer);
-		Assert.assertTrue(((Integer)obj).intValue() == 100);
-	}
-
-	public void testTransaction() {
-		Transaction txn = Transaction.open("testTransaction");
-		try {
-			txn.start();
-
-			AsyncJobDao dao = new AsyncJobDaoImpl();
-			AsyncJobVO job = new AsyncJobVO(1, 1, "TestCmd", null);
-			job.setInstanceType("user_vm");
-			job.setInstanceId(1000L);
-			job.setResult("");
-			dao.persist(job);
-			txn.rollback();
-		} finally {
-			txn.close();
-		}
-	}
-
-	public void testMorevingian() {
-		int threadCount = 10;
-		final int testCount = 10;
-
-		Thread[] threads = new Thread[threadCount];
-		for(int i = 0; i < threadCount; i++) {
-			final int threadNum = i + 1;
-			threads[i] = new Thread(new Runnable() {
-				public void run() {
-					for(int i = 0; i < testCount; i++) {
-						Transaction txn = Transaction.open(Transaction.CLOUD_DB);
-						try {
-							AsyncJobDao dao = new AsyncJobDaoImpl();
-
-							s_logger.info("Thread " + threadNum + " acquiring lock");
-							AsyncJobVO job = dao.acquire(1L, 30);
-							if(job != null) {
-								s_logger.info("Thread " + threadNum + " acquired lock");
-
-								try {
-									Thread.sleep(Log4jEnabledTestCase.getRandomMilliseconds(1000, 3000));
-								} catch (InterruptedException e) {
-								}
-
-								s_logger.info("Thread " + threadNum + " acquiring lock nestly");
-								AsyncJobVO job2 = dao.acquire(1L, 30);
-								if(job2 != null) {
-									s_logger.info("Thread " + threadNum + " acquired lock nestly");
-
-									try {
-										Thread.sleep(Log4jEnabledTestCase.getRandomMilliseconds(1000, 3000));
-									} catch (InterruptedException e) {
-									}
-
-									s_logger.info("Thread " + threadNum + " releasing lock (nestly acquired)");
-									dao.release(1L);
-									s_logger.info("Thread " + threadNum + " released lock (nestly acquired)");
-
-								} else {
-									s_logger.info("Thread " + threadNum + " was unable to acquire lock nestly");
-								}
-
-								s_logger.info("Thread " + threadNum + " releasing lock");
-								dao.release(1L);
-								s_logger.info("Thread " + threadNum + " released lock");
-							} else {
-								s_logger.info("Thread " + threadNum + " was unable to acquire lock");
-							}
-						} finally {
-							txn.close();
-						}
-
-						try {
-							Thread.sleep(Log4jEnabledTestCase.getRandomMilliseconds(1000, 10000));
-						} catch (InterruptedException e) {
-						}
-					}
-				}
-			});
-		}
-
-		for(int i = 0; i < threadCount; i++) {
-			threads[i].start();
-		}
-
-		for(int i = 0; i < threadCount; i++) {
-			try {
-				threads[i].join();
-			} catch (InterruptedException e) {
-			}
-		}
-	}
-     */
-
-    public void testMaid() {
-        Transaction txn = Transaction.open(Transaction.CLOUD_DB);
-
-        StackMaidDao dao = new StackMaidDaoImpl();
-        dao.pushCleanupDelegate(1L, 0, "delegate1", "Hello, world");
-        dao.pushCleanupDelegate(1L, 1, "delegate2", new Long(100));
-        dao.pushCleanupDelegate(1L, 2, "delegate3", null);
-
-        CheckPointVO item = dao.popCleanupDelegate(1L);
-        Assert.assertTrue(item.getDelegate().equals("delegate3"));
-        Assert.assertTrue(item.getContext() == null);
-
-        item = dao.popCleanupDelegate(1L);
-        Assert.assertTrue(item.getDelegate().equals("delegate2"));
-        s_logger.info(item.getContext());
-
-        item = dao.popCleanupDelegate(1L);
-        Assert.assertTrue(item.getDelegate().equals("delegate1"));
-        s_logger.info(item.getContext());
-
-        txn.close();
-    }
-
-    public void testMaidClear() {
-        Transaction txn = Transaction.open(Transaction.CLOUD_DB);
-
-        StackMaidDao dao = new StackMaidDaoImpl();
-        dao.pushCleanupDelegate(1L, 0, "delegate1", "Hello, world");
-        dao.pushCleanupDelegate(1L, 1, "delegate2", new Long(100));
-        dao.pushCleanupDelegate(1L, 2, "delegate3", null);
-
-        dao.clearStack(1L);
-        Assert.assertTrue(dao.popCleanupDelegate(1L) == null);
-        txn.close();
-    }
-
-
-    public void testMaidLeftovers() {
-
-        Thread[] threads = new Thread[3];
-        for(int i = 0; i < 3; i++) {
-            final int threadNum = i+1;
-            threads[i] = new Thread(new Runnable() {
-                @Override
-                public void run() {
-                    Transaction txn = Transaction.open(Transaction.CLOUD_DB);
-
-                    StackMaidDao dao = new StackMaidDaoImpl();
-                    dao.pushCleanupDelegate(1L, 0, "delegate-" + threadNum, "Hello, world");
-                    dao.pushCleanupDelegate(1L, 1, "delegate-" + threadNum, new Long(100));
-                    dao.pushCleanupDelegate(1L, 2, "delegate-" + threadNum, null);
-
-                    txn.close();
-                }
-            });
-
-            threads[i].start();
-        }
-
-        for(int i = 0; i < 3; i++) {
-            try {
-                threads[i].join();
-            } catch (InterruptedException e) {
-            }
-        }
-
-
-        Transaction txn = Transaction.open(Transaction.CLOUD_DB);
-
-        StackMaidDao dao = new StackMaidDaoImpl();
-        List<CheckPointVO> l = dao.listLeftoversByMsid(1L);
-        for(CheckPointVO maid : l) {
-            s_logger.info("" + maid.getThreadId() + " " + maid.getDelegate() + " " + maid.getContext());
-        }
-
-        txn.close();
-    }
-}

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/bf32776f/server/test/com/cloud/async/TestAsyncJobManager.java
----------------------------------------------------------------------
diff --git a/server/test/com/cloud/async/TestAsyncJobManager.java b/server/test/com/cloud/async/TestAsyncJobManager.java
deleted file mode 100644
index e323393..0000000
--- a/server/test/com/cloud/async/TestAsyncJobManager.java
+++ /dev/null
@@ -1,252 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-package com.cloud.async;
-
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
-
-import javax.inject.Inject;
-
-import junit.framework.Assert;
-import junit.framework.TestCase;
-
-import org.apache.log4j.Logger;
-
-import com.cloud.domain.DomainVO;
-import com.cloud.domain.dao.DomainDao;
-import com.cloud.domain.dao.DomainDaoImpl;
-import com.cloud.exception.PermissionDeniedException;
-import com.cloud.host.HostVO;
-import com.cloud.host.dao.HostDao;
-import com.cloud.host.dao.HostDaoImpl;
-import com.cloud.utils.db.Transaction;
-
-public class TestAsyncJobManager extends TestCase {
-    public static final Logger s_logger = Logger.getLogger(TestAsyncJobManager.class.getName());
-
-    volatile long s_count = 0;
-
-    @Inject AsyncJobManager asyncMgr;
-
-    public void asyncCall() {
-//		long jobId = mgr.rebootVirtualMachineAsync(1, 1);
-        long jobId = 0L;
-        s_logger.info("Async-call job id: " + jobId);
-
-        while(true) {
-            AsyncJobResult result;
-            try {
-                result = asyncMgr.queryAsyncJobResult(jobId);
-
-                if(result.getJobStatus() != AsyncJobResult.STATUS_IN_PROGRESS) {
-                    s_logger.info("Async-call completed, result: " + result.toString());
-                    break;
-                }
-                s_logger.info("Async-call is in progress, progress: " + result.toString());
-
-            } catch (PermissionDeniedException e1) {
-            }
-
-            try {
-                Thread.sleep(1000);
-            } catch (InterruptedException e) {
-            }
-        }
-    }
-
-    public void sequence() {
-        final HostDao hostDao = new HostDaoImpl();
-        long seq = hostDao.getNextSequence(1);
-        s_logger.info("******* seq : " + seq + " ********");
-
-        HashMap<Long, Long> hashMap = new HashMap<Long, Long>();
-        final Map<Long, Long> map = Collections.synchronizedMap(hashMap);
-
-        s_count = 0;
-        final long maxCount = 1000000;	// test one million times
-
-        Thread t1 = new Thread(new Runnable() {
-            @Override
-            public void run() {
-                while(s_count < maxCount) {
-                    s_count++;
-                    long seq = hostDao.getNextSequence(1);
-                    Assert.assertTrue(map.put(seq, seq) == null);
-                }
-            }
-        });
-
-        Thread t2 = new Thread(new Runnable() {
-            @Override
-            public void run() {
-                while(s_count < maxCount) {
-                    s_count++;
-                    long seq = hostDao.getNextSequence(1);
-                    Assert.assertTrue(map.put(seq, seq) == null);
-                }
-            }
-        });
-
-        t1.start();
-        t2.start();
-
-        try {
-            t1.join();
-            t2.join();
-        } catch (InterruptedException e) {
-        }
-    }
-
-    /*
-	public void ipAssignment() {
-		final IPAddressDao ipAddressDao = new IPAddressDaoImpl();
-
-		final ConcurrentHashMap<String, IPAddressVO> map = new ConcurrentHashMap<String, IPAddressVO>();
-		//final Map<String, String> map = Collections.synchronizedMap(hashMap);
-
-		s_count = 0;
-		final long maxCount = 1000000;	// test one million times
-
-		Thread t1 = new Thread(new Runnable() {
-			public void run() {
-				while(s_count < maxCount) {
-					s_count++;
-
-					Transaction txn = Transaction.open("Alex1");
-					try {
-						IPAddressVO addr = ipAddressDao.assignIpAddress(1, 0, 1, false);
-						IPAddressVO returnStr = map.put(addr.getAddress(), addr);
-						if(returnStr != null) {
-							System.out.println("addr : " + addr.getAddress());
-						}
-						Assert.assertTrue(returnStr == null);
-					} finally {
-						txn.close();
-					}
-				}
-			}
-		});
-
-		Thread t2 = new Thread(new Runnable() {
-			public void run() {
-				while(s_count < maxCount) {
-					s_count++;
-
-					Transaction txn = Transaction.open("Alex2");
-					try {
-						IPAddressVO addr = ipAddressDao.assignIpAddress(1, 0, 1, false);
-						Assert.assertTrue(map.put(addr.getAddress(), addr) == null);
-					} finally {
-						txn.close();
-					}
-				}
-			}
-		});
-
-		t1.start();
-		t2.start();
-
-		try {
-			t1.join();
-			t2.join();
-		} catch (InterruptedException e) {
-		}
-	}
-     */
-
-    private long getRandomLockId() {
-        return 1L;
-
-        /*
-         *  will use in the future test cases
-		int i = new Random().nextInt();
-		if(i % 2 == 0)
-			return 1L;
-		return 2L;
-         */
-    }
-
-    public void tstLocking() {
-
-        int testThreads = 20;
-        Thread[] threads = new Thread[testThreads];
-
-        for(int i = 0; i < testThreads; i++) {
-            final int current = i;
-            threads[i] = new Thread(new Runnable() {
-                @Override
-                public void run() {
-
-                    final HostDao hostDao = new HostDaoImpl();
-                    while(true) {
-                        Transaction txn = Transaction.currentTxn();
-                        try {
-                            HostVO host = hostDao.acquireInLockTable(getRandomLockId(), 10);
-                            if(host != null) {
-                                s_logger.info("Thread " + (current + 1) + " acquired lock");
-
-                                try { Thread.sleep(1000); } catch (InterruptedException e) {}
-
-                                s_logger.info("Thread " + (current + 1) + " released lock");
-                                hostDao.releaseFromLockTable(host.getId());
-
-                                try { Thread.sleep(1000); } catch (InterruptedException e) {}
-                            } else {
-                                s_logger.info("Thread " + (current + 1) + " is not able to acquire lock");
-                            }
-                        } finally {
-                            txn.close();
-                        }
-                    }
-                }
-            });
-            threads[i].start();
-        }
-
-        try {
-            for(int i = 0; i < testThreads; i++)
-                threads[i].join();
-        } catch(InterruptedException e) {
-        }
-    }
-
-    public void testDomain() {
-        DomainDao domainDao = new DomainDaoImpl();
-
-		DomainVO domain1 = new DomainVO("d1", 2L, 1L, null, 1);
-        domainDao.create(domain1);
-
-		DomainVO domain2 = new DomainVO("d2", 2L, 1L, null, 1);
-        domainDao.create(domain2);
-
-		DomainVO domain3 = new DomainVO("d3", 2L, 1L, null, 1);
-        domainDao.create(domain3);
-
-		DomainVO domain11 = new DomainVO("d11", 2L, domain1.getId(), null, 1);
-        domainDao.create(domain11);
-
-        domainDao.remove(domain11.getId());
-
-		DomainVO domain12 = new DomainVO("d12", 2L, domain1.getId(), null, 1);
-        domainDao.create(domain12);
-
-        domainDao.remove(domain3.getId());
-		DomainVO domain4 = new DomainVO("d4", 2L, 1L, null, 1);
-        domainDao.create(domain4);
-    }
-}

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/bf32776f/server/test/com/cloud/async/TestSyncQueueManager.java
----------------------------------------------------------------------
diff --git a/server/test/com/cloud/async/TestSyncQueueManager.java b/server/test/com/cloud/async/TestSyncQueueManager.java
deleted file mode 100644
index 59afb11..0000000
--- a/server/test/com/cloud/async/TestSyncQueueManager.java
+++ /dev/null
@@ -1,208 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-package com.cloud.async;
-
-import java.util.List;
-
-import javax.inject.Inject;
-
-import junit.framework.TestCase;
-
-import org.apache.log4j.Logger;
-import org.junit.Assert;
-
-
-public class TestSyncQueueManager extends TestCase {
-    public static final Logger s_logger = Logger.getLogger(TestSyncQueueManager.class.getName());
-
-    private volatile int count = 0;
-    private volatile long expectingCurrent = 1;
-    @Inject SyncQueueManager mgr;
-
-    public void leftOverItems() {
-
-        List<SyncQueueItemVO> l = mgr.getActiveQueueItems(1L, false);
-        if(l != null && l.size() > 0) {
-            for(SyncQueueItemVO item : l) {
-                s_logger.info("Left over item: " + item.toString());
-                mgr.purgeItem(item.getId());
-            }
-        }
-    }
-
-    public void dequeueFromOneQueue() {
-        final int totalRuns = 5000;
-        final SyncQueueVO queue = mgr.queue("vm_instance", 1L, "Async-job", 1, 1);
-        for(int i = 1; i < totalRuns; i++)
-            mgr.queue("vm_instance", 1L, "Async-job", i+1, 1);
-
-        count = 0;
-        expectingCurrent = 1;
-        Thread thread1 = new Thread(new Runnable() {
-            @Override
-            public void run() {
-                while(count < totalRuns) {
-                    SyncQueueItemVO item = mgr.dequeueFromOne(queue.getId(), 1L);
-                    if(item != null) {
-                        s_logger.info("Thread 1 process item: " + item.toString());
-
-                        Assert.assertEquals(expectingCurrent, item.getContentId().longValue());
-                        expectingCurrent++;
-                        count++;
-
-                        mgr.purgeItem(item.getId());
-                    }
-                    try {
-                        Thread.sleep(100);
-                    } catch (InterruptedException e) {
-                    }
-                }
-            }
-        }
-                );
-
-        Thread thread2 = new Thread(new Runnable() {
-            @Override
-            public void run() {
-                while(count < totalRuns) {
-                    SyncQueueItemVO item = mgr.dequeueFromOne(queue.getId(), 1L);
-                    if(item != null) {
-                        s_logger.info("Thread 2 process item: " + item.toString());
-
-                        Assert.assertEquals(expectingCurrent, item.getContentId().longValue());
-                        expectingCurrent++;
-                        count++;
-                        mgr.purgeItem(item.getId());
-                    }
-
-                    try {
-                        Thread.sleep(100);
-                    } catch (InterruptedException e) {
-                    }
-                }
-            }
-        }
-                );
-
-        thread1.start();
-        thread2.start();
-        try {
-            thread1.join();
-        } catch (InterruptedException e) {
-        }
-        try {
-            thread2.join();
-        } catch (InterruptedException e) {
-        }
-
-        Assert.assertEquals(totalRuns, count);
-    }
-
-    public void dequeueFromAnyQueue() {
-        // simulate 30 queues
-        final int queues = 30;
-        final int totalRuns = 100;
-        final int itemsPerRun = 20;
-        for(int q = 1; q <= queues; q++)
-            for(int i = 0; i < totalRuns; i++)
-                mgr.queue("vm_instance", q, "Async-job", i+1, 1);
-
-        count = 0;
-        Thread thread1 = new Thread(new Runnable() {
-            @Override
-            public void run() {
-                while(count < totalRuns*queues) {
-                    List<SyncQueueItemVO> l = mgr.dequeueFromAny(1L, itemsPerRun);
-                    if(l != null && l.size() > 0) {
-                        s_logger.info("Thread 1 get " + l.size() + " dequeued items");
-
-                        for(SyncQueueItemVO item : l) {
-                            s_logger.info("Thread 1 process item: " + item.toString());
-                            count++;
-
-                            mgr.purgeItem(item.getId());
-                        }
-                    }
-                    try {
-                        Thread.sleep(100);
-                    } catch (InterruptedException e) {
-                    }
-                }
-            }
-        }
-                );
-
-        Thread thread2 = new Thread(new Runnable() {
-            @Override
-            public void run() {
-                while(count < totalRuns*queues) {
-                    List<SyncQueueItemVO> l = mgr.dequeueFromAny(1L, itemsPerRun);
-                    if(l != null && l.size() > 0) {
-                        s_logger.info("Thread 2 get " + l.size() + " dequeued items");
-
-                        for(SyncQueueItemVO item : l) {
-                            s_logger.info("Thread 2 process item: " + item.toString());
-                            count++;
-                            mgr.purgeItem(item.getId());
-                        }
-                    }
-
-                    try {
-                        Thread.sleep(100);
-                    } catch (InterruptedException e) {
-                    }
-                }
-            }
-        }
-                );
-
-        thread1.start();
-        thread2.start();
-        try {
-            thread1.join();
-        } catch (InterruptedException e) {
-        }
-        try {
-            thread2.join();
-        } catch (InterruptedException e) {
-        }
-        Assert.assertEquals(queues*totalRuns, count);
-    }
-
-    public void testPopulateQueueData() {
-        final int queues = 30000;
-        final int totalRuns = 100;
-
-        for(int q = 1; q <= queues; q++)
-            for(int i = 0; i < totalRuns; i++)
-                mgr.queue("vm_instance", q, "Async-job", i+1, 1);
-    }
-
-    public void testSyncQueue() {
-
-        mgr.queue("vm_instance", 1, "Async-job", 1, 1);
-        mgr.queue("vm_instance", 1, "Async-job", 2, 1);
-        mgr.queue("vm_instance", 1, "Async-job", 3, 1);
-        mgr.dequeueFromAny(100L, 1);
-
-        List<SyncQueueItemVO> l = mgr.getBlockedQueueItems(100000, false);
-        for(SyncQueueItemVO item : l) {
-            System.out.println("Blocked item. " + item.getContentType() + "-" + item.getContentId());
-            mgr.purgeItem(item.getId());
-        }
-    }
-}

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/bf32776f/server/test/com/cloud/upgrade/AdvanceZone217To224UpgradeTest.java
----------------------------------------------------------------------
diff --git a/server/test/com/cloud/upgrade/AdvanceZone217To224UpgradeTest.java b/server/test/com/cloud/upgrade/AdvanceZone217To224UpgradeTest.java
deleted file mode 100644
index 532a62f..0000000
--- a/server/test/com/cloud/upgrade/AdvanceZone217To224UpgradeTest.java
+++ /dev/null
@@ -1,117 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-package com.cloud.upgrade;
-
-
-import java.sql.Connection;
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-
-import javax.inject.Inject;
-
-import junit.framework.TestCase;
-
-import org.apache.log4j.Logger;
-import org.junit.After;
-import org.junit.Before;
-
-import com.cloud.upgrade.dao.VersionDaoImpl;
-
-import com.cloud.utils.db.DbTestUtils;
-import com.cloud.utils.db.Transaction;
-
-public class AdvanceZone217To224UpgradeTest extends TestCase {
-    private static final Logger s_logger = Logger.getLogger(AdvanceZone217To224UpgradeTest.class);
-    @Inject VersionDaoImpl dao;
-    @Inject DatabaseUpgradeChecker checker;
-    
-    @Override
-    @Before
-    public void setUp() throws Exception {
-        DbTestUtils.executeScript("cleanup.sql", false, true);
-    }
-    
-    @Override
-    @After
-    public void tearDown() throws Exception {
-    }
-    
-    public void test217to22Upgrade() throws SQLException {
-        s_logger.debug("Finding sample data from 2.1.7");
-        DbTestUtils.executeScript("fake.sql", false, true);
-        
-        Connection conn;
-        PreparedStatement pstmt;
-        
-        String version = dao.getCurrentVersion();
-        assert version.equals("2.1.7") : "Version returned is not 2.1.7 but " + version;
-        
-        checker.upgrade("2.1.7", "2.2.4");
-        
-        conn = Transaction.getStandaloneConnection();
-        try {
-            pstmt = conn.prepareStatement("SELECT version FROM version ORDER BY id DESC LIMIT 1");
-            ResultSet rs = pstmt.executeQuery();
-            assert rs.next() : "No version selected";
-            assert rs.getString(1).equals("2.2.4") : "VERSION stored is not 2.2.4: " + rs.getString(1);
-            rs.close();
-            pstmt.close();
-            
-            pstmt = conn.prepareStatement("SELECT COUNT(*) FROM network_offerings");
-            rs = pstmt.executeQuery();
-            assert rs.next() : "Unable to get the count of network offerings.";
-            assert (rs.getInt(1) == 7) : "Didn't find 7 network offerings but found " + rs.getInt(1);
-            rs.close();
-            pstmt.close();
-            
-            pstmt = conn.prepareStatement("SELECT DISTINCT networktype FROM data_center");
-            rs = pstmt.executeQuery();
-            assert rs.next()  && rs.getString(1).equals("Advanced") : "Network type is not advanced? " + rs.getString(1);
-            assert !rs.next() : "Why do we have another one? " + rs.getString(1);
-            rs.close();
-            pstmt.close();
-            
-            pstmt = conn.prepareStatement("SELECT COUNT(*) FROM disk_offering WHERE removed IS NULL AND system_use=1 AND type='Service' AND recreatable=1");
-            rs = pstmt.executeQuery();
-            assert (rs.next() && rs.getInt(1) == 3) : "DiskOffering for system VMs are incorrect.  Expecting 3 but got " + rs.getInt(1);
-            rs.close();
-            pstmt.close();
-            
-            pstmt = conn.prepareStatement("SELECT COUNT(*) FROM op_dc_link_local_ip_address_alloc WHERE nic_id IS NOT NULL");
-            rs = pstmt.executeQuery();
-            rs.next();
-            int controlNics = rs.getInt(1);
-            rs.close();
-            pstmt.close();
-            
-            pstmt = conn.prepareStatement("SELECT COUNT(*) FROM nics WHERE reserver_name='ControlNetworkGuru' and ip4_address is NOT NULL");
-            rs = pstmt.executeQuery();
-            assert (rs.next() && controlNics == rs.getInt(1)) : "Allocated nics should have been " + controlNics + " but it is " + rs.getInt(1);
-            rs.close();
-            pstmt.close();
-            
-            
-        } finally {
-            try {
-                conn.close();
-            } catch (SQLException e) {
-            }
-        }
-    }
-    
-}

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/bf32776f/server/test/com/cloud/upgrade/AdvanceZone223To224UpgradeTest.java
----------------------------------------------------------------------
diff --git a/server/test/com/cloud/upgrade/AdvanceZone223To224UpgradeTest.java b/server/test/com/cloud/upgrade/AdvanceZone223To224UpgradeTest.java
deleted file mode 100644
index 519ae70..0000000
--- a/server/test/com/cloud/upgrade/AdvanceZone223To224UpgradeTest.java
+++ /dev/null
@@ -1,57 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-package com.cloud.upgrade;
-
-import java.sql.SQLException;
-
-import javax.inject.Inject;
-
-import junit.framework.TestCase;
-
-import org.apache.log4j.Logger;
-import org.junit.After;
-import org.junit.Before;
-
-import com.cloud.upgrade.dao.VersionDaoImpl;
-
-
-public class AdvanceZone223To224UpgradeTest extends TestCase {
-    private static final Logger s_logger = Logger.getLogger(AdvanceZone223To224UpgradeTest.class);
-    @Inject VersionDaoImpl dao;
-    @Inject DatabaseUpgradeChecker checker;
-
-    @Override
-    @Before
-    public void setUp() throws Exception {
-//        DbTestUtils.executeScript("PreviousDatabaseSchema/clean-db.sql", false, true);
-    }
-
-    @Override
-    @After
-    public void tearDown() throws Exception {
-    }
-
-    public void test223to224Upgrade() throws SQLException {
-
-
-        String version = dao.getCurrentVersion();
-        assert version.equals("2.2.3") : "Version returned is not 2.2.3 but " + version;
-
-        checker.upgrade("2.2.3", "2.2.4");
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/bf32776f/server/test/com/cloud/upgrade/BasicZone218To224UpgradeTest.java
----------------------------------------------------------------------
diff --git a/server/test/com/cloud/upgrade/BasicZone218To224UpgradeTest.java b/server/test/com/cloud/upgrade/BasicZone218To224UpgradeTest.java
deleted file mode 100644
index 8bd9f06..0000000
--- a/server/test/com/cloud/upgrade/BasicZone218To224UpgradeTest.java
+++ /dev/null
@@ -1,211 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-package com.cloud.upgrade;
-
-
-import java.sql.Connection;
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-
-import javax.inject.Inject;
-
-import junit.framework.TestCase;
-
-import org.apache.log4j.Logger;
-import org.junit.After;
-import org.junit.Before;
-
-import com.cloud.upgrade.dao.VersionDaoImpl;
-
-import com.cloud.utils.db.DbTestUtils;
-import com.cloud.utils.db.Transaction;
-
-public class BasicZone218To224UpgradeTest extends TestCase {
-    private static final Logger s_logger = Logger.getLogger(BasicZone218To224UpgradeTest.class);
-    
-    @Inject VersionDaoImpl dao;
-    @Inject DatabaseUpgradeChecker checker;
-
-    @Override
-    @Before
-    public void setUp() throws Exception {
-        DbTestUtils.executeScript("cleanup.sql", false, true);
-    }
-    
-    @Override
-    @After
-    public void tearDown() throws Exception {
-    }
-    
-    public void test217to22Upgrade() throws SQLException {
-        s_logger.debug("Finding sample data from 2.1.8");
-        DbTestUtils.executeScript("fake.sql", false, true);
-        
-        Connection conn = Transaction.getStandaloneConnection();
-        PreparedStatement pstmt;
-        
-        String version = dao.getCurrentVersion();
-        
-        if (!version.equals("2.1.8")) {
-            s_logger.error("Version returned is not 2.1.8 but " + version);
-        } else {
-            s_logger.debug("Basic zone test version is " + version);
-        }
-        
-        checker.upgrade("2.1.8", "2.2.4");
-        
-        conn = Transaction.getStandaloneConnection();
-        try {
-            
-            s_logger.debug("Starting tesing upgrade from 2.1.8 to 2.2.4 for Basic zone...");
-            
-            //Version check
-            pstmt = conn.prepareStatement(" SELECT version FROM version ORDER BY id DESC LIMIT 1");
-            ResultSet rs = pstmt.executeQuery();
-            
-            if (!rs.next()) {
-                s_logger.error("ERROR: No version selected");
-            } else if (!rs.getString(1).equals("2.2.4")) {
-                s_logger.error("ERROR: VERSION stored is not 2.2.4: " + rs.getString(1));
-            }
-            rs.close();
-            pstmt.close();
-            
-            //Check that default network offerings are present
-            pstmt = conn.prepareStatement("SELECT COUNT(*) FROM network_offerings");
-            rs = pstmt.executeQuery();
-            
-            if (!rs.next()) {
-                s_logger.error("ERROR: Unable to get the count of network offerings.");
-            } else if (rs.getInt(1) != 7) {
-                s_logger.error("ERROR: Didn't find 7 network offerings but found " + rs.getInt(1));
-            } else {
-                s_logger.debug("Network offerings test passed");
-            }
-
-            rs.close();
-            pstmt.close();
-            
-            
-            //Zone network type check
-            pstmt = conn.prepareStatement("SELECT DISTINCT networktype FROM data_center");
-            rs = pstmt.executeQuery();
-            
-            if (!rs.next()) {
-                s_logger.error("No zone exists after upgrade");
-            } else if (!rs.getString(1).equals("Basic")) {
-                s_logger.error("ERROR: Zone type is not Basic");
-            } else if (rs.next()) {
-                s_logger.error("ERROR: Why do we have more than 1 zone with different types??");
-                System.exit(2);
-            } else {
-                s_logger.debug("Test passed. Zone was updated properly with type Basic");
-            }
-            rs.close();
-            pstmt.close();
-            
-            //Check that vnet/cidr were set to NULL for basic zone
-            pstmt = conn.prepareStatement("SELECT vnet, guest_network_cidr FROM data_center");
-            rs = pstmt.executeQuery();
-            
-            if (!rs.next()) {
-                s_logger.error("ERROR: vnet field is missing for the zone");
-            } else if (rs.getString(1) != null || rs.getString(2) != null) {
-                s_logger.error("ERROR: vnet/guestCidr should be NULL for basic zone; instead it's " + rs.getString(1));
-            } else {
-                s_logger.debug("Test passed. Vnet and cidr are set to NULL for the basic zone");
-            }
-            
-            rs.close();
-            pstmt.close();
-            
-            //Verify that default Direct guest network got created, and it's Shared and Default
-            pstmt = conn.prepareStatement("SELECT traffic_type, guest_type, shared, is_default, id FROM networks WHERE name LIKE '%BasicZoneDirectNetwork%'");
-            rs = pstmt.executeQuery();
-            
-            if (!rs.next()) {
-                s_logger.error("Direct network is missing for the Basic zone");
-            } else if (!rs.getString(1).equalsIgnoreCase("Guest") || !rs.getString(2).equalsIgnoreCase("Direct") || !rs.getBoolean(3) || !rs.getBoolean(4)) {
-                s_logger.error("Direct network for basic zone has incorrect setting");
-            } else {
-                s_logger.debug("Test passed. Default Direct Basic zone network parameters were set correctly");
-            }
-            
-            long defaultDirectNetworkId = rs.getInt(5);
-            rs.close();
-            pstmt.close();
-            
-            //Verify that all vlans in the zone belong to default Direct network
-            pstmt = conn.prepareStatement("SELECT network_id FROM vlan");
-            rs = pstmt.executeQuery();
-            
-            while (rs.next()) {
-                if (rs.getInt(1) != defaultDirectNetworkId) {
-                    s_logger.error("ERROR: network_id is set incorrectly for public untagged vlans in Basic zone");
-                    System.exit(2);
-                }
-            }
-            
-            s_logger.debug("Test passed for vlan table in Basic zone");
-            
-            rs.close();
-            pstmt.close();
-            
-            //Verify user_ip_address table
-            pstmt = conn.prepareStatement("SELECT source_network_id FROM user_ip_address");
-            rs = pstmt.executeQuery();
-            
-            while (rs.next()) {
-                if (rs.getInt(1) != defaultDirectNetworkId) {
-                    s_logger.error("ERROR: network_id is set incorrectly for public Ip addresses (user_ip_address table) in Basic zone");
-                    System.exit(2);
-                }
-            }
-            
-            s_logger.debug("Test passed for user_ip_address table in Basic zone");
-            
-            rs.close();
-            pstmt.close();
-            
-            //Verify domain_router table
-            pstmt = conn.prepareStatement("SELECT network_id FROM domain_router");
-            rs = pstmt.executeQuery();
-            
-            while (rs.next()) {
-                if (rs.getInt(1) != defaultDirectNetworkId) {
-                    s_logger.error("ERROR: network_id is set incorrectly for domain routers (domain_router table) in Basic zone");
-                    System.exit(2);
-                }
-            }
-            
-            s_logger.debug("Test passed for domain_router table in Basic zone");
-            
-            rs.close();
-            pstmt.close();
-            
-            s_logger.debug("Basic zone test is finished");
-            
-        } finally {
-            try {
-                conn.close();
-            } catch (SQLException e) {
-            }
-        }
-    }
-    
-}

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/bf32776f/server/test/com/cloud/upgrade/DbUpgrade22Test.java
----------------------------------------------------------------------
diff --git a/server/test/com/cloud/upgrade/DbUpgrade22Test.java b/server/test/com/cloud/upgrade/DbUpgrade22Test.java
deleted file mode 100644
index e0db82d..0000000
--- a/server/test/com/cloud/upgrade/DbUpgrade22Test.java
+++ /dev/null
@@ -1,29 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-package com.cloud.upgrade;
-
-import org.junit.Ignore;
-import org.junit.runner.RunWith;
-import org.junit.runners.Suite;
-
-@RunWith(Suite.class)
-@Suite.SuiteClasses({ AdvanceZone217To224UpgradeTest.class, AdvanceZone223To224UpgradeTest.class, PortForwarding218To224UpgradeTest.class, InstanceGroup218To224UpgradeTest.class,
-        BasicZone218To224UpgradeTest.class, UsageEvents218To224UpgradeTest.class })
-@Ignore("maven-sure-fire discovered")
-public class DbUpgrade22Test {
-
-}

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/bf32776f/server/test/com/cloud/upgrade/HostCapacity218to22Test.java
----------------------------------------------------------------------
diff --git a/server/test/com/cloud/upgrade/HostCapacity218to22Test.java b/server/test/com/cloud/upgrade/HostCapacity218to22Test.java
deleted file mode 100644
index 76ad12e..0000000
--- a/server/test/com/cloud/upgrade/HostCapacity218to22Test.java
+++ /dev/null
@@ -1,66 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-package com.cloud.upgrade;
-
-import java.sql.SQLException;
-
-import javax.inject.Inject;
-
-import junit.framework.TestCase;
-
-import org.apache.log4j.Logger;
-import org.junit.After;
-import org.junit.Before;
-
-import com.cloud.upgrade.dao.VersionDaoImpl;
-
-import com.cloud.utils.db.DbTestUtils;
-
-public class HostCapacity218to22Test extends TestCase {
-    private static final Logger s_logger = Logger.getLogger(HostCapacity218to22Test.class);
-
-    @Inject VersionDaoImpl dao;
-    @Inject DatabaseUpgradeChecker checker;
-	
-    @Override
-    @Before
-    public void setUp() throws Exception {
-        DbTestUtils.executeScript("cleanup.sql", false, true);
-    }
-    
-    @Override
-    @After
-    public void tearDown() throws Exception {
-    }
-
-    public void test218to22Upgrade() throws SQLException {
-        s_logger.debug("Finding sample data from 2.1.8");
-        DbTestUtils.executeScript("fake.sql", false, true);
-        
-        String version = dao.getCurrentVersion();
-        
-        if (!version.equals("2.1.8")) {
-            s_logger.error("Version returned is not 2.1.8 but " + version);
-        } else {
-            s_logger.debug("Instance group test version is " + version);
-        }
-        
-        checker.upgrade("2.1.8", "2.2.4");
-        
-        // manually check into database for now to verify
-    }
-}

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/bf32776f/server/test/com/cloud/upgrade/InstanceGroup218To224UpgradeTest.java
----------------------------------------------------------------------
diff --git a/server/test/com/cloud/upgrade/InstanceGroup218To224UpgradeTest.java b/server/test/com/cloud/upgrade/InstanceGroup218To224UpgradeTest.java
deleted file mode 100644
index 41f334d..0000000
--- a/server/test/com/cloud/upgrade/InstanceGroup218To224UpgradeTest.java
+++ /dev/null
@@ -1,216 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-package com.cloud.upgrade;
-
-
-import java.sql.Connection;
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.util.ArrayList;
-
-import javax.inject.Inject;
-
-import junit.framework.TestCase;
-
-import org.apache.log4j.Logger;
-import org.junit.After;
-import org.junit.Before;
-
-import com.cloud.upgrade.dao.VersionDaoImpl;
-
-import com.cloud.utils.db.DbTestUtils;
-import com.cloud.utils.db.Transaction;
-
-public class InstanceGroup218To224UpgradeTest extends TestCase {
-    private static final Logger s_logger = Logger.getLogger(InstanceGroup218To224UpgradeTest.class);
-
-    @Inject VersionDaoImpl dao;
-    @Inject DatabaseUpgradeChecker checker;
-
-    @Override
-    @Before
-    public void setUp() throws Exception {
-        DbTestUtils.executeScript("cleanup.sql", false, true);
-    }
-    
-    @Override
-    @After
-    public void tearDown() throws Exception {
-    }
-    
-    public void test217to22Upgrade() throws SQLException {
-        s_logger.debug("Finding sample data from 2.1.8");
-        DbTestUtils.executeScript("fake.sql", false, true);
-        
-        PreparedStatement pstmt;
-        ResultSet rs;
-        
-        String version = dao.getCurrentVersion();
-        
-        if (!version.equals("2.1.8")) {
-            s_logger.error("Version returned is not 2.1.8 but " + version);
-        } else {
-            s_logger.debug("Instance group test version is " + version);
-        }
-        
-        Long groupNumberVmInstance = 0L;
-        ArrayList<Object[]> groups = new ArrayList<Object[]>();
-        Connection conn = Transaction.getStandaloneConnection();
-        ArrayList<Object[]> groupVmMaps = new ArrayList<Object[]>();
-        
-        try {
-            //Check that correct number of instance groups were created
-            pstmt = conn.prepareStatement("SELECT DISTINCT v.group, u.account_id from vm_instance v, user_vm u where v.group is not null and v.id=u.id");
-            s_logger.debug("Query is" + pstmt);
-            rs = pstmt.executeQuery();
-            
-            while (rs.next()) {
-                groupNumberVmInstance++;
-            }
-
-            rs.close();
-            pstmt.close();
-            //For each instance group from vm_instance table check that 1) entry was created in the instance_group table 2) vm to group map exists in instance_group_vm_map table
-            //Check 1)
-            pstmt = conn.prepareStatement("SELECT DISTINCT v.group, u.account_id from vm_instance v, user_vm u where v.group is not null and v.id=u.id");
-            s_logger.debug("Query is" + pstmt);
-            rs = pstmt.executeQuery();
-            while (rs.next()) {
-                Object[] group = new Object[10];
-                group[0] = rs.getString(1); // group name
-                group[1] = rs.getLong(2);  // accountId
-                groups.add(group);
-            }
-            rs.close();
-            pstmt.close();
-            
-           
-        } finally {
-            conn.close();
-        }
-        
-        checker.upgrade("2.1.8", "2.2.4");
-        
-        conn = Transaction.getStandaloneConnection();
-        try {
-            
-            s_logger.debug("Starting tesing upgrade from 2.1.8 to 2.2.4 for Instance groups...");
-            
-            //Version check
-            pstmt = conn.prepareStatement("SELECT version FROM version");
-            rs = pstmt.executeQuery();
-            
-            if (!rs.next()) {
-                s_logger.error("ERROR: No version selected");
-            } else if (!rs.getString(1).equals("2.2.4")) {
-                s_logger.error("ERROR: VERSION stored is not 2.2.4: " + rs.getString(1));
-            }
-            rs.close();
-            pstmt.close();
-            
-            pstmt = conn.prepareStatement("SELECT COUNT(*) FROM instance_group");
-            rs = pstmt.executeQuery();
-            
-            Long groupNumber = 0L;
-            if (rs.next()) {
-                groupNumber = rs.getLong(1);
-            }
-
-            rs.close();
-            pstmt.close();
-            
-            if (groupNumber != groupNumberVmInstance) {
-                s_logger.error("ERROR: instance groups were updated incorrectly. Have " + groupNumberVmInstance + " groups in vm_instance table, and " + groupNumber + " where created in instance_group table. Stopping the test");
-                System.exit(2);
-            }
-            
-            for (Object[] group : groups) {
-                String groupName = (String)group[0];
-                Long accountId = (Long)group[1];
-                if (!checkInstanceGroup(conn, groupName, accountId)) {
-                    s_logger.error("ERROR: Unable to find group with name " + groupName + " for account id=" + accountId + ", stopping the test");
-                    System.exit(2);
-                }
-            } 
-            
-            rs.close();
-            pstmt.close();
-            
-            //Check 2)
-//            pstmt = conn.prepareStatement("SELECT v.id from vm_instance v, instance_group g WHERE g.account_id=v.account_id and v.group=?");
-//            s_logger.debug("Query is" + pstmt);
-//            rs = pstmt.executeQuery();
-//            
-//            while (rs.next()) {
-//                Object[] groupMaps = new Object[10];
-//                groupMaps[0] = rs.getLong(1); // vmId
-//                groupMaps[1] = rs.getLong(2);  // groupId
-//                groupVmMaps.add(groupMaps);
-//            }
-//            rs.close();
-//            pstmt.close();
-//            
-//            for (Object[] groupMap : groupVmMaps) {
-//                Long groupId = (Long)groupMap[0];
-//                Long instanceId = (Long)groupMap[1];
-//                if (!checkInstanceGroupVmMap(conn, groupId, instanceId)) {
-//                    s_logger.error("ERROR: unable to find instanceGroupVMMap for vm id=" + instanceId + " and group id=" + groupId + ", stopping the test");
-//                    System.exit(2);
-//                }
-//            }  
-//            
-//            rs.close();
-//            pstmt.close();
-            
-            s_logger.debug("Instance group upgrade test is passed");
-            
-        } finally {
-            conn.close();
-        }
-    }
-    
-    protected boolean checkInstanceGroup(Connection conn, String groupName, long accountId) throws SQLException{
-        
-        PreparedStatement pstmt = conn.prepareStatement("SELECT * FROM  instance_group WHERE name = ? and account_id = ?");
-        pstmt.setString(1, groupName);
-        pstmt.setLong(2, accountId);
-        ResultSet rs = pstmt.executeQuery();
-        
-        if (!rs.next()) {
-            return false;
-        } else {
-            return true;
-        }
-    }
-    
-    protected boolean checkInstanceGroupVmMap(Connection conn, long groupId, long vmId) throws SQLException{
-        
-        PreparedStatement pstmt = conn.prepareStatement("SELECT * FROM  instance_group_vm_map WHERE group_id = ? and instance_id = ?");
-        pstmt.setLong(1, groupId);
-        pstmt.setLong(2, vmId);
-        ResultSet rs = pstmt.executeQuery();
-        
-        if (!rs.next()) {
-            return false;
-        } else {
-            return true;
-        }
-    }
-    
-}
-

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/bf32776f/server/test/com/cloud/upgrade/PortForwarding218To224UpgradeTest.java
----------------------------------------------------------------------
diff --git a/server/test/com/cloud/upgrade/PortForwarding218To224UpgradeTest.java b/server/test/com/cloud/upgrade/PortForwarding218To224UpgradeTest.java
deleted file mode 100644
index a9cb51f..0000000
--- a/server/test/com/cloud/upgrade/PortForwarding218To224UpgradeTest.java
+++ /dev/null
@@ -1,132 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-package com.cloud.upgrade;
-
-
-import java.sql.Connection;
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-
-import javax.inject.Inject;
-
-import junit.framework.TestCase;
-
-import org.apache.log4j.Logger;
-import org.junit.After;
-import org.junit.Before;
-
-import com.cloud.upgrade.dao.VersionDaoImpl;
-
-import com.cloud.utils.db.DbTestUtils;
-import com.cloud.utils.db.Transaction;
-
-public class PortForwarding218To224UpgradeTest extends TestCase {
-    private static final Logger s_logger = Logger.getLogger(PortForwarding218To224UpgradeTest.class);
-    
-    @Inject VersionDaoImpl dao;
-    @Inject DatabaseUpgradeChecker checker;
-
-    @Override
-    @Before
-    public void setUp() throws Exception {
-        DbTestUtils.executeScript("cleanup.sql", false, true);
-    }
-    
-    @Override
-    @After
-    public void tearDown() throws Exception {
-    }
-    
-    public void test217to22Upgrade() throws SQLException {
-        s_logger.debug("Finding sample data from 2.1.8");
-        DbTestUtils.executeScript("fake.sql", false, true);
-        
-        Connection conn;
-        PreparedStatement pstmt;
-        ResultSet rs;
-        
-        String version = dao.getCurrentVersion();
-        
-        if (!version.equals("2.1.8")) {
-            s_logger.error("Version returned is not 2.1.8 but " + version);
-        } else {
-            s_logger.debug("Port forwarding test version is " + version);
-        }
-       
-        
-        Long count21 = 0L;
-        conn = Transaction.getStandaloneConnection();
-        try {
-            //Check that correct number of port forwarding rules were created
-            pstmt = conn.prepareStatement("SELECT COUNT(*) FROM ip_forwarding WHERE forwarding=1");
-            rs = pstmt.executeQuery();
-            
-            while (rs.next()) {
-                count21 = rs.getLong(1);
-            }
-    
-            rs.close();
-            pstmt.close();
-        } finally {
-            conn.close();
-        }
-        
-        checker.upgrade("2.1.8", "2.2.4");
-        
-        conn = Transaction.getStandaloneConnection();
-        try {
-            s_logger.debug("Starting tesing upgrade from 2.1.8 to 2.2.4 for Port forwarding rules...");
-            
-            //Version check
-            pstmt = conn.prepareStatement("SELECT version FROM version");
-            rs = pstmt.executeQuery();
-            
-            if (!rs.next()) {
-                s_logger.error("ERROR: No version selected");
-            } else if (!rs.getString(1).equals("2.2.4")) {
-                s_logger.error("ERROR: VERSION stored is not 2.2.4: " + rs.getString(1));
-            }
-            rs.close();
-            pstmt.close();
-            
-            
-            Long count22 = 0L;
-            pstmt = conn.prepareStatement("SELECT COUNT(*) FROM port_forwarding_rules");
-            rs = pstmt.executeQuery();
-            
-            if (rs.next()) {
-                count22 = rs.getLong(1);
-            }
-
-            rs.close();
-            pstmt.close();
-            
-            if (count21.longValue() != count22.longValue()) {
-                s_logger.error("ERROR: port forwarding rules were updated incorrectly. Have " + count21 + " rulrs in ip_forwarding table branch 21, and " + count22 + " in port_forwarding_rules table branch 22. Stopping the test");
-                System.exit(2);
-            }
-            
-            s_logger.debug("Port forwarding rules test is passed");
-            
-        } finally {
-            conn.close();
-        }
-    }
-    
-}
-

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/bf32776f/server/test/com/cloud/upgrade/Sanity220To224UpgradeTest.java
----------------------------------------------------------------------
diff --git a/server/test/com/cloud/upgrade/Sanity220To224UpgradeTest.java b/server/test/com/cloud/upgrade/Sanity220To224UpgradeTest.java
deleted file mode 100644
index d33192f..0000000
--- a/server/test/com/cloud/upgrade/Sanity220To224UpgradeTest.java
+++ /dev/null
@@ -1,95 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-package com.cloud.upgrade;
-
-import java.sql.Connection;
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-
-import javax.inject.Inject;
-
-import junit.framework.TestCase;
-
-import org.apache.log4j.Logger;
-import org.junit.After;
-import org.junit.Before;
-
-import com.cloud.upgrade.dao.VersionDaoImpl;
-
-import com.cloud.utils.db.DbTestUtils;
-import com.cloud.utils.db.Transaction;
-
-public class Sanity220To224UpgradeTest extends TestCase {
-    private static final Logger s_logger = Logger.getLogger(Sanity220To224UpgradeTest.class);
-
-    @Inject VersionDaoImpl dao;
-    @Inject DatabaseUpgradeChecker checker;
-
-    @Override
-    @Before
-    public void setUp() throws Exception {
-        DbTestUtils.executeScript("cleanup.sql", false, true);
-    }
-
-    @Override
-    @After
-    public void tearDown() throws Exception {
-    }
-
-    public void test217to22Upgrade() throws SQLException {
-        s_logger.debug("Finding sample data from 2.2.1");
-        DbTestUtils.executeScript("fake.sql", false, true);
-
-        Connection conn;
-        PreparedStatement pstmt;
-        ResultSet rs;
-
-        String version = dao.getCurrentVersion();
-
-        if (!version.equals("2.2.1")) {
-            s_logger.error("Version returned is not 2.2.1 but " + version);
-        } else {
-            s_logger.debug("Sanity 2.2.1 to 2.2.4 test version is " + version);
-        }
-
-        checker.upgrade("2.2.1", "2.2.4");
-
-        conn = Transaction.getStandaloneConnection();
-        try {
-            s_logger.debug("Starting tesing upgrade from 2.2.1 to 2.2.4...");
-
-            // Version check
-            pstmt = conn.prepareStatement("SELECT version FROM version");
-            rs = pstmt.executeQuery();
-
-            if (!rs.next()) {
-                s_logger.error("ERROR: No version selected");
-            } else if (!rs.getString(1).equals("2.2.4")) {
-                s_logger.error("ERROR: VERSION stored is not 2.2.4: " + rs.getString(1));
-            }
-            rs.close();
-            pstmt.close();
-
-            s_logger.debug("Sanity 2.2.1 to 2.2.4 DB upgrade test passed");
-
-        } finally {
-            conn.close();
-        }
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/bf32776f/server/test/com/cloud/upgrade/Sanity222To224UpgradeTest.java
----------------------------------------------------------------------
diff --git a/server/test/com/cloud/upgrade/Sanity222To224UpgradeTest.java b/server/test/com/cloud/upgrade/Sanity222To224UpgradeTest.java
deleted file mode 100644
index 108eca9..0000000
--- a/server/test/com/cloud/upgrade/Sanity222To224UpgradeTest.java
+++ /dev/null
@@ -1,96 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-package com.cloud.upgrade;
-
-import java.sql.Connection;
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-
-import javax.inject.Inject;
-
-import junit.framework.TestCase;
-
-import org.apache.log4j.Logger;
-import org.junit.After;
-import org.junit.Before;
-
-import com.cloud.upgrade.dao.VersionDaoImpl;
-
-import com.cloud.utils.db.DbTestUtils;
-import com.cloud.utils.db.Transaction;
-
-public class Sanity222To224UpgradeTest extends TestCase {
-    private static final Logger s_logger = Logger.getLogger(Sanity222To224UpgradeTest.class);
-
-    @Inject VersionDaoImpl dao;
-    @Inject DatabaseUpgradeChecker checker;
-
-    @Override
-    @Before
-    public void setUp() throws Exception {
-        DbTestUtils.executeScript("cleanup.sql", false, true);
-    }
-
-    @Override
-    @After
-    public void tearDown() throws Exception {
-    }
-
-    public void test222to224Upgrade() throws SQLException {
-        s_logger.debug("Finding sample data from 2.2.2");
-        DbTestUtils.executeScript("fake.sql", false, true);
-
-        Connection conn;
-        PreparedStatement pstmt;
-        ResultSet rs;
-
-
-        String version = dao.getCurrentVersion();
-
-        if (!version.equals("2.2.2")) {
-            s_logger.error("Version returned is not 2.2.2 but " + version);
-        } else {
-            s_logger.debug("Sanity 2.2.2 to 2.2.4 test version is " + version);
-        }
-
-        checker.upgrade("2.2.2", "2.2.4");
-
-        conn = Transaction.getStandaloneConnection();
-        try {
-            s_logger.debug("Starting tesing upgrade from 2.2.2 to 2.2.4...");
-
-            // Version check
-            pstmt = conn.prepareStatement("SELECT version FROM version");
-            rs = pstmt.executeQuery();
-
-            if (!rs.next()) {
-                s_logger.error("ERROR: No version selected");
-            } else if (!rs.getString(1).equals("2.2.4")) {
-                s_logger.error("ERROR: VERSION stored is not 2.2.4: " + rs.getString(1));
-            }
-            rs.close();
-            pstmt.close();
-
-            s_logger.debug("Sanity 2.2.2 to 2.2.4 DB upgrade test passed");
-
-        } finally {
-            conn.close();
-        }
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/bf32776f/server/test/com/cloud/upgrade/Sanity223To225UpgradeTest.java
----------------------------------------------------------------------
diff --git a/server/test/com/cloud/upgrade/Sanity223To225UpgradeTest.java b/server/test/com/cloud/upgrade/Sanity223To225UpgradeTest.java
deleted file mode 100644
index fd0b219..0000000
--- a/server/test/com/cloud/upgrade/Sanity223To225UpgradeTest.java
+++ /dev/null
@@ -1,94 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-package com.cloud.upgrade;
-
-import java.sql.Connection;
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-
-import javax.inject.Inject;
-
-import junit.framework.TestCase;
-
-import org.apache.log4j.Logger;
-import org.junit.After;
-import org.junit.Before;
-
-import com.cloud.upgrade.dao.VersionDaoImpl;
-
-import com.cloud.utils.db.Transaction;
-
-public class Sanity223To225UpgradeTest extends TestCase {
-    private static final Logger s_logger = Logger.getLogger(Sanity223To225UpgradeTest.class);
-
-    @Inject VersionDaoImpl dao;
-    @Inject DatabaseUpgradeChecker checker;
-
-    @Override
-    @Before
-    public void setUp() throws Exception {
-        //DbTestUtils.executeScript("PreviousDatabaseSchema/clean-db.sql", false, true);
-    }
-
-    @Override
-    @After
-    public void tearDown() throws Exception {
-    }
-
-    public void test224to225Upgrade() throws SQLException {
-        s_logger.debug("Finding sample data from 2.2.3");
-        //DbTestUtils.executeScript("/home/alena/Downloads/mac/160511preprod.bak", false, true);
-
-        Connection conn;
-        PreparedStatement pstmt;
-        ResultSet rs;
-
-        String version = dao.getCurrentVersion();
-
-        if (!version.equals("2.2.3")) {
-            s_logger.error("Version returned is not 2.2.3 but " + version);
-        } else {
-            s_logger.debug("Sanity 2.2.3 to 2.2.5 test version is " + version);
-        }
-
-        checker.upgrade("2.2.3", "2.2.5");
-
-        conn = Transaction.getStandaloneConnection();
-        try {
-            s_logger.debug("Starting tesing upgrade from 2.2.3 to 2.2.5...");
-
-            // Version check
-            pstmt = conn.prepareStatement("SELECT version FROM version");
-            rs = pstmt.executeQuery();
-
-            if (!rs.next()) {
-                s_logger.error("ERROR: No version selected");
-            } else if (!rs.getString(1).equals("2.2.5")) {
-                s_logger.error("ERROR: VERSION stored is not 2.2.5: " + rs.getString(1));
-            }
-            rs.close();
-            pstmt.close();
-
-            s_logger.debug("Sanity 2.2.3 to 2.2.5 DB upgrade test passed");
-
-        } finally {
-            conn.close();
-        }
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/bf32776f/server/test/com/cloud/upgrade/Sanity224To225UpgradeTest.java
----------------------------------------------------------------------
diff --git a/server/test/com/cloud/upgrade/Sanity224To225UpgradeTest.java b/server/test/com/cloud/upgrade/Sanity224To225UpgradeTest.java
deleted file mode 100644
index 775a62e..0000000
--- a/server/test/com/cloud/upgrade/Sanity224To225UpgradeTest.java
+++ /dev/null
@@ -1,95 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-package com.cloud.upgrade;
-
-import java.sql.Connection;
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-
-import javax.inject.Inject;
-
-import junit.framework.TestCase;
-
-import org.apache.log4j.Logger;
-import org.junit.After;
-import org.junit.Before;
-
-import com.cloud.upgrade.dao.VersionDaoImpl;
-
-import com.cloud.utils.db.DbTestUtils;
-import com.cloud.utils.db.Transaction;
-
-public class Sanity224To225UpgradeTest extends TestCase {
-    private static final Logger s_logger = Logger.getLogger(Sanity224To225UpgradeTest.class);
-
-    @Inject VersionDaoImpl dao;
-    @Inject DatabaseUpgradeChecker checker;
-
-    @Override
-    @Before
-    public void setUp() throws Exception {
-        DbTestUtils.executeScript("cleanup.sql", false, true);
-    }
-
-    @Override
-    @After
-    public void tearDown() throws Exception {
-    }
-
-    public void test224to225Upgrade() throws SQLException {
-        s_logger.debug("Finding sample data from 2.2.4");
-        DbTestUtils.executeScript("fake.sql", false, true);
-
-        Connection conn;
-        PreparedStatement pstmt;
-        ResultSet rs;
-
-        String version = dao.getCurrentVersion();
-
-        if (!version.equals("2.2.4")) {
-            s_logger.error("Version returned is not 2.2.4 but " + version);
-        } else {
-            s_logger.debug("Sanity 2.2.4 to 2.2.5 test version is " + version);
-        }
-
-        checker.upgrade("2.2.4", "2.2.5");
-
-        conn = Transaction.getStandaloneConnection();
-        try {
-            s_logger.debug("Starting tesing upgrade from 2.2.4 to 2.2.5...");
-
-            // Version check
-            pstmt = conn.prepareStatement("SELECT version FROM version");
-            rs = pstmt.executeQuery();
-
-            if (!rs.next()) {
-                s_logger.error("ERROR: No version selected");
-            } else if (!rs.getString(1).equals("2.2.5")) {
-                s_logger.error("ERROR: VERSION stored is not 2.2.5: " + rs.getString(1));
-            }
-            rs.close();
-            pstmt.close();
-
-            s_logger.debug("Sanity 2.2.4 to 2.2.5 DB upgrade test passed");
-
-        } finally {
-            conn.close();
-        }
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/bf32776f/server/test/com/cloud/upgrade/Template2214To30UpgradeTest.java
----------------------------------------------------------------------
diff --git a/server/test/com/cloud/upgrade/Template2214To30UpgradeTest.java b/server/test/com/cloud/upgrade/Template2214To30UpgradeTest.java
deleted file mode 100644
index 06835b5..0000000
--- a/server/test/com/cloud/upgrade/Template2214To30UpgradeTest.java
+++ /dev/null
@@ -1,123 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-package com.cloud.upgrade;
-
-import java.sql.Connection;
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.inject.Inject;
-
-import junit.framework.TestCase;
-
-import org.apache.log4j.Logger;
-import org.junit.After;
-import org.junit.Before;
-
-
-import com.cloud.utils.db.DbTestUtils;
-import com.cloud.utils.db.Transaction;
-import com.cloud.utils.exception.CloudRuntimeException;
-
-public class Template2214To30UpgradeTest extends TestCase {
-    private static final Logger s_logger = Logger
-            .getLogger(Template2214To30UpgradeTest.class);
-    @Inject DatabaseUpgradeChecker checker;
-
-    @Override
-    @Before
-    public void setUp() throws Exception {
-        DbTestUtils.executeScript("cleanup.sql", false,
-                true);
-    }
-
-    @Override
-    @After
-    public void tearDown() throws Exception {
-    }
-
-    public void test2214to30Upgrade() throws SQLException {
-        s_logger.debug("Finding sample data from 2.2.14");
-        DbTestUtils.executeScript(
-                "fake.sql", false,
-                true);
-
-
-        checker.upgrade("2.2.14", "3.0.0");
-
-        Connection conn = Transaction.getStandaloneConnection();
-
-        try {
-            checkSystemVm(conn);
-        } finally {
-            try {
-                conn.close();
-            } catch (SQLException e) {
-            }
-        }
-    }
-
-    protected void checkSystemVm(Connection conn) throws SQLException {
-        PreparedStatement pstmt;
-
-        pstmt = conn
-                .prepareStatement("SELECT version FROM `cloud`.`version` ORDER BY id DESC LIMIT 1");
-        ResultSet rs = pstmt.executeQuery();
-        assert rs.next() : "No version selected";
-        assert rs.getString(1).equals("3.0.0") : "VERSION stored is not 3.0.0: "
-                + rs.getString(1);
-        rs.close();
-        pstmt.close();
-
-        pstmt = conn.prepareStatement("select id from vm_template where name='systemvm-xenserver-3.0.0' and removed is null");
-        rs = pstmt.executeQuery();
-        long templateId1 = rs.getLong(1);
-        rs.close();
-        pstmt.close();
-        
-        pstmt = conn.prepareStatement("select distinct(vm_template_id) from vm_instance where type <> 'USER' and hypervisor_type = 'XenServer'");
-        rs = pstmt.executeQuery();
-        long templateId = rs.getLong(1);
-        rs.close();
-        pstmt.close();
-
-        assert (templateId ==  templateId1) : "XenServer System Vms not using 3.0.0 template";
-        rs.close();
-        pstmt.close();
-        
-        pstmt = conn.prepareStatement("select id from vm_template where name='systemvm-kvm-3.0.0' and removed is null");
-        rs = pstmt.executeQuery();
-        long templateId3 = rs.getLong(1);
-        rs.close();
-        pstmt.close();
-        
-        pstmt = conn.prepareStatement("select distinct(vm_template_id) from vm_instance where type <> 'USER' and hypervisor_type = 'KVM'");
-        rs = pstmt.executeQuery();
-        long templateId4 = rs.getLong(1);
-        rs.close();
-        pstmt.close();
-
-        assert (templateId3 ==  templateId4) : "KVM System Vms not using 3.0.0 template";
-        rs.close();
-        pstmt.close();
-
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/bf32776f/server/test/com/cloud/upgrade/Test2214To30DBUpgrade.java
----------------------------------------------------------------------
diff --git a/server/test/com/cloud/upgrade/Test2214To30DBUpgrade.java b/server/test/com/cloud/upgrade/Test2214To30DBUpgrade.java
deleted file mode 100644
index ff44803..0000000
--- a/server/test/com/cloud/upgrade/Test2214To30DBUpgrade.java
+++ /dev/null
@@ -1,199 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-package com.cloud.upgrade;
-
-import java.sql.Connection;
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.inject.Inject;
-
-import junit.framework.TestCase;
-
-import org.apache.log4j.Logger;
-import org.junit.After;
-import org.junit.Before;
-
-
-import com.cloud.utils.db.DbTestUtils;
-import com.cloud.utils.db.Transaction;
-import com.cloud.utils.exception.CloudRuntimeException;
-
-
-public class Test2214To30DBUpgrade extends TestCase {
-    private static final Logger s_logger = Logger
-            .getLogger(Test2214To30DBUpgrade.class);
-
-    @Inject DatabaseUpgradeChecker checker;
-    
-    @Override
-    @Before
-    public void setUp() throws Exception {
-        DbTestUtils.executeScript("cleanup.sql", false,
-                true);
-    }
-
-    @Override
-    @After
-    public void tearDown() throws Exception {
-    }
-
-    public void test2214to30Upgrade() throws SQLException {
-        s_logger.debug("Finding sample data from 2.2.14");
-        DbTestUtils.executeScript(
-                "fake.sql", false,
-                true);
-
-        checker.upgrade("2.2.14", "3.0.0");
-
-        Connection conn = Transaction.getStandaloneConnection();
-
-        try {
-            checkPhysicalNetworks(conn);
-            checkNetworkOfferings(conn);
-            checkNetworks(conn);
-        } finally {
-            try {
-                conn.close();
-            } catch (SQLException e) {
-            }
-        }
-    }
-
-    protected void checkPhysicalNetworks(Connection conn) throws SQLException {
-        PreparedStatement pstmt;
-
-        pstmt = conn
-                .prepareStatement("SELECT version FROM `cloud`.`version` ORDER BY id DESC LIMIT 1");
-        ResultSet rs = pstmt.executeQuery();
-        assert rs.next() : "No version selected";
-        assert rs.getString(1).equals("3.0.0") : "VERSION stored is not 3.0.0: "
-                + rs.getString(1);
-        rs.close();
-        pstmt.close();
-
-        pstmt = conn.prepareStatement("SELECT COUNT(*) FROM `cloud`.`physical_network`");
-        rs = pstmt.executeQuery();
-        assert rs.next() : "No physical networks setup.";
-        rs.close();
-        pstmt.close();
-
-    }
-
-    protected void checkNetworkOfferings(Connection conn) throws SQLException {
-        // 1) verify that all fields are present
-        List<String> fields = new ArrayList<String>();
-        fields.add("id");
-        fields.add("name");
-        fields.add("unique_name");
-        fields.add("display_text");
-        fields.add("nw_rate");
-        fields.add("mc_rate");
-        fields.add("traffic_type");
-        fields.add("specify_vlan");
-        fields.add("system_only");
-        fields.add("service_offering_id");
-        fields.add("tags");
-        fields.add("default");
-        fields.add("availability");
-        fields.add("state");
-        fields.add("removed");
-        fields.add("created");
-        fields.add("guest_type");
-        fields.add("dedicated_lb_service");
-        fields.add("shared_source_nat_service");
-        fields.add("specify_ip_ranges");
-        fields.add("sort_key");
-        fields.add("uuid");
-        fields.add("redundant_router_service");
-        fields.add("conserve_mode");
-        fields.add("elastic_ip_service");
-        fields.add("elastic_lb_service");
-
-        PreparedStatement pstmt;
-        for (String field : fields) {
-            pstmt = conn
-                    .prepareStatement("SHOW COLUMNS FROM `cloud`.`network_offerings` LIKE ?");
-            pstmt.setString(1, field);
-            ResultSet rs = pstmt.executeQuery();
-            if (!rs.next()) {
-                throw new CloudRuntimeException("Field " + field
-                        + " is missing in upgraded network_offerings table");
-            }
-            rs.close();
-            pstmt.close();
-
-        }
-
-        // 2) compare default network offerings
-    }
-
-    protected void checkNetworks(Connection conn) throws SQLException {
-
-        // 1) verify that all fields are present
-        List<String> fields = new ArrayList<String>();
-        fields.add("id");
-        fields.add("name");
-
-        fields.add("mode");
-        fields.add("broadcast_domain_type");
-        fields.add("traffic_type");
-        fields.add("display_text");
-        fields.add("broadcast_uri");
-        fields.add("gateway");
-        fields.add("cidr");
-        fields.add("network_offering_id");
-        fields.add("physical_network_id");
-        fields.add("data_center_id");
-        fields.add("related");
-        fields.add("guru_name");
-        fields.add("state");
-        fields.add("dns1");
-        fields.add("domain_id");
-        fields.add("account_id");
-        fields.add("set_fields");
-        fields.add("guru_data");
-        fields.add("dns2");
-        fields.add("network_domain");
-        fields.add("created");
-        fields.add("removed");
-        fields.add("reservation_id");
-        fields.add("uuid");
-        fields.add("guest_type");
-        fields.add("restart_required");
-        fields.add("specify_ip_ranges");
-        fields.add("acl_type");
-
-        PreparedStatement pstmt;
-        for (String field : fields) {
-            pstmt = conn.prepareStatement("SHOW COLUMNS FROM `cloud`.`networks` LIKE ?");
-            pstmt.setString(1, field);
-            ResultSet rs = pstmt.executeQuery();
-            if (!rs.next()) {
-                throw new CloudRuntimeException("Field " + field
-                        + " is missing in upgraded networks table");
-            }
-            rs.close();
-            pstmt.close();
-
-        }
-
-    }
-}


[16/50] [abbrv] git commit: updated refs/heads/ldapplugin to 7bc705e

Posted by ch...@apache.org.
CLOUDSTACK-3563: UI > Network menu > Guest Network section > search box in listView was shoved out of original place after new button "Add guest network" was added. Fix it by shorten label of "Add Isolated guest network with SourceNAT" button.


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

Branch: refs/heads/ldapplugin
Commit: af921c4fee52354603b75a1d273ec89ebf2121a5
Parents: be0dede
Author: Jessica Wang <je...@apache.org>
Authored: Tue Jul 16 13:51:54 2013 -0700
Committer: Jessica Wang <je...@apache.org>
Committed: Tue Jul 16 13:51:54 2013 -0700

----------------------------------------------------------------------
 ui/scripts/network.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/af921c4f/ui/scripts/network.js
----------------------------------------------------------------------
diff --git a/ui/scripts/network.js b/ui/scripts/network.js
index 0822d44..95a93bc 100755
--- a/ui/scripts/network.js
+++ b/ui/scripts/network.js
@@ -327,7 +327,7 @@
         listView: {
           actions: {
             add: { 
-              label: 'Add Isolated Guest Network with SourceNat',
+              label: 'Add Isolated Network',
 
               preFilter: function(args) { 
                 if(advZoneObjs != null && advZoneObjs.length > 0) {


[08/50] [abbrv] UserContext switched to CallContext. Added generic storage mechanism for other code to carry information throughout a call. Made the calling User and Account a must have. Added an interface to carry entities in error. Fixed up the cod

Posted by ch...@apache.org.
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/server/src/com/cloud/api/ApiDispatcher.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/api/ApiDispatcher.java b/server/src/com/cloud/api/ApiDispatcher.java
index b886256..c0b3117 100755
--- a/server/src/com/cloud/api/ApiDispatcher.java
+++ b/server/src/com/cloud/api/ApiDispatcher.java
@@ -33,6 +33,9 @@ import java.util.regex.Matcher;
 import javax.annotation.PostConstruct;
 import javax.inject.Inject;
 
+import org.apache.log4j.Logger;
+import org.springframework.stereotype.Component;
+
 import org.apache.cloudstack.acl.ControlledEntity;
 import org.apache.cloudstack.acl.InfrastructureEntity;
 import org.apache.cloudstack.acl.SecurityChecker.AccessType;
@@ -51,19 +54,16 @@ import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.Validate;
 import org.apache.cloudstack.api.command.admin.resource.ArchiveAlertsCmd;
 import org.apache.cloudstack.api.command.admin.resource.DeleteAlertsCmd;
-import org.apache.cloudstack.api.command.admin.resource.ListAlertsCmd;
 import org.apache.cloudstack.api.command.user.event.ArchiveEventsCmd;
 import org.apache.cloudstack.api.command.user.event.DeleteEventsCmd;
 import org.apache.cloudstack.api.command.user.event.ListEventsCmd;
-import org.apache.log4j.Logger;
-import org.springframework.stereotype.Component;
+import org.apache.cloudstack.context.CallContext;
 
 import com.cloud.async.AsyncJobManager;
 import com.cloud.dao.EntityManager;
 import com.cloud.exception.InvalidParameterValueException;
 import com.cloud.user.Account;
 import com.cloud.user.AccountManager;
-import com.cloud.user.UserContext;
 import com.cloud.utils.DateUtil;
 import com.cloud.utils.ReflectUtil;
 import com.cloud.utils.exception.CSExceptionErrorCode;
@@ -74,9 +74,12 @@ public class ApiDispatcher {
     private static final Logger s_logger = Logger.getLogger(ApiDispatcher.class.getName());
 
     Long _createSnapshotQueueSizeLimit;
-    @Inject AsyncJobManager _asyncMgr = null;
-    @Inject AccountManager _accountMgr = null;
-    @Inject EntityManager _entityMgr = null;
+    @Inject
+    AsyncJobManager _asyncMgr = null;
+    @Inject
+    AccountManager _accountMgr = null;
+    @Inject
+    EntityManager _entityMgr = null;
 
     private static ApiDispatcher s_instance;
 
@@ -89,7 +92,7 @@ public class ApiDispatcher {
 
     @PostConstruct
     void init() {
-    	s_instance = this;
+        s_instance = this;
     }
 
     public void setCreateSnapshotQueueSizeLimit(Long snapshotLimit) {
@@ -99,27 +102,25 @@ public class ApiDispatcher {
     public void dispatchCreateCmd(BaseAsyncCreateCmd cmd, Map<String, String> params) throws Exception {
         processParameters(cmd, params);
 
-            UserContext ctx = UserContext.current();
-            ctx.setAccountId(cmd.getEntityOwnerId());
-            cmd.create();
+        cmd.create();
 
     }
 
     private void doAccessChecks(BaseCmd cmd, Map<Object, AccessType> entitiesToAccess) {
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
         Account owner = _accountMgr.getActiveAccountById(cmd.getEntityOwnerId());
 
-        if(cmd instanceof BaseAsyncCreateCmd) {
+        if (cmd instanceof BaseAsyncCreateCmd) {
             //check that caller can access the owner account.
             _accountMgr.checkAccess(caller, null, true, owner);
         }
 
-        if(!entitiesToAccess.isEmpty()){
+        if (!entitiesToAccess.isEmpty()) {
             //check that caller can access the owner account.
             _accountMgr.checkAccess(caller, null, true, owner);
             for (Object entity : entitiesToAccess.keySet()) {
                 if (entity instanceof ControlledEntity) {
-                    _accountMgr.checkAccess(caller, entitiesToAccess.get(entity), true, (ControlledEntity) entity);
+                    _accountMgr.checkAccess(caller, entitiesToAccess.get(entity), true, (ControlledEntity)entity);
                 }
                 else if (entity instanceof InfrastructureEntity) {
                     //FIXME: Move this code in adapter, remove code from Account manager
@@ -129,37 +130,36 @@ public class ApiDispatcher {
     }
 
     public void dispatch(BaseCmd cmd, Map<String, String> params) throws Exception {
-            processParameters(cmd, params);
-            UserContext ctx = UserContext.current();
-            ctx.setAccountId(cmd.getEntityOwnerId());
-            
-            if (cmd instanceof BaseAsyncCmd) {
-
-                BaseAsyncCmd asyncCmd = (BaseAsyncCmd) cmd;
-                String startEventId = params.get("ctxStartEventId");
-                ctx.setStartEventId(Long.valueOf(startEventId));
-
-                // Synchronise job on the object if needed
-                if (asyncCmd.getJob() != null && asyncCmd.getSyncObjId() != null && asyncCmd.getSyncObjType() != null) {
-                    Long queueSizeLimit = null;
-                    if (asyncCmd.getSyncObjType() != null && asyncCmd.getSyncObjType().equalsIgnoreCase(BaseAsyncCmd.snapshotHostSyncObject)) {
-                        queueSizeLimit = _createSnapshotQueueSizeLimit;
-                    } else {
-                        queueSizeLimit = 1L;
-                    }
+        processParameters(cmd, params);
+        CallContext ctx = CallContext.current();
+
+        if (cmd instanceof BaseAsyncCmd) {
+
+            BaseAsyncCmd asyncCmd = (BaseAsyncCmd)cmd;
+            String startEventId = params.get("ctxStartEventId");
+            ctx.setStartEventId(Long.valueOf(startEventId));
 
-                    if (queueSizeLimit != null) {
+            // Synchronise job on the object if needed
+            if (asyncCmd.getJob() != null && asyncCmd.getSyncObjId() != null && asyncCmd.getSyncObjType() != null) {
+                Long queueSizeLimit = null;
+                if (asyncCmd.getSyncObjType() != null && asyncCmd.getSyncObjType().equalsIgnoreCase(BaseAsyncCmd.snapshotHostSyncObject)) {
+                    queueSizeLimit = _createSnapshotQueueSizeLimit;
+                } else {
+                    queueSizeLimit = 1L;
+                }
+
+                if (queueSizeLimit != null) {
                     _asyncMgr.syncAsyncJobExecution(asyncCmd.getJob(), asyncCmd.getSyncObjType(), asyncCmd.getSyncObjId().longValue(), queueSizeLimit);
-                    } else {
-                        s_logger.trace("The queue size is unlimited, skipping the synchronizing");
-                    }
+                } else {
+                    s_logger.trace("The queue size is unlimited, skipping the synchronizing");
                 }
             }
-            cmd.execute();
+        }
+        cmd.execute();
 
     }
 
-    @SuppressWarnings({ "unchecked", "rawtypes" })
+    @SuppressWarnings({"unchecked", "rawtypes"})
     public static void processParameters(BaseCmd cmd, Map<String, String> params) {
         Map<Object, AccessType> entitiesToAccess = new HashMap<Object, AccessType>();
         Map<String, Object> unpackedParams = cmd.unpackParams(params);
@@ -168,7 +168,7 @@ public class ApiDispatcher {
             Object pageSizeObj = unpackedParams.get(ApiConstants.PAGE_SIZE);
             Long pageSize = null;
             if (pageSizeObj != null) {
-                pageSize = Long.valueOf((String) pageSizeObj);
+                pageSize = Long.valueOf((String)pageSizeObj);
             }
 
             if ((unpackedParams.get(ApiConstants.PAGE) == null) && (pageSize != null && !pageSize.equals(BaseListCmd.PAGESIZE_UNLIMITED))) {
@@ -193,7 +193,8 @@ public class ApiDispatcher {
             Object paramObj = unpackedParams.get(parameterAnnotation.name());
             if (paramObj == null) {
                 if (parameterAnnotation.required()) {
-                    throw new ServerApiException(ApiErrorCode.PARAM_ERROR, "Unable to execute API command " + cmd.getCommandName().substring(0, cmd.getCommandName().length() - 8) + " due to missing parameter "
+                    throw new ServerApiException(ApiErrorCode.PARAM_ERROR, "Unable to execute API command " + cmd.getCommandName().substring(0, cmd.getCommandName().length() - 8)
+                            + " due to missing parameter "
                             + parameterAnnotation.name());
                 }
                 continue;
@@ -206,24 +207,28 @@ public class ApiDispatcher {
                 if (s_logger.isDebugEnabled()) {
                     s_logger.debug("Unable to execute API command " + cmd.getCommandName() + " due to invalid value " + paramObj + " for parameter " + parameterAnnotation.name());
                 }
-                throw new ServerApiException(ApiErrorCode.PARAM_ERROR, "Unable to execute API command " + cmd.getCommandName().substring(0, cmd.getCommandName().length() - 8) + " due to invalid value " + paramObj
+                throw new ServerApiException(ApiErrorCode.PARAM_ERROR, "Unable to execute API command " + cmd.getCommandName().substring(0, cmd.getCommandName().length() - 8)
+                        + " due to invalid value " + paramObj
                         + " for parameter "
                         + parameterAnnotation.name());
             } catch (ParseException parseEx) {
                 if (s_logger.isDebugEnabled()) {
                     s_logger.debug("Invalid date parameter " + paramObj + " passed to command " + cmd.getCommandName().substring(0, cmd.getCommandName().length() - 8));
                 }
-                throw new ServerApiException(ApiErrorCode.PARAM_ERROR, "Unable to parse date " + paramObj + " for command " + cmd.getCommandName().substring(0, cmd.getCommandName().length() - 8)
+                throw new ServerApiException(ApiErrorCode.PARAM_ERROR, "Unable to parse date " + paramObj + " for command "
+                        + cmd.getCommandName().substring(0, cmd.getCommandName().length() - 8)
                         + ", please pass dates in the format mentioned in the api documentation");
             } catch (InvalidParameterValueException invEx) {
-                throw new ServerApiException(ApiErrorCode.PARAM_ERROR, "Unable to execute API command " + cmd.getCommandName().substring(0, cmd.getCommandName().length() - 8) + " due to invalid value. " + invEx.getMessage());
+                throw new ServerApiException(ApiErrorCode.PARAM_ERROR, "Unable to execute API command " + cmd.getCommandName().substring(0, cmd.getCommandName().length() - 8)
+                        + " due to invalid value. " + invEx.getMessage());
             } catch (CloudRuntimeException cloudEx) {
-            	s_logger.error("CloudRuntimeException", cloudEx);
+                s_logger.error("CloudRuntimeException", cloudEx);
                 // FIXME: Better error message? This only happens if the API command is not executable, which typically
                 //means
                 // there was
                 // and IllegalAccessException setting one of the parameters.
-                throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Internal error executing API command " + cmd.getCommandName().substring(0, cmd.getCommandName().length() - 8));
+                throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Internal error executing API command "
+                        + cmd.getCommandName().substring(0, cmd.getCommandName().length() - 8));
             }
 
             //check access on the resource this field points to
@@ -252,30 +257,30 @@ public class ApiDispatcher {
                                 switch (listType) {
                                 case LONG:
                                 case UUID:
-                                    List<Long> listParam = (List<Long>) field.get(cmd);
+                                    List<Long> listParam = (List<Long>)field.get(cmd);
                                     for (Long entityId : listParam) {
                                         Object entityObj = s_instance._entityMgr.findById(entity, entityId);
                                         entitiesToAccess.put(entityObj, checkAccess.accessType());
                                     }
                                     break;
-                                    /*
-                                     * case STRING: List<String> listParam =
-                                     * new ArrayList<String>(); listParam =
-                                     * (List)field.get(cmd); for(String
-                                     * entityName: listParam){
-                                     * ControlledEntity entityObj =
-                                     * (ControlledEntity
-                                     * )daoClassInstance(entityId);
-                                     * entitiesToAccess.add(entityObj); }
-                                     * break;
-                                     */
+                                /*
+                                 * case STRING: List<String> listParam =
+                                 * new ArrayList<String>(); listParam =
+                                 * (List)field.get(cmd); for(String
+                                 * entityName: listParam){
+                                 * ControlledEntity entityObj =
+                                 * (ControlledEntity
+                                 * )daoClassInstance(entityId);
+                                 * entitiesToAccess.add(entityObj); }
+                                 * break;
+                                 */
                                 default:
                                     break;
                                 }
                                 break;
                             case LONG:
                             case UUID:
-                                Object entityObj = s_instance._entityMgr.findById(entity, (Long) field.get(cmd));
+                                Object entityObj = s_instance._entityMgr.findById(entity, (Long)field.get(cmd));
                                 entitiesToAccess.put(entityObj, checkAccess.accessType());
                                 break;
                             default:
@@ -333,7 +338,7 @@ public class ApiDispatcher {
         if (isPre3x && !isUuid) {
             try {
                 internalId = Long.parseLong(uuid);
-            } catch(NumberFormatException e) {
+            } catch (NumberFormatException e) {
                 internalId = null;
             }
             if (internalId != null)
@@ -344,7 +349,7 @@ public class ApiDispatcher {
         Class<?>[] entities = annotation.entityType()[0].getAnnotation(EntityReference.class).value();
         // Go through each entity which is an interface to a VO class and get a VO object
         // Try to getId() for the object using reflection, break on first non-null value
-        for (Class<?> entity: entities) {
+        for (Class<?> entity : entities) {
             // For backward compatibility, we search within removed entities and let service layer deal
             // with removed ones, return empty response or error
             Object objVO = s_instance._entityMgr.findByUuidIncludingRemoved(entity, uuid);
@@ -366,12 +371,12 @@ public class ApiDispatcher {
             if (s_logger.isDebugEnabled())
                 s_logger.debug("Object entity uuid = " + uuid + " does not exist in the database.");
             throw new InvalidParameterValueException("Invalid parameter " + annotation.name() + " value=" + uuid
-                + " due to incorrect long value format, or entity does not exist or due to incorrect parameter annotation for the field in api cmd class.");
+                    + " due to incorrect long value format, or entity does not exist or due to incorrect parameter annotation for the field in api cmd class.");
         }
         return internalId;
     }
 
-    @SuppressWarnings({ "unchecked", "rawtypes" })
+    @SuppressWarnings({"unchecked", "rawtypes"})
     private static void setFieldValue(Field field, BaseCmd cmdObj, Object paramObj, Parameter annotation) throws IllegalArgumentException, ParseException {
         try {
             field.setAccessible(true);
@@ -387,8 +392,7 @@ public class ApiDispatcher {
                 if (cmdObj instanceof ListEventsCmd || cmdObj instanceof DeleteEventsCmd
                         || cmdObj instanceof ArchiveEventsCmd
                         || cmdObj instanceof ArchiveAlertsCmd
-                        || cmdObj instanceof DeleteAlertsCmd
-                        ) {
+                        || cmdObj instanceof DeleteAlertsCmd) {
                     boolean isObjInNewDateFormat = isObjInNewDateFormat(paramObj.toString());
                     if (isObjInNewDateFormat) {
                         DateFormat newFormat = BaseCmd.NEW_INPUT_FORMAT;
@@ -450,7 +454,7 @@ public class ApiDispatcher {
                     case LONG: {
                         listParam.add(Long.valueOf(token));
                     }
-                    break;
+                        break;
                     case SHORT:
                         listParam.add(Short.valueOf(token));
                     case STRING:

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/server/src/com/cloud/api/ApiResponseHelper.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/api/ApiResponseHelper.java b/server/src/com/cloud/api/ApiResponseHelper.java
index 090d9c2..a1e2106 100755
--- a/server/src/com/cloud/api/ApiResponseHelper.java
+++ b/server/src/com/cloud/api/ApiResponseHelper.java
@@ -133,6 +133,7 @@ import org.apache.cloudstack.api.response.VpcOfferingResponse;
 import org.apache.cloudstack.api.response.VpcResponse;
 import org.apache.cloudstack.api.response.VpnUsersResponse;
 import org.apache.cloudstack.api.response.ZoneResponse;
+import org.apache.cloudstack.context.CallContext;
 import org.apache.cloudstack.network.lb.ApplicationLoadBalancerRule;
 import org.apache.cloudstack.region.PortableIp;
 import org.apache.cloudstack.region.PortableIpRange;
@@ -141,6 +142,7 @@ import org.apache.cloudstack.storage.datastore.db.StoragePoolVO;
 import org.apache.cloudstack.usage.Usage;
 import org.apache.cloudstack.usage.UsageService;
 import org.apache.cloudstack.usage.UsageTypes;
+
 import org.apache.log4j.Logger;
 import org.springframework.stereotype.Component;
 
@@ -276,7 +278,6 @@ import com.cloud.template.VirtualMachineTemplate;
 import com.cloud.user.Account;
 import com.cloud.user.User;
 import com.cloud.user.UserAccount;
-import com.cloud.user.UserContext;
 import com.cloud.uservm.UserVm;
 import com.cloud.utils.Pair;
 import com.cloud.utils.StringUtils;
@@ -699,7 +700,7 @@ public class ApiResponseHelper implements ResponseGenerator {
         }
 
         // show this info to admin only
-        Account account = UserContext.current().getCaller();
+        Account account = CallContext.current().getCallingAccount();
         if (account.getType() == Account.ACCOUNT_TYPE_ADMIN) {
             VlanVO vl = ApiDBUtils.findVlanById(ipAddr.getVlanId());
             if (vl != null) {
@@ -2182,7 +2183,7 @@ public class ApiResponseHelper implements ResponseGenerator {
         response.setReservedIpRange(reservation);
 
         // return vlan information only to Root admin
-        if (network.getBroadcastUri() != null && UserContext.current().getCaller().getType() == Account.ACCOUNT_TYPE_ADMIN) {
+        if (network.getBroadcastUri() != null && CallContext.current().getCallingAccount().getType() == Account.ACCOUNT_TYPE_ADMIN) {
             String broadcastUri = network.getBroadcastUri().toString();
             response.setBroadcastUri(broadcastUri);
             String vlan = "N/A";

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/server/src/com/cloud/api/ApiServer.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/api/ApiServer.java b/server/src/com/cloud/api/ApiServer.java
index 86b4cdd..5a72e37 100755
--- a/server/src/com/cloud/api/ApiServer.java
+++ b/server/src/com/cloud/api/ApiServer.java
@@ -52,34 +52,6 @@ import javax.naming.ConfigurationException;
 import javax.servlet.http.HttpServletResponse;
 import javax.servlet.http.HttpSession;
 
-import org.apache.cloudstack.acl.APIChecker;
-import org.apache.cloudstack.api.APICommand;
-import org.apache.cloudstack.api.ApiErrorCode;
-import org.apache.cloudstack.api.BaseAsyncCmd;
-import org.apache.cloudstack.api.BaseAsyncCreateCmd;
-import org.apache.cloudstack.api.BaseCmd;
-import org.apache.cloudstack.api.BaseListCmd;
-import org.apache.cloudstack.api.ResponseObject;
-import org.apache.cloudstack.api.ServerApiException;
-import org.apache.cloudstack.api.command.admin.host.ListHostsCmd;
-import org.apache.cloudstack.api.command.admin.router.ListRoutersCmd;
-import org.apache.cloudstack.api.command.admin.storage.ListStoragePoolsCmd;
-import org.apache.cloudstack.api.command.admin.user.ListUsersCmd;
-import org.apache.cloudstack.api.command.user.account.ListAccountsCmd;
-import org.apache.cloudstack.api.command.user.account.ListProjectAccountsCmd;
-import org.apache.cloudstack.api.command.user.event.ListEventsCmd;
-import org.apache.cloudstack.api.command.user.offering.ListDiskOfferingsCmd;
-import org.apache.cloudstack.api.command.user.offering.ListServiceOfferingsCmd;
-import org.apache.cloudstack.api.command.user.project.ListProjectInvitationsCmd;
-import org.apache.cloudstack.api.command.user.project.ListProjectsCmd;
-import org.apache.cloudstack.api.command.user.securitygroup.ListSecurityGroupsCmd;
-import org.apache.cloudstack.api.command.user.tag.ListTagsCmd;
-import org.apache.cloudstack.api.command.user.vm.ListVMsCmd;
-import org.apache.cloudstack.api.command.user.vmgroup.ListVMGroupsCmd;
-import org.apache.cloudstack.api.command.user.volume.ListVolumesCmd;
-import org.apache.cloudstack.api.command.user.zone.ListZonesByCmd;
-import org.apache.cloudstack.api.response.ExceptionResponse;
-import org.apache.cloudstack.api.response.ListResponse;
 import org.apache.commons.codec.binary.Base64;
 import org.apache.http.ConnectionClosedException;
 import org.apache.http.HttpException;
@@ -111,6 +83,36 @@ import org.apache.http.protocol.ResponseServer;
 import org.apache.log4j.Logger;
 import org.springframework.stereotype.Component;
 
+import org.apache.cloudstack.acl.APIChecker;
+import org.apache.cloudstack.api.APICommand;
+import org.apache.cloudstack.api.ApiErrorCode;
+import org.apache.cloudstack.api.BaseAsyncCmd;
+import org.apache.cloudstack.api.BaseAsyncCreateCmd;
+import org.apache.cloudstack.api.BaseCmd;
+import org.apache.cloudstack.api.BaseListCmd;
+import org.apache.cloudstack.api.ResponseObject;
+import org.apache.cloudstack.api.ServerApiException;
+import org.apache.cloudstack.api.command.admin.host.ListHostsCmd;
+import org.apache.cloudstack.api.command.admin.router.ListRoutersCmd;
+import org.apache.cloudstack.api.command.admin.storage.ListStoragePoolsCmd;
+import org.apache.cloudstack.api.command.admin.user.ListUsersCmd;
+import org.apache.cloudstack.api.command.user.account.ListAccountsCmd;
+import org.apache.cloudstack.api.command.user.account.ListProjectAccountsCmd;
+import org.apache.cloudstack.api.command.user.event.ListEventsCmd;
+import org.apache.cloudstack.api.command.user.offering.ListDiskOfferingsCmd;
+import org.apache.cloudstack.api.command.user.offering.ListServiceOfferingsCmd;
+import org.apache.cloudstack.api.command.user.project.ListProjectInvitationsCmd;
+import org.apache.cloudstack.api.command.user.project.ListProjectsCmd;
+import org.apache.cloudstack.api.command.user.securitygroup.ListSecurityGroupsCmd;
+import org.apache.cloudstack.api.command.user.tag.ListTagsCmd;
+import org.apache.cloudstack.api.command.user.vm.ListVMsCmd;
+import org.apache.cloudstack.api.command.user.vmgroup.ListVMGroupsCmd;
+import org.apache.cloudstack.api.command.user.volume.ListVolumesCmd;
+import org.apache.cloudstack.api.command.user.zone.ListZonesByCmd;
+import org.apache.cloudstack.api.response.ExceptionResponse;
+import org.apache.cloudstack.api.response.ListResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import com.cloud.api.response.ApiResponseSerializer;
 import com.cloud.async.AsyncCommandQueued;
 import com.cloud.async.AsyncJob;
@@ -119,6 +121,7 @@ import com.cloud.async.AsyncJobVO;
 import com.cloud.configuration.Config;
 import com.cloud.configuration.ConfigurationVO;
 import com.cloud.configuration.dao.ConfigurationDao;
+import com.cloud.dao.EntityManager;
 import com.cloud.domain.Domain;
 import com.cloud.domain.DomainVO;
 import com.cloud.event.ActionEventUtils;
@@ -135,7 +138,6 @@ import com.cloud.user.AccountManager;
 import com.cloud.user.DomainManager;
 import com.cloud.user.User;
 import com.cloud.user.UserAccount;
-import com.cloud.user.UserContext;
 import com.cloud.user.UserVO;
 import com.cloud.utils.NumbersUtil;
 import com.cloud.utils.Pair;
@@ -162,6 +164,8 @@ public class ApiServer extends ManagerBase implements HttpRequestHandler, ApiSer
     @Inject private DomainManager _domainMgr;
     @Inject private AsyncJobManager _asyncMgr;
     @Inject private ConfigurationDao _configDao;
+    @Inject
+    private EntityManager _entityMgr;
 
     @Inject List<PluggableService> _pluggableServices;
     @Inject List<APIChecker> _apiAccessCheckers;
@@ -179,6 +183,7 @@ public class ApiServer extends ManagerBase implements HttpRequestHandler, ApiSer
     @PostConstruct
     void initComponent() {
         s_instance = this;
+        CallContext.init(_entityMgr);
     }
 
     public static ApiServer getInstance() {
@@ -297,7 +302,7 @@ public class ApiServer extends ManagerBase implements HttpRequestHandler, ApiSer
 
             try {
                 // always trust commands from API port, user context will always be UID_SYSTEM/ACCOUNT_ID_SYSTEM
-                UserContext.registerContext(_accountMgr.getSystemUser().getId(), _accountMgr.getSystemAccount(), null, true);
+                CallContext.register(_accountMgr.getSystemUser(), _accountMgr.getSystemAccount());
                 sb.insert(0, "(userId=" + User.UID_SYSTEM + " accountId=" + Account.ACCOUNT_ID_SYSTEM + " sessionId=" + null + ") ");
                 String responseText = handleRequest(parameterMap, responseType, sb);
                 sb.append(" 200 " + ((responseText == null) ? 0 : responseText.length()));
@@ -314,7 +319,7 @@ public class ApiServer extends ManagerBase implements HttpRequestHandler, ApiSer
             }
         } finally {
             s_accessLogger.info(sb.toString());
-            UserContext.unregisterContext();
+            CallContext.unregister();
         }
     }
 
@@ -411,7 +416,7 @@ public class ApiServer extends ManagerBase implements HttpRequestHandler, ApiSer
         catch (InsufficientCapacityException ex){
             s_logger.info(ex.getMessage());
             String errorMsg = ex.getMessage();
-            if (UserContext.current().getCaller().getType() != Account.ACCOUNT_TYPE_ADMIN){
+            if (CallContext.current().getCallingAccount().getType() != Account.ACCOUNT_TYPE_ADMIN){
                 // hide internal details to non-admin user for security reason
                 errorMsg = BaseCmd.USER_ERROR_MESSAGE;
 
@@ -421,7 +426,7 @@ public class ApiServer extends ManagerBase implements HttpRequestHandler, ApiSer
         catch (ResourceAllocationException ex){
             s_logger.info(ex.getMessage());
             String errorMsg = ex.getMessage();
-            if (UserContext.current().getCaller().getType() != Account.ACCOUNT_TYPE_ADMIN){
+            if (CallContext.current().getCallingAccount().getType() != Account.ACCOUNT_TYPE_ADMIN){
                 // hide internal details to non-admin user for security reason
                 errorMsg = BaseCmd.USER_ERROR_MESSAGE;
             }
@@ -430,7 +435,7 @@ public class ApiServer extends ManagerBase implements HttpRequestHandler, ApiSer
         catch (ResourceUnavailableException ex){
             s_logger.info(ex.getMessage());
             String errorMsg = ex.getMessage();
-            if (UserContext.current().getCaller().getType() != Account.ACCOUNT_TYPE_ADMIN){
+            if (CallContext.current().getCallingAccount().getType() != Account.ACCOUNT_TYPE_ADMIN){
                 // hide internal details to non-admin user for security reason
                 errorMsg = BaseCmd.USER_ERROR_MESSAGE;
             }
@@ -447,7 +452,7 @@ public class ApiServer extends ManagerBase implements HttpRequestHandler, ApiSer
         catch (Exception ex){
             s_logger.error("unhandled exception executing api command: " + ((command == null) ? "null" : command[0]), ex);
             String errorMsg = ex.getMessage();
-            if (UserContext.current().getCaller().getType() != Account.ACCOUNT_TYPE_ADMIN){
+            if (CallContext.current().getCallingAccount().getType() != Account.ACCOUNT_TYPE_ADMIN){
                 // hide internal details to non-admin user for security reason
                 errorMsg = BaseCmd.USER_ERROR_MESSAGE;
             }
@@ -458,9 +463,9 @@ public class ApiServer extends ManagerBase implements HttpRequestHandler, ApiSer
     }
 
     private String queueCommand(BaseCmd cmdObj, Map<String, String> params) throws Exception {
-        UserContext ctx = UserContext.current();
-        Long callerUserId = ctx.getCallerUserId();
-        Account caller = ctx.getCaller();
+        CallContext ctx = CallContext.current();
+        Long callerUserId = ctx.getCallingUserId();
+        Account caller = ctx.getCallingAccount();
 
 
         // Queue command based on Cmd super class:
@@ -504,8 +509,6 @@ public class ApiServer extends ManagerBase implements HttpRequestHandler, ApiSer
             params.put("ctxStartEventId", String.valueOf(startEventId));
             params.put("cmdEventType", asyncCmd.getEventType().toString());
 
-            ctx.setAccountId(asyncCmd.getEntityOwnerId());
-
             Long instanceId = (objectId == null) ? asyncCmd.getInstanceId() : objectId;
             AsyncJobVO job = new AsyncJobVO(callerUserId, caller.getId(), cmdObj.getClass().getName(),
                     ApiGsonHelper.getBuilder().create().toJson(params), instanceId, asyncCmd.getInstanceType());
@@ -731,8 +734,6 @@ public class ApiServer extends ManagerBase implements HttpRequestHandler, ApiSer
                 return false;
             }
 
-            UserContext.updateContext(user.getId(), account, null);
-
             try{
                 checkCommandAvailable(user, commandName);
             }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/server/src/com/cloud/api/ApiServlet.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/api/ApiServlet.java b/server/src/com/cloud/api/ApiServlet.java
index 7525b61..2a5ad73 100755
--- a/server/src/com/cloud/api/ApiServlet.java
+++ b/server/src/com/cloud/api/ApiServlet.java
@@ -31,17 +31,20 @@ import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import javax.servlet.http.HttpSession;
 
-import org.apache.cloudstack.api.ApiErrorCode;
-import org.apache.cloudstack.api.BaseCmd;
-import org.apache.cloudstack.api.ServerApiException;
 import org.apache.log4j.Logger;
 import org.springframework.stereotype.Component;
 import org.springframework.web.context.support.SpringBeanAutowiringSupport;
 
+import org.apache.cloudstack.api.ApiErrorCode;
+import org.apache.cloudstack.api.BaseCmd;
+import org.apache.cloudstack.api.ServerApiException;
+import org.apache.cloudstack.context.CallContext;
+
+import com.cloud.dao.EntityManager;
 import com.cloud.exception.CloudAuthenticationException;
 import com.cloud.user.Account;
 import com.cloud.user.AccountService;
-import com.cloud.user.UserContext;
+import com.cloud.user.User;
 import com.cloud.utils.StringUtils;
 
 @Component("apiServlet")
@@ -52,13 +55,15 @@ public class ApiServlet extends HttpServlet {
 
     @Inject ApiServerService _apiServer;
     @Inject AccountService _accountMgr;
+    @Inject
+    EntityManager _entityMgr;
 
     public ApiServlet() {
     }
 
     @Override
     public void init(ServletConfig config) throws ServletException {
-    	SpringBeanAutowiringSupport.processInjectionBasedOnServletContext(this, config.getServletContext());       	
+    	SpringBeanAutowiringSupport.processInjectionBasedOnServletContext(this, config.getServletContext());
     }
     
     @Override
@@ -235,7 +240,6 @@ public class ApiServlet extends HttpServlet {
             // Initialize an empty context and we will update it after we have verified the request below,
             // we no longer rely on web-session here, verifyRequest will populate user/account information
             // if a API key exists
-            UserContext.registerContext(_accountMgr.getSystemUser().getId(), _accountMgr.getSystemAccount(), null, false);
             Long userId = null;
 
             if (!isNew) {
@@ -266,7 +270,8 @@ public class ApiServlet extends HttpServlet {
                         writeResponse(resp, serializedResponse, HttpServletResponse.SC_BAD_REQUEST, responseType);
                         return;
                     }
-                    UserContext.updateContext(userId, (Account) accountObj, session.getId());
+                    User user = _entityMgr.findById(User.class, userId);
+                    CallContext.register(user, (Account)accountObj);
                 } else {
                     // Invalidate the session to ensure we won't allow a request across management server
                     // restarts if the userId was serialized to the stored session
@@ -280,6 +285,8 @@ public class ApiServlet extends HttpServlet {
                     writeResponse(resp, serializedResponse, HttpServletResponse.SC_UNAUTHORIZED, responseType);
                     return;
                 }
+            } else {
+                CallContext.register(_accountMgr.getSystemUser(), _accountMgr.getSystemAccount());
             }
 
             if (_apiServer.verifyRequest(params, userId)) {
@@ -296,8 +303,8 @@ public class ApiServlet extends HttpServlet {
                  * key mechanism updateUserContext(params, session != null ? session.getId() : null);
                  */
 
-                auditTrailSb.insert(0, "(userId=" + UserContext.current().getCallerUserId() + " accountId="
-                        + UserContext.current().getCaller().getId() + " sessionId=" + (session != null ? session.getId() : null) + ")");
+                auditTrailSb.insert(0, "(userId=" + CallContext.current().getCallingUserId() + " accountId="
+                        + CallContext.current().getCallingAccount().getId() + " sessionId=" + (session != null ? session.getId() : null) + ")");
 
                 // Add the HTTP method (GET/POST/PUT/DELETE) as well into the params map.
                 params.put("httpmethod", new String[] { req.getMethod() });
@@ -330,7 +337,7 @@ public class ApiServlet extends HttpServlet {
                 s_logger.debug("===END=== " + StringUtils.cleanString(reqStr));
             }
             // cleanup user context to prevent from being peeked in other request context
-            UserContext.unregisterContext();
+            CallContext.unregister();
         }
     }
 

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/server/src/com/cloud/api/query/QueryManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/api/query/QueryManagerImpl.java b/server/src/com/cloud/api/query/QueryManagerImpl.java
index 462a276..cef5ddf 100644
--- a/server/src/com/cloud/api/query/QueryManagerImpl.java
+++ b/server/src/com/cloud/api/query/QueryManagerImpl.java
@@ -77,8 +77,10 @@ import org.apache.cloudstack.api.response.UserResponse;
 import org.apache.cloudstack.api.response.UserVmResponse;
 import org.apache.cloudstack.api.response.VolumeResponse;
 import org.apache.cloudstack.api.response.ZoneResponse;
+import org.apache.cloudstack.context.CallContext;
 import org.apache.cloudstack.engine.subsystem.api.storage.TemplateState;
 import org.apache.cloudstack.query.QueryService;
+
 import org.apache.log4j.Logger;
 import org.springframework.stereotype.Component;
 
@@ -166,7 +168,6 @@ import com.cloud.template.VirtualMachineTemplate.TemplateFilter;
 import com.cloud.user.Account;
 import com.cloud.user.AccountManager;
 import com.cloud.user.AccountVO;
-import com.cloud.user.UserContext;
 import com.cloud.user.dao.AccountDao;
 import com.cloud.utils.DateUtil;
 import com.cloud.utils.Pair;
@@ -334,7 +335,7 @@ public class QueryManagerImpl extends ManagerBase implements QueryService {
 
     private Pair<List<UserAccountJoinVO>, Integer> searchForUsersInternal(ListUsersCmd cmd)
             throws PermissionDeniedException {
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
 
         // TODO: Integrate with ACL checkAccess refactoring
         Long domainId = cmd.getDomainId();
@@ -440,7 +441,7 @@ public class QueryManagerImpl extends ManagerBase implements QueryService {
     }
 
     private Pair<List<EventJoinVO>, Integer> searchForEventsInternal(ListEventsCmd cmd) {
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
         List<Long> permittedAccounts = new ArrayList<Long>();
 
         Long id = cmd.getId();
@@ -555,7 +556,7 @@ public class QueryManagerImpl extends ManagerBase implements QueryService {
     }
 
     private Pair<List<ResourceTagJoinVO>, Integer> listTagsInternal(ListTagsCmd cmd) {
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
         List<Long> permittedAccounts = new ArrayList<Long>();
         String key = cmd.getKey();
         String value = cmd.getValue();
@@ -636,7 +637,7 @@ public class QueryManagerImpl extends ManagerBase implements QueryService {
         String name = cmd.getGroupName();
         String keyword = cmd.getKeyword();
 
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
         List<Long> permittedAccounts = new ArrayList<Long>();
 
         Ternary<Long, Boolean, ListProjectResourcesCriteria> domainIdRecursiveListProject = new Ternary<Long, Boolean, ListProjectResourcesCriteria>(
@@ -689,7 +690,7 @@ public class QueryManagerImpl extends ManagerBase implements QueryService {
     }
 
     private Pair<List<UserVmJoinVO>, Integer> searchForUserVMsInternal(ListVMsCmd cmd) {
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
         List<Long> permittedAccounts = new ArrayList<Long>();
         String hypervisor = cmd.getHypervisor();
         boolean listAll = cmd.listAll();
@@ -947,7 +948,7 @@ public class QueryManagerImpl extends ManagerBase implements QueryService {
 
     private Pair<List<SecurityGroupJoinVO>, Integer> searchForSecurityGroupsInternal(ListSecurityGroupsCmd cmd)
             throws PermissionDeniedException, InvalidParameterValueException {
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
         Long instanceId = cmd.getVirtualMachineId();
         String securityGroup = cmd.getSecurityGroupName();
         Long id = cmd.getId();
@@ -1080,7 +1081,7 @@ public class QueryManagerImpl extends ManagerBase implements QueryService {
     private Pair<List<DomainRouterJoinVO>, Integer> searchForRoutersInternal(BaseListProjectAndAccountResourcesCmd cmd, Long id,
             String name, String state, Long zoneId, Long podId, Long hostId, String keyword, Long networkId, Long vpcId, Boolean forVpc, String role) {
 
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
         List<Long> permittedAccounts = new ArrayList<Long>();
 
         Ternary<Long, Boolean, ListProjectResourcesCriteria> domainIdRecursiveListProject = new Ternary<Long, Boolean, ListProjectResourcesCriteria>(
@@ -1216,7 +1217,7 @@ public class QueryManagerImpl extends ManagerBase implements QueryService {
         boolean isRecursive = cmd.isRecursive();
         Map<String, String> tags = cmd.getTags();
 
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
         Long accountId = null;
         String path = null;
 
@@ -1358,7 +1359,7 @@ public class QueryManagerImpl extends ManagerBase implements QueryService {
         boolean isRecursive = cmd.isRecursive();
         boolean listAll = cmd.listAll();
 
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
         List<Long> permittedAccounts = new ArrayList<Long>();
 
         Ternary<Long, Boolean, ListProjectResourcesCriteria> domainIdRecursiveListProject = new Ternary<Long, Boolean, ListProjectResourcesCriteria>(
@@ -1424,7 +1425,7 @@ public class QueryManagerImpl extends ManagerBase implements QueryService {
 
         // long projectId, String accountName, String role, Long startIndex,
         // Long pageSizeVal) {
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
 
         // check that the project exists
         Project project = _projectDao.findById(projectId);
@@ -1483,7 +1484,7 @@ public class QueryManagerImpl extends ManagerBase implements QueryService {
 
     public Pair<List<HostJoinVO>, Integer> searchForServersInternal(ListHostsCmd cmd) {
 
-        Long zoneId = _accountMgr.checkAccessAndSpecifyAuthority(UserContext.current().getCaller(), cmd.getZoneId());
+        Long zoneId = _accountMgr.checkAccessAndSpecifyAuthority(CallContext.current().getCallingAccount(), cmd.getZoneId());
         Object name = cmd.getHostName();
         Object type = cmd.getType();
         Object state = cmd.getState();
@@ -1595,7 +1596,7 @@ public class QueryManagerImpl extends ManagerBase implements QueryService {
 
     private Pair<List<VolumeJoinVO>, Integer> searchForVolumesInternal(ListVolumesCmd cmd) {
 
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
         List<Long> permittedAccounts = new ArrayList<Long>();
 
         Long id = cmd.getId();
@@ -1730,7 +1731,7 @@ public class QueryManagerImpl extends ManagerBase implements QueryService {
     }
 
     private Pair<List<AccountJoinVO>, Integer> searchForAccountsInternal(ListAccountsCmd cmd) {
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
         Long domainId = cmd.getDomainId();
         Long accountId = cmd.getId();
         String accountName = cmd.getSearchName();
@@ -1858,7 +1859,7 @@ public class QueryManagerImpl extends ManagerBase implements QueryService {
 
     private Pair<List<AsyncJobJoinVO>, Integer> searchForAsyncJobsInternal(ListAsyncJobsCmd cmd) {
 
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
 
         List<Long> permittedAccounts = new ArrayList<Long>();
 
@@ -1946,7 +1947,7 @@ public class QueryManagerImpl extends ManagerBase implements QueryService {
             }
         }
 
-        Long zoneId = _accountMgr.checkAccessAndSpecifyAuthority(UserContext.current().getCaller(), cmd.getZoneId());
+        Long zoneId = _accountMgr.checkAccessAndSpecifyAuthority(CallContext.current().getCallingAccount(), cmd.getZoneId());
         Object id = cmd.getId();
         Object name = cmd.getStoragePoolName();
         Object path = cmd.getPath();
@@ -2038,7 +2039,7 @@ public class QueryManagerImpl extends ManagerBase implements QueryService {
 
     private Pair<List<ImageStoreJoinVO>, Integer> searchForImageStoresInternal(ListImageStoresCmd cmd) {
 
-        Long zoneId = _accountMgr.checkAccessAndSpecifyAuthority(UserContext.current().getCaller(), cmd.getZoneId());
+        Long zoneId = _accountMgr.checkAccessAndSpecifyAuthority(CallContext.current().getCallingAccount(), cmd.getZoneId());
         Object id = cmd.getId();
         Object name = cmd.getStoreName();
         String provider = cmd.getProvider();
@@ -2118,7 +2119,7 @@ public class QueryManagerImpl extends ManagerBase implements QueryService {
 
     private Pair<List<ImageStoreJoinVO>, Integer> searchForCacheStoresInternal(ListCacheStoresCmd cmd) {
 
-        Long zoneId = _accountMgr.checkAccessAndSpecifyAuthority(UserContext.current().getCaller(), cmd.getZoneId());
+        Long zoneId = _accountMgr.checkAccessAndSpecifyAuthority(CallContext.current().getCallingAccount(), cmd.getZoneId());
         Object id = cmd.getId();
         Object name = cmd.getStoreName();
         String provider = cmd.getProvider();
@@ -2212,7 +2213,7 @@ public class QueryManagerImpl extends ManagerBase implements QueryService {
                 cmd.getPageSizeVal());
         SearchCriteria<DiskOfferingJoinVO> sc = _diskOfferingJoinDao.createSearchCriteria();
 
-        Account account = UserContext.current().getCaller();
+        Account account = CallContext.current().getCallingAccount();
         Object name = cmd.getDiskOfferingName();
         Object id = cmd.getId();
         Object keyword = cmd.getKeyword();
@@ -2333,7 +2334,7 @@ public class QueryManagerImpl extends ManagerBase implements QueryService {
                 cmd.getPageSizeVal());
         SearchCriteria<ServiceOfferingJoinVO> sc = _srvOfferingJoinDao.createSearchCriteria();
 
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
         Object name = cmd.getServiceOfferingName();
         Object id = cmd.getId();
         Object keyword = cmd.getKeyword();
@@ -2455,7 +2456,7 @@ public class QueryManagerImpl extends ManagerBase implements QueryService {
     }
 
     private Pair<List<DataCenterJoinVO>, Integer> listDataCentersInternal(ListZonesByCmd cmd) {
-        Account account = UserContext.current().getCaller();
+        Account account = CallContext.current().getCallingAccount();
         Long domainId = cmd.getDomainId();
         Long id = cmd.getId();
         String keyword = cmd.getKeyword();
@@ -2651,7 +2652,7 @@ public class QueryManagerImpl extends ManagerBase implements QueryService {
         TemplateFilter templateFilter = TemplateFilter.valueOf(cmd.getTemplateFilter());
         Long id = cmd.getId();
         Map<String, String> tags = cmd.getTags();
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
 
         boolean listAll = false;
         if (templateFilter != null && templateFilter == TemplateFilter.all) {
@@ -2935,7 +2936,7 @@ public class QueryManagerImpl extends ManagerBase implements QueryService {
         TemplateFilter isoFilter = TemplateFilter.valueOf(cmd.getIsoFilter());
         Long id = cmd.getId();
         Map<String, String> tags = cmd.getTags();
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
 
         boolean listAll = false;
         if (isoFilter != null && isoFilter == TemplateFilter.all) {
@@ -2981,7 +2982,7 @@ public class QueryManagerImpl extends ManagerBase implements QueryService {
             String affinityGroupName, String affinityGroupType, Long vmId, String accountName, Long domainId,
             boolean isRecursive, boolean listAll, Long startIndex, Long pageSize) {
 
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
 
         Long accountId = caller.getAccountId();
 

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/server/src/com/cloud/api/query/ViewResponseHelper.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/api/query/ViewResponseHelper.java b/server/src/com/cloud/api/query/ViewResponseHelper.java
index 5972229..8e69dd1 100644
--- a/server/src/com/cloud/api/query/ViewResponseHelper.java
+++ b/server/src/com/cloud/api/query/ViewResponseHelper.java
@@ -37,7 +37,7 @@ import com.cloud.api.query.vo.UserAccountJoinVO;
 import com.cloud.api.query.vo.UserVmJoinVO;
 import com.cloud.api.query.vo.VolumeJoinVO;
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
+
 import org.apache.cloudstack.affinity.AffinityGroupResponse;
 import org.apache.cloudstack.api.ApiConstants.HostDetails;
 import org.apache.cloudstack.api.ApiConstants.VMDetails;
@@ -62,11 +62,13 @@ import org.apache.cloudstack.api.response.UserResponse;
 import org.apache.cloudstack.api.response.UserVmResponse;
 import org.apache.cloudstack.api.response.VolumeResponse;
 import org.apache.cloudstack.api.response.ZoneResponse;
-import org.apache.log4j.Logger;
+import org.apache.cloudstack.context.CallContext;
 
+import org.apache.log4j.Logger;
 
 import com.cloud.api.query.vo.ImageStoreJoinVO;
 import com.cloud.api.query.vo.TemplateJoinVO;
+
 import java.util.ArrayList;
 import java.util.EnumSet;
 import java.util.Hashtable;
@@ -118,7 +120,7 @@ public class ViewResponseHelper {
     }
 
     public static List<UserVmResponse> createUserVmResponse(String objectName, EnumSet<VMDetails> details, UserVmJoinVO... userVms) {
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
 
         Hashtable<Long, UserVmResponse> vmDataList = new Hashtable<Long, UserVmResponse>();
         // Initialise the vmdatalist with the input data
@@ -139,7 +141,7 @@ public class ViewResponseHelper {
     }
 
     public static List<DomainRouterResponse> createDomainRouterResponse(DomainRouterJoinVO... routers) {
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
         Hashtable<Long, DomainRouterResponse> vrDataList = new Hashtable<Long, DomainRouterResponse>();
         // Initialise the vrdatalist with the input data
         for (DomainRouterJoinVO vr : routers) {
@@ -159,7 +161,7 @@ public class ViewResponseHelper {
 
 
     public static List<SecurityGroupResponse> createSecurityGroupResponses(List<SecurityGroupJoinVO> securityGroups) {
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
         Hashtable<Long, SecurityGroupResponse> vrDataList = new Hashtable<Long, SecurityGroupResponse>();
         // Initialise the vrdatalist with the input data
         for (SecurityGroupJoinVO vr : securityGroups) {

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/server/src/com/cloud/api/query/dao/DataCenterJoinDaoImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/api/query/dao/DataCenterJoinDaoImpl.java b/server/src/com/cloud/api/query/dao/DataCenterJoinDaoImpl.java
index 4c8b545..edceb26 100644
--- a/server/src/com/cloud/api/query/dao/DataCenterJoinDaoImpl.java
+++ b/server/src/com/cloud/api/query/dao/DataCenterJoinDaoImpl.java
@@ -17,6 +17,7 @@
 package com.cloud.api.query.dao;
 
 import java.util.List;
+
 import javax.ejb.Local;
 
 import org.apache.log4j.Logger;
@@ -25,13 +26,15 @@ import com.cloud.api.ApiDBUtils;
 import com.cloud.api.ApiResponseHelper;
 import com.cloud.api.query.vo.DataCenterJoinVO;
 import com.cloud.dc.DataCenter;
+
 import org.apache.cloudstack.api.response.ZoneResponse;
+import org.apache.cloudstack.context.CallContext;
 
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
 import com.cloud.utils.db.GenericDaoBase;
 import com.cloud.utils.db.SearchBuilder;
 import com.cloud.utils.db.SearchCriteria;
+
 import org.springframework.stereotype.Component;
 
 @Component
@@ -56,7 +59,7 @@ public class DataCenterJoinDaoImpl extends GenericDaoBase<DataCenterJoinVO, Long
     @Override
     public ZoneResponse newDataCenterResponse(DataCenterJoinVO dataCenter, Boolean showCapacities) {
 
-        Account account = UserContext.current().getCaller();
+        Account account = CallContext.current().getCallingAccount();
         ZoneResponse zoneResponse = new ZoneResponse();
         zoneResponse.setId(dataCenter.getUuid());
         zoneResponse.setName(dataCenter.getName());

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/server/src/com/cloud/api/query/dao/TemplateJoinDaoImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/api/query/dao/TemplateJoinDaoImpl.java b/server/src/com/cloud/api/query/dao/TemplateJoinDaoImpl.java
index d78580c..6fe776f 100644
--- a/server/src/com/cloud/api/query/dao/TemplateJoinDaoImpl.java
+++ b/server/src/com/cloud/api/query/dao/TemplateJoinDaoImpl.java
@@ -26,8 +26,10 @@ import javax.inject.Inject;
 
 import org.apache.cloudstack.api.BaseCmd;
 import org.apache.cloudstack.api.response.TemplateResponse;
+import org.apache.cloudstack.context.CallContext;
 import org.apache.cloudstack.engine.subsystem.api.storage.ObjectInDataStoreStateMachine;
 import org.apache.cloudstack.engine.subsystem.api.storage.TemplateState;
+
 import org.apache.log4j.Logger;
 import org.springframework.stereotype.Component;
 
@@ -42,7 +44,6 @@ import com.cloud.storage.VMTemplateHostVO;
 import com.cloud.storage.VMTemplateStorageResourceAssoc.Status;
 import com.cloud.template.VirtualMachineTemplate;
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
 import com.cloud.utils.db.GenericDaoBase;
 import com.cloud.utils.db.SearchBuilder;
 import com.cloud.utils.db.SearchCriteria;
@@ -97,7 +98,7 @@ public class TemplateJoinDaoImpl extends GenericDaoBase<TemplateJoinVO, Long> im
 
     private String getTemplateStatus(TemplateJoinVO template){
         boolean isAdmin = false;
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
         if ((caller == null) || BaseCmd.isAdmin(caller.getType())) {
             isAdmin = true;
         }
@@ -316,7 +317,7 @@ public class TemplateJoinDaoImpl extends GenericDaoBase<TemplateJoinVO, Long> im
         isoResponse.setDomainName(iso.getDomainName());
 
 
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
         boolean isAdmin = false;
         if ((caller == null) || BaseCmd.isAdmin(caller.getType())) {
             isAdmin = true;

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/server/src/com/cloud/api/query/dao/VolumeJoinDaoImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/api/query/dao/VolumeJoinDaoImpl.java b/server/src/com/cloud/api/query/dao/VolumeJoinDaoImpl.java
index 1c18c96..90bb8c0 100644
--- a/server/src/com/cloud/api/query/dao/VolumeJoinDaoImpl.java
+++ b/server/src/com/cloud/api/query/dao/VolumeJoinDaoImpl.java
@@ -23,6 +23,8 @@ import javax.ejb.Local;
 import javax.inject.Inject;
 
 import org.apache.cloudstack.api.response.VolumeResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 import org.springframework.stereotype.Component;
 
@@ -37,7 +39,6 @@ import com.cloud.storage.VMTemplateHostVO;
 import com.cloud.storage.VMTemplateStorageResourceAssoc.Status;
 import com.cloud.storage.Volume;
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
 import com.cloud.utils.db.GenericDaoBase;
 import com.cloud.utils.db.SearchBuilder;
 import com.cloud.utils.db.SearchCriteria;
@@ -73,7 +74,7 @@ public class VolumeJoinDaoImpl extends GenericDaoBase<VolumeJoinVO, Long> implem
 
     @Override
     public VolumeResponse newVolumeResponse(VolumeJoinVO volume) {
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
 
         VolumeResponse volResponse = new VolumeResponse();
         volResponse.setId(volume.getUuid());

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/server/src/com/cloud/async/AsyncJobManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/async/AsyncJobManagerImpl.java b/server/src/com/cloud/async/AsyncJobManagerImpl.java
index d3efdee..42ca3ae 100644
--- a/server/src/com/cloud/async/AsyncJobManagerImpl.java
+++ b/server/src/com/cloud/async/AsyncJobManagerImpl.java
@@ -36,42 +36,44 @@ import javax.ejb.Local;
 import javax.inject.Inject;
 import javax.naming.ConfigurationException;
 
+import org.apache.log4j.Logger;
+import org.apache.log4j.NDC;
+import org.springframework.beans.factory.NoSuchBeanDefinitionException;
+import org.springframework.stereotype.Component;
+
+import com.google.gson.Gson;
+import com.google.gson.reflect.TypeToken;
+
 import org.apache.cloudstack.api.ApiCommandJobType;
 import org.apache.cloudstack.api.ApiErrorCode;
 import org.apache.cloudstack.api.BaseAsyncCmd;
 import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.command.user.job.QueryAsyncJobResultCmd;
 import org.apache.cloudstack.api.response.ExceptionResponse;
+import org.apache.cloudstack.context.CallContext;
 import org.apache.cloudstack.framework.events.EventBus;
 import org.apache.cloudstack.framework.events.EventBusException;
-import org.apache.log4j.Logger;
-import org.apache.log4j.NDC;
-import org.springframework.stereotype.Component;
-import org.springframework.beans.factory.NoSuchBeanDefinitionException;
 
-import com.cloud.api.ApiDispatcher;
 import com.cloud.api.ApiDBUtils;
+import com.cloud.api.ApiDispatcher;
 import com.cloud.api.ApiGsonHelper;
 import com.cloud.api.ApiSerializerHelper;
 import com.cloud.async.dao.AsyncJobDao;
-import com.cloud.domain.dao.DomainDao;
-import com.cloud.domain.Domain;
-import com.cloud.domain.DomainVO;
-
 import com.cloud.cluster.ClusterManager;
 import com.cloud.cluster.ClusterManagerListener;
 import com.cloud.cluster.ManagementServerHostVO;
 import com.cloud.configuration.Config;
 import com.cloud.configuration.dao.ConfigurationDao;
+import com.cloud.dao.EntityManager;
+import com.cloud.domain.DomainVO;
+import com.cloud.domain.dao.DomainDao;
+import com.cloud.event.EventCategory;
 import com.cloud.exception.InvalidParameterValueException;
 import com.cloud.exception.PermissionDeniedException;
-import com.cloud.event.EventCategory;
-import com.cloud.event.EventTypes;
 import com.cloud.server.ManagementServer;
 import com.cloud.user.Account;
 import com.cloud.user.AccountManager;
 import com.cloud.user.User;
-import com.cloud.user.UserContext;
 import com.cloud.user.dao.AccountDao;
 import com.cloud.utils.DateUtil;
 import com.cloud.utils.NumbersUtil;
@@ -86,8 +88,6 @@ import com.cloud.utils.exception.CloudRuntimeException;
 import com.cloud.utils.exception.ExceptionUtil;
 import com.cloud.utils.mgmt.JmxUtil;
 import com.cloud.utils.net.MacAddress;
-import com.google.gson.Gson;
-import com.google.gson.reflect.TypeToken;
 
 @Component
 @Local(value={AsyncJobManager.class})
@@ -110,6 +110,9 @@ public class AsyncJobManagerImpl extends ManagerBase implements AsyncJobManager,
     private long _jobExpireSeconds = 86400;						// 1 day
     private long _jobCancelThresholdSeconds = 3600;         // 1 hour (for cancelling the jobs blocking other jobs)
 
+    @Inject
+    private EntityManager _entityMgr;
+
     @Inject private ApiDispatcher _dispatcher;
 
     private final ScheduledExecutorService _heartbeatScheduler =
@@ -378,7 +381,7 @@ public class AsyncJobManagerImpl extends ManagerBase implements AsyncJobManager,
 
     @Override
     public AsyncJob queryAsyncJobResult(QueryAsyncJobResultCmd cmd) {
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
 
         AsyncJobVO job = _jobDao.findById(cmd.getId());
         if (job == null) {
@@ -517,16 +520,19 @@ public class AsyncJobManagerImpl extends ManagerBase implements AsyncJobManager,
                         String acctIdStr = params.get("ctxAccountId");
                         Long userId = null;
                         Account accountObject = null;
+                        User user = null;
 
                         if (userIdStr != null) {
                             userId = Long.parseLong(userIdStr);
+                            user = _entityMgr.findById(User.class, userId);
                         }
 
                         if (acctIdStr != null) {
                             accountObject = _accountDao.findById(Long.parseLong(acctIdStr));
                         }
 
-                        UserContext.registerContext(userId, accountObject, null, false);
+
+                        CallContext.register(user, accountObject);
                         try {
                             // dispatch could ultimately queue the job
                             _dispatcher.dispatch(cmdObj, params);
@@ -534,7 +540,7 @@ public class AsyncJobManagerImpl extends ManagerBase implements AsyncJobManager,
                             // serialize this to the async job table
                             completeAsyncJob(jobId, AsyncJobResult.STATUS_SUCCEEDED, 0, cmdObj.getResponseObject());
                         } finally {
-                            UserContext.unregisterContext();
+                            CallContext.unregister();
                         }
 
                         // commands might need to be queued as part of synchronization here, so they just have to be re-dispatched from the queue mechanism...
@@ -723,7 +729,7 @@ public class AsyncJobManagerImpl extends ManagerBase implements AsyncJobManager,
                     for(AsyncJobVO job : l) {
                     	s_logger.trace("Expunging unfinished job " + job);
                         expungeAsyncJob(job);
-                    }       
+                    }
                     
                     //2) Expunge finished jobs
                     List<AsyncJobVO> completedJobs = _jobDao.getExpiredCompletedJobs(cutTime, 100);

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/server/src/com/cloud/configuration/ConfigurationManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/configuration/ConfigurationManagerImpl.java b/server/src/com/cloud/configuration/ConfigurationManagerImpl.java
index 7e0bc25..fd170bd 100755
--- a/server/src/com/cloud/configuration/ConfigurationManagerImpl.java
+++ b/server/src/com/cloud/configuration/ConfigurationManagerImpl.java
@@ -39,6 +39,9 @@ import javax.naming.NamingException;
 import javax.naming.directory.DirContext;
 import javax.naming.directory.InitialDirContext;
 
+import org.apache.log4j.Logger;
+import org.springframework.stereotype.Component;
+
 import org.apache.cloudstack.acl.SecurityChecker;
 import org.apache.cloudstack.api.ApiConstants.LDAPParams;
 import org.apache.cloudstack.api.command.admin.config.UpdateCfgCmd;
@@ -66,7 +69,7 @@ import org.apache.cloudstack.api.command.admin.zone.CreateZoneCmd;
 import org.apache.cloudstack.api.command.admin.zone.DeleteZoneCmd;
 import org.apache.cloudstack.api.command.admin.zone.UpdateZoneCmd;
 import org.apache.cloudstack.api.command.user.network.ListNetworkOfferingsCmd;
-import org.apache.cloudstack.engine.subsystem.api.storage.DataStore;
+import org.apache.cloudstack.context.CallContext;
 import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreManager;
 import org.apache.cloudstack.region.PortableIp;
 import org.apache.cloudstack.region.PortableIpDao;
@@ -80,8 +83,6 @@ import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao;
 import org.apache.cloudstack.storage.datastore.db.StoragePoolDetailVO;
 import org.apache.cloudstack.storage.datastore.db.StoragePoolDetailsDao;
 import org.apache.cloudstack.storage.datastore.db.StoragePoolVO;
-import org.apache.log4j.Logger;
-import org.springframework.stereotype.Component;
 
 import com.cloud.alert.AlertManager;
 import com.cloud.api.ApiDBUtils;
@@ -182,7 +183,6 @@ import com.cloud.user.AccountManager;
 import com.cloud.user.AccountVO;
 import com.cloud.user.ResourceLimitService;
 import com.cloud.user.User;
-import com.cloud.user.UserContext;
 import com.cloud.user.dao.AccountDao;
 import com.cloud.utils.NumbersUtil;
 import com.cloud.utils.Pair;
@@ -613,14 +613,14 @@ public class ConfigurationManagerImpl extends ManagerBase implements Configurati
     @Override
     @ActionEvent(eventType = EventTypes.EVENT_CONFIGURATION_VALUE_EDIT, eventDescription = "updating configuration")
     public Configuration updateConfiguration(UpdateCfgCmd cmd) throws InvalidParameterValueException {
-        Long userId = UserContext.current().getCallerUserId();
+        Long userId = CallContext.current().getCallingUserId();
         String name = cmd.getCfgName();
         String value = cmd.getValue();
         Long zoneId = cmd.getZoneId();
         Long clusterId = cmd.getClusterId();
         Long storagepoolId = cmd.getStoragepoolId();
         Long accountId = cmd.getAccountId();
-        UserContext.current().setEventDetails(
+        CallContext.current().setEventDetails(
                 " Name: " + name + " New Value: "
                         + (((name.toLowerCase()).contains("password")) ? "*****" : (((value == null) ? "" : value))));
         // check if config value exists
@@ -1185,7 +1185,7 @@ public class ConfigurationManagerImpl extends ManagerBase implements Configurati
     public Pod createPod(long zoneId, String name, String startIp, String endIp, String gateway, String netmask,
             String allocationState) {
         String cidr = NetUtils.ipAndNetMaskToCidr(gateway, netmask);
-        Long userId = UserContext.current().getCallerUserId();
+        Long userId = CallContext.current().getCallingUserId();
 
         if (allocationState == null) {
             allocationState = Grouping.AllocationState.Enabled.toString();
@@ -1205,7 +1205,7 @@ public class ConfigurationManagerImpl extends ManagerBase implements Configurati
 
         // Check if zone is disabled
         DataCenterVO zone = _zoneDao.findById(zoneId);
-        Account account = UserContext.current().getCaller();
+        Account account = CallContext.current().getCallingAccount();
         if (Grouping.AllocationState.Disabled == zone.getAllocationState()
                 && !_accountMgr.isRootAdmin(account.getType())) {
             throw new PermissionDeniedException("Cannot perform this operation, Zone is currently disabled: " + zoneId);
@@ -1481,7 +1481,7 @@ public class ConfigurationManagerImpl extends ManagerBase implements Configurati
         Transaction txn = Transaction.currentTxn();
         boolean success = false;
 
-        Long userId = UserContext.current().getCallerUserId();
+        Long userId = CallContext.current().getCallingUserId();
         Long zoneId = cmd.getId();
 
         if (userId == null) {
@@ -2006,7 +2006,7 @@ public class ConfigurationManagerImpl extends ManagerBase implements Configurati
     @ActionEvent(eventType = EventTypes.EVENT_ZONE_CREATE, eventDescription = "creating zone", async = false)
     public DataCenter createZone(CreateZoneCmd cmd) {
         // grab parameters from the command
-        Long userId = UserContext.current().getCallerUserId();
+        Long userId = CallContext.current().getCallingUserId();
         String zoneName = cmd.getZoneName();
         String dns1 = cmd.getDns1();
         String dns2 = cmd.getDns2();
@@ -2062,7 +2062,7 @@ public class ConfigurationManagerImpl extends ManagerBase implements Configurati
 
     @Override
     public ServiceOffering createServiceOffering(CreateServiceOfferingCmd cmd) {
-        Long userId = UserContext.current().getCallerUserId();
+        Long userId = CallContext.current().getCallingUserId();
 
         String name = cmd.getServiceOfferingName();
         if ((name == null) || (name.length() == 0)) {
@@ -2185,7 +2185,7 @@ public class ConfigurationManagerImpl extends ManagerBase implements Configurati
             if (details != null) {
                 _serviceOfferingDetailsDao.persist(offering.getId(), details);
             }
-            UserContext.current().setEventDetails("Service offering id=" + offering.getId());
+            CallContext.current().setEventDetails("Service offering id=" + offering.getId());
             return offering;
         } else {
             return null;
@@ -2199,7 +2199,7 @@ public class ConfigurationManagerImpl extends ManagerBase implements Configurati
         Long id = cmd.getId();
         String name = cmd.getServiceOfferingName();
         Integer sortKey = cmd.getSortKey();
-        Long userId = UserContext.current().getCallerUserId();
+        Long userId = CallContext.current().getCallingUserId();
 
         if (userId == null) {
             userId = Long.valueOf(User.UID_SYSTEM);
@@ -2257,7 +2257,7 @@ public class ConfigurationManagerImpl extends ManagerBase implements Configurati
 
         if (_serviceOfferingDao.update(id, offering)) {
             offering = _serviceOfferingDao.findById(id);
-            UserContext.current().setEventDetails("Service offering id=" + offering.getId());
+            CallContext.current().setEventDetails("Service offering id=" + offering.getId());
             return offering;
         } else {
             return null;
@@ -2334,10 +2334,10 @@ public class ConfigurationManagerImpl extends ManagerBase implements Configurati
         if (iopsWriteRate != null && (iopsWriteRate > 0))
             newDiskOffering.setIopsWriteRate(iopsWriteRate);
 
-        UserContext.current().setEventDetails("Disk offering id=" + newDiskOffering.getId());
+        CallContext.current().setEventDetails("Disk offering id=" + newDiskOffering.getId());
         DiskOfferingVO offering = _diskOfferingDao.persist(newDiskOffering);
         if (offering != null) {
-            UserContext.current().setEventDetails("Disk offering id=" + newDiskOffering.getId());
+            CallContext.current().setEventDetails("Disk offering id=" + newDiskOffering.getId());
             return offering;
         } else {
             return null;
@@ -2448,7 +2448,7 @@ public class ConfigurationManagerImpl extends ManagerBase implements Configurati
         // }
 
         if (_diskOfferingDao.update(diskOfferingId, diskOffering)) {
-            UserContext.current().setEventDetails("Disk offering id=" + diskOffering.getId());
+            CallContext.current().setEventDetails("Disk offering id=" + diskOffering.getId());
             return _diskOfferingDao.findById(diskOfferingId);
         } else {
             return null;
@@ -2467,7 +2467,7 @@ public class ConfigurationManagerImpl extends ManagerBase implements Configurati
         }
 
         if (_diskOfferingDao.remove(diskOfferingId)) {
-            UserContext.current().setEventDetails("Disk offering id=" + diskOfferingId);
+            CallContext.current().setEventDetails("Disk offering id=" + diskOfferingId);
             return true;
         } else {
             return false;
@@ -2479,7 +2479,7 @@ public class ConfigurationManagerImpl extends ManagerBase implements Configurati
     public boolean deleteServiceOffering(DeleteServiceOfferingCmd cmd) {
 
         Long offeringId = cmd.getId();
-        Long userId = UserContext.current().getCallerUserId();
+        Long userId = CallContext.current().getCallingUserId();
 
         if (userId == null) {
             userId = Long.valueOf(User.UID_SYSTEM);
@@ -2496,7 +2496,7 @@ public class ConfigurationManagerImpl extends ManagerBase implements Configurati
         }
 
         if (_serviceOfferingDao.remove(offeringId)) {
-            UserContext.current().setEventDetails("Service offering id=" + offeringId);
+            CallContext.current().setEventDetails("Service offering id=" + offeringId);
             return true;
         } else {
             return false;
@@ -2640,7 +2640,7 @@ public class ConfigurationManagerImpl extends ManagerBase implements Configurati
         }
 
         // Check if zone is enabled
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
         if (Grouping.AllocationState.Disabled == zone.getAllocationState()
                 && !_accountMgr.isRootAdmin(caller.getType())) {
             throw new PermissionDeniedException("Cannot perform this operation, Zone is currently disabled: " + zoneId);
@@ -2884,7 +2884,7 @@ public class ConfigurationManagerImpl extends ManagerBase implements Configurati
         }
 
         // ACL check
-        checkZoneAccess(UserContext.current().getCaller(), zone);
+        checkZoneAccess(CallContext.current().getCallingAccount(), zone);
 
         // Validate the physical network
         if (_physicalNetworkDao.findById(physicalNetworkId) == null) {
@@ -3089,7 +3089,7 @@ public class ConfigurationManagerImpl extends ManagerBase implements Configurati
             }
         }
 
-        // Check if the vlan is being used 
+        // Check if the vlan is being used
         if (_zoneDao.findVnet(zoneId, physicalNetworkId, vlanId).size() > 0) {
             throw new InvalidParameterValueException("The VLAN tag " + vlanId
                     + " is already being used for dynamic vlan allocation for the guest network in zone " + zone.getName());
@@ -3426,8 +3426,8 @@ public class ConfigurationManagerImpl extends ManagerBase implements Configurati
             throw new InvalidParameterValueException("Please specify a valid IP range id.");
         }
 
-        return releasePublicIpRange(vlanDbId, UserContext.current().getCallerUserId(), UserContext.current()
-                .getCaller());
+        return releasePublicIpRange(vlanDbId, CallContext.current().getCallingUserId(), CallContext.current()
+                .getCallingAccount());
     }
 
     @DB
@@ -3765,8 +3765,8 @@ public class ConfigurationManagerImpl extends ManagerBase implements Configurati
             throw new InvalidParameterValueException("Please specify a valid IP range id.");
         }
 
-        return deleteVlanAndPublicIpRange(UserContext.current().getCallerUserId(), vlanDbId, UserContext.current()
-                .getCaller());
+        return deleteVlanAndPublicIpRange(CallContext.current().getCallingUserId(), vlanDbId, CallContext.current()
+                .getCallingAccount());
     }
 
     @Override
@@ -4035,9 +4035,12 @@ public class ConfigurationManagerImpl extends ManagerBase implements Configurati
             }
         }
 
-        return createNetworkOffering(name, displayText, trafficType, tags, specifyVlan, availability, networkRate,
+
+        NetworkOffering offering = createNetworkOffering(name, displayText, trafficType, tags, specifyVlan, availability, networkRate,
                 serviceProviderMap, false, guestType, false, serviceOfferingId, conserveMode, serviceCapabilityMap,
                 specifyIpRanges, isPersistent, details, egressDefaultPolicy);
+        CallContext.current().setEventDetails(" Id: " + offering.getId() + " Name: " + name);
+        return offering;
     }
 
     void validateLoadBalancerServiceCapabilities(Map<Capability, String> lbServiceCapabilityMap) {
@@ -4364,7 +4367,6 @@ public class ConfigurationManagerImpl extends ManagerBase implements Configurati
 
         txn.commit();
 
-        UserContext.current().setEventDetails(" Id: " + offering.getId() + " Name: " + name);
         return offering;
     }
 
@@ -4415,7 +4417,7 @@ public class ConfigurationManagerImpl extends ManagerBase implements Configurati
         isAscending = (isAscending == null ? true : isAscending);
         Filter searchFilter = new Filter(NetworkOfferingVO.class, "sortKey", isAscending, cmd.getStartIndex(),
                 cmd.getPageSizeVal());
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
         SearchCriteria<NetworkOfferingVO> sc = _networkOfferingDao.createSearchCriteria();
 
         Long id = cmd.getId();
@@ -4479,7 +4481,7 @@ public class ConfigurationManagerImpl extends ManagerBase implements Configurati
         }
         if (specifyVlan != null) {
             sc.addAnd("specifyVlan", SearchCriteria.Op.EQ, specifyVlan);
-        } 
+        }
 
         if (availability != null) {
             sc.addAnd("availability", SearchCriteria.Op.EQ, availability);
@@ -4652,7 +4654,7 @@ public class ConfigurationManagerImpl extends ManagerBase implements Configurati
     @ActionEvent(eventType = EventTypes.EVENT_NETWORK_OFFERING_DELETE, eventDescription = "deleting network offering")
     public boolean deleteNetworkOffering(DeleteNetworkOfferingCmd cmd) {
         Long offeringId = cmd.getId();
-        UserContext.current().setEventDetails(" Id: " + offeringId);
+        CallContext.current().setEventDetails(" Id: " + offeringId);
 
         // Verify network offering id
         NetworkOfferingVO offering = _networkOfferingDao.findById(offeringId);
@@ -4693,7 +4695,7 @@ public class ConfigurationManagerImpl extends ManagerBase implements Configurati
         Integer sortKey = cmd.getSortKey();
         Availability availability = null;
         String state = cmd.getState();
-        UserContext.current().setEventDetails(" Id: " + id);
+        CallContext.current().setEventDetails(" Id: " + id);
 
         // Verify input parameters
         NetworkOfferingVO offeringToUpdate = _networkOfferingDao.findById(id);
@@ -4795,7 +4797,7 @@ public class ConfigurationManagerImpl extends ManagerBase implements Configurati
         acctForUpdate.setDefaultZoneId(defaultZoneId);
 
         if (_accountDao.update(account.getId(), acctForUpdate)) {
-            UserContext.current().setEventDetails("Default zone id= " + defaultZoneId);
+            CallContext.current().setEventDetails("Default zone id= " + defaultZoneId);
             return _accountDao.findById(account.getId());
         } else {
             return null;

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/server/src/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java b/server/src/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java
index bec04c0..1035c5c 100755
--- a/server/src/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java
+++ b/server/src/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java
@@ -33,6 +33,7 @@ import org.apache.log4j.Logger;
 import com.google.gson.Gson;
 import com.google.gson.GsonBuilder;
 
+import org.apache.cloudstack.context.CallContext;
 import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao;
 import org.apache.cloudstack.storage.datastore.db.StoragePoolVO;
 import org.apache.cloudstack.storage.datastore.db.TemplateDataStoreDao;
@@ -110,7 +111,6 @@ import com.cloud.template.TemplateManager;
 import com.cloud.user.Account;
 import com.cloud.user.AccountManager;
 import com.cloud.user.User;
-import com.cloud.user.UserContext;
 import com.cloud.utils.DateUtil;
 import com.cloud.utils.NumbersUtil;
 import com.cloud.utils.Pair;
@@ -1504,9 +1504,9 @@ public class ConsoleProxyManagerImpl extends ManagerBase implements ConsoleProxy
         //release elastic IP here if assigned
         IPAddressVO ip = _ipAddressDao.findByAssociatedVmId(profile.getId());
         if (ip != null && ip.getSystem()) {
-            UserContext ctx = UserContext.current();
+            CallContext ctx = CallContext.current();
             try {
-                _rulesMgr.disableStaticNat(ip.getId(), ctx.getCaller(), ctx.getCallerUserId(), true);
+                _rulesMgr.disableStaticNat(ip.getId(), ctx.getCallingAccount(), ctx.getCallingUserId(), true);
             } catch (Exception ex) {
                 s_logger.warn("Failed to disable static nat and release system ip " + ip + " as a part of vm " + profile.getVirtualMachine() + " stop due to exception ", ex);
             }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/server/src/com/cloud/event/ActionEventInterceptor.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/event/ActionEventInterceptor.java b/server/src/com/cloud/event/ActionEventInterceptor.java
index d31a355..ba7e270 100644
--- a/server/src/com/cloud/event/ActionEventInterceptor.java
+++ b/server/src/com/cloud/event/ActionEventInterceptor.java
@@ -20,7 +20,8 @@ import java.lang.reflect.Method;
 
 import org.apache.log4j.Logger;
 
-import com.cloud.user.UserContext;
+import org.apache.cloudstack.context.CallContext;
+
 import com.cloud.utils.component.ComponentMethodInterceptor;
 
 public class ActionEventInterceptor implements ComponentMethodInterceptor {
@@ -36,9 +37,9 @@ public class ActionEventInterceptor implements ComponentMethodInterceptor {
         if (actionEvent != null) {
             boolean async = actionEvent.async();
             if(async){
-                UserContext ctx = UserContext.current();
-                long userId = ctx.getCallerUserId();
-                long accountId = ctx.getAccountId();
+                CallContext ctx = CallContext.current();
+                long userId = ctx.getCallingUserId();
+                long accountId = ctx.getCallingAccountId();
                 long startEventId = ctx.getStartEventId();
                 String eventDescription = actionEvent.eventDescription();
                 if(ctx.getEventDetails() != null){
@@ -54,9 +55,9 @@ public class ActionEventInterceptor implements ComponentMethodInterceptor {
     public void interceptComplete(Method method, Object target, Object event) {
         ActionEvent actionEvent = method.getAnnotation(ActionEvent.class);
         if (actionEvent != null) {
-            UserContext ctx = UserContext.current();
-            long userId = ctx.getCallerUserId();
-            long accountId = ctx.getAccountId();
+            CallContext ctx = CallContext.current();
+            long userId = ctx.getCallingUserId();
+            long accountId = ctx.getCallingAccountId();
             long startEventId = ctx.getStartEventId();
             String eventDescription = actionEvent.eventDescription();
             if(ctx.getEventDetails() != null){
@@ -76,9 +77,9 @@ public class ActionEventInterceptor implements ComponentMethodInterceptor {
     public void interceptException(Method method, Object target, Object event) {
         ActionEvent actionEvent = method.getAnnotation(ActionEvent.class);
         if (actionEvent != null) {
-            UserContext ctx = UserContext.current();
-            long userId = ctx.getCallerUserId();
-            long accountId = ctx.getAccountId();
+            CallContext ctx = CallContext.current();
+            long userId = ctx.getCallingUserId();
+            long accountId = ctx.getCallingAccountId();
             long startEventId = ctx.getStartEventId();
             String eventDescription = actionEvent.eventDescription();
             if(ctx.getEventDetails() != null){

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/server/src/com/cloud/event/ActionEventUtils.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/event/ActionEventUtils.java b/server/src/com/cloud/event/ActionEventUtils.java
index 906689f..7b727cd 100755
--- a/server/src/com/cloud/event/ActionEventUtils.java
+++ b/server/src/com/cloud/event/ActionEventUtils.java
@@ -17,6 +17,19 @@
 
 package com.cloud.event;
 
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.annotation.PostConstruct;
+import javax.inject.Inject;
+
+import org.apache.log4j.Logger;
+import org.springframework.beans.factory.NoSuchBeanDefinitionException;
+
+import org.apache.cloudstack.context.CallContext;
+import org.apache.cloudstack.framework.events.EventBus;
+import org.apache.cloudstack.framework.events.EventBusException;
+
 import com.cloud.event.dao.EventDao;
 import com.cloud.server.ManagementServer;
 import com.cloud.user.Account;
@@ -24,20 +37,8 @@ import com.cloud.user.AccountVO;
 import com.cloud.user.User;
 import com.cloud.user.dao.AccountDao;
 import com.cloud.user.dao.UserDao;
-import com.cloud.user.UserContext;
 import com.cloud.utils.component.ComponentContext;
-import org.apache.cloudstack.framework.events.EventBus;
-import org.apache.cloudstack.framework.events.EventBusException;
-import org.apache.log4j.Logger;
-import org.springframework.beans.factory.NoSuchBeanDefinitionException;
-import org.springframework.stereotype.Component;
 
-import javax.annotation.PostConstruct;
-import javax.inject.Inject;
-import java.util.HashMap;
-import java.util.Map;
-
-@Component
 public class ActionEventUtils {
     private static final Logger s_logger = Logger.getLogger(ActionEventUtils.class);
 
@@ -46,6 +47,12 @@ public class ActionEventUtils {
     protected static UserDao _userDao;
     protected static EventBus _eventBus = null;
 
+    public static final String EventDetails = "event_details";
+    public static final String EventId = "event_id";
+    public static final String EntityType = "entity_type";
+    public static final String EntityUuid = "entity_uuid";
+    public static final String EntityDetails = "entity_details";
+
     @Inject EventDao eventDao;
     @Inject AccountDao accountDao;
     @Inject UserDao userDao;
@@ -156,10 +163,10 @@ public class ActionEventUtils {
         // get the entity details for which ActionEvent is generated
         String entityType = null;
         String entityUuid = null;
-        UserContext context = UserContext.current();
+        CallContext context = CallContext.current();
         if (context != null) {
-            entityType = context.getEntityType();
-            entityUuid = context.getEntityUUID();
+            entityType = (String)context.getContextParameter(EntityType);
+            entityUuid = (String)context.getContextParameter(EntityUuid);
         }
 
         org.apache.cloudstack.framework.events.Event event = new org.apache.cloudstack.framework.events.Event(

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/server/src/com/cloud/metadata/ResourceMetaDataManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/metadata/ResourceMetaDataManagerImpl.java b/server/src/com/cloud/metadata/ResourceMetaDataManagerImpl.java
index 23708f8..9bf52aa 100644
--- a/server/src/com/cloud/metadata/ResourceMetaDataManagerImpl.java
+++ b/server/src/com/cloud/metadata/ResourceMetaDataManagerImpl.java
@@ -31,11 +31,13 @@ import com.cloud.storage.dao.VolumeDetailsDao;
 import com.cloud.vm.NicDetailVO;
 import com.cloud.vm.dao.NicDao;
 import com.cloud.vm.dao.NicDetailDao;
+
 import org.apache.cloudstack.api.command.user.tag.ListTagsCmd;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 import org.springframework.stereotype.Component;
 
-
 import com.cloud.api.query.dao.ResourceTagJoinDao;
 import com.cloud.api.query.vo.ResourceTagJoinVO;
 import com.cloud.domain.Domain;
@@ -64,7 +66,6 @@ import com.cloud.tags.dao.ResourceTagDao;
 import com.cloud.user.Account;
 import com.cloud.user.AccountManager;
 import com.cloud.user.DomainManager;
-import com.cloud.user.UserContext;
 import com.cloud.utils.Pair;
 import com.cloud.utils.Ternary;
 import com.cloud.utils.component.Manager;


[09/50] [abbrv] UserContext switched to CallContext. Added generic storage mechanism for other code to carry information throughout a call. Made the calling User and Account a must have. Added an interface to carry entities in error. Fixed up the cod

Posted by ch...@apache.org.
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/plugins/api/rate-limit/src/org/apache/cloudstack/api/command/admin/ratelimit/ResetApiLimitCmd.java
----------------------------------------------------------------------
diff --git a/plugins/api/rate-limit/src/org/apache/cloudstack/api/command/admin/ratelimit/ResetApiLimitCmd.java b/plugins/api/rate-limit/src/org/apache/cloudstack/api/command/admin/ratelimit/ResetApiLimitCmd.java
index 7ec5316..0fdf391 100644
--- a/plugins/api/rate-limit/src/org/apache/cloudstack/api/command/admin/ratelimit/ResetApiLimitCmd.java
+++ b/plugins/api/rate-limit/src/org/apache/cloudstack/api/command/admin/ratelimit/ResetApiLimitCmd.java
@@ -26,13 +26,14 @@ import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.AccountResponse;
 import org.apache.cloudstack.api.response.ApiLimitResponse;
 import org.apache.cloudstack.api.response.SuccessResponse;
+import org.apache.cloudstack.context.CallContext;
 import org.apache.cloudstack.ratelimit.ApiRateLimitService;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.configuration.Config;
 import com.cloud.configuration.dao.ConfigurationDao;
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
 
 import javax.inject.Inject;
 
@@ -84,7 +85,7 @@ public class ResetApiLimitCmd extends BaseCmd {
 
     @Override
     public long getEntityOwnerId() {
-        Account account = UserContext.current().getCaller();
+        Account account = CallContext.current().getCallingAccount();
         if (account != null) {
             return account.getId();
         }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/plugins/api/rate-limit/src/org/apache/cloudstack/api/command/user/ratelimit/GetApiLimitCmd.java
----------------------------------------------------------------------
diff --git a/plugins/api/rate-limit/src/org/apache/cloudstack/api/command/user/ratelimit/GetApiLimitCmd.java b/plugins/api/rate-limit/src/org/apache/cloudstack/api/command/user/ratelimit/GetApiLimitCmd.java
index ba92e8b..6add147 100644
--- a/plugins/api/rate-limit/src/org/apache/cloudstack/api/command/user/ratelimit/GetApiLimitCmd.java
+++ b/plugins/api/rate-limit/src/org/apache/cloudstack/api/command/user/ratelimit/GetApiLimitCmd.java
@@ -31,10 +31,12 @@ import org.apache.cloudstack.api.command.admin.ratelimit.ResetApiLimitCmd;
 import org.apache.cloudstack.api.response.AccountResponse;
 import org.apache.cloudstack.api.response.ApiLimitResponse;
 import org.apache.cloudstack.api.response.PhysicalNetworkResponse;
+
 import org.apache.log4j.Logger;
 
 import org.apache.cloudstack.api.APICommand;
 import org.apache.cloudstack.api.response.ListResponse;
+import org.apache.cloudstack.context.CallContext;
 import org.apache.cloudstack.ratelimit.ApiRateLimitService;
 
 import com.cloud.configuration.Config;
@@ -45,7 +47,6 @@ import com.cloud.exception.InvalidParameterValueException;
 import com.cloud.exception.ResourceAllocationException;
 import com.cloud.exception.ResourceUnavailableException;
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
 import com.cloud.utils.exception.CloudRuntimeException;
 
 import javax.inject.Inject;
@@ -73,7 +74,7 @@ public class GetApiLimitCmd extends BaseCmd {
 
     @Override
     public long getEntityOwnerId() {
-        Account account = UserContext.current().getCaller();
+        Account account = CallContext.current().getCallingAccount();
         if (account != null) {
             return account.getId();
         }
@@ -87,7 +88,7 @@ public class GetApiLimitCmd extends BaseCmd {
         if ( !apiLimitEnabled ){
             throw new ServerApiException(ApiErrorCode.UNSUPPORTED_ACTION_ERROR, "This api is only available when api.throttling.enabled = true.");
         }
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
         ApiLimitResponse response = _apiLimitService.searchApiLimit(caller);
         response.setResponseName(getCommandName());
         response.setObjectName("apilimit");

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/plugins/dedicated-resources/src/org/apache/cloudstack/dedicated/DedicatedResourceManagerImpl.java
----------------------------------------------------------------------
diff --git a/plugins/dedicated-resources/src/org/apache/cloudstack/dedicated/DedicatedResourceManagerImpl.java b/plugins/dedicated-resources/src/org/apache/cloudstack/dedicated/DedicatedResourceManagerImpl.java
index c321b22..15d553e 100755
--- a/plugins/dedicated-resources/src/org/apache/cloudstack/dedicated/DedicatedResourceManagerImpl.java
+++ b/plugins/dedicated-resources/src/org/apache/cloudstack/dedicated/DedicatedResourceManagerImpl.java
@@ -25,6 +25,7 @@ import javax.inject.Inject;
 import javax.naming.ConfigurationException;
 
 import com.cloud.utils.component.AdapterBase;
+
 import org.apache.cloudstack.api.commands.DedicateClusterCmd;
 import org.apache.cloudstack.api.commands.DedicateHostCmd;
 import org.apache.cloudstack.api.commands.DedicatePodCmd;
@@ -41,6 +42,8 @@ import org.apache.cloudstack.api.response.DedicateClusterResponse;
 import org.apache.cloudstack.api.response.DedicateHostResponse;
 import org.apache.cloudstack.api.response.DedicatePodResponse;
 import org.apache.cloudstack.api.response.DedicateZoneResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 import org.springframework.stereotype.Component;
 
@@ -66,7 +69,6 @@ import com.cloud.host.dao.HostDao;
 import com.cloud.user.Account;
 import com.cloud.user.AccountManager;
 import com.cloud.user.AccountVO;
-import com.cloud.user.UserContext;
 import com.cloud.user.dao.AccountDao;
 import com.cloud.utils.DateUtil;
 import com.cloud.utils.NumbersUtil;
@@ -107,7 +109,7 @@ public class DedicatedResourceManagerImpl implements DedicatedService {
         Long accountId = null;
         List<HostVO> hosts = null;
         if(accountName != null){
-            Account caller = UserContext.current().getCaller();
+            Account caller = CallContext.current().getCallingAccount();
             Account owner = _accountMgr.finalizeOwner(caller, accountName, domainId, null);
             accountId = owner.getId();
         }
@@ -236,7 +238,7 @@ public class DedicatedResourceManagerImpl implements DedicatedService {
     public List<DedicatedResourceVO> dedicatePod(Long podId, Long domainId, String accountName) {
         Long accountId = null;
         if(accountName != null){
-            Account caller = UserContext.current().getCaller();
+            Account caller = CallContext.current().getCallingAccount();
             Account owner = _accountMgr.finalizeOwner(caller, accountName, domainId, null);
             accountId  = owner.getId();
         }
@@ -354,7 +356,7 @@ public class DedicatedResourceManagerImpl implements DedicatedService {
         Long accountId = null;
         List<HostVO> hosts = null;
         if(accountName != null){
-            Account caller = UserContext.current().getCaller();
+            Account caller = CallContext.current().getCallingAccount();
             Account owner = _accountMgr.finalizeOwner(caller, accountName, domainId, null);
             accountId = owner.getId();
         }
@@ -456,7 +458,7 @@ public class DedicatedResourceManagerImpl implements DedicatedService {
     public List<DedicatedResourceVO> dedicateHost(Long hostId, Long domainId, String accountName) {
         Long accountId = null;
         if(accountName != null){
-            Account caller = UserContext.current().getCaller();
+            Account caller = CallContext.current().getCallingAccount();
             Account owner = _accountMgr.finalizeOwner(caller, accountName, domainId, null);
             accountId = owner.getId();
         }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/plugins/dedicated-resources/test/org/apache/cloudstack/dedicated/manager/DedicatedApiUnitTest.java
----------------------------------------------------------------------
diff --git a/plugins/dedicated-resources/test/org/apache/cloudstack/dedicated/manager/DedicatedApiUnitTest.java b/plugins/dedicated-resources/test/org/apache/cloudstack/dedicated/manager/DedicatedApiUnitTest.java
index 58aae23..72890f2 100644
--- a/plugins/dedicated-resources/test/org/apache/cloudstack/dedicated/manager/DedicatedApiUnitTest.java
+++ b/plugins/dedicated-resources/test/org/apache/cloudstack/dedicated/manager/DedicatedApiUnitTest.java
@@ -22,17 +22,15 @@ import static org.mockito.Matchers.anyString;
 import static org.mockito.Mockito.when;
 
 import java.io.IOException;
+import java.util.UUID;
 
 import javax.inject.Inject;
-import javax.naming.ConfigurationException;
 
 import junit.framework.Assert;
 
-import org.apache.cloudstack.dedicated.DedicatedResourceManagerImpl;
-import org.apache.cloudstack.test.utils.SpringUtils;
 import org.apache.log4j.Logger;
+import org.junit.After;
 import org.junit.Before;
-import org.junit.BeforeClass;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mockito;
@@ -48,6 +46,10 @@ import org.springframework.test.context.ContextConfiguration;
 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
 import org.springframework.test.context.support.AnnotationConfigContextLoader;
 
+import org.apache.cloudstack.context.CallContext;
+import org.apache.cloudstack.dedicated.DedicatedResourceManagerImpl;
+import org.apache.cloudstack.test.utils.SpringUtils;
+
 import com.cloud.configuration.dao.ConfigurationDao;
 import com.cloud.dc.DedicatedResourceVO;
 import com.cloud.dc.dao.ClusterDao;
@@ -61,7 +63,7 @@ import com.cloud.host.dao.HostDao;
 import com.cloud.user.Account;
 import com.cloud.user.AccountManager;
 import com.cloud.user.AccountVO;
-import com.cloud.user.UserContext;
+import com.cloud.user.UserVO;
 import com.cloud.user.dao.AccountDao;
 import com.cloud.utils.component.ComponentContext;
 import com.cloud.utils.exception.CloudRuntimeException;
@@ -108,24 +110,26 @@ public class DedicatedApiUnitTest {
     private static long accountId = 5L;
     private static String accountName = "admin";
 
-    @BeforeClass
-    public static void setUp() throws ConfigurationException {
-
-    }
-
     @Before
-    public void testSetUp() {
+    public void setUp() {
         ComponentContext.initComponentsLifeCycle();
         AccountVO account = new AccountVO(accountName, domainId, "networkDomain", Account.ACCOUNT_TYPE_NORMAL, "uuid");
         DomainVO domain = new DomainVO("rootDomain", 5L, 5L, "networkDomain");
 
-        UserContext.registerContext(1, account, null, true);
+        UserVO user = new UserVO(1, "testuser", "password", "firstname", "lastName", "email", "timezone", UUID.randomUUID().toString());
+
+        CallContext.register(user, account);
         when(_acctMgr.finalizeOwner((Account) anyObject(), anyString(), anyLong(), anyLong())).thenReturn(account);
         when(_accountDao.findByIdIncludingRemoved(0L)).thenReturn(account);
         when(_accountDao.findById(anyLong())).thenReturn(account);
         when(_domainDao.findById(domainId)).thenReturn(domain);
     }
 
+    @After
+    public void tearDown() {
+        CallContext.unregister();
+    }
+
     @Test(expected = InvalidParameterValueException.class)
     public void InvalidDomainIDForAccountTest() {
         _dedicatedService.dedicateZone(10L, domainId, accountName);

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/plugins/deployment-planners/implicit-dedication/test/org/apache/cloudstack/implicitplanner/ImplicitPlannerTest.java
----------------------------------------------------------------------
diff --git a/plugins/deployment-planners/implicit-dedication/test/org/apache/cloudstack/implicitplanner/ImplicitPlannerTest.java b/plugins/deployment-planners/implicit-dedication/test/org/apache/cloudstack/implicitplanner/ImplicitPlannerTest.java
index e519668..02124a2 100644
--- a/plugins/deployment-planners/implicit-dedication/test/org/apache/cloudstack/implicitplanner/ImplicitPlannerTest.java
+++ b/plugins/deployment-planners/implicit-dedication/test/org/apache/cloudstack/implicitplanner/ImplicitPlannerTest.java
@@ -16,8 +16,8 @@
 // under the License.
 package org.apache.cloudstack.implicitplanner;
 
-import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 import static org.mockito.Matchers.anyString;
 import static org.mockito.Mockito.mock;
@@ -30,15 +30,12 @@ import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+import java.util.UUID;
 
 import javax.inject.Inject;
-import javax.naming.ConfigurationException;
 
-import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreManager;
-import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao;
-import org.apache.cloudstack.test.utils.SpringUtils;
+import org.junit.After;
 import org.junit.Before;
-import org.junit.BeforeClass;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mockito;
@@ -54,6 +51,11 @@ import org.springframework.test.context.ContextConfiguration;
 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
 import org.springframework.test.context.support.AnnotationConfigContextLoader;
 
+import org.apache.cloudstack.context.CallContext;
+import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreManager;
+import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao;
+import org.apache.cloudstack.test.utils.SpringUtils;
+
 import com.cloud.capacity.CapacityManager;
 import com.cloud.capacity.CapacityVO;
 import com.cloud.capacity.dao.CapacityDao;
@@ -82,7 +84,7 @@ import com.cloud.storage.dao.VolumeDao;
 import com.cloud.user.Account;
 import com.cloud.user.AccountManager;
 import com.cloud.user.AccountVO;
-import com.cloud.user.UserContext;
+import com.cloud.user.UserVO;
 import com.cloud.utils.Pair;
 import com.cloud.utils.component.ComponentContext;
 import com.cloud.vm.UserVmVO;
@@ -151,12 +153,8 @@ public class ImplicitPlannerTest {
     int ramInOffering = 512;
     AccountVO acct = new AccountVO(accountId);
 
-    @BeforeClass
-    public static void setUp() throws ConfigurationException {
-    }
-
     @Before
-    public void testSetUp() {
+    public void setUp() {
         ComponentContext.initComponentsLifeCycle();
 
         acct.setType(Account.ACCOUNT_TYPE_NORMAL);
@@ -164,7 +162,14 @@ public class ImplicitPlannerTest {
         acct.setDomainId(domainId);
         acct.setId(accountId);
 
-        UserContext.registerContext(1, acct, null, true);
+        UserVO user = new UserVO(1, "testuser", "password", "firstname", "lastName", "email", "timezone", UUID.randomUUID().toString());
+
+        CallContext.register(user, acct);
+    }
+
+    @After
+    public void tearDown() {
+        CallContext.unregister();
     }
 
     @Test

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/plugins/hypervisors/baremetal/src/org/apache/cloudstack/api/AddBaremetalDhcpCmd.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/baremetal/src/org/apache/cloudstack/api/AddBaremetalDhcpCmd.java b/plugins/hypervisors/baremetal/src/org/apache/cloudstack/api/AddBaremetalDhcpCmd.java
index 7c56a8a..04c9137 100755
--- a/plugins/hypervisors/baremetal/src/org/apache/cloudstack/api/AddBaremetalDhcpCmd.java
+++ b/plugins/hypervisors/baremetal/src/org/apache/cloudstack/api/AddBaremetalDhcpCmd.java
@@ -30,6 +30,8 @@ import org.apache.cloudstack.api.response.PhysicalNetworkResponse;
 import org.apache.cloudstack.api.response.PodResponse;
 import org.apache.cloudstack.api.Parameter;
 import org.apache.cloudstack.api.ServerApiException;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.baremetal.database.BaremetalDhcpVO;
@@ -41,7 +43,6 @@ import com.cloud.exception.InsufficientCapacityException;
 import com.cloud.exception.NetworkRuleConflictException;
 import com.cloud.exception.ResourceAllocationException;
 import com.cloud.exception.ResourceUnavailableException;
-import com.cloud.user.UserContext;
 @APICommand(name="addBaremetalDhcp", description="adds a baremetal dhcp server", responseObject = BaremetalDhcpResponse.class)
 public class AddBaremetalDhcpCmd extends BaseAsyncCmd {
     private static final String s_name = "addexternaldhcpresponse";
@@ -102,7 +103,7 @@ public class AddBaremetalDhcpCmd extends BaseAsyncCmd {
 
     @Override
     public long getEntityOwnerId() {
-        return UserContext.current().getCaller().getId();
+        return CallContext.current().getCallingAccount().getId();
     }
 
     public Long getPodId() {

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/plugins/hypervisors/baremetal/src/org/apache/cloudstack/api/AddBaremetalPxeCmd.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/baremetal/src/org/apache/cloudstack/api/AddBaremetalPxeCmd.java b/plugins/hypervisors/baremetal/src/org/apache/cloudstack/api/AddBaremetalPxeCmd.java
index e1b39e9..49effca 100755
--- a/plugins/hypervisors/baremetal/src/org/apache/cloudstack/api/AddBaremetalPxeCmd.java
+++ b/plugins/hypervisors/baremetal/src/org/apache/cloudstack/api/AddBaremetalPxeCmd.java
@@ -30,6 +30,8 @@ import org.apache.cloudstack.api.response.PhysicalNetworkResponse;
 import org.apache.cloudstack.api.response.PodResponse;
 import org.apache.cloudstack.api.Parameter;
 import org.apache.cloudstack.api.ServerApiException;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.baremetal.database.BaremetalPxeVO;
@@ -40,7 +42,6 @@ import com.cloud.exception.InsufficientCapacityException;
 import com.cloud.exception.NetworkRuleConflictException;
 import com.cloud.exception.ResourceAllocationException;
 import com.cloud.exception.ResourceUnavailableException;
-import com.cloud.user.UserContext;
 public class AddBaremetalPxeCmd extends BaseAsyncCmd {
     private static final String s_name = "addexternalpxeresponse";
     public static final Logger s_logger = Logger.getLogger(AddBaremetalPxeCmd.class);
@@ -95,7 +96,7 @@ public class AddBaremetalPxeCmd extends BaseAsyncCmd {
 
     @Override
     public long getEntityOwnerId() {
-        return UserContext.current().getCaller().getId();
+        return CallContext.current().getCallingAccount().getId();
     }
 
     public Long getPhysicalNetworkId() {

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/plugins/hypervisors/vmware/test/com/cloud/hypervisor/vmware/VmwareDatacenterApiUnitTest.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/vmware/test/com/cloud/hypervisor/vmware/VmwareDatacenterApiUnitTest.java b/plugins/hypervisors/vmware/test/com/cloud/hypervisor/vmware/VmwareDatacenterApiUnitTest.java
index d79d41e..d313bfa 100644
--- a/plugins/hypervisors/vmware/test/com/cloud/hypervisor/vmware/VmwareDatacenterApiUnitTest.java
+++ b/plugins/hypervisors/vmware/test/com/cloud/hypervisor/vmware/VmwareDatacenterApiUnitTest.java
@@ -17,7 +17,6 @@
 
 package com.cloud.hypervisor.vmware;
 
-import static org.junit.Assert.*;
 import static org.mockito.Mockito.when;
 
 import java.io.IOException;
@@ -28,12 +27,7 @@ import java.util.UUID;
 import javax.inject.Inject;
 import javax.naming.ConfigurationException;
 
-import junit.framework.TestCase;
-
-import org.apache.cloudstack.api.command.admin.zone.AddVmwareDcCmd;
-import org.apache.cloudstack.api.command.admin.zone.RemoveVmwareDcCmd;
-import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreManager;
-import org.apache.cloudstack.test.utils.SpringUtils;
+import org.junit.After;
 import org.junit.Before;
 import org.junit.BeforeClass;
 import org.junit.Test;
@@ -41,7 +35,6 @@ import org.junit.runner.RunWith;
 import org.mockito.Mock;
 import org.mockito.Mockito;
 import org.mockito.MockitoAnnotations;
-import org.mockito.Spy;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.ComponentScan;
 import org.springframework.context.annotation.ComponentScan.Filter;
@@ -54,13 +47,19 @@ import org.springframework.test.context.ContextConfiguration;
 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
 import org.springframework.test.context.support.AnnotationConfigContextLoader;
 
+import org.apache.cloudstack.api.command.admin.zone.AddVmwareDcCmd;
+import org.apache.cloudstack.api.command.admin.zone.RemoveVmwareDcCmd;
+import org.apache.cloudstack.context.CallContext;
+import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreManager;
+import org.apache.cloudstack.test.utils.SpringUtils;
+
 import com.cloud.agent.AgentManager;
 import com.cloud.cluster.ClusterManager;
 import com.cloud.configuration.dao.ConfigurationDao;
 import com.cloud.dc.ClusterDetailsDao;
 import com.cloud.dc.ClusterDetailsVO;
-import com.cloud.dc.DataCenter.NetworkType;
 import com.cloud.dc.ClusterVO;
+import com.cloud.dc.DataCenter.NetworkType;
 import com.cloud.dc.DataCenterVO;
 import com.cloud.dc.HostPodVO;
 import com.cloud.dc.dao.ClusterDao;
@@ -77,7 +76,6 @@ import com.cloud.hypervisor.dao.HypervisorCapabilitiesDao;
 import com.cloud.hypervisor.vmware.dao.LegacyZoneDao;
 import com.cloud.hypervisor.vmware.dao.VmwareDatacenterDao;
 import com.cloud.hypervisor.vmware.dao.VmwareDatacenterZoneMapDao;
-import com.cloud.hypervisor.vmware.manager.VmwareManager;
 import com.cloud.hypervisor.vmware.manager.VmwareManagerImpl;
 import com.cloud.network.NetworkModel;
 import com.cloud.network.dao.CiscoNexusVSMDeviceDao;
@@ -90,7 +88,7 @@ import com.cloud.user.Account;
 import com.cloud.user.AccountManager;
 import com.cloud.user.AccountService;
 import com.cloud.user.AccountVO;
-import com.cloud.user.UserContext;
+import com.cloud.user.UserVO;
 import com.cloud.user.dao.AccountDao;
 import com.cloud.utils.component.ComponentContext;
 import com.cloud.utils.exception.CloudRuntimeException;
@@ -176,7 +174,10 @@ public class VmwareDatacenterApiUnitTest {
         acct.setType(Account.ACCOUNT_TYPE_ADMIN);
         acct.setAccountName("admin");
         acct.setDomainId(domainId);
-        UserContext.registerContext(1, acct, null, true);
+
+        UserVO user1 = new UserVO(1, "testuser", "password", "firstname", "lastName", "email", "timezone", UUID.randomUUID().toString());
+
+        CallContext.register(user1, acct);
 
         when(_accountDao.findByIdIncludingRemoved(0L)).thenReturn(acct);
 
@@ -222,6 +223,11 @@ public class VmwareDatacenterApiUnitTest {
         Mockito.when(removeCmd.getZoneId()).thenReturn(1L);
     }
 
+    @After
+    public void tearDown() {
+        CallContext.unregister();
+    }
+
     //@Test(expected = InvalidParameterValueException.class)
     public void testAddVmwareDcToInvalidZone() throws ResourceInUseException, IllegalArgumentException, DiscoveryException, Exception {
         Mockito.when(addCmd.getZoneId()).thenReturn(2L);

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/plugins/network-elements/bigswitch-vns/src/com/cloud/api/commands/AddBigSwitchVnsDeviceCmd.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/bigswitch-vns/src/com/cloud/api/commands/AddBigSwitchVnsDeviceCmd.java b/plugins/network-elements/bigswitch-vns/src/com/cloud/api/commands/AddBigSwitchVnsDeviceCmd.java
index 30f631d..a068d43 100644
--- a/plugins/network-elements/bigswitch-vns/src/com/cloud/api/commands/AddBigSwitchVnsDeviceCmd.java
+++ b/plugins/network-elements/bigswitch-vns/src/com/cloud/api/commands/AddBigSwitchVnsDeviceCmd.java
@@ -25,6 +25,7 @@ import org.apache.cloudstack.api.BaseAsyncCmd;
 import org.apache.cloudstack.api.Parameter;
 import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.PhysicalNetworkResponse;
+import org.apache.cloudstack.context.CallContext;
 
 import com.cloud.api.response.BigSwitchVnsDeviceResponse;
 import com.cloud.exception.ConcurrentOperationException;
@@ -34,7 +35,6 @@ import com.cloud.exception.ResourceAllocationException;
 import com.cloud.exception.ResourceUnavailableException;
 import com.cloud.network.BigSwitchVnsDeviceVO;
 import com.cloud.network.element.BigSwitchVnsElementService;
-import com.cloud.user.UserContext;
 import com.cloud.utils.exception.CloudRuntimeException;
 
 @APICommand(name = "addBigSwitchVnsDevice", responseObject=BigSwitchVnsDeviceResponse.class, description="Adds a BigSwitch VNS device", since = "4.1.0")
@@ -96,7 +96,7 @@ public class AddBigSwitchVnsDeviceCmd extends BaseAsyncCmd {
 
     @Override
     public long getEntityOwnerId() {
-        return UserContext.current().getCaller().getId();
+        return CallContext.current().getCallingAccount().getId();
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/plugins/network-elements/bigswitch-vns/src/com/cloud/api/commands/DeleteBigSwitchVnsDeviceCmd.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/bigswitch-vns/src/com/cloud/api/commands/DeleteBigSwitchVnsDeviceCmd.java b/plugins/network-elements/bigswitch-vns/src/com/cloud/api/commands/DeleteBigSwitchVnsDeviceCmd.java
index 9a7dc48..d7b6706 100644
--- a/plugins/network-elements/bigswitch-vns/src/com/cloud/api/commands/DeleteBigSwitchVnsDeviceCmd.java
+++ b/plugins/network-elements/bigswitch-vns/src/com/cloud/api/commands/DeleteBigSwitchVnsDeviceCmd.java
@@ -25,6 +25,7 @@ import org.apache.cloudstack.api.BaseAsyncCmd;
 import org.apache.cloudstack.api.Parameter;
 import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.SuccessResponse;
+import org.apache.cloudstack.context.CallContext;
 
 import com.cloud.api.response.BigSwitchVnsDeviceResponse;
 import com.cloud.exception.ConcurrentOperationException;
@@ -33,7 +34,6 @@ import com.cloud.exception.InvalidParameterValueException;
 import com.cloud.exception.ResourceAllocationException;
 import com.cloud.exception.ResourceUnavailableException;
 import com.cloud.network.element.BigSwitchVnsElementService;
-import com.cloud.user.UserContext;
 import com.cloud.utils.exception.CloudRuntimeException;
 
 @APICommand(name = "deleteBigSwitchVnsDevice", responseObject=SuccessResponse.class, description=" delete a bigswitch vns device", since = "4.1.0")
@@ -86,7 +86,7 @@ public class DeleteBigSwitchVnsDeviceCmd extends BaseAsyncCmd {
 
     @Override
     public long getEntityOwnerId() {
-        return UserContext.current().getCaller().getId();
+        return CallContext.current().getCallingAccount().getId();
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/plugins/network-elements/cisco-vnmc/src/com/cloud/api/commands/AddCiscoAsa1000vResourceCmd.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/cisco-vnmc/src/com/cloud/api/commands/AddCiscoAsa1000vResourceCmd.java b/plugins/network-elements/cisco-vnmc/src/com/cloud/api/commands/AddCiscoAsa1000vResourceCmd.java
index c880199..183b7ac 100755
--- a/plugins/network-elements/cisco-vnmc/src/com/cloud/api/commands/AddCiscoAsa1000vResourceCmd.java
+++ b/plugins/network-elements/cisco-vnmc/src/com/cloud/api/commands/AddCiscoAsa1000vResourceCmd.java
@@ -26,6 +26,8 @@ import org.apache.cloudstack.api.Parameter;
 import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.ClusterResponse;
 import org.apache.cloudstack.api.response.PhysicalNetworkResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.api.response.CiscoAsa1000vResourceResponse;
@@ -36,7 +38,6 @@ import com.cloud.exception.ResourceAllocationException;
 import com.cloud.exception.ResourceUnavailableException;
 import com.cloud.network.cisco.CiscoAsa1000vDevice;
 import com.cloud.network.element.CiscoAsa1000vService;
-import com.cloud.user.UserContext;
 import com.cloud.utils.exception.CloudRuntimeException;
 
 @APICommand(name="addCiscoAsa1000vResource", responseObject=CiscoAsa1000vResourceResponse.class, description="Adds a Cisco Asa 1000v appliance")
@@ -111,6 +112,6 @@ public class AddCiscoAsa1000vResourceCmd extends BaseCmd {
 
     @Override
     public long getEntityOwnerId() {
-        return UserContext.current().getCaller().getId();
+        return CallContext.current().getCallingAccount().getId();
     }
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/plugins/network-elements/cisco-vnmc/src/com/cloud/api/commands/AddCiscoVnmcResourceCmd.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/cisco-vnmc/src/com/cloud/api/commands/AddCiscoVnmcResourceCmd.java b/plugins/network-elements/cisco-vnmc/src/com/cloud/api/commands/AddCiscoVnmcResourceCmd.java
index bfd6db9..0aeb863 100644
--- a/plugins/network-elements/cisco-vnmc/src/com/cloud/api/commands/AddCiscoVnmcResourceCmd.java
+++ b/plugins/network-elements/cisco-vnmc/src/com/cloud/api/commands/AddCiscoVnmcResourceCmd.java
@@ -25,6 +25,8 @@ import org.apache.cloudstack.api.BaseCmd;
 import org.apache.cloudstack.api.Parameter;
 import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.PhysicalNetworkResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.api.response.CiscoVnmcResourceResponse;
@@ -35,7 +37,6 @@ import com.cloud.exception.ResourceAllocationException;
 import com.cloud.exception.ResourceUnavailableException;
 import com.cloud.network.cisco.CiscoVnmcController;
 import com.cloud.network.element.CiscoVnmcElementService;
-import com.cloud.user.UserContext;
 import com.cloud.utils.exception.CloudRuntimeException;
 
 @APICommand(name="addCiscoVnmcResource", responseObject=CiscoVnmcResourceResponse.class, description="Adds a Cisco Vnmc Controller")
@@ -110,6 +111,6 @@ public class AddCiscoVnmcResourceCmd extends BaseCmd {
 
     @Override
     public long getEntityOwnerId() {
-        return UserContext.current().getCaller().getId();
+        return CallContext.current().getCallingAccount().getId();
     }
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/plugins/network-elements/cisco-vnmc/src/com/cloud/api/commands/DeleteCiscoAsa1000vResourceCmd.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/cisco-vnmc/src/com/cloud/api/commands/DeleteCiscoAsa1000vResourceCmd.java b/plugins/network-elements/cisco-vnmc/src/com/cloud/api/commands/DeleteCiscoAsa1000vResourceCmd.java
index d4f86fa..717ec60 100755
--- a/plugins/network-elements/cisco-vnmc/src/com/cloud/api/commands/DeleteCiscoAsa1000vResourceCmd.java
+++ b/plugins/network-elements/cisco-vnmc/src/com/cloud/api/commands/DeleteCiscoAsa1000vResourceCmd.java
@@ -25,6 +25,8 @@ import org.apache.cloudstack.api.BaseCmd;
 import org.apache.cloudstack.api.Parameter;
 import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.SuccessResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.api.response.CiscoAsa1000vResourceResponse;
@@ -34,7 +36,6 @@ import com.cloud.exception.InvalidParameterValueException;
 import com.cloud.exception.ResourceAllocationException;
 import com.cloud.exception.ResourceUnavailableException;
 import com.cloud.network.element.CiscoAsa1000vService;
-import com.cloud.user.UserContext;
 import com.cloud.utils.exception.CloudRuntimeException;
 
 @APICommand(name="deleteCiscoAsa1000vResource", responseObject=SuccessResponse.class, description="Deletes a Cisco ASA 1000v appliance")
@@ -87,7 +88,7 @@ public class DeleteCiscoAsa1000vResourceCmd extends BaseCmd {
 
     @Override
     public long getEntityOwnerId() {
-        return UserContext.current().getCaller().getId();
+        return CallContext.current().getCallingAccount().getId();
     }
 
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/plugins/network-elements/cisco-vnmc/src/com/cloud/api/commands/DeleteCiscoVnmcResourceCmd.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/cisco-vnmc/src/com/cloud/api/commands/DeleteCiscoVnmcResourceCmd.java b/plugins/network-elements/cisco-vnmc/src/com/cloud/api/commands/DeleteCiscoVnmcResourceCmd.java
index d2a3720..f175b71 100644
--- a/plugins/network-elements/cisco-vnmc/src/com/cloud/api/commands/DeleteCiscoVnmcResourceCmd.java
+++ b/plugins/network-elements/cisco-vnmc/src/com/cloud/api/commands/DeleteCiscoVnmcResourceCmd.java
@@ -25,6 +25,8 @@ import org.apache.cloudstack.api.BaseCmd;
 import org.apache.cloudstack.api.Parameter;
 import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.SuccessResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.api.response.CiscoVnmcResourceResponse;
@@ -34,7 +36,6 @@ import com.cloud.exception.InvalidParameterValueException;
 import com.cloud.exception.ResourceAllocationException;
 import com.cloud.exception.ResourceUnavailableException;
 import com.cloud.network.element.CiscoVnmcElementService;
-import com.cloud.user.UserContext;
 import com.cloud.utils.exception.CloudRuntimeException;
 
 @APICommand(name="deleteCiscoVnmcResource", responseObject=SuccessResponse.class, description="Deletes a Cisco Vnmc controller")
@@ -87,7 +88,7 @@ public class DeleteCiscoVnmcResourceCmd extends BaseCmd {
 
     @Override
     public long getEntityOwnerId() {
-        return UserContext.current().getCaller().getId();
+        return CallContext.current().getCallingAccount().getId();
     }
 
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/plugins/network-elements/cisco-vnmc/src/com/cloud/network/element/CiscoVnmcElement.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/cisco-vnmc/src/com/cloud/network/element/CiscoVnmcElement.java b/plugins/network-elements/cisco-vnmc/src/com/cloud/network/element/CiscoVnmcElement.java
index 553325c..de52c21 100644
--- a/plugins/network-elements/cisco-vnmc/src/com/cloud/network/element/CiscoVnmcElement.java
+++ b/plugins/network-elements/cisco-vnmc/src/com/cloud/network/element/CiscoVnmcElement.java
@@ -28,7 +28,9 @@ import javax.ejb.Local;
 import javax.inject.Inject;
 import javax.naming.ConfigurationException;
 
+import org.apache.cloudstack.context.CallContext;
 import org.apache.cloudstack.network.ExternalNetworkDeviceManager.NetworkDevice;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.agent.AgentManager;
@@ -117,7 +119,6 @@ import com.cloud.resource.ResourceStateAdapter;
 import com.cloud.resource.ServerResource;
 import com.cloud.resource.UnableDeleteHostException;
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
 import com.cloud.utils.component.AdapterBase;
 import com.cloud.utils.db.Transaction;
 import com.cloud.utils.exception.CloudRuntimeException;
@@ -359,8 +360,8 @@ public class CiscoVnmcElement extends AdapterBase implements SourceNatServicePro
             }
             if (outsideIp == null) { // none available, acquire one
                 try {
-                    Account caller = UserContext.current().getCaller();
-                    long callerUserId = UserContext.current().getCallerUserId();
+                    Account caller = CallContext.current().getCallingAccount();
+                    long callerUserId = CallContext.current().getCallingUserId();
                     outsideIp = _networkMgr.allocateIp(owner, false, caller, callerUserId, zone);
                 } catch (ResourceAllocationException e) {
                     s_logger.error("Unable to allocate additional public Ip address. Exception details " + e);

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/plugins/network-elements/elastic-loadbalancer/src/com/cloud/network/lb/ElasticLoadBalancerManagerImpl.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/elastic-loadbalancer/src/com/cloud/network/lb/ElasticLoadBalancerManagerImpl.java b/plugins/network-elements/elastic-loadbalancer/src/com/cloud/network/lb/ElasticLoadBalancerManagerImpl.java
index 5f603b3..9c34a8b 100644
--- a/plugins/network-elements/elastic-loadbalancer/src/com/cloud/network/lb/ElasticLoadBalancerManagerImpl.java
+++ b/plugins/network-elements/elastic-loadbalancer/src/com/cloud/network/lb/ElasticLoadBalancerManagerImpl.java
@@ -37,6 +37,7 @@ import org.apache.log4j.Logger;
 import org.springframework.stereotype.Component;
 
 import org.apache.cloudstack.api.command.user.loadbalancer.CreateLoadBalancerRuleCmd;
+import org.apache.cloudstack.context.CallContext;
 
 import com.cloud.agent.AgentManager;
 import com.cloud.agent.AgentManager.OnError;
@@ -112,7 +113,6 @@ import com.cloud.storage.dao.VMTemplateDao;
 import com.cloud.user.Account;
 import com.cloud.user.AccountService;
 import com.cloud.user.User;
-import com.cloud.user.UserContext;
 import com.cloud.user.dao.AccountDao;
 import com.cloud.utils.NumbersUtil;
 import com.cloud.utils.Pair;
@@ -656,11 +656,11 @@ ElasticLoadBalancerManager, VirtualMachineGuru<DomainRouterVO> {
                 
                 result = _lbMgr.createPublicLoadBalancer(lb.getXid(), lb.getName(), lb.getDescription(), 
                         lb.getSourcePortStart(), lb.getDefaultPortStart(), ipId.longValue(), lb.getProtocol(),
-                        lb.getAlgorithm(), false, UserContext.current());
+                        lb.getAlgorithm(), false, CallContext.current());
             } catch (NetworkRuleConflictException e) {
                 s_logger.warn("Failed to create LB rule, not continuing with ELB deployment");
                 if (newIp) {
-                    releaseIp(ipId, UserContext.current().getCallerUserId(), account);
+                    releaseIp(ipId, CallContext.current().getCallingUserId(), account);
                 }
                 throw e;
             }
@@ -674,7 +674,7 @@ ElasticLoadBalancerManager, VirtualMachineGuru<DomainRouterVO> {
                     if (elbVm == null) {
                         s_logger.warn("Failed to deploy a new ELB vm for ip " + ipAddr + " in network " + network + "lb name=" + lb.getName());
                         if (newIp)
-                            releaseIp(ipId, UserContext.current().getCallerUserId(), account);
+                            releaseIp(ipId, CallContext.current().getCallingUserId(), account);
                     }
                 }
 

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/plugins/network-elements/f5/src/com/cloud/api/commands/AddF5LoadBalancerCmd.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/f5/src/com/cloud/api/commands/AddF5LoadBalancerCmd.java b/plugins/network-elements/f5/src/com/cloud/api/commands/AddF5LoadBalancerCmd.java
index 1670351..7960c22 100644
--- a/plugins/network-elements/f5/src/com/cloud/api/commands/AddF5LoadBalancerCmd.java
+++ b/plugins/network-elements/f5/src/com/cloud/api/commands/AddF5LoadBalancerCmd.java
@@ -21,9 +21,12 @@ import javax.inject.Inject;
 
 import org.apache.cloudstack.api.*;
 import org.apache.cloudstack.api.response.PhysicalNetworkResponse;
+
 import org.apache.log4j.Logger;
 
 import org.apache.cloudstack.api.APICommand;
+import org.apache.cloudstack.context.CallContext;
+
 import com.cloud.api.response.F5LoadBalancerResponse;
 import com.cloud.event.EventTypes;
 import com.cloud.exception.ConcurrentOperationException;
@@ -33,7 +36,6 @@ import com.cloud.exception.ResourceAllocationException;
 import com.cloud.exception.ResourceUnavailableException;
 import com.cloud.network.dao.ExternalLoadBalancerDeviceVO;
 import com.cloud.network.element.F5ExternalLoadBalancerElementService;
-import com.cloud.user.UserContext;
 import com.cloud.utils.exception.CloudRuntimeException;
 
 @APICommand(name = "addF5LoadBalancer", responseObject=F5LoadBalancerResponse.class, description="Adds a F5 BigIP load balancer device")
@@ -127,6 +129,6 @@ public class AddF5LoadBalancerCmd extends BaseAsyncCmd {
 
     @Override
     public long getEntityOwnerId() {
-        return UserContext.current().getCaller().getId();
+        return CallContext.current().getCallingAccount().getId();
     }
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/plugins/network-elements/f5/src/com/cloud/api/commands/ConfigureF5LoadBalancerCmd.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/f5/src/com/cloud/api/commands/ConfigureF5LoadBalancerCmd.java b/plugins/network-elements/f5/src/com/cloud/api/commands/ConfigureF5LoadBalancerCmd.java
index 209a258..4b5f805 100644
--- a/plugins/network-elements/f5/src/com/cloud/api/commands/ConfigureF5LoadBalancerCmd.java
+++ b/plugins/network-elements/f5/src/com/cloud/api/commands/ConfigureF5LoadBalancerCmd.java
@@ -20,9 +20,12 @@ package com.cloud.api.commands;
 import javax.inject.Inject;
 
 import org.apache.cloudstack.api.*;
+
 import org.apache.log4j.Logger;
 
 import org.apache.cloudstack.api.APICommand;
+import org.apache.cloudstack.context.CallContext;
+
 import com.cloud.api.response.F5LoadBalancerResponse;
 import com.cloud.event.EventTypes;
 import com.cloud.exception.ConcurrentOperationException;
@@ -32,7 +35,6 @@ import com.cloud.exception.ResourceAllocationException;
 import com.cloud.exception.ResourceUnavailableException;
 import com.cloud.network.dao.ExternalLoadBalancerDeviceVO;
 import com.cloud.network.element.F5ExternalLoadBalancerElementService;
-import com.cloud.user.UserContext;
 import com.cloud.utils.exception.CloudRuntimeException;
 
 @APICommand(name = "configureF5LoadBalancer", responseObject=F5LoadBalancerResponse.class, description="configures a F5 load balancer device")
@@ -105,6 +107,6 @@ public class ConfigureF5LoadBalancerCmd extends BaseAsyncCmd {
 
     @Override
     public long getEntityOwnerId() {
-        return UserContext.current().getCaller().getId();
+        return CallContext.current().getCallingAccount().getId();
     }
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/plugins/network-elements/f5/src/com/cloud/api/commands/DeleteF5LoadBalancerCmd.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/f5/src/com/cloud/api/commands/DeleteF5LoadBalancerCmd.java b/plugins/network-elements/f5/src/com/cloud/api/commands/DeleteF5LoadBalancerCmd.java
index 691643d..2c3b52f 100644
--- a/plugins/network-elements/f5/src/com/cloud/api/commands/DeleteF5LoadBalancerCmd.java
+++ b/plugins/network-elements/f5/src/com/cloud/api/commands/DeleteF5LoadBalancerCmd.java
@@ -22,7 +22,6 @@ import javax.inject.Inject;
 import org.apache.log4j.Logger;
 
 import org.apache.cloudstack.api.BaseAsyncCmd;
-
 import org.apache.cloudstack.api.ApiConstants;
 import org.apache.cloudstack.api.ApiErrorCode;
 import org.apache.cloudstack.api.BaseCmd;
@@ -30,6 +29,8 @@ import org.apache.cloudstack.api.APICommand;
 import org.apache.cloudstack.api.Parameter;
 import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.SuccessResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import com.cloud.api.response.F5LoadBalancerResponse;
 import com.cloud.event.EventTypes;
 import com.cloud.exception.ConcurrentOperationException;
@@ -38,7 +39,6 @@ import com.cloud.exception.InvalidParameterValueException;
 import com.cloud.exception.ResourceAllocationException;
 import com.cloud.exception.ResourceUnavailableException;
 import com.cloud.network.element.F5ExternalLoadBalancerElementService;
-import com.cloud.user.UserContext;
 import com.cloud.utils.exception.CloudRuntimeException;
 
 @APICommand(name = "deleteF5LoadBalancer", responseObject=SuccessResponse.class, description=" delete a F5 load balancer device")
@@ -102,6 +102,6 @@ public class DeleteF5LoadBalancerCmd extends BaseAsyncCmd {
 
     @Override
     public long getEntityOwnerId() {
-        return UserContext.current().getCaller().getId();
+        return CallContext.current().getCallingAccount().getId();
     }
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/plugins/network-elements/internal-loadbalancer/test/org/apache/cloudstack/internallbvmmgr/InternalLBVMServiceTest.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/internal-loadbalancer/test/org/apache/cloudstack/internallbvmmgr/InternalLBVMServiceTest.java b/plugins/network-elements/internal-loadbalancer/test/org/apache/cloudstack/internallbvmmgr/InternalLBVMServiceTest.java
index 5a1d56f..70dafa3 100644
--- a/plugins/network-elements/internal-loadbalancer/test/org/apache/cloudstack/internallbvmmgr/InternalLBVMServiceTest.java
+++ b/plugins/network-elements/internal-loadbalancer/test/org/apache/cloudstack/internallbvmmgr/InternalLBVMServiceTest.java
@@ -5,7 +5,7 @@
 // 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,
@@ -23,7 +23,7 @@ import javax.inject.Inject;
 
 import junit.framework.TestCase;
 
-import org.apache.cloudstack.network.lb.InternalLoadBalancerVMService;
+import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -31,6 +31,9 @@ import org.mockito.Mockito;
 import org.springframework.test.context.ContextConfiguration;
 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
 
+import org.apache.cloudstack.context.CallContext;
+import org.apache.cloudstack.network.lb.InternalLoadBalancerVMService;
+
 import com.cloud.deploy.DeploymentPlan;
 import com.cloud.exception.ConcurrentOperationException;
 import com.cloud.exception.InsufficientCapacityException;
@@ -48,13 +51,12 @@ import com.cloud.user.AccountManager;
 import com.cloud.user.AccountVO;
 import com.cloud.user.User;
 import com.cloud.user.UserVO;
+import com.cloud.user.dao.AccountDao;
 import com.cloud.utils.component.ComponentContext;
 import com.cloud.vm.DomainRouterVO;
 import com.cloud.vm.VirtualMachine;
 import com.cloud.vm.VirtualMachineManager;
 import com.cloud.vm.dao.DomainRouterDao;
-import com.cloud.user.UserContext;
-import com.cloud.user.dao.AccountDao;
 
 
 /**
@@ -80,6 +82,7 @@ public class InternalLBVMServiceTest extends TestCase {
     long nonExistingVmId = 2L;
     long nonInternalLbVmId = 3L;
     
+    @Override
     @Before
     public void setUp() {
         //mock system offering creation as it's used by configure() method called by initComponentsLifeCycle
@@ -94,7 +97,7 @@ public class InternalLBVMServiceTest extends TestCase {
         Mockito.when(_accountMgr.getSystemUser()).thenReturn(new UserVO(1));
         Mockito.when(_accountMgr.getSystemAccount()).thenReturn(new AccountVO(2));
         Mockito.when(_accountDao.findByIdIncludingRemoved(Mockito.anyLong())).thenReturn(new AccountVO(2));
-        UserContext.registerContext(_accountMgr.getSystemUser().getId(), _accountMgr.getSystemAccount(), null, false);
+        CallContext.register(_accountMgr.getSystemUser(), _accountMgr.getSystemAccount());
         
         
         DomainRouterVO validVm = new DomainRouterVO(validVmId,off.getId(),1,"alena",1,HypervisorType.XenServer,1,1,1,
@@ -136,6 +139,12 @@ public class InternalLBVMServiceTest extends TestCase {
 
     }
     
+    @Override
+    @After
+    public void tearDown() {
+        CallContext.unregister();
+    }
+
     //TESTS FOR START COMMAND
     
     

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/AddSrxFirewallCmd.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/AddSrxFirewallCmd.java b/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/AddSrxFirewallCmd.java
index f5bb037..e3ca4ea 100644
--- a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/AddSrxFirewallCmd.java
+++ b/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/AddSrxFirewallCmd.java
@@ -19,6 +19,7 @@ package com.cloud.api.commands;
 import javax.inject.Inject;
 
 import org.apache.cloudstack.api.response.PhysicalNetworkResponse;
+
 import org.apache.log4j.Logger;
 
 import org.apache.cloudstack.api.ApiConstants;
@@ -28,6 +29,8 @@ import org.apache.cloudstack.api.BaseCmd;
 import org.apache.cloudstack.api.APICommand;
 import org.apache.cloudstack.api.Parameter;
 import org.apache.cloudstack.api.ServerApiException;
+import org.apache.cloudstack.context.CallContext;
+
 import com.cloud.api.response.SrxFirewallResponse;
 import com.cloud.event.EventTypes;
 import com.cloud.exception.ConcurrentOperationException;
@@ -37,7 +40,6 @@ import com.cloud.exception.ResourceAllocationException;
 import com.cloud.exception.ResourceUnavailableException;
 import com.cloud.network.dao.ExternalFirewallDeviceVO;
 import com.cloud.network.element.JuniperSRXFirewallElementService;
-import com.cloud.user.UserContext;
 import com.cloud.utils.exception.CloudRuntimeException;
 
 @APICommand(name = "addSrxFirewall", responseObject=SrxFirewallResponse.class, description="Adds a SRX firewall device")
@@ -130,6 +132,6 @@ public class AddSrxFirewallCmd extends BaseAsyncCmd {
 
     @Override
     public long getEntityOwnerId() {
-        return UserContext.current().getCaller().getId();
+        return CallContext.current().getCallingAccount().getId();
     }
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ConfigureSrxFirewallCmd.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ConfigureSrxFirewallCmd.java b/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ConfigureSrxFirewallCmd.java
index 9bffee1..1f92b8e 100644
--- a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ConfigureSrxFirewallCmd.java
+++ b/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ConfigureSrxFirewallCmd.java
@@ -27,6 +27,8 @@ import org.apache.cloudstack.api.BaseCmd;
 import org.apache.cloudstack.api.APICommand;
 import org.apache.cloudstack.api.Parameter;
 import org.apache.cloudstack.api.ServerApiException;
+import org.apache.cloudstack.context.CallContext;
+
 import com.cloud.api.response.SrxFirewallResponse;
 import com.cloud.event.EventTypes;
 import com.cloud.exception.ConcurrentOperationException;
@@ -36,7 +38,6 @@ import com.cloud.exception.ResourceAllocationException;
 import com.cloud.exception.ResourceUnavailableException;
 import com.cloud.network.dao.ExternalFirewallDeviceVO;
 import com.cloud.network.element.JuniperSRXFirewallElementService;
-import com.cloud.user.UserContext;
 import com.cloud.utils.exception.CloudRuntimeException;
 
 @APICommand(name = "configureSrxFirewall", responseObject=SrxFirewallResponse.class, description="Configures a SRX firewall device")
@@ -109,6 +110,6 @@ public class ConfigureSrxFirewallCmd extends BaseAsyncCmd {
 
     @Override
     public long getEntityOwnerId() {
-        return UserContext.current().getCaller().getId();
+        return CallContext.current().getCallingAccount().getId();
     }
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/DeleteSrxFirewallCmd.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/DeleteSrxFirewallCmd.java b/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/DeleteSrxFirewallCmd.java
index ce804a7..364195b 100644
--- a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/DeleteSrxFirewallCmd.java
+++ b/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/DeleteSrxFirewallCmd.java
@@ -28,6 +28,8 @@ import org.apache.cloudstack.api.APICommand;
 import org.apache.cloudstack.api.Parameter;
 import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.SuccessResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import com.cloud.api.response.SrxFirewallResponse;
 import com.cloud.event.EventTypes;
 import com.cloud.exception.ConcurrentOperationException;
@@ -36,7 +38,6 @@ import com.cloud.exception.InvalidParameterValueException;
 import com.cloud.exception.ResourceAllocationException;
 import com.cloud.exception.ResourceUnavailableException;
 import com.cloud.network.element.JuniperSRXFirewallElementService;
-import com.cloud.user.UserContext;
 import com.cloud.utils.exception.CloudRuntimeException;
 
 @APICommand(name = "deleteSrxFirewall", responseObject=SuccessResponse.class, description=" delete a SRX firewall device")
@@ -100,6 +101,6 @@ public class DeleteSrxFirewallCmd extends BaseAsyncCmd {
 
     @Override
     public long getEntityOwnerId() {
-        return UserContext.current().getCaller().getId();
+        return CallContext.current().getCallingAccount().getId();
     }
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/plugins/network-elements/netscaler/src/com/cloud/api/commands/AddNetscalerLoadBalancerCmd.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/netscaler/src/com/cloud/api/commands/AddNetscalerLoadBalancerCmd.java b/plugins/network-elements/netscaler/src/com/cloud/api/commands/AddNetscalerLoadBalancerCmd.java
index e4327b4..d04a183 100644
--- a/plugins/network-elements/netscaler/src/com/cloud/api/commands/AddNetscalerLoadBalancerCmd.java
+++ b/plugins/network-elements/netscaler/src/com/cloud/api/commands/AddNetscalerLoadBalancerCmd.java
@@ -20,10 +20,12 @@ import com.cloud.event.EventTypes;
 import com.cloud.exception.*;
 import com.cloud.network.dao.ExternalLoadBalancerDeviceVO;
 import com.cloud.network.element.NetscalerLoadBalancerElementService;
-import com.cloud.user.UserContext;
 import com.cloud.utils.exception.CloudRuntimeException;
+
 import org.apache.cloudstack.api.*;
 import org.apache.cloudstack.api.response.PhysicalNetworkResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import javax.inject.Inject;
@@ -143,6 +145,6 @@ public class AddNetscalerLoadBalancerCmd extends BaseAsyncCmd {
 
     @Override
     public long getEntityOwnerId() {
-        return UserContext.current().getCaller().getId();
+        return CallContext.current().getCallingAccount().getId();
     }
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/plugins/network-elements/netscaler/src/com/cloud/api/commands/ConfigureNetscalerLoadBalancerCmd.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/netscaler/src/com/cloud/api/commands/ConfigureNetscalerLoadBalancerCmd.java b/plugins/network-elements/netscaler/src/com/cloud/api/commands/ConfigureNetscalerLoadBalancerCmd.java
index a04a48d..b6ce214 100644
--- a/plugins/network-elements/netscaler/src/com/cloud/api/commands/ConfigureNetscalerLoadBalancerCmd.java
+++ b/plugins/network-elements/netscaler/src/com/cloud/api/commands/ConfigureNetscalerLoadBalancerCmd.java
@@ -20,9 +20,12 @@ import javax.inject.Inject;
 
 import org.apache.cloudstack.api.*;
 import org.apache.cloudstack.api.response.PodResponse;
+
 import org.apache.log4j.Logger;
 
 import org.apache.cloudstack.api.APICommand;
+import org.apache.cloudstack.context.CallContext;
+
 import com.cloud.api.response.NetscalerLoadBalancerResponse;
 import com.cloud.event.EventTypes;
 import com.cloud.exception.ConcurrentOperationException;
@@ -32,7 +35,6 @@ import com.cloud.exception.ResourceAllocationException;
 import com.cloud.exception.ResourceUnavailableException;
 import com.cloud.network.dao.ExternalLoadBalancerDeviceVO;
 import com.cloud.network.element.NetscalerLoadBalancerElementService;
-import com.cloud.user.UserContext;
 import com.cloud.utils.exception.CloudRuntimeException;
 
 @APICommand(name = "configureNetscalerLoadBalancer", responseObject=NetscalerLoadBalancerResponse.class, description="configures a netscaler load balancer device")
@@ -129,6 +131,6 @@ public class ConfigureNetscalerLoadBalancerCmd extends BaseAsyncCmd {
 
     @Override
     public long getEntityOwnerId() {
-        return UserContext.current().getCaller().getId();
+        return CallContext.current().getCallingAccount().getId();
     }
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/plugins/network-elements/netscaler/src/com/cloud/api/commands/DeleteNetscalerLoadBalancerCmd.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/netscaler/src/com/cloud/api/commands/DeleteNetscalerLoadBalancerCmd.java b/plugins/network-elements/netscaler/src/com/cloud/api/commands/DeleteNetscalerLoadBalancerCmd.java
index 76f0273..bf6b22a 100644
--- a/plugins/network-elements/netscaler/src/com/cloud/api/commands/DeleteNetscalerLoadBalancerCmd.java
+++ b/plugins/network-elements/netscaler/src/com/cloud/api/commands/DeleteNetscalerLoadBalancerCmd.java
@@ -27,6 +27,8 @@ import org.apache.cloudstack.api.APICommand;
 import org.apache.cloudstack.api.Parameter;
 import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.SuccessResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import com.cloud.api.response.NetscalerLoadBalancerResponse;
 import com.cloud.event.EventTypes;
 import com.cloud.exception.ConcurrentOperationException;
@@ -35,7 +37,6 @@ import com.cloud.exception.InvalidParameterValueException;
 import com.cloud.exception.ResourceAllocationException;
 import com.cloud.exception.ResourceUnavailableException;
 import com.cloud.network.element.NetscalerLoadBalancerElementService;
-import com.cloud.user.UserContext;
 import com.cloud.utils.exception.CloudRuntimeException;
 
 @APICommand(name = "deleteNetscalerLoadBalancer", responseObject=SuccessResponse.class, description=" delete a netscaler load balancer device")
@@ -100,6 +101,6 @@ public class DeleteNetscalerLoadBalancerCmd extends BaseAsyncCmd {
 
     @Override
     public long getEntityOwnerId() {
-        return UserContext.current().getCaller().getId();
+        return CallContext.current().getCallingAccount().getId();
     }
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/AddNiciraNvpDeviceCmd.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/AddNiciraNvpDeviceCmd.java b/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/AddNiciraNvpDeviceCmd.java
index 5b2dacf..7f0d87c 100644
--- a/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/AddNiciraNvpDeviceCmd.java
+++ b/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/AddNiciraNvpDeviceCmd.java
@@ -20,9 +20,12 @@ import javax.inject.Inject;
 
 import org.apache.cloudstack.api.*;
 import org.apache.cloudstack.api.response.PhysicalNetworkResponse;
+
 import org.apache.log4j.Logger;
 
 import org.apache.cloudstack.api.APICommand;
+import org.apache.cloudstack.context.CallContext;
+
 import com.cloud.api.response.NiciraNvpDeviceResponse;
 import com.cloud.event.EventTypes;
 import com.cloud.exception.ConcurrentOperationException;
@@ -32,7 +35,6 @@ import com.cloud.exception.ResourceAllocationException;
 import com.cloud.exception.ResourceUnavailableException;
 import com.cloud.network.NiciraNvpDeviceVO;
 import com.cloud.network.element.NiciraNvpElementService;
-import com.cloud.user.UserContext;
 import com.cloud.utils.exception.CloudRuntimeException;
 
 @APICommand(name = "addNiciraNvpDevice", responseObject=NiciraNvpDeviceResponse.class, description="Adds a Nicira NVP device")
@@ -122,7 +124,7 @@ public class AddNiciraNvpDeviceCmd extends BaseAsyncCmd {
 
     @Override
     public long getEntityOwnerId() {
-        return UserContext.current().getCaller().getId();
+        return CallContext.current().getCallingAccount().getId();
     }
 
 	@Override

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/DeleteNiciraNvpDeviceCmd.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/DeleteNiciraNvpDeviceCmd.java b/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/DeleteNiciraNvpDeviceCmd.java
index 9ba1c83..948f1bf 100755
--- a/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/DeleteNiciraNvpDeviceCmd.java
+++ b/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/DeleteNiciraNvpDeviceCmd.java
@@ -19,6 +19,7 @@ package com.cloud.api.commands;
 import javax.inject.Inject;
 
 import com.cloud.api.response.NiciraNvpDeviceResponse;
+
 import org.apache.log4j.Logger;
 
 import org.apache.cloudstack.api.ApiConstants;
@@ -29,6 +30,8 @@ import org.apache.cloudstack.api.APICommand;
 import org.apache.cloudstack.api.Parameter;
 import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.SuccessResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import com.cloud.event.EventTypes;
 import com.cloud.exception.ConcurrentOperationException;
 import com.cloud.exception.InsufficientCapacityException;
@@ -36,7 +39,6 @@ import com.cloud.exception.InvalidParameterValueException;
 import com.cloud.exception.ResourceAllocationException;
 import com.cloud.exception.ResourceUnavailableException;
 import com.cloud.network.element.NiciraNvpElementService;
-import com.cloud.user.UserContext;
 import com.cloud.utils.exception.CloudRuntimeException;
 
 @APICommand(name = "deleteNiciraNvpDevice", responseObject=SuccessResponse.class, description=" delete a nicira nvp device")
@@ -90,7 +92,7 @@ public class DeleteNiciraNvpDeviceCmd extends BaseAsyncCmd {
 
     @Override
     public long getEntityOwnerId() {
-        return UserContext.current().getCaller().getId();
+        return CallContext.current().getCallingAccount().getId();
     }
 
 	@Override

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/plugins/network-elements/ovs/src/com/cloud/network/guru/OvsGuestNetworkGuru.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/ovs/src/com/cloud/network/guru/OvsGuestNetworkGuru.java b/plugins/network-elements/ovs/src/com/cloud/network/guru/OvsGuestNetworkGuru.java
index bbdf110..34246dd 100644
--- a/plugins/network-elements/ovs/src/com/cloud/network/guru/OvsGuestNetworkGuru.java
+++ b/plugins/network-elements/ovs/src/com/cloud/network/guru/OvsGuestNetworkGuru.java
@@ -20,9 +20,12 @@ import javax.ejb.Local;
 import javax.inject.Inject;
 
 import com.cloud.event.ActionEventUtils;
+
 import org.apache.log4j.Logger;
 import org.springframework.stereotype.Component;
 
+import org.apache.cloudstack.context.CallContext;
+
 import com.cloud.dc.DataCenter;
 import com.cloud.dc.DataCenter.NetworkType;
 import com.cloud.deploy.DeployDestination;
@@ -40,7 +43,6 @@ import com.cloud.network.dao.NetworkVO;
 import com.cloud.network.ovs.OvsTunnelManager;
 import com.cloud.offering.NetworkOffering;
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
 import com.cloud.vm.ReservationContext;
 
 @Component
@@ -100,7 +102,7 @@ public class OvsGuestNetworkGuru extends GuestNetworkGuru {
                 throw new InsufficientVirtualNetworkCapcityException("Unable to allocate vnet as a part of network " + network + " implement ", DataCenter.class, dcId);
             }
             implemented.setBroadcastUri(BroadcastDomainType.Vswitch.toUri(vnet));
-            ActionEventUtils.onCompletedActionEvent(UserContext.current().getCallerUserId(), network.getAccountId(), EventVO.LEVEL_INFO, EventTypes.EVENT_ZONE_VLAN_ASSIGN, "Assigned Zone Vlan: " + vnet + " Network Id: " + network.getId(), 0);
+            ActionEventUtils.onCompletedActionEvent(CallContext.current().getCallingUserId(), network.getAccountId(), EventVO.LEVEL_INFO, EventTypes.EVENT_ZONE_VLAN_ASSIGN, "Assigned Zone Vlan: " + vnet + " Network Id: " + network.getId(), 0);
         } else {
             implemented.setBroadcastUri(network.getBroadcastUri());
         }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/plugins/network-elements/stratosphere-ssp/src/org/apache/cloudstack/api/commands/AddSspCmd.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/stratosphere-ssp/src/org/apache/cloudstack/api/commands/AddSspCmd.java b/plugins/network-elements/stratosphere-ssp/src/org/apache/cloudstack/api/commands/AddSspCmd.java
index d42ee67..cc0a672 100644
--- a/plugins/network-elements/stratosphere-ssp/src/org/apache/cloudstack/api/commands/AddSspCmd.java
+++ b/plugins/network-elements/stratosphere-ssp/src/org/apache/cloudstack/api/commands/AddSspCmd.java
@@ -23,7 +23,9 @@ import org.apache.cloudstack.api.BaseCmd;
 import org.apache.cloudstack.api.response.SspResponse;
 import org.apache.cloudstack.api.response.ZoneResponse;
 import org.apache.cloudstack.api.Parameter;
+import org.apache.cloudstack.context.CallContext;
 import org.apache.cloudstack.network.element.SspService;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.dc.dao.DataCenterDao;
@@ -33,7 +35,6 @@ import com.cloud.exception.NetworkRuleConflictException;
 import com.cloud.exception.ResourceAllocationException;
 import com.cloud.exception.ResourceUnavailableException;
 import com.cloud.host.Host;
-import com.cloud.user.UserContext;
 
 
 @APICommand(name="addStratosphereSsp", responseObject=SspResponse.class, description="Adds stratosphere ssp server")
@@ -70,7 +71,7 @@ public class AddSspCmd extends BaseCmd {
 
     @Override
     public long getEntityOwnerId() {
-        return UserContext.current().getCaller().getId();
+        return CallContext.current().getCallingAccount().getId();
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/plugins/network-elements/stratosphere-ssp/src/org/apache/cloudstack/api/commands/DeleteSspCmd.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/stratosphere-ssp/src/org/apache/cloudstack/api/commands/DeleteSspCmd.java b/plugins/network-elements/stratosphere-ssp/src/org/apache/cloudstack/api/commands/DeleteSspCmd.java
index bfbd5d9..8278dd0 100644
--- a/plugins/network-elements/stratosphere-ssp/src/org/apache/cloudstack/api/commands/DeleteSspCmd.java
+++ b/plugins/network-elements/stratosphere-ssp/src/org/apache/cloudstack/api/commands/DeleteSspCmd.java
@@ -24,7 +24,9 @@ import org.apache.cloudstack.api.APICommand;
 import org.apache.cloudstack.api.ApiConstants;
 import org.apache.cloudstack.api.BaseCmd;
 import org.apache.cloudstack.api.Parameter;
+import org.apache.cloudstack.context.CallContext;
 import org.apache.cloudstack.network.element.SspService;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.exception.ConcurrentOperationException;
@@ -32,7 +34,6 @@ import com.cloud.exception.InsufficientCapacityException;
 import com.cloud.exception.NetworkRuleConflictException;
 import com.cloud.exception.ResourceAllocationException;
 import com.cloud.exception.ResourceUnavailableException;
-import com.cloud.user.UserContext;
 
 @APICommand(name="deleteStratosphereSsp", responseObject=SuccessResponse.class, description="Removes stratosphere ssp server")
 public class DeleteSspCmd extends BaseCmd {
@@ -51,7 +52,7 @@ public class DeleteSspCmd extends BaseCmd {
 
     @Override
     public long getEntityOwnerId() {
-        return UserContext.current().getCaller().getId();
+        return CallContext.current().getCallingAccount().getId();
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/server/src/com/cloud/agent/manager/AgentManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/agent/manager/AgentManagerImpl.java b/server/src/com/cloud/agent/manager/AgentManagerImpl.java
index b24a238..75a77f4 100755
--- a/server/src/com/cloud/agent/manager/AgentManagerImpl.java
+++ b/server/src/com/cloud/agent/manager/AgentManagerImpl.java
@@ -39,8 +39,11 @@ import javax.ejb.Local;
 import javax.inject.Inject;
 import javax.naming.ConfigurationException;
 
-import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao;
 import org.apache.log4j.Logger;
+
+import org.apache.cloudstack.context.ServerContexts;
+import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao;
+
 import com.cloud.agent.AgentManager;
 import com.cloud.agent.Listener;
 import com.cloud.agent.StartupCommandProcessor;
@@ -103,7 +106,6 @@ import com.cloud.storage.dao.VolumeDao;
 import com.cloud.storage.resource.DummySecondaryStorageResource;
 import com.cloud.storage.secondary.SecondaryStorageVmManager;
 import com.cloud.user.AccountManager;
-import com.cloud.utils.ActionDelegate;
 import com.cloud.utils.NumbersUtil;
 import com.cloud.utils.Pair;
 import com.cloud.utils.component.ManagerBase;
@@ -760,7 +762,7 @@ public class AgentManagerImpl extends ManagerBase implements AgentManager, Handl
             Host h = _resourceMgr.createHostAndAgent(host.getId(), resource, host.getDetails(), false, null, true);
             return (h == null ? false : true);
         } else {
-            _executor.execute(new SimulateStartTask(host.getId(), resource, host.getDetails(), null));
+            _executor.execute(new SimulateStartTask(host.getId(), resource, host.getDetails()));
             return true;
         }
     }
@@ -1112,17 +1114,16 @@ public class AgentManagerImpl extends ManagerBase implements AgentManager, Handl
         ServerResource resource;
         Map<String, String> details;
         long id;
-        ActionDelegate<Long> actionDelegate;
 
-        public SimulateStartTask(long id, ServerResource resource, Map<String, String> details, ActionDelegate<Long> actionDelegate) {
+        public SimulateStartTask(long id, ServerResource resource, Map<String, String> details) {
             this.id = id;
             this.resource = resource;
             this.details = details;
-            this.actionDelegate = actionDelegate;
         }
 
         @Override
         public void run() {
+            ServerContexts.registerSystemContext();
             try {
                 if (s_logger.isDebugEnabled()) {
                     s_logger.debug("Simulating start for resource " + resource.getName() + " id " + id);
@@ -1132,9 +1133,7 @@ public class AgentManagerImpl extends ManagerBase implements AgentManager, Handl
             } catch (Exception e) {
                 s_logger.warn("Unable to simulate start on resource " + id + " name " + resource.getName(), e);
             } finally {
-                if (actionDelegate != null) {
-                    actionDelegate.action(new Long(id));
-                }
+                ServerContexts.unregisterSystemContext();
             }
         }
     }
@@ -1152,15 +1151,20 @@ public class AgentManagerImpl extends ManagerBase implements AgentManager, Handl
 
         @Override
         public void run() {
-            _request.logD("Processing the first command ");
-            StartupCommand[] startups = new StartupCommand[_cmds.length];
-            for (int i = 0; i < _cmds.length; i++) {
-                startups[i] = (StartupCommand) _cmds[i];
-            }
+            ServerContexts.registerSystemContext();
+            try {
+                _request.logD("Processing the first command ");
+                StartupCommand[] startups = new StartupCommand[_cmds.length];
+                for (int i = 0; i < _cmds.length; i++) {
+                    startups[i] = (StartupCommand)_cmds[i];
+                }
 
-            AgentAttache attache = handleConnectedAgent(_link, startups, _request);
-            if (attache == null) {
-                s_logger.warn("Unable to create attache for agent: " + _request);
+                AgentAttache attache = handleConnectedAgent(_link, startups, _request);
+                if (attache == null) {
+                    s_logger.warn("Unable to create attache for agent: " + _request);
+                }
+            } finally {
+                ServerContexts.unregisterSystemContext();
             }
         }
     }


[47/50] [abbrv] git commit: updated refs/heads/ldapplugin to 7bc705e

Posted by ch...@apache.org.
Truncated trailing/double spaces

Signed-off-by: Rene Diepstraten <ma...@renediepstraten.nl>


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

Branch: refs/heads/ldapplugin
Commit: ffe7cfe076d6e15ebaef42c99a234e94dbf80b2c
Parents: bfe76b4
Author: Rene Diepstraten <ma...@renediepstraten.nl>
Authored: Wed Jul 17 00:13:05 2013 +0200
Committer: Wido den Hollander <wi...@widodh.nl>
Committed: Wed Jul 17 18:31:28 2013 +0200

----------------------------------------------------------------------
 scripts/vm/network/security_group.py | 310 +++++++++++++++---------------
 1 file changed, 155 insertions(+), 155 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ffe7cfe0/scripts/vm/network/security_group.py
----------------------------------------------------------------------
diff --git a/scripts/vm/network/security_group.py b/scripts/vm/network/security_group.py
index 10610f0..044747a 100755
--- a/scripts/vm/network/security_group.py
+++ b/scripts/vm/network/security_group.py
@@ -6,9 +6,9 @@
 # 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
@@ -48,13 +48,13 @@ def can_bridge_firewall(privnic):
         print "no ebtables on your host machine"
         sys.exit(2)
 
-    
+
     if not os.path.exists('/var/run/cloud'):
         os.makedirs('/var/run/cloud')
- 
+
     cleanup_rules_for_dead_vms()
     cleanup_rules()
-    
+
     return True
 '''
 def ipset(ipsetname, proto, start, end, ips):
@@ -66,16 +66,16 @@ def ipset(ipsetname, proto, start, end, ips):
     result = True
     ipsettmp = ''.join(''.join(ipsetname.split('-')).split('_')) + str(int(time.time()) % 1000)
 
-    try: 
-        check_call(['ipset', '-N', ipsettmp, 'iptreemap']) 
+    try:
+        check_call(['ipset', '-N', ipsettmp, 'iptreemap'])
         for ip in ips:
             try:
                 check_call(['ipset', '-A', ipsettmp, ip])
             except CommandException, cex:
                 if cex.reason.rfind('already in set') == -1:
                    raise
-        check_call(['ipset', '-W', ipsettmp, ipsetname]) 
-        check_call(['ipset', '-X', ipsettmp]) 
+        check_call(['ipset', '-W', ipsettmp, ipsetname])
+        check_call(['ipset', '-X', ipsettmp])
     except:
         logging.debug("Failed to program ipset " + ipsetname)
         result = False
@@ -87,52 +87,52 @@ def destroy_network_rules_for_vm(vm_name, vif=None):
     vmchain = vm_name
     vmchain_egress = egress_chain_name(vm_name)
     vmchain_default = None
-    
+
     delete_rules_for_vm_in_bridge_firewall_chain(vm_name)
     if vm_name.startswith('i-') or vm_name.startswith('r-'):
-        vmchain_default =  '-'.join(vm_name.split('-')[:-1]) + "-def"
+        vmchain_default = '-'.join(vm_name.split('-')[:-1]) + "-def"
 
     destroy_ebtables_rules(vmchain, vif)
-    
+
     try:
-        if vmchain_default != None: 
+        if vmchain_default != None:
             execute("iptables -F " + vmchain_default)
     except:
-        logging.debug("Ignoring failure to delete  chain " + vmchain_default)
-    
+        logging.debug("Ignoring failure to delete chain " + vmchain_default)
+
     try:
-        if vmchain_default != None: 
+        if vmchain_default != None:
             execute("iptables -X " + vmchain_default)
     except:
-        logging.debug("Ignoring failure to delete  chain " + vmchain_default)
+        logging.debug("Ignoring failure to delete chain " + vmchain_default)
 
     try:
         execute("iptables -F " + vmchain)
     except:
-        logging.debug("Ignoring failure to delete  chain " + vmchain)
-    
+        logging.debug("Ignoring failure to delete chain " + vmchain)
+
     try:
         execute("iptables -X " + vmchain)
     except:
-        logging.debug("Ignoring failure to delete  chain " + vmchain)
-   
+        logging.debug("Ignoring failure to delete chain " + vmchain)
+
 
     try:
         execute("iptables -F " + vmchain_egress)
     except:
-        logging.debug("Ignoring failure to delete  chain " + vmchain_egress)
-    
+        logging.debug("Ignoring failure to delete chain " + vmchain_egress)
+
     try:
         execute("iptables -X " + vmchain_egress)
     except:
-        logging.debug("Ignoring failure to delete  chain " + vmchain_egress)
+        logging.debug("Ignoring failure to delete chain " + vmchain_egress)
 
     try:
         execute("ipset -F " + vm_name)
         execute("ipset -X " + vm_name)
     except:
         logging.debug("Ignoring failure to delete ipset " + vmchain)
- 
+
     if vif is not None:
         try:
             dnats = execute("iptables -t nat -S | grep " + vif + " | sed 's/-A/-D/'").split("\n")
@@ -140,7 +140,7 @@ def destroy_network_rules_for_vm(vm_name, vif=None):
                 try:
                     execute("iptables -t nat " + dnat)
                 except:
-                    logging.debug("Igoring failure to delete dnat: " + dnat) 
+                    logging.debug("Igoring failure to delete dnat: " + dnat)
         except:
             pass
     remove_rule_log_for_vm(vm_name)
@@ -148,7 +148,7 @@ def destroy_network_rules_for_vm(vm_name, vif=None):
 
     if 1 in [ vm_name.startswith(c) for c in ['r-', 's-', 'v-'] ]:
         return 'true'
-    
+
     return 'true'
 
 def destroy_ebtables_rules(vm_name, vif):
@@ -174,73 +174,73 @@ def destroy_ebtables_rules(vm_name, vif):
 
     for cmd in delcmds:
         try:
-            execute("ebtables -t nat " +  cmd)
+            execute("ebtables -t nat " + cmd)
         except:
             logging.debug("Ignoring failure to delete ebtables rules for vm " + vm_name)
     chains = [vm_name+"-in", vm_name+"-out", vm_name+"-in-ips", vm_name+"-out-ips"]
     for chain in chains:
         try:
-            execute("ebtables -t nat -F " +  chain)
-            execute("ebtables -t nat -X " +  chain)
+            execute("ebtables -t nat -F " + chain)
+            execute("ebtables -t nat -X " + chain)
         except:
-            logging.debug("Ignoring failure to delete ebtables chain for vm " + vm_name)   
+            logging.debug("Ignoring failure to delete ebtables chain for vm " + vm_name)
 
 def default_ebtables_rules(vm_name, vm_ip, vm_mac, vif):
     vmchain_in = vm_name + "-in"
     vmchain_out = vm_name + "-out"
     vmchain_in_ips = vm_name + "-in-ips"
     vmchain_out_ips = vm_name + "-out-ips"
-    
+
     for chain in [vmchain_in, vmchain_out, vmchain_in_ips, vmchain_out_ips]:
         try:
             execute("ebtables -t nat -N " + chain)
         except:
-            execute("ebtables -t nat -F " + chain) 
+            execute("ebtables -t nat -F " + chain)
 
     try:
-        # -s ! 52:54:0:56:44:32 -j DROP 
-        execute("ebtables -t nat -A PREROUTING -i " + vif + " -j " +  vmchain_in)
+        # -s ! 52:54:0:56:44:32 -j DROP
+        execute("ebtables -t nat -A PREROUTING -i " + vif + " -j " + vmchain_in)
         execute("ebtables -t nat -A POSTROUTING -o " + vif + " -j " + vmchain_out)
-        execute("ebtables -t nat -A " + vmchain_in_ips  + " -j DROP")
-        execute("ebtables -t nat -A " + vmchain_out_ips  + " -j DROP")
+        execute("ebtables -t nat -A " + vmchain_in_ips + " -j DROP")
+        execute("ebtables -t nat -A " + vmchain_out_ips + " -j DROP")
     except:
         logging.debug("Failed to program default rules")
         return 'false'
-    
+
     try:
-        execute("ebtables -t nat -A " +  vmchain_in + " -s ! " +  vm_mac + " -j DROP")
-        execute("ebtables -t nat -A " +  vmchain_in  + " -p ARP -s ! " + vm_mac + " -j DROP")
-        execute("ebtables -t nat -A " +  vmchain_in  + " -p ARP --arp-mac-src ! " + vm_mac + " -j DROP")
+        execute("ebtables -t nat -A " + vmchain_in + " -s ! " + vm_mac + " -j DROP")
+        execute("ebtables -t nat -A " + vmchain_in + " -p ARP -s ! " + vm_mac + " -j DROP")
+        execute("ebtables -t nat -A " + vmchain_in + " -p ARP --arp-mac-src ! " + vm_mac + " -j DROP")
         if vm_ip is not None:
-            execute("ebtables -t nat -A " + vmchain_in  +  " -p ARP  -j " + vmchain_in_ips)
-            execute("ebtables -t nat -I " + vmchain_in_ips  +  " -p ARP --arp-ip-src " + vm_ip + " -j RETURN")
-        execute("ebtables -t nat -A " + vmchain_in  + " -p ARP --arp-op Request -j ACCEPT")   
-        execute("ebtables -t nat -A " + vmchain_in  + " -p ARP --arp-op Reply -j ACCEPT")    
-        execute("ebtables -t nat -A " + vmchain_in  + " -p ARP  -j DROP")    
+            execute("ebtables -t nat -A " + vmchain_in + " -p ARP -j " + vmchain_in_ips)
+            execute("ebtables -t nat -I " + vmchain_in_ips + " -p ARP --arp-ip-src " + vm_ip + " -j RETURN")
+        execute("ebtables -t nat -A " + vmchain_in + " -p ARP --arp-op Request -j ACCEPT")
+        execute("ebtables -t nat -A " + vmchain_in + " -p ARP --arp-op Reply -j ACCEPT")
+        execute("ebtables -t nat -A " + vmchain_in + " -p ARP -j DROP")
     except:
         logging.exception("Failed to program default ebtables IN rules")
         return 'false'
-   
+
     try:
-        execute("ebtables -t nat -A " + vmchain_out + " -p ARP --arp-op Reply --arp-mac-dst ! " +  vm_mac + " -j DROP")
+        execute("ebtables -t nat -A " + vmchain_out + " -p ARP --arp-op Reply --arp-mac-dst ! " + vm_mac + " -j DROP")
         if vm_ip is not None:
             execute("ebtables -t nat -A " + vmchain_out + " -p ARP -j " + vmchain_out_ips )
-            execute("ebtables -t nat -I " + vmchain_out_ips + " -p ARP --arp-ip-dst  " + vm_ip + " -j RETURN")
-        execute("ebtables -t nat -A " + vmchain_out + " -p ARP --arp-op Request -j ACCEPT")   
-        execute("ebtables -t nat -A " + vmchain_out + " -p ARP --arp-op Reply -j ACCEPT")    
-        execute("ebtables -t nat -A " + vmchain_out + " -p ARP -j DROP")    
+            execute("ebtables -t nat -I " + vmchain_out_ips + " -p ARP --arp-ip-dst " + vm_ip + " -j RETURN")
+        execute("ebtables -t nat -A " + vmchain_out + " -p ARP --arp-op Request -j ACCEPT")
+        execute("ebtables -t nat -A " + vmchain_out + " -p ARP --arp-op Reply -j ACCEPT")
+        execute("ebtables -t nat -A " + vmchain_out + " -p ARP -j DROP")
     except:
         logging.debug("Failed to program default ebtables OUT rules")
-        return 'false' 
-    
-            
+        return 'false'
+
+
 def default_network_rules_systemvm(vm_name, localbrname):
     bridges = getBridges(vm_name)
     domid = getvmId(vm_name)
     vmchain = vm_name
- 
+
     delete_rules_for_vm_in_bridge_firewall_chain(vm_name)
-  
+
     try:
         execute("iptables -N " + vmchain)
     except:
@@ -249,20 +249,20 @@ def default_network_rules_systemvm(vm_name, localbrname):
     for bridge in bridges:
         if bridge != localbrname:
             if not addFWFramework(bridge):
-                return False 
+                return False
             brfw = "BF-" + bridge
             vifs = getVifsForBridge(vm_name, bridge)
             for vif in vifs:
                 try:
-                    execute("iptables -A " + brfw + "-OUT" +  " -m physdev --physdev-is-bridged --physdev-out " + vif +  " -j " + vmchain)
-                    execute("iptables -A " + brfw + "-IN" + " -m physdev --physdev-is-bridged --physdev-in " + vif + " -j " +  vmchain)
+                    execute("iptables -A " + brfw + "-OUT" + " -m physdev --physdev-is-bridged --physdev-out " + vif + " -j " + vmchain)
+                    execute("iptables -A " + brfw + "-IN" + " -m physdev --physdev-is-bridged --physdev-in " + vif + " -j " + vmchain)
                     execute("iptables -A " + vmchain + " -m physdev --physdev-is-bridged --physdev-in " + vif + " -j RETURN")
                 except:
                     logging.debug("Failed to program default rules")
                     return 'false'
 
     execute("iptables -A " + vmchain + " -j ACCEPT")
-    
+
     if write_rule_log_for_vm(vm_name, '-1', '_ignore_', domid, '_initial_', '-1') == False:
         logging.debug("Failed to log default network rules for systemvm, ignoring")
     return 'true'
@@ -305,7 +305,7 @@ def create_ipset_forvm (ipsetname):
         logging.debug("Creating ipset chain .... " + ipsetname)
         execute("ipset -F " + ipsetname)
         execute("ipset -X " + ipsetname)
-        execute("ipset -N " + ipsetname + "  iphash")
+        execute("ipset -N " + ipsetname + " iphash")
     except:
         logging.debug("ipset chain not exists creating.... " + ipsetname)
         execute("ipset -N " + ipsetname + " iphash")
@@ -317,7 +317,7 @@ def add_to_ipset(ipsetname, ips, action):
     for ip in ips:
         try:
             logging.debug("vm ip " + ip)
-            execute("ipset  " + action  + " " + ipsetname + " " + ip)
+            execute("ipset " + action + " " + ipsetname + " " + ip)
         except:
             logging.debug("vm ip alreday in ip set " + ip)
             continue
@@ -345,36 +345,36 @@ def ebtables_rules_vmip (vmname, ips, action):
     for ip in ips:
         logging.debug("ip = "+ip)
         try:
-            execute("ebtables -t nat -I " + vmchain_inips +  " -p ARP --arp-ip-src " + ip + " -j RETURN")
-            execute("ebtables -t nat -I " + vmchain_outips + " -p ARP --arp-ip-dst  " + ip + " -j RETURN")
+            execute("ebtables -t nat -I " + vmchain_inips + " -p ARP --arp-ip-src " + ip + " -j RETURN")
+            execute("ebtables -t nat -I " + vmchain_outips + " -p ARP --arp-ip-dst " + ip + " -j RETURN")
         except:
-            logging.debug("Failed to program  ebtables rules for secondary ip "+ ip)
+            logging.debug("Failed to program ebtables rules for secondary ip "+ ip)
         continue
 
 def default_network_rules(vm_name, vm_id, vm_ip, vm_mac, vif, brname, sec_ips):
     if not addFWFramework(brname):
-        return False 
+        return False
 
     vmName = vm_name
     brfw = "BF-" + brname
     domID = getvmId(vm_name)
     delete_rules_for_vm_in_bridge_firewall_chain(vmName)
     vmchain = vm_name
-    vmchain_egress =  egress_chain_name(vm_name)
+    vmchain_egress = egress_chain_name(vm_name)
     vmchain_default = '-'.join(vmchain.split('-')[:-1]) + "-def"
-    
+
     destroy_ebtables_rules(vmName, vif)
 
     try:
         execute("iptables -N " + vmchain)
     except:
         execute("iptables -F " + vmchain)
-   
+
     try:
         execute("iptables -N " + vmchain_egress)
     except:
         execute("iptables -F " + vmchain_egress)
-     
+
     try:
         execute("iptables -N " + vmchain_default)
     except:
@@ -406,59 +406,59 @@ def default_network_rules(vm_name, vm_id, vm_ip, vm_mac, vif, brname, sec_ips):
             logging.debug("Failed to log default network rules, ignoring")
 
     try:
-        execute("iptables -A " + brfw + "-OUT" + " -m physdev --physdev-is-bridged --physdev-out " + vif + " -j " +  vmchain_default)
-        execute("iptables -A " + brfw + "-IN" + " -m physdev --physdev-is-bridged --physdev-in " +  vif + " -j " + vmchain_default)
-        execute("iptables -A  " + vmchain_default + " -m state --state RELATED,ESTABLISHED -j ACCEPT")
+        execute("iptables -A " + brfw + "-OUT" + " -m physdev --physdev-is-bridged --physdev-out " + vif + " -j " + vmchain_default)
+        execute("iptables -A " + brfw + "-IN" + " -m physdev --physdev-is-bridged --physdev-in " + vif + " -j " + vmchain_default)
+        execute("iptables -A " + vmchain_default + " -m state --state RELATED,ESTABLISHED -j ACCEPT")
         #allow dhcp
         execute("iptables -A " + vmchain_default + " -m physdev --physdev-is-bridged --physdev-in " + vif + " -p udp --dport 67 --sport 68 -j ACCEPT")
         execute("iptables -A " + vmchain_default + " -m physdev --physdev-is-bridged --physdev-out " + vif + " -p udp --dport 68 --sport 67  -j ACCEPT")
 
         #don't let vm spoof its ip address
         if vm_ip is not None:
-            execute("iptables -A " + vmchain_default + " -m physdev --physdev-is-bridged --physdev-in " + vif  + " -m set --set " +  vmipsetName +  " src -p udp --dport 53  -j RETURN ")
-            execute("iptables -A " + vmchain_default + " -m physdev --physdev-is-bridged --physdev-in " + vif  + " -m set --set " +  vmipsetName +  " src -j " + vmchain_egress)
-        execute("iptables -A " + vmchain_default + " -m physdev --physdev-is-bridged --physdev-out " + vif  + " -j " +  vmchain)
+            execute("iptables -A " + vmchain_default + " -m physdev --physdev-is-bridged --physdev-in " + vif + " -m set --set " + vmipsetName + " src -p udp --dport 53  -j RETURN ")
+            execute("iptables -A " + vmchain_default + " -m physdev --physdev-is-bridged --physdev-in " + vif + " -m set --set " + vmipsetName + " src -j " + vmchain_egress)
+        execute("iptables -A " + vmchain_default + " -m physdev --physdev-is-bridged --physdev-out " + vif + " -j " + vmchain)
         execute("iptables -A " + vmchain + " -j DROP")
     except:
         logging.debug("Failed to program default rules for vm " + vm_name)
         return 'false'
-    
+
     default_ebtables_rules(vmchain, vm_ip, vm_mac, vif)
     #default ebtables rules for vm secondary ips
     ebtables_rules_vmip(vm_name, ips, "-I")
-    
+
     if vm_ip is not None:
         if write_rule_log_for_vm(vmName, vm_id, vm_ip, domID, '_initial_', '-1') == False:
             logging.debug("Failed to log default network rules, ignoring")
-        
+
     logging.debug("Programmed default rules for vm " + vm_name)
     return 'true'
-    
+
 def post_default_network_rules(vm_name, vm_id, vm_ip, vm_mac, vif, brname, dhcpSvr, hostIp, hostMacAddr):
     vmchain_default = '-'.join(vm_name.split('-')[:-1]) + "-def"
     vmchain_in = vm_name + "-in"
     vmchain_out = vm_name + "-out"
     domID = getvmId(vm_name)
     try:
-        execute("iptables -I " + vmchain_default + " 4 -m physdev --physdev-is-bridged --physdev-in " + vif  + " --source " +  vm_ip +  " -j ACCEPT")
+        execute("iptables -I " + vmchain_default + " 4 -m physdev --physdev-is-bridged --physdev-in " + vif + " --source " + vm_ip + " -j ACCEPT")
     except:
         pass
     try:
         execute("iptables -t nat -A PREROUTING -p tcp -m physdev --physdev-in " + vif + " -m tcp --dport 80 -d " + dhcpSvr + " -j DNAT --to-destination " + hostIp + ":80")
     except:
         pass
-    
+
     try:
         execute("ebtables -t nat -I " + vmchain_in + " -p IPv4 --ip-protocol tcp --ip-destination-port 80 --ip-dst " + dhcpSvr + " -j dnat --to-destination " + hostMacAddr)
     except:
         pass
-    
+
     try:
-        execute("ebtables -t nat -I " + vmchain_in  +  " 4 -p ARP --arp-ip-src ! " + vm_ip + " -j DROP") 
+        execute("ebtables -t nat -I " + vmchain_in + " 4 -p ARP --arp-ip-src ! " + vm_ip + " -j DROP")
     except:
         pass
     try:
-        execute("ebtables -t nat -I " + vmchain_out + " 2 -p ARP --arp-ip-dst ! " + vm_ip + " -j DROP") 
+        execute("ebtables -t nat -I " + vmchain_out + " 2 -p ARP --arp-ip-dst ! " + vm_ip + " -j DROP")
     except:
         pass
     if write_rule_log_for_vm(vm_name, vm_id, vm_ip, domID, '_initial_', '-1') == False:
@@ -467,10 +467,10 @@ def delete_rules_for_vm_in_bridge_firewall_chain(vmName):
     vm_name = vmName
     if vm_name.startswith('i-') or vm_name.startswith('r-'):
 	vm_name = '-'.join(vm_name.split('-')[:-1]) + "-def"
-    
+
     vmchain = vm_name
-    
-    delcmd = "iptables-save | grep BF | grep " +  vmchain + " | grep physdev-is-bridged | sed 's/-A/-D/'"
+
+    delcmd = "iptables-save | grep BF | grep " + vmchain + " | grep physdev-is-bridged | sed 's/-A/-D/'"
     delcmds = execute(delcmd).split('\n')
     delcmds.pop()
     for cmd in delcmds:
@@ -482,14 +482,14 @@ def delete_rules_for_vm_in_bridge_firewall_chain(vmName):
 def rewrite_rule_log_for_vm(vm_name, new_domid):
     logfilename = "/var/run/cloud/" + vm_name +".log"
     if not os.path.exists(logfilename):
-        return 
+        return
     lines = (line.rstrip() for line in open(logfilename))
-    
+
     [_vmName,_vmID,_vmIP,_domID,_signature,_seqno] = ['_', '-1', '_', '-1', '_', '-1']
     for line in lines:
         [_vmName,_vmID,_vmIP,_domID,_signature,_seqno] = line.split(',')
         break
-    
+
     write_rule_log_for_vm(_vmName, _vmID, '0.0.0.0', new_domid, _signature, '-1')
 
 def get_rule_log_for_vm(vmName):
@@ -497,14 +497,14 @@ def get_rule_log_for_vm(vmName):
     logfilename = "/var/run/cloud/" + vm_name +".log"
     if not os.path.exists(logfilename):
         return ''
-    
+
     lines = (line.rstrip() for line in open(logfilename))
-    
+
     [_vmName,_vmID,_vmIP,_domID,_signature,_seqno] = ['_', '-1', '_', '-1', '_', '-1']
     for line in lines:
         [_vmName,_vmID,_vmIP,_domID,_signature,_seqno] = line.split(',')
         break
-    
+
     return ','.join([_vmName, _vmID, _vmIP, _domID, _signature, _seqno])
 
 def check_domid_changed(vmName):
@@ -512,37 +512,37 @@ def check_domid_changed(vmName):
     try:
         curr_domid = getvmId(vmName)
         if (curr_domid is None) or (not curr_domid.isdigit()):
-            curr_domid = '-1'   
+            curr_domid = '-1'
     except:
         pass
-    
+
     logfilename = "/var/run/cloud/" + vmName +".log"
     if not os.path.exists(logfilename):
         return ['-1', curr_domid]
-    
+
     lines = (line.rstrip() for line in open(logfilename))
-    
+
     [_vmName,_vmID,_vmIP,old_domid,_signature,_seqno] = ['_', '-1', '_', '-1', '_', '-1']
     for line in lines:
         [_vmName,_vmID,_vmIP,old_domid,_signature,_seqno] = line.split(',')
         break
-    
+
     return [curr_domid, old_domid]
 def network_rules_for_rebooted_vm(vmName):
     vm_name = vmName
     [curr_domid, old_domid] = check_domid_changed(vm_name)
-    
+
     if curr_domid == old_domid:
         return True
-    
+
     if old_domid == '-1':
         return True
-    
+
     if curr_domid == '-1':
         return True
-    
-    logging.debug("Found a rebooted VM -- reprogramming rules for  " + vm_name)
-    
+
+    logging.debug("Found a rebooted VM -- reprogramming rules for " + vm_name)
+
     delete_rules_for_vm_in_bridge_firewall_chain(vm_name)
 
     brName = execute("iptables-save |grep physdev-is-bridged |grep FORWARD |grep BF |grep '\-o' |awk '{print $9}' | head -1").strip()
@@ -552,10 +552,10 @@ def network_rules_for_rebooted_vm(vmName):
         brName = re.sub("^BF-", "", brName)
 
     if 1 in [ vm_name.startswith(c) for c in ['r-', 's-', 'v-'] ]:
-        
+
         default_network_rules_systemvm(vm_name, brName)
         return True
-    
+
     vmchain = vm_name
     vmchain_default = '-'.join(vmchain.split('-')[:-1]) + "-def"
 
@@ -567,8 +567,8 @@ def network_rules_for_rebooted_vm(vmName):
 
     #change antispoof rule in vmchain
     try:
-        delcmd = "iptables-save | grep '\-A " +  vmchain_default + "' | grep physdev | sed 's/-A/-D/'"
-        inscmd = "iptables-save |grep '\-A " +  vmchain_default + "' | grep  physdev | sed -r 's/vnet[0-9]+/ " + vifs[0] + "/' | sed 's/-A/-I/'"
+        delcmd = "iptables-save | grep '\-A " + vmchain_default + "' | grep physdev | sed 's/-A/-D/'"
+        inscmd = "iptables-save |grep '\-A " + vmchain_default + "' | grep physdev | sed -r 's/vnet[0-9]+/ " + vifs[0] + "/' | sed 's/-A/-I/'"
         ipts = []
         for cmd in [delcmd, inscmd]:
             logging.debug(cmd)
@@ -577,7 +577,7 @@ def network_rules_for_rebooted_vm(vmName):
             for c in cmds:
                     ipt = "iptables " + c
                     ipts.append(ipt)
-        
+
         for ipt in ipts:
             try:
                 execute(ipt)
@@ -592,7 +592,7 @@ def network_rules_for_rebooted_vm(vmName):
 def get_rule_logs_for_vms():
     cmd = "virsh list|awk '/running/ {print $2}'"
     vms = bash("-c", cmd).stdout.split("\n")
-    
+
     result = []
     try:
         for name in vms:
@@ -605,11 +605,11 @@ def get_rule_logs_for_vms():
                 result.append(log)
     except:
         logging.debug("Failed to get rule logs, better luck next time!")
-        
+
     print ";".join(result)
 
 def cleanup_rules_for_dead_vms():
-    return True 
+    return True
 
 
 def cleanup_rules():
@@ -620,7 +620,7 @@ def cleanup_rules():
         for chain in chains:
             if 1 in [ chain.startswith(c) for c in ['r-', 'i-', 's-', 'v-'] ]:
                 vm_name = chain
-                
+
                 cmd = "virsh list |awk '/" + vm_name + "/ {print $3}'"
                 try:
                     result = execute(cmd).strip()
@@ -634,13 +634,13 @@ def cleanup_rules():
                 if not (result == "running" or result == "paused"):
                     logging.debug("vm " + vm_name + " is not running or paused, cleaning up iptable rules")
                     cleanup.append(vm_name)
-        
+
         chainscmd = "ebtables-save |grep :i |awk '{print $1}' |sed -e 's/\-in//g' |sed -e 's/\-out//g' |sed -e 's/^://g'"
         chains = execute(chainscmd).split('\n')
         for chain in chains:
             if 1 in [ chain.startswith(c) for c in ['r-', 'i-', 's-', 'v-'] ]:
                 vm_name = chain
-    
+
                 cmd = "virsh list |awk '/" + vm_name + "/ {print $3}'"
                 try:
                     result = execute(cmd).strip()
@@ -657,8 +657,8 @@ def cleanup_rules():
 
         for vmname in cleanup:
             destroy_network_rules_for_vm(vmname)
-                    
-        logging.debug("Cleaned up rules for " + str(len(cleanup)) + " chains")                
+
+        logging.debug("Cleaned up rules for " + str(len(cleanup)) + " chains")
     except:
         logging.debug("Failed to cleanup rules !")
 
@@ -667,11 +667,11 @@ def check_rule_log_for_vm(vmName, vmId, vmIP, domID, signature, seqno):
     logfilename = "/var/run/cloud/" + vm_name +".log"
     if not os.path.exists(logfilename):
         return [True, True, True, True, True, True]
-        
+
     try:
         lines = (line.rstrip() for line in open(logfilename))
     except:
-        logging.debug("failed to open " + logfilename) 
+        logging.debug("failed to open " + logfilename)
         return [True, True, True, True, True, True]
 
     [_vmName,_vmID,_vmIP,_domID,_signature,_seqno] = ['_', '-1', '_', '-1', '_', '-1']
@@ -683,7 +683,7 @@ def check_rule_log_for_vm(vmName, vmId, vmIP, domID, signature, seqno):
         logging.debug("Failed to parse log file for vm " + vm_name)
         remove_rule_log_for_vm(vm_name)
         return [True, True, True, True, True, True]
-    
+
     return [(vm_name != _vmName), (vmId != _vmID), (vmIP != _vmIP), (domID != _domID), (signature != _signature),(seqno != _seqno)]
 
 def write_rule_log_for_vm(vmName, vmID, vmIP, domID, signature, seqno):
@@ -699,9 +699,9 @@ def write_rule_log_for_vm(vmName, vmID, vmIP, domID, signature, seqno):
     except:
         logging.debug("Failed to write to rule log file " + logfilename)
         result = False
-        
+
     logf.close()
-    
+
     return result
 
 def remove_rule_log_for_vm(vmName):
@@ -714,7 +714,7 @@ def remove_rule_log_for_vm(vmName):
     except:
         logging.debug("Failed to delete rule log file " + logfilename)
         result = False
-    
+
     return result
 
 def egress_chain_name(vm_name):
@@ -724,17 +724,17 @@ def add_network_rules(vm_name, vm_id, vm_ip, signature, seqno, vmMac, rules, vif
   try:
     vmName = vm_name
     domId = getvmId(vmName)
-    
 
-   
- 
+
+
+
     changes = []
     changes = check_rule_log_for_vm(vmName, vm_id, vm_ip, domId, signature, seqno)
-    
+
     if not 1 in changes:
         logging.debug("Rules already programmed for vm " + vm_name)
         return 'true'
-    
+
     if changes[0] or changes[1] or changes[2] or changes[3]:
         default_network_rules(vmName, vm_id, vm_ip, vmMac, vif, brname, sec_ips)
 
@@ -743,18 +743,18 @@ def add_network_rules(vm_name, vm_id, vm_ip, signature, seqno, vmMac, rules, vif
     else:
         lines = rules.split(';')[:-1]
 
-    logging.debug("    programming network rules for  IP: " + vm_ip + " vmname=" + vm_name)
+    logging.debug("    programming network rules for IP: " + vm_ip + " vmname=" + vm_name)
     try:
       vmchain = vm_name
       execute("iptables -F " + vmchain)
       egress_vmchain = egress_chain_name(vm_name)
       execute("iptables -F " + egress_vmchain)
-    except: 
-      logging.debug("Error flushing iptables rules for " + vmchain + ".  Presuming firewall rules deleted, re-initializing." )
+    except:
+      logging.debug("Error flushing iptables rules for " + vmchain + ". Presuming firewall rules deleted, re-initializing." )
       default_network_rules(vm_name, vm_id, vm_ip, vmMac, vif, brname)
     egressrule = 0
     for line in lines:
-	
+
         tokens = line.split(':')
         if len(tokens) != 5:
           continue
@@ -775,12 +775,12 @@ def add_network_rules(vm_name, vm_id, vm_ip, signature, seqno, vmMac, rules, vif
             vmchain = vm_name
             action = "ACCEPT"
             direction = "-s"
-        if  '0.0.0.0/0' in ips:
+        if '0.0.0.0/0' in ips:
             i = ips.index('0.0.0.0/0')
             del ips[i]
             allow_any = True
         range = start + ":" + end
-        if ips:    
+        if ips:
             if protocol == 'all':
                 for ip in ips:
                     execute("iptables -I " + vmchain + " -m state --state NEW " + direction + " " + ip + " -j "+action)
@@ -792,32 +792,32 @@ def add_network_rules(vm_name, vm_id, vm_ip, signature, seqno, vmMac, rules, vif
                 if start == "-1":
                     range = "any"
                 for ip in ips:
-                    execute("iptables -I " + vmchain + " -p icmp --icmp-type " + range + " " + direction + "  " + ip + " -j "+ action)
-        
+                    execute("iptables -I " + vmchain + " -p icmp --icmp-type " + range + " " + direction + " " + ip + " -j "+ action)
+
         if allow_any and protocol != 'all':
             if protocol != 'icmp':
-                execute("iptables -I " + vmchain + " -p " + protocol + " -m " +  protocol + " --dport " + range + " -m state --state NEW -j "+ action)
+                execute("iptables -I " + vmchain + " -p " + protocol + " -m " + protocol + " --dport " + range + " -m state --state NEW -j "+ action)
             else:
                 range = start + "/" + end
                 if start == "-1":
                     range = "any"
                 execute("iptables -I " + vmchain + " -p icmp --icmp-type " + range + " -j "+action)
- 
+
     egress_vmchain = egress_chain_name(vm_name)
     if egressrule == 0 :
-        iptables =  "iptables -A " + egress_vmchain + " -j RETURN"       
+        iptables = "iptables -A " + egress_vmchain + " -j RETURN"
         execute(iptables)
     else:
-        iptables =  "iptables -A " + egress_vmchain + " -j DROP"       
+        iptables = "iptables -A " + egress_vmchain + " -j DROP"
         execute(iptables)
 
     vmchain = vm_name
-    iptables =  "iptables -A " + vmchain + " -j DROP"       
-    execute(iptables)       
-    
+    iptables = "iptables -A " + vmchain + " -j DROP"
+    execute(iptables)
+
     if write_rule_log_for_vm(vmName, vm_id, vm_ip, domId, signature, seqno) == False:
         return 'false'
-    
+
     return 'true'
   except:
     exceptionText = traceback.format_exc()
@@ -826,15 +826,15 @@ def add_network_rules(vm_name, vm_id, vm_ip, signature, seqno, vmMac, rules, vif
 def getVifs(vmName):
     vifs = []
     try:
-        xmlfile = virsh("dumpxml", vmName).stdout 
+        xmlfile = virsh("dumpxml", vmName).stdout
     except:
-        return vifs    
+        return vifs
 
     dom = xml.dom.minidom.parseString(xmlfile)
     for network in dom.getElementsByTagName("interface"):
         target = network.getElementsByTagName('target')[0]
         nicdev = target.getAttribute("dev").strip()
-        vifs.append(nicdev) 
+        vifs.append(nicdev)
     return vifs
 
 def getVifsForBridge(vmName, brname):
@@ -871,7 +871,7 @@ def getBridges(vmName):
 def getvmId(vmName):
     cmd = "virsh list |awk '/" + vmName + "/ {print $1}'"
     return bash("-c", cmd).stdout.strip()
-    
+
 def addFWFramework(brname):
     try:
         cfo = configFileOps("/etc/sysctl.conf")
@@ -904,7 +904,7 @@ def addFWFramework(brname):
         execute("iptables -N " + brfwin)
 
     try:
-        refs = execute("iptables -n -L  " + brfw + " |grep " + brfw + " | cut -d \( -f2 | awk '{print $1}'").strip()
+        refs = execute("iptables -n -L " + brfw + " |grep " + brfw + " | cut -d \( -f2 | awk '{print $1}'").strip()
         if refs == "0":
             execute("iptables -I FORWARD -i " + brname + " -j DROP")
             execute("iptables -I FORWARD -o " + brname + " -j DROP")
@@ -915,8 +915,8 @@ def addFWFramework(brname):
             execute("iptables -A " + brfw + " -m physdev --physdev-is-bridged --physdev-is-in -j " + brfwin)
             execute("iptables -A " + brfw + " -m physdev --physdev-is-bridged --physdev-is-out -j " + brfwout)
             execute("iptables -A " + brfw + " -m physdev --physdev-is-bridged --physdev-out " + phydev + " -j ACCEPT")
-           
-    
+
+
         return True
     except:
         try:
@@ -924,7 +924,7 @@ def addFWFramework(brname):
         except:
             return False
         return False
-            
+
 if __name__ == '__main__':
     logging.basicConfig(filename="/var/log/cloudstack/agent/security_group.log", format="%(asctime)s - %(message)s", level=logging.DEBUG)
     parser = OptionParser()
@@ -953,7 +953,7 @@ if __name__ == '__main__':
     elif cmd == "default_network_rules":
         default_network_rules(option.vmName, option.vmID, option.vmIP, option.vmMAC, option.vif, option.brname, option.nicSecIps)
     elif cmd == "destroy_network_rules_for_vm":
-        destroy_network_rules_for_vm(option.vmName, option.vif) 
+        destroy_network_rules_for_vm(option.vmName, option.vif)
     elif cmd == "default_network_rules_systemvm":
         default_network_rules_systemvm(option.vmName, option.localbrname)
     elif cmd == "get_rule_logs_for_vms":


[39/50] [abbrv] git commit: updated refs/heads/ldapplugin to 7bc705e

Posted by ch...@apache.org.
CLOUDSTACK-3376: NPE: resource count calculation from the account manager on account cleanup

This issue is happing because of the steps the code follow to cleanup the account.
The cleanupAccount was deleting the entries from the resource_limit and
resource_count table and performing further cleaning afterwards. Ideally, deletion
of entries from resourceLimit and resourceCount should be the last step in
cleanupAccount process.

Signed-off-by: Prasanna Santhanam <ts...@apache.org>


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

Branch: refs/heads/ldapplugin
Commit: 21b1c9449a1289db9fa92c2ec76a936006100ab3
Parents: 5fbec76
Author: Sanjay Tripathi <sa...@citrix.com>
Authored: Fri Jul 12 14:11:36 2013 +0530
Committer: Prasanna Santhanam <ts...@apache.org>
Committed: Wed Jul 17 12:39:16 2013 +0530

----------------------------------------------------------------------
 .../src/com/cloud/user/AccountManagerImpl.java  | 21 ++++++++++----------
 1 file changed, 11 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/21b1c944/server/src/com/cloud/user/AccountManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/user/AccountManagerImpl.java b/server/src/com/cloud/user/AccountManagerImpl.java
index 4b06e78..512f913 100755
--- a/server/src/com/cloud/user/AccountManagerImpl.java
+++ b/server/src/com/cloud/user/AccountManagerImpl.java
@@ -734,16 +734,6 @@ public class AccountManagerImpl extends ManagerBase implements AccountManager, M
             int vlansReleased = _accountGuestVlanMapDao.removeByAccountId(accountId);
             s_logger.info("deleteAccount: Released " + vlansReleased + " dedicated guest vlan ranges from account " + accountId);
 
-            // Update resource count for this account and for parent domains.
-            List<ResourceCountVO> resourceCounts = _resourceCountDao.listByOwnerId(accountId, ResourceOwnerType.Account);
-            for (ResourceCountVO resourceCount : resourceCounts) {
-                _resourceLimitMgr.decrementResourceCount(accountId, resourceCount.getType(), resourceCount.getCount());
-            }
-
-            // Delete resource count and resource limits entries set for this account (if there are any).
-            _resourceCountDao.removeEntriesByOwner(accountId, ResourceOwnerType.Account);
-            _resourceLimitDao.removeEntriesByOwner(accountId, ResourceOwnerType.Account);
-
             // release account specific acquired portable IP's. Since all the portable IP's must have been already
             // disassociated with VPC/guest network (due to deletion), so just mark portable IP as free.
             List<? extends IpAddress> portableIpsToRelease = _ipAddressDao.listByAccount(accountId);
@@ -761,6 +751,17 @@ public class AccountManagerImpl extends ManagerBase implements AccountManager, M
                     }
                 }
             }
+
+            // Updating and deleting the resourceLimit and resourceCount should be the last step in cleanupAccount process.
+            // Update resource count for this account and for parent domains.
+            List<ResourceCountVO> resourceCounts = _resourceCountDao.listByOwnerId(accountId, ResourceOwnerType.Account);
+            for (ResourceCountVO resourceCount : resourceCounts) {
+                _resourceLimitMgr.decrementResourceCount(accountId, resourceCount.getType(), resourceCount.getCount());
+            }
+
+            // Delete resource count and resource limits entries set for this account (if there are any).
+            _resourceCountDao.removeEntriesByOwner(accountId, ResourceOwnerType.Account);
+            _resourceLimitDao.removeEntriesByOwner(accountId, ResourceOwnerType.Account);
             return true;
         } catch (Exception ex) {
             s_logger.warn("Failed to cleanup account " + account + " due to ", ex);


[38/50] [abbrv] git commit: updated refs/heads/ldapplugin to 7bc705e

Posted by ch...@apache.org.
Fixed arguments in the format string in the debug message.

Signed-off-by: Prasanna Santhanam <ts...@apache.org>


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

Branch: refs/heads/ldapplugin
Commit: 5fbec76c8a7a57c01d456ab0af23dcb44e29ca14
Parents: 3a60e56
Author: SrikanteswaraRao Talluri <sr...@citrix.com>
Authored: Wed Jul 17 11:40:49 2013 +0530
Committer: Prasanna Santhanam <ts...@apache.org>
Committed: Wed Jul 17 12:36:27 2013 +0530

----------------------------------------------------------------------
 test/integration/component/test_vpc_network_lbrules.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/5fbec76c/test/integration/component/test_vpc_network_lbrules.py
----------------------------------------------------------------------
diff --git a/test/integration/component/test_vpc_network_lbrules.py b/test/integration/component/test_vpc_network_lbrules.py
index a1dd19b..2712dac 100644
--- a/test/integration/component/test_vpc_network_lbrules.py
+++ b/test/integration/component/test_vpc_network_lbrules.py
@@ -481,7 +481,7 @@ class TestVPCNetworkLBRules(cloudstackTestCase):
                                     vpcid=self.vpc.id,
                                     domainid=self.account.domainid
                                 )
-        self.debug("Adding virtual machines %s and %s to LB rule" % (vmarray))
+        self.debug("Adding virtual machines %s and %s to LB rule" % (vmarray[0], vmarray[1]))
         lb_rule.assign(self.apiclient, vmarray)
         return lb_rule
 


[31/50] [abbrv] git commit: updated refs/heads/ldapplugin to 7bc705e

Posted by ch...@apache.org.
Cloudstack-2997: maxconn missing param


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

Branch: refs/heads/ldapplugin
Commit: 954e1978130b3cfb0c73f2f1506d94440f478f01
Parents: dd33abf
Author: Abhinandan Prateek <ap...@apache.org>
Authored: Wed Jul 17 10:05:43 2013 +0530
Committer: Abhinandan Prateek <ap...@apache.org>
Committed: Wed Jul 17 10:06:11 2013 +0530

----------------------------------------------------------------------
 server/src/com/cloud/configuration/ConfigurationManagerImpl.java | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/954e1978/server/src/com/cloud/configuration/ConfigurationManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/configuration/ConfigurationManagerImpl.java b/server/src/com/cloud/configuration/ConfigurationManagerImpl.java
index 9498c82..801028d 100755
--- a/server/src/com/cloud/configuration/ConfigurationManagerImpl.java
+++ b/server/src/com/cloud/configuration/ConfigurationManagerImpl.java
@@ -4047,7 +4047,7 @@ public class ConfigurationManagerImpl extends ManagerBase implements Configurati
 
         NetworkOffering offering = createNetworkOffering(name, displayText, trafficType, tags, specifyVlan, availability, networkRate,
                 serviceProviderMap, false, guestType, false, serviceOfferingId, conserveMode, serviceCapabilityMap,
-                specifyIpRanges, isPersistent, details, egressDefaultPolicy);
+                specifyIpRanges, isPersistent, details, egressDefaultPolicy, maxconn);
         CallContext.current().setEventDetails(" Id: " + offering.getId() + " Name: " + name);
         return offering;
     }


[48/50] [abbrv] git commit: updated refs/heads/ldapplugin to 7bc705e

Posted by ch...@apache.org.
Removed unused script scripts/storage/qcow2/cleanupmyvms.sh

Signed-off-by: Rene Diepstraten <ma...@renediepstraten.nl>


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

Branch: refs/heads/ldapplugin
Commit: 53e6a1c0fa6b93e5c6f3307711c987fd7d4fec4c
Parents: ffe7cfe
Author: Rene Diepstraten <ma...@renediepstraten.nl>
Authored: Fri Jul 12 13:04:47 2013 +0200
Committer: Wido den Hollander <wi...@widodh.nl>
Committed: Wed Jul 17 18:35:38 2013 +0200

----------------------------------------------------------------------
 scripts/storage/qcow2/cleanupmyvms.sh | 83 ------------------------------
 1 file changed, 83 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/53e6a1c0/scripts/storage/qcow2/cleanupmyvms.sh
----------------------------------------------------------------------
diff --git a/scripts/storage/qcow2/cleanupmyvms.sh b/scripts/storage/qcow2/cleanupmyvms.sh
deleted file mode 100755
index e270a01..0000000
--- a/scripts/storage/qcow2/cleanupmyvms.sh
+++ /dev/null
@@ -1,83 +0,0 @@
-#!/bin/bash
-# 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.
-
- 
-
-# $Id: cleanupmyvms.sh 9804 2010-06-22 18:36:49Z alex $ $HeadURL: svn://svn.lab.vmops.com/repos/vmdev/java/scripts/storage/qcow2/cleanupmyvms.sh $
-# @VERSION@
-
-if [ "$1" == "" ]
-then
-  echo "Usage: $(basename $0) <instance>"
-  exit 3
-fi
-
-instance=$1
-
-for i in $(virsh list | grep $instance | awk '{print $2}' );  
-do   
-  files=$(virsh dumpxml $i | grep file | grep source | awk '{print $2}' | awk -F"=" '{print $2}'  );   
-  echo "Destroying VM: $i"
-  virsh destroy $i
-  virsh undefine $i
-  sleep 2
-  for f in $files; 
-  do  
-     f=${f%%/>}
-     echo "Destroying disk: $f"
-     rm -f $f
-  done; 
-done
-
-#double check, if there are vms in shut-off state
-for i in $(virsh list --all |grep $instance| awk '{print $2}')
-do
-  files=$(virsh dumpxml $i | grep file | grep source | awk '{print $2}' | awk -F"=" '{print $2}'  );   
-  echo "Undefine VM: $i"
-  virsh undefine $i
-  for f in $files;
-  do
-     f=${f%%/>}
-     if [ -f $f ]
-     then
-     	f=${f%%/>}
-     	echo "Destroying disk: $f"
-     	rm -f $f
-     fi
-  done
-done
-
-#cleanup the bridge
-br=`virsh net-list|grep $instance |awk '{print $1}'`
-if [ -n "$br" ]
-then
-virsh net-destroy $br
-fi
-#double check
-br=`brctl show |grep $instance|awk '{print $1}'`
-if [ -n "$br" ]
-then
-   ifconfig $br down
-   sleep 1
-   brctl delbr $br
-   sleep 1
-fi
-
-dnsmasq=`cat /var/run/libvirt/network/vmops-$instance-private.pid`
-kill -9 $dnsmasq 2>/dev/null
-


[07/50] [abbrv] UserContext switched to CallContext. Added generic storage mechanism for other code to carry information throughout a call. Made the calling User and Account a must have. Added an interface to carry entities in error. Fixed up the cod

Posted by ch...@apache.org.
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/server/src/com/cloud/network/NetworkManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/NetworkManagerImpl.java b/server/src/com/cloud/network/NetworkManagerImpl.java
index 42430bc..f6e9a0a 100755
--- a/server/src/com/cloud/network/NetworkManagerImpl.java
+++ b/server/src/com/cloud/network/NetworkManagerImpl.java
@@ -39,10 +39,12 @@ import javax.naming.ConfigurationException;
 
 import org.apache.cloudstack.acl.ControlledEntity.ACLType;
 import org.apache.cloudstack.acl.SecurityChecker.AccessType;
+import org.apache.cloudstack.context.CallContext;
 import org.apache.cloudstack.region.PortableIp;
 import org.apache.cloudstack.region.PortableIpDao;
 import org.apache.cloudstack.region.PortableIpVO;
 import org.apache.cloudstack.region.Region;
+
 import org.apache.log4j.Logger;
 import org.springframework.stereotype.Component;
 
@@ -167,7 +169,6 @@ import com.cloud.user.Account;
 import com.cloud.user.AccountManager;
 import com.cloud.user.ResourceLimitService;
 import com.cloud.user.User;
-import com.cloud.user.UserContext;
 import com.cloud.user.UserVO;
 import com.cloud.user.dao.AccountDao;
 import com.cloud.user.dao.UserDao;
@@ -712,8 +713,8 @@ public class NetworkManagerImpl extends ManagerBase implements NetworkManager, L
 
     private IpAddress allocateIP(Account ipOwner, boolean isSystem, long zoneId) 
             throws ResourceAllocationException, InsufficientAddressCapacityException, ConcurrentOperationException {
-        Account caller = UserContext.current().getCaller();
-        long callerUserId = UserContext.current().getCallerUserId();
+        Account caller = CallContext.current().getCallingAccount();
+        long callerUserId = CallContext.current().getCallingUserId();
         // check permissions
         _accountMgr.checkAccess(caller, null, false, ipOwner);
 
@@ -768,7 +769,7 @@ public class NetworkManagerImpl extends ManagerBase implements NetworkManager, L
                 ex.addProxyObject(ApiDBUtils.findZoneById(zone.getId()).getUuid());
                 throw ex;
             }
-            UserContext.current().setEventDetails("Ip Id: " + ip.getId());
+            CallContext.current().setEventDetails("Ip Id: " + ip.getId());
             Ip ipAddress = ip.getAddress();
 
             s_logger.debug("Got " + ipAddress + " to assign for account " + ipOwner.getId() + " in zone " + zone.getId());
@@ -874,7 +875,7 @@ public class NetworkManagerImpl extends ManagerBase implements NetworkManager, L
     public IPAddressVO associateIPToGuestNetwork(long ipId, long networkId, boolean releaseOnFailure)
             throws ResourceAllocationException, ResourceUnavailableException,
     InsufficientAddressCapacityException, ConcurrentOperationException {
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
         Account owner = null;
 
         IPAddressVO ipToAssoc = _ipAddressDao.findById(ipId);
@@ -888,7 +889,7 @@ public class NetworkManagerImpl extends ManagerBase implements NetworkManager, L
             if (zone.getNetworkType() == NetworkType.Advanced) {
                 if (network.getGuestType() == Network.GuestType.Shared) {
                 if (isSharedNetworkOfferingWithServices(network.getNetworkOfferingId())) {
-                    _accountMgr.checkAccess(UserContext.current().getCaller(), AccessType.UseNetwork, false, network);
+                    _accountMgr.checkAccess(CallContext.current().getCallingAccount(), AccessType.UseNetwork, false, network);
                 } else {
                     throw new InvalidParameterValueException("IP can be associated with guest network of 'shared' type only if " +
                         "network services Source Nat, Static Nat, Port Forwarding, Load balancing, firewall are enabled in the network");
@@ -1002,7 +1003,7 @@ public class NetworkManagerImpl extends ManagerBase implements NetworkManager, L
             throws ResourceAllocationException, ResourceUnavailableException,
             InsufficientAddressCapacityException, ConcurrentOperationException {
 
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
         Account owner = null;
 
         Network network = _networksDao.findById(networkId);
@@ -1025,7 +1026,7 @@ public class NetworkManagerImpl extends ManagerBase implements NetworkManager, L
             if (zone.getNetworkType() == NetworkType.Advanced) {
                 if (network.getGuestType() == Network.GuestType.Shared) {
                     assert (isSharedNetworkOfferingWithServices(network.getNetworkOfferingId()));
-                    _accountMgr.checkAccess(UserContext.current().getCaller(), AccessType.UseNetwork, false, network);
+                    _accountMgr.checkAccess(CallContext.current().getCallingAccount(), AccessType.UseNetwork, false, network);
                 }
             } else {
                 _accountMgr.checkAccess(caller, null, true, ipToAssoc);
@@ -1984,7 +1985,7 @@ public class NetworkManagerImpl extends ManagerBase implements NetworkManager, L
 
         // reapply all the firewall/staticNat/lb rules
         s_logger.debug("Reprogramming network " + network + " as a part of network implement");
-        if (!reprogramNetworkRules(network.getId(), UserContext.current().getCaller(), network)) {
+        if (!reprogramNetworkRules(network.getId(), CallContext.current().getCallingAccount(), network)) {
             s_logger.warn("Failed to re-program the network as a part of network " + network + " implement");
             // see DataCenterVO.java
             ResourceUnavailableException ex = new ResourceUnavailableException("Unable to apply network rules as a part of network " + network + " implement", DataCenter.class, network.getDataCenterId());
@@ -2655,7 +2656,7 @@ public class NetworkManagerImpl extends ManagerBase implements NetworkManager, L
         }
 
         txn.commit();
-        UserContext.current().setEventDetails("Network Id: " + network.getId());
+        CallContext.current().setEventDetails("Network Id: " + network.getId());
         return network;
     }
 
@@ -3356,8 +3357,8 @@ public class NetworkManagerImpl extends ManagerBase implements NetworkManager, L
         if ( createNetwork && requiredOfferings.get(0).getIsPersistent() ) {
             DataCenter zone = _dcDao.findById(zoneId);
             DeployDestination dest = new DeployDestination(zone, null, null, null);
-            Account callerAccount = UserContext.current().getCaller();
-            UserVO callerUser = _userDao.findById(UserContext.current().getCallerUserId());
+            Account callerAccount = CallContext.current().getCallingAccount();
+            UserVO callerUser = _userDao.findById(CallContext.current().getCallingUserId());
             Journal journal = new Journal.LogJournal("Implementing " + guestNetwork, s_logger);
             ReservationContext context = new ReservationContextImpl(UUID.randomUUID().toString(), journal, callerUser, callerAccount);
             s_logger.debug("Implementing network " + guestNetwork + " as a part of network provision for persistent network");
@@ -3559,7 +3560,7 @@ public class NetworkManagerImpl extends ManagerBase implements NetworkManager, L
     public String allocateGuestIP(Account ipOwner, boolean isSystem, long zoneId, Long networkId, String requestedIp)
     throws InsufficientAddressCapacityException {
         String ipaddr = null;
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
         // check permissions
         Network network = _networksDao.findById(networkId);
 
@@ -4176,8 +4177,8 @@ public class NetworkManagerImpl extends ManagerBase implements NetworkManager, L
         Long networkId = ip.getAssociatedWithNetworkId();
         if (networkId != null) {
             if (ip.getSystem()) {
-                UserContext ctx = UserContext.current();
-                if (!disassociatePublicIpAddress(ip.getId(), ctx.getCallerUserId(), ctx.getCaller())) {
+                CallContext ctx = CallContext.current();
+                if (!disassociatePublicIpAddress(ip.getId(), ctx.getCallingUserId(), ctx.getCallingAccount())) {
                     s_logger.warn("Unable to release system ip address id=" + ip.getId());
                     success = false;
                 } else {

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/server/src/com/cloud/network/NetworkServiceImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/NetworkServiceImpl.java b/server/src/com/cloud/network/NetworkServiceImpl.java
index f8f6044..ccd23bf 100755
--- a/server/src/com/cloud/network/NetworkServiceImpl.java
+++ b/server/src/com/cloud/network/NetworkServiceImpl.java
@@ -18,8 +18,6 @@ package com.cloud.network;
 
 import java.net.Inet6Address;
 import java.net.InetAddress;
-import java.net.InetAddress;
-import java.net.Inet6Address;
 import java.net.UnknownHostException;
 import java.security.InvalidParameterException;
 import java.sql.PreparedStatement;
@@ -41,31 +39,20 @@ import javax.ejb.Local;
 import javax.inject.Inject;
 import javax.naming.ConfigurationException;
 
-import com.cloud.network.vpc.dao.VpcDao;
+import org.apache.log4j.Logger;
+import org.springframework.stereotype.Component;
+
 import org.apache.cloudstack.acl.ControlledEntity.ACLType;
-import org.apache.cloudstack.acl.SecurityChecker;
 import org.apache.cloudstack.acl.SecurityChecker.AccessType;
 import org.apache.cloudstack.api.command.admin.network.DedicateGuestVlanRangeCmd;
 import org.apache.cloudstack.api.command.admin.network.ListDedicatedGuestVlanRangesCmd;
 import org.apache.cloudstack.api.command.admin.usage.ListTrafficTypeImplementorsCmd;
-import org.apache.cloudstack.api.command.user.network.*;
-import com.cloud.network.vpc.NetworkACL;
-import com.cloud.network.vpc.dao.NetworkACLDao;
-import org.apache.cloudstack.acl.ControlledEntity.ACLType;
-import org.apache.cloudstack.acl.SecurityChecker.AccessType;
-import org.apache.cloudstack.api.command.admin.usage.ListTrafficTypeImplementorsCmd;
 import org.apache.cloudstack.api.command.user.network.CreateNetworkCmd;
 import org.apache.cloudstack.api.command.user.network.ListNetworksCmd;
 import org.apache.cloudstack.api.command.user.network.RestartNetworkCmd;
 import org.apache.cloudstack.api.command.user.vm.ListNicsCmd;
+import org.apache.cloudstack.context.CallContext;
 import org.apache.cloudstack.network.element.InternalLoadBalancerElementService;
-import org.apache.log4j.Logger;
-import org.springframework.stereotype.Component;
-
-import org.apache.log4j.Logger;
-import org.springframework.stereotype.Component;
-import org.apache.cloudstack.api.command.user.vm.ListNicsCmd;
-import org.bouncycastle.util.IPAddress;
 
 import com.cloud.api.ApiDBUtils;
 import com.cloud.configuration.Config;
@@ -133,13 +120,15 @@ import com.cloud.network.element.VpcVirtualRouterElement;
 import com.cloud.network.guru.NetworkGuru;
 import com.cloud.network.rules.FirewallRule.Purpose;
 import com.cloud.network.rules.FirewallRuleVO;
-import com.cloud.network.rules.PortForwardingRuleVO;
 import com.cloud.network.rules.RulesManager;
 import com.cloud.network.rules.dao.PortForwardingRulesDao;
+import com.cloud.network.vpc.NetworkACL;
 import com.cloud.network.vpc.PrivateIpVO;
 import com.cloud.network.vpc.Vpc;
 import com.cloud.network.vpc.VpcManager;
+import com.cloud.network.vpc.dao.NetworkACLDao;
 import com.cloud.network.vpc.dao.PrivateIpDao;
+import com.cloud.network.vpc.dao.VpcDao;
 import com.cloud.offering.NetworkOffering;
 import com.cloud.offerings.NetworkOfferingVO;
 import com.cloud.offerings.dao.NetworkOfferingDao;
@@ -156,11 +145,9 @@ import com.cloud.user.AccountVO;
 import com.cloud.user.DomainManager;
 import com.cloud.user.ResourceLimitService;
 import com.cloud.user.User;
-import com.cloud.user.UserContext;
 import com.cloud.user.UserVO;
 import com.cloud.user.dao.AccountDao;
 import com.cloud.user.dao.UserDao;
-import com.cloud.utils.AnnotationHelper;
 import com.cloud.utils.Journal;
 import com.cloud.utils.NumbersUtil;
 import com.cloud.utils.Pair;
@@ -518,8 +505,8 @@ public class NetworkServiceImpl extends ManagerBase implements  NetworkService {
     public IpAddress allocateIP(Account ipOwner, long zoneId, Long networkId)
              throws ResourceAllocationException, InsufficientAddressCapacityException, ConcurrentOperationException {
 
-        Account caller = UserContext.current().getCaller();
-        long callerUserId = UserContext.current().getCallerUserId();
+        Account caller = CallContext.current().getCallingAccount();
+        long callerUserId = CallContext.current().getCallingUserId();
         DataCenter zone = _configMgr.getZone(zoneId);
 
         if (networkId != null) {
@@ -557,8 +544,8 @@ public class NetworkServiceImpl extends ManagerBase implements  NetworkService {
     @ActionEvent(eventType = EventTypes.EVENT_PORTABLE_IP_ASSIGN, eventDescription = "allocating portable public Ip", create = true)
     public IpAddress allocatePortableIP(Account ipOwner, int regionId, Long zoneId, Long networkId, Long vpcId)
             throws ResourceAllocationException, InsufficientAddressCapacityException, ConcurrentOperationException {
-        Account caller = UserContext.current().getCaller();
-        long callerUserId = UserContext.current().getCallerUserId();
+        Account caller = CallContext.current().getCallingAccount();
+        long callerUserId = CallContext.current().getCallingUserId();
         DataCenter zone = _configMgr.getZone(zoneId);
 
         if ((networkId == null && vpcId == null) && (networkId != null && vpcId != null)) {
@@ -653,7 +640,7 @@ public class NetworkServiceImpl extends ManagerBase implements  NetworkService {
             throw new InvalidParameterValueException("Invalid network id is given");
         }
 
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
 
         //check whether the nic belongs to user vm.
         NicVO nicVO = _nicDao.findById(nicId);
@@ -753,7 +740,7 @@ public class NetworkServiceImpl extends ManagerBase implements  NetworkService {
     @Override
     @DB
     public boolean releaseSecondaryIpFromNic (long ipAddressId) {
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
         boolean success = false;
 
         // Verify input parameters
@@ -865,8 +852,8 @@ public class NetworkServiceImpl extends ManagerBase implements  NetworkService {
 
     @DB
     private boolean releaseIpAddressInternal(long ipAddressId) throws InsufficientAddressCapacityException {
-        Long userId = UserContext.current().getCallerUserId();
-        Account caller = UserContext.current().getCaller();
+        Long userId = CallContext.current().getCallingUserId();
+        Account caller = CallContext.current().getCallingAccount();
 
         // Verify input parameters
         IPAddressVO ipVO = _ipAddressDao.findById(ipAddressId);
@@ -989,7 +976,7 @@ public class NetworkServiceImpl extends ManagerBase implements  NetworkService {
         String vlanId = cmd.getVlan();
         String name = cmd.getNetworkName();
         String displayText = cmd.getDisplayText();
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
         Long physicalNetworkId = cmd.getPhysicalNetworkId();
         Long zoneId = cmd.getZoneId();
         String aclTypeStr = cmd.getAclType();
@@ -1118,8 +1105,6 @@ public class NetworkServiceImpl extends ManagerBase implements  NetworkService {
             owner = caller;
         }
 
-        UserContext.current().setAccountId(owner.getAccountId());
-
         boolean ipv4 = true, ipv6 = false;
         if (startIP != null) {
         	ipv4 = true;
@@ -1340,7 +1325,7 @@ public class NetworkServiceImpl extends ManagerBase implements  NetworkService {
                     return network;
                 }
                 DeployDestination dest = new DeployDestination(zone, null, null, null);
-                UserVO callerUser = _userDao.findById(UserContext.current().getCallerUserId());
+                UserVO callerUser = _userDao.findById(CallContext.current().getCallingUserId());
                 Journal journal = new Journal.LogJournal("Implementing " + network, s_logger);
                 ReservationContext context = new ReservationContextImpl(UUID.randomUUID().toString(), journal, callerUser, caller);
                 s_logger.debug("Implementing network " + network + " as a part of network provision for persistent network");
@@ -1364,7 +1349,7 @@ public class NetworkServiceImpl extends ManagerBase implements  NetworkService {
         Long id = cmd.getId();
         String keyword = cmd.getKeyword();
         Long zoneId = cmd.getZoneId();
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
         Long domainId = cmd.getDomainId();
         String accountName = cmd.getAccountName();
         String guestIpType = cmd.getGuestIpType();
@@ -1756,7 +1741,7 @@ public class NetworkServiceImpl extends ManagerBase implements  NetworkService {
     @ActionEvent(eventType = EventTypes.EVENT_NETWORK_DELETE, eventDescription = "deleting network", async = true)
     public boolean deleteNetwork(long networkId) {
 
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
 
         // Verify network id
         NetworkVO network = _networksDao.findById(networkId);
@@ -1780,7 +1765,7 @@ public class NetworkServiceImpl extends ManagerBase implements  NetworkService {
         // Perform permission check
         _accountMgr.checkAccess(caller, null, true, network);
 
-        User callerUser = _accountMgr.getActiveUser(UserContext.current().getCallerUserId());
+        User callerUser = _accountMgr.getActiveUser(CallContext.current().getCallingUserId());
         ReservationContext context = new ReservationContextImpl(null, null, callerUser, owner);
 
         return _networkMgr.destroyNetwork(networkId, context);
@@ -1793,7 +1778,7 @@ public class NetworkServiceImpl extends ManagerBase implements  NetworkService {
         // This method restarts all network elements belonging to the network and re-applies all the rules
         Long networkId = cmd.getNetworkId();
 
-        User callerUser = _accountMgr.getActiveUser(UserContext.current().getCallerUserId());
+        User callerUser = _accountMgr.getActiveUser(CallContext.current().getCallingUserId());
         Account callerAccount = _accountMgr.getActiveAccountById(callerUser.getAccountId());
 
         // Check if network exists
@@ -3476,7 +3461,7 @@ public class NetworkServiceImpl extends ManagerBase implements  NetworkService {
             throw new CloudRuntimeException("Provider is not deletable because there are active networks using this provider, please upgrade these networks to new network offerings");
         }
 
-        User callerUser = _accountMgr.getActiveUser(UserContext.current().getCallerUserId());
+        User callerUser = _accountMgr.getActiveUser(CallContext.current().getCallingUserId());
         Account callerAccount = _accountMgr.getActiveAccountById(callerUser.getAccountId());
         // shutdown the provider instances
         ReservationContext context = new ReservationContextImpl(null, null, callerUser, callerAccount);
@@ -3968,7 +3953,7 @@ public class NetworkServiceImpl extends ManagerBase implements  NetworkService {
 
     @Override
     public List<? extends Nic> listNics(ListNicsCmd cmd) {
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
         Long nicId = cmd.getNicId();
         Long vmId = cmd.getVmId();
 

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/server/src/com/cloud/network/NetworkUsageManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/NetworkUsageManagerImpl.java b/server/src/com/cloud/network/NetworkUsageManagerImpl.java
index 972d3ff..5df35c8 100755
--- a/server/src/com/cloud/network/NetworkUsageManagerImpl.java
+++ b/server/src/com/cloud/network/NetworkUsageManagerImpl.java
@@ -73,11 +73,12 @@ import org.apache.cloudstack.api.command.admin.usage.AddTrafficMonitorCmd;
 import org.apache.cloudstack.api.command.admin.usage.DeleteTrafficMonitorCmd;
 import org.apache.cloudstack.api.command.admin.usage.ListTrafficMonitorsCmd;
 import org.apache.cloudstack.api.response.TrafficMonitorResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import com.cloud.usage.UsageIPAddressVO;
 import com.cloud.user.AccountManager;
 import com.cloud.user.AccountVO;
 import com.cloud.user.User;
-import com.cloud.user.UserContext;
 import com.cloud.user.UserStatisticsVO;
 import com.cloud.user.dao.UserStatisticsDao;
 import com.cloud.utils.NumbersUtil;

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/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 247441e..213ff67 100644
--- a/server/src/com/cloud/network/as/AutoScaleManagerImpl.java
+++ b/server/src/com/cloud/network/as/AutoScaleManagerImpl.java
@@ -43,6 +43,8 @@ import org.apache.cloudstack.api.command.user.autoscale.UpdateAutoScalePolicyCmd
 import org.apache.cloudstack.api.command.user.autoscale.UpdateAutoScaleVmGroupCmd;
 import org.apache.cloudstack.api.command.user.autoscale.UpdateAutoScaleVmProfileCmd;
 import org.apache.cloudstack.api.command.user.vm.DeployVMCmd;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 import org.springframework.stereotype.Component;
 
@@ -80,7 +82,6 @@ import com.cloud.template.VirtualMachineTemplate;
 import com.cloud.user.Account;
 import com.cloud.user.AccountManager;
 import com.cloud.user.User;
-import com.cloud.user.UserContext;
 import com.cloud.user.dao.AccountDao;
 import com.cloud.user.dao.UserDao;
 import com.cloud.utils.Pair;
@@ -96,6 +97,7 @@ import com.cloud.utils.db.SearchCriteria;
 import com.cloud.utils.db.SearchCriteria.Op;
 import com.cloud.utils.db.Transaction;
 import com.cloud.utils.net.NetUtils;
+
 import com.google.gson.Gson;
 import com.google.gson.reflect.TypeToken;
 
@@ -306,7 +308,7 @@ public class AutoScaleManagerImpl<Type> extends ManagerBase implements AutoScale
     public AutoScaleVmProfile createAutoScaleVmProfile(CreateAutoScaleVmProfileCmd cmd) {
 
         Account owner = _accountDao.findById(cmd.getAccountId());
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
         _accountMgr.checkAccess(caller, null, true, owner);
 
         long zoneId = cmd.getZoneId();
@@ -337,7 +339,7 @@ public class AutoScaleManagerImpl<Type> extends ManagerBase implements AutoScale
         ApiDispatcher.processParameters(new DeployVMCmd(), deployParams);
 
         if (autoscaleUserId == null) {
-            autoscaleUserId = UserContext.current().getCallerUserId();
+            autoscaleUserId = CallContext.current().getCallingUserId();
         }
 
         AutoScaleVmProfileVO profileVO = new AutoScaleVmProfileVO(cmd.getZoneId(), cmd.getDomainId(), cmd.getAccountId(), cmd.getServiceOfferingId(), cmd.getTemplateId(), cmd.getOtherDeployParams(),
@@ -358,7 +360,7 @@ public class AutoScaleManagerImpl<Type> extends ManagerBase implements AutoScale
 
         Integer destroyVmGraceperiod = cmd.getDestroyVmGraceperiod();
 
-        AutoScaleVmProfileVO vmProfile = getEntityInDatabase(UserContext.current().getCaller(), "Auto Scale Vm Profile", profileId, _autoScaleVmProfileDao);
+        AutoScaleVmProfileVO vmProfile = getEntityInDatabase(CallContext.current().getCallingAccount(), "Auto Scale Vm Profile", profileId, _autoScaleVmProfileDao);
 
         if (templateId != null) {
             vmProfile.setTemplateId(templateId);
@@ -393,7 +395,7 @@ public class AutoScaleManagerImpl<Type> extends ManagerBase implements AutoScale
     @ActionEvent(eventType = EventTypes.EVENT_AUTOSCALEVMPROFILE_DELETE, eventDescription = "deleting autoscale vm profile")
     public boolean deleteAutoScaleVmProfile(long id) {
         /* Check if entity is in database */
-        getEntityInDatabase(UserContext.current().getCaller(), "AutoScale Vm Profile", id, _autoScaleVmProfileDao);
+        getEntityInDatabase(CallContext.current().getCallingAccount(), "AutoScale Vm Profile", id, _autoScaleVmProfileDao);
         if (_autoScaleVmGroupDao.isProfileInUse(id)) {
             throw new InvalidParameterValueException("Cannot delete AutoScale Vm Profile when it is in use by one more vm groups");
         }
@@ -459,7 +461,7 @@ public class AutoScaleManagerImpl<Type> extends ManagerBase implements AutoScale
 
             ControlledEntity[] sameOwnerEntities = conditions.toArray(new ControlledEntity[conditions.size() + 1]);
             sameOwnerEntities[sameOwnerEntities.length - 1] = autoScalePolicyVO;
-            _accountMgr.checkAccess(UserContext.current().getCaller(), null, true, sameOwnerEntities);
+            _accountMgr.checkAccess(CallContext.current().getCallingAccount(), null, true, sameOwnerEntities);
 
             if (conditionIds.size() != conditions.size()) {
                 // TODO report the condition id which could not be found
@@ -516,7 +518,7 @@ public class AutoScaleManagerImpl<Type> extends ManagerBase implements AutoScale
     @ActionEvent(eventType = EventTypes.EVENT_AUTOSCALEPOLICY_DELETE, eventDescription = "deleting autoscale policy")
     public boolean deleteAutoScalePolicy(long id) {
         /* Check if entity is in database */
-        getEntityInDatabase(UserContext.current().getCaller(), "AutoScale Policy", id, _autoScalePolicyDao);
+        getEntityInDatabase(CallContext.current().getCallingAccount(), "AutoScale Policy", id, _autoScalePolicyDao);
 
         if (_autoScaleVmGroupPolicyMapDao.isAutoScalePolicyInUse(id)) {
             throw new InvalidParameterValueException("Cannot delete AutoScale Policy when it is in use by one or more AutoScale Vm Groups");
@@ -543,7 +545,7 @@ public class AutoScaleManagerImpl<Type> extends ManagerBase implements AutoScale
 
     public void checkCallerAccess(String accountName, Long domainId)
     {
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
         Account owner = _accountDao.findActiveAccount(accountName, domainId);
         if (owner == null) {
             List<String> idList = new ArrayList<String>();
@@ -573,7 +575,7 @@ public class AutoScaleManagerImpl<Type> extends ManagerBase implements AutoScale
             boolean listAll = cmd.listAll();
             long startIndex = cmd.getStartIndex();
             long pageSizeVal = cmd.getPageSizeVal();
-            Account caller = UserContext.current().getCaller();
+            Account caller = CallContext.current().getCallingAccount();
 
             Ternary<Long, Boolean, ListProjectResourcesCriteria> domainIdRecursiveListProject = new Ternary<Long, Boolean,
                     ListProjectResourcesCriteria>(domainId, isRecursive, null);
@@ -654,7 +656,7 @@ public class AutoScaleManagerImpl<Type> extends ManagerBase implements AutoScale
         Integer duration = cmd.getDuration();
         Integer quietTime = cmd.getQuietTime();
         List<Long> conditionIds = cmd.getConditionIds();
-        AutoScalePolicyVO policy = getEntityInDatabase(UserContext.current().getCaller(), "Auto Scale Policy", policyId, _autoScalePolicyDao);
+        AutoScalePolicyVO policy = getEntityInDatabase(CallContext.current().getCallingAccount(), "Auto Scale Policy", policyId, _autoScalePolicyDao);
 
         if (duration != null) {
             policy.setDuration(duration);
@@ -697,7 +699,7 @@ public class AutoScaleManagerImpl<Type> extends ManagerBase implements AutoScale
             interval = NetUtils.DEFAULT_AUTOSCALE_POLICY_INTERVAL_TIME;
         }
 
-        LoadBalancerVO loadBalancer = getEntityInDatabase(UserContext.current().getCaller(), ApiConstants.LBID, cmd.getLbRuleId(), _lbDao);
+        LoadBalancerVO loadBalancer = getEntityInDatabase(CallContext.current().getCallingAccount(), ApiConstants.LBID, cmd.getLbRuleId(), _lbDao);
 
         Long zoneId = _ipAddressDao.findById(loadBalancer.getSourceIpAddressId()).getDataCenterId();
 
@@ -749,7 +751,7 @@ public class AutoScaleManagerImpl<Type> extends ManagerBase implements AutoScale
     @DB
     @ActionEvent(eventType = EventTypes.EVENT_AUTOSCALEVMGROUP_DELETE, eventDescription = "deleting autoscale vm group")
     public boolean deleteAutoScaleVmGroup(long id) {
-        AutoScaleVmGroupVO autoScaleVmGroupVO = getEntityInDatabase(UserContext.current().getCaller(), "AutoScale Vm Group", id, _autoScaleVmGroupDao);
+        AutoScaleVmGroupVO autoScaleVmGroupVO = getEntityInDatabase(CallContext.current().getCallingAccount(), "AutoScale Vm Group", id, _autoScaleVmGroupDao);
 
         if (autoScaleVmGroupVO.getState().equals(AutoScaleVmGroup.State_New)) {
             /* This condition is for handling failures during creation command */
@@ -880,15 +882,15 @@ public class AutoScaleManagerImpl<Type> extends ManagerBase implements AutoScale
             getAutoScalePolicies("scaledownpolicyid", currentScaleDownPolicyIds, counters, interval, false);
             policyIds.addAll(currentScaleDownPolicyIds);
         }
-        AutoScaleVmProfileVO profileVO = getEntityInDatabase(UserContext.current().getCaller(), ApiConstants.VMPROFILE_ID, vmGroup.getProfileId(), _autoScaleVmProfileDao);
+        AutoScaleVmProfileVO profileVO = getEntityInDatabase(CallContext.current().getCallingAccount(), ApiConstants.VMPROFILE_ID, vmGroup.getProfileId(), _autoScaleVmProfileDao);
 
-        LoadBalancerVO loadBalancer = getEntityInDatabase(UserContext.current().getCaller(), ApiConstants.LBID, vmGroup.getLoadBalancerId(), _lbDao);
+        LoadBalancerVO loadBalancer = getEntityInDatabase(CallContext.current().getCallingAccount(), ApiConstants.LBID, vmGroup.getLoadBalancerId(), _lbDao);
         validateAutoScaleCounters(loadBalancer.getNetworkId(), counters, profileVO.getCounterParams());
 
         ControlledEntity[] sameOwnerEntities = policies.toArray(new ControlledEntity[policies.size() + 2]);
         sameOwnerEntities[sameOwnerEntities.length - 2] = loadBalancer;
         sameOwnerEntities[sameOwnerEntities.length - 1] = profileVO;
-        _accountMgr.checkAccess(UserContext.current().getCaller(), null, true, sameOwnerEntities);
+        _accountMgr.checkAccess(CallContext.current().getCallingAccount(), null, true, sameOwnerEntities);
 
         final Transaction txn = Transaction.currentTxn();
         txn.start();
@@ -917,7 +919,7 @@ public class AutoScaleManagerImpl<Type> extends ManagerBase implements AutoScale
         List<Long> scaleUpPolicyIds = cmd.getScaleUpPolicyIds();
         List<Long> scaleDownPolicyIds = cmd.getScaleDownPolicyIds();
 
-        AutoScaleVmGroupVO vmGroupVO = getEntityInDatabase(UserContext.current().getCaller(), "AutoScale Vm Group", vmGroupId, _autoScaleVmGroupDao);
+        AutoScaleVmGroupVO vmGroupVO = getEntityInDatabase(CallContext.current().getCallingAccount(), "AutoScale Vm Group", vmGroupId, _autoScaleVmGroupDao);
 
         if (!vmGroupVO.getState().equals(AutoScaleVmGroup.State_Disabled)) {
             throw new InvalidParameterValueException("An AutoScale Vm Group can be updated only when it is in disabled state");
@@ -947,7 +949,7 @@ public class AutoScaleManagerImpl<Type> extends ManagerBase implements AutoScale
     @DB
     @ActionEvent(eventType = EventTypes.EVENT_AUTOSCALEVMGROUP_ENABLE, eventDescription = "enabling autoscale vm group")
     public AutoScaleVmGroup enableAutoScaleVmGroup(Long id) {
-        AutoScaleVmGroupVO vmGroup = getEntityInDatabase(UserContext.current().getCaller(), "AutoScale Vm Group", id, _autoScaleVmGroupDao);
+        AutoScaleVmGroupVO vmGroup = getEntityInDatabase(CallContext.current().getCallingAccount(), "AutoScale Vm Group", id, _autoScaleVmGroupDao);
         boolean success = false;
         if (!vmGroup.getState().equals(AutoScaleVmGroup.State_Disabled)) {
             throw new InvalidParameterValueException("Only a AutoScale Vm Group which is in Disabled state can be enabled.");
@@ -974,7 +976,7 @@ public class AutoScaleManagerImpl<Type> extends ManagerBase implements AutoScale
     @ActionEvent(eventType = EventTypes.EVENT_AUTOSCALEVMGROUP_DISABLE, eventDescription = "disabling autoscale vm group")
     @DB
     public AutoScaleVmGroup disableAutoScaleVmGroup(Long id) {
-        AutoScaleVmGroupVO vmGroup = getEntityInDatabase(UserContext.current().getCaller(), "AutoScale Vm Group", id, _autoScaleVmGroupDao);
+        AutoScaleVmGroupVO vmGroup = getEntityInDatabase(CallContext.current().getCallingAccount(), "AutoScale Vm Group", id, _autoScaleVmGroupDao);
         boolean success = false;
         if (!vmGroup.getState().equals(AutoScaleVmGroup.State_Enabled)) {
             throw new InvalidParameterValueException("Only a AutoScale Vm Group which is in Enabled state can be disabled.");
@@ -1016,7 +1018,7 @@ public class AutoScaleManagerImpl<Type> extends ManagerBase implements AutoScale
         s_logger.debug("Adding Counter " + name);
         counter = _counterDao.persist(new CounterVO(src, name, cmd.getValue()));
 
-        UserContext.current().setEventDetails(" Id: " + counter.getId() + " Name: " + name);
+        CallContext.current().setEventDetails(" Id: " + counter.getId() + " Name: " + name);
         return counter;
     }
 
@@ -1046,7 +1048,7 @@ public class AutoScaleManagerImpl<Type> extends ManagerBase implements AutoScale
         condition = _conditionDao.persist(new ConditionVO(cid, threshold, cmd.getEntityOwnerId(), cmd.getDomainId(), op));
         s_logger.info("Successfully created condition with Id: " + condition.getId());
 
-        UserContext.current().setEventDetails(" Id: " + condition.getId());
+        CallContext.current().setEventDetails(" Id: " + condition.getId());
         return condition;
     }
 
@@ -1128,7 +1130,7 @@ public class AutoScaleManagerImpl<Type> extends ManagerBase implements AutoScale
     @ActionEvent(eventType = EventTypes.EVENT_CONDITION_DELETE, eventDescription = "condition")
     public boolean deleteCondition(long conditionId) throws ResourceInUseException {
         /* Check if entity is in database */
-        ConditionVO condition = getEntityInDatabase(UserContext.current().getCaller(), "Condition", conditionId, _conditionDao);
+        ConditionVO condition = getEntityInDatabase(CallContext.current().getCallingAccount(), "Condition", conditionId, _conditionDao);
         if (condition == null) {
             throw new InvalidParameterValueException("Unable to find Condition");
         }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/server/src/com/cloud/network/firewall/FirewallManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/firewall/FirewallManagerImpl.java b/server/src/com/cloud/network/firewall/FirewallManagerImpl.java
index d250a08..6fb9bb6 100644
--- a/server/src/com/cloud/network/firewall/FirewallManagerImpl.java
+++ b/server/src/com/cloud/network/firewall/FirewallManagerImpl.java
@@ -28,8 +28,12 @@ import javax.inject.Inject;
 import javax.naming.ConfigurationException;
 
 import org.apache.cloudstack.api.command.user.firewall.ListEgressFirewallRulesCmd;
+
 import com.cloud.network.dao.*;
+
 import org.apache.cloudstack.api.command.user.firewall.ListFirewallRulesCmd;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 import org.springframework.stereotype.Component;
 
@@ -73,7 +77,6 @@ import com.cloud.tags.dao.ResourceTagDao;
 import com.cloud.user.Account;
 import com.cloud.user.AccountManager;
 import com.cloud.user.DomainManager;
-import com.cloud.user.UserContext;
 import com.cloud.utils.Pair;
 import com.cloud.utils.Ternary;
 import com.cloud.utils.component.ManagerBase;
@@ -147,7 +150,7 @@ public class FirewallManagerImpl extends ManagerBase implements FirewallService,
 
     @Override
     public FirewallRule createEgressFirewallRule(FirewallRule rule) throws NetworkRuleConflictException {
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
 
         Network network = _networkDao.findById(rule.getNetworkId());
         if (network.getGuestType() == Network.GuestType.Shared) {
@@ -161,7 +164,7 @@ public class FirewallManagerImpl extends ManagerBase implements FirewallService,
 
     @Override
     public FirewallRule createIngressFirewallRule(FirewallRule rule) throws NetworkRuleConflictException {
-         Account caller = UserContext.current().getCaller();
+         Account caller = CallContext.current().getCallingAccount();
         Long sourceIpAddressId = rule.getSourceIpAddressId();
  
         return createFirewallRule(sourceIpAddressId, caller, rule.getXid(), rule.getSourcePortStart(), 
@@ -227,7 +230,7 @@ public class FirewallManagerImpl extends ManagerBase implements FirewallService,
         if (!_firewallDao.setStateToAdd(newRule)) {
             throw new CloudRuntimeException("Unable to update the state to add for " + newRule);
         }
-        UserContext.current().setEventDetails("Rule Id: " + newRule.getId());
+        CallContext.current().setEventDetails("Rule Id: " + newRule.getId());
 
         txn.commit();
 
@@ -242,7 +245,7 @@ public class FirewallManagerImpl extends ManagerBase implements FirewallService,
         Map<String, String> tags = cmd.getTags();
         FirewallRule.TrafficType trafficType = cmd.getTrafficType();
 
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
         List<Long> permittedAccounts = new ArrayList<Long>();
 
         if (ipId != null) {
@@ -719,8 +722,8 @@ public class FirewallManagerImpl extends ManagerBase implements FirewallService,
 
     @Override
     public boolean revokeFirewallRule(long ruleId, boolean apply) {
-        Account caller = UserContext.current().getCaller();
-        long userId = UserContext.current().getCallerUserId();
+        Account caller = CallContext.current().getCallingAccount();
+        long userId = CallContext.current().getCallingUserId();
         return revokeFirewallRule(ruleId, apply, caller, userId);
     }
 

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/server/src/com/cloud/network/guru/ExternalGuestNetworkGuru.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/guru/ExternalGuestNetworkGuru.java b/server/src/com/cloud/network/guru/ExternalGuestNetworkGuru.java
index 87098f5..36ea6a5 100644
--- a/server/src/com/cloud/network/guru/ExternalGuestNetworkGuru.java
+++ b/server/src/com/cloud/network/guru/ExternalGuestNetworkGuru.java
@@ -22,8 +22,11 @@ import javax.ejb.Local;
 import javax.inject.Inject;
 
 import com.cloud.event.ActionEventUtils;
+
 import org.apache.log4j.Logger;
 
+import org.apache.cloudstack.context.CallContext;
+
 import com.cloud.configuration.Config;
 import com.cloud.dc.DataCenter;
 import com.cloud.dc.DataCenter.NetworkType;
@@ -47,7 +50,6 @@ import com.cloud.network.rules.PortForwardingRuleVO;
 import com.cloud.network.rules.dao.PortForwardingRulesDao;
 import com.cloud.offering.NetworkOffering;
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
 import com.cloud.utils.db.DB;
 import com.cloud.utils.exception.CloudRuntimeException;
 import com.cloud.utils.net.Ip;
@@ -140,7 +142,7 @@ public class ExternalGuestNetworkGuru extends GuestNetworkGuru {
             }
 
             implemented.setBroadcastUri(BroadcastDomainType.Vlan.toUri(vlanTag));
-            ActionEventUtils.onCompletedActionEvent(UserContext.current().getCallerUserId(), config.getAccountId(), EventVO.LEVEL_INFO, EventTypes.EVENT_ZONE_VLAN_ASSIGN, "Assigned Zone Vlan: " + vnet + " Network Id: " + config.getId(), 0);
+            ActionEventUtils.onCompletedActionEvent(CallContext.current().getCallingUserId(), config.getAccountId(), EventVO.LEVEL_INFO, EventTypes.EVENT_ZONE_VLAN_ASSIGN, "Assigned Zone Vlan: " + vnet + " Network Id: " + config.getId(), 0);
         } else {
             vlanTag = Integer.parseInt(config.getBroadcastUri().getHost());
             implemented.setBroadcastUri(config.getBroadcastUri());

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/server/src/com/cloud/network/guru/GuestNetworkGuru.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/guru/GuestNetworkGuru.java b/server/src/com/cloud/network/guru/GuestNetworkGuru.java
index 89b0694..9adffa2 100755
--- a/server/src/com/cloud/network/guru/GuestNetworkGuru.java
+++ b/server/src/com/cloud/network/guru/GuestNetworkGuru.java
@@ -28,8 +28,11 @@ import javax.inject.Inject;
 import com.cloud.event.ActionEventUtils;
 import com.cloud.server.ConfigurationServer;
 import com.cloud.utils.Pair;
+
 import org.apache.log4j.Logger;
 
+import org.apache.cloudstack.context.CallContext;
+
 import com.cloud.configuration.Config;
 import com.cloud.configuration.dao.ConfigurationDao;
 import com.cloud.dc.DataCenter;
@@ -62,7 +65,6 @@ import com.cloud.network.dao.PhysicalNetworkDao;
 import com.cloud.network.dao.PhysicalNetworkVO;
 import com.cloud.offering.NetworkOffering;
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
 import com.cloud.utils.component.AdapterBase;
 import com.cloud.utils.db.DB;
 import com.cloud.utils.db.Transaction;
@@ -275,7 +277,7 @@ public abstract class GuestNetworkGuru extends AdapterBase implements NetworkGur
                 		"part of network " + network + " implement ", DataCenter.class, dcId);
             }
             implemented.setBroadcastUri(BroadcastDomainType.Vlan.toUri(vnet));
-            ActionEventUtils.onCompletedActionEvent(UserContext.current().getCallerUserId(), network.getAccountId(),
+            ActionEventUtils.onCompletedActionEvent(CallContext.current().getCallingUserId(), network.getAccountId(),
                     EventVO.LEVEL_INFO, EventTypes.EVENT_ZONE_VLAN_ASSIGN, "Assigned Zone Vlan: " + vnet + " Network Id: " + network.getId(), 0);
         } else {
             implemented.setBroadcastUri(network.getBroadcastUri());
@@ -415,7 +417,7 @@ public abstract class GuestNetworkGuru extends AdapterBase implements NetworkGur
         s_logger.debug("Releasing vnet for the network id=" + profile.getId());
             _dcDao.releaseVnet(profile.getBroadcastUri().getHost(), profile.getDataCenterId(), 
                     profile.getPhysicalNetworkId(), profile.getAccountId(), profile.getReservationId());
-            ActionEventUtils.onCompletedActionEvent(UserContext.current().getCallerUserId(), profile.getAccountId(),
+            ActionEventUtils.onCompletedActionEvent(CallContext.current().getCallingUserId(), profile.getAccountId(),
                     EventVO.LEVEL_INFO, EventTypes.EVENT_ZONE_VLAN_RELEASE, "Released Zone Vlan: "
                     + profile.getBroadcastUri().getHost() + " for Network: " + profile.getId(), 0);
         }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/server/src/com/cloud/network/lb/LoadBalancingRulesManager.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/lb/LoadBalancingRulesManager.java b/server/src/com/cloud/network/lb/LoadBalancingRulesManager.java
index a23d96f..2218f7d 100644
--- a/server/src/com/cloud/network/lb/LoadBalancingRulesManager.java
+++ b/server/src/com/cloud/network/lb/LoadBalancingRulesManager.java
@@ -18,6 +18,8 @@ package com.cloud.network.lb;
 
 import java.util.List;
 
+import org.apache.cloudstack.context.CallContext;
+
 import com.cloud.exception.NetworkRuleConflictException;
 import com.cloud.exception.ResourceUnavailableException;
 import com.cloud.network.lb.LoadBalancingRule.LbDestination;
@@ -27,12 +29,11 @@ import com.cloud.network.rules.LbStickinessMethod;
 import com.cloud.network.rules.LoadBalancer;
 import com.cloud.network.rules.LoadBalancerContainer.Scheme;
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
 
 public interface LoadBalancingRulesManager extends LoadBalancingRulesService {
 
     LoadBalancer createPublicLoadBalancer(String xId, String name, String description, 
-            int srcPort, int destPort, long sourceIpId, String protocol, String algorithm, boolean openFirewall, UserContext caller)
+            int srcPort, int destPort, long sourceIpId, String protocol, String algorithm, boolean openFirewall, CallContext caller)
             throws NetworkRuleConflictException;
 
     boolean removeAllLoadBalanacersForIp(long ipId, Account caller, long callerUserId);

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java b/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java
index 6e0d0d7..92f9417 100755
--- a/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java
+++ b/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java
@@ -36,6 +36,7 @@ import com.cloud.network.LBHealthCheckPolicyVO;
 import com.cloud.network.Network;
 import com.cloud.network.NetworkManager;
 import com.cloud.network.NetworkModel;
+
 import org.apache.cloudstack.api.ApiConstants;
 import org.apache.cloudstack.api.command.user.loadbalancer.CreateLBHealthCheckPolicyCmd;
 import org.apache.cloudstack.api.command.user.loadbalancer.CreateLBStickinessPolicyCmd;
@@ -45,8 +46,10 @@ import org.apache.cloudstack.api.command.user.loadbalancer.ListLoadBalancerRuleI
 import org.apache.cloudstack.api.command.user.loadbalancer.ListLoadBalancerRulesCmd;
 import org.apache.cloudstack.api.command.user.loadbalancer.UpdateLoadBalancerRuleCmd;
 import org.apache.cloudstack.api.response.ServiceResponse;
+import org.apache.cloudstack.context.CallContext;
 import org.apache.cloudstack.lb.ApplicationLoadBalancerRuleVO;
 import org.apache.cloudstack.lb.dao.ApplicationLoadBalancerRuleDao;
+
 import org.apache.log4j.Logger;
 import org.springframework.stereotype.Component;
 
@@ -134,7 +137,6 @@ import com.cloud.user.Account;
 import com.cloud.user.AccountManager;
 import com.cloud.user.DomainService;
 import com.cloud.user.User;
-import com.cloud.user.UserContext;
 import com.cloud.user.dao.AccountDao;
 import com.cloud.user.dao.UserDao;
 import com.cloud.uservm.UserVm;
@@ -155,6 +157,7 @@ import com.cloud.vm.UserVmVO;
 import com.cloud.vm.VirtualMachine.State;
 import com.cloud.vm.dao.NicDao;
 import com.cloud.vm.dao.UserVmDao;
+
 import com.google.gson.Gson;
 import com.google.gson.reflect.TypeToken;
 
@@ -516,7 +519,7 @@ public class LoadBalancingRulesManagerImpl<Type> extends ManagerBase implements
     @ActionEvent(eventType = EventTypes.EVENT_LB_STICKINESSPOLICY_CREATE, eventDescription = "create lb stickinesspolicy to load balancer", create = true)
     public StickinessPolicy createLBStickinessPolicy(CreateLBStickinessPolicyCmd cmd)
             throws NetworkRuleConflictException {
-        UserContext caller = UserContext.current();
+        CallContext caller = CallContext.current();
 
         /* Validation : check corresponding load balancer rule exist */
         LoadBalancerVO loadBalancer = _lbDao.findById(cmd.getLbRuleId());
@@ -524,7 +527,7 @@ public class LoadBalancingRulesManagerImpl<Type> extends ManagerBase implements
             throw new InvalidParameterValueException("Failed: LB rule id: " + cmd.getLbRuleId() + " not present ");
         }
 
-        _accountMgr.checkAccess(caller.getCaller(), null, true, loadBalancer);
+        _accountMgr.checkAccess(caller.getCallingAccount(), null, true, loadBalancer);
         if (loadBalancer.getState() == FirewallRule.State.Revoke) {
             throw new InvalidParameterValueException("Failed:  LB rule id: " + cmd.getLbRuleId()
                     + " is in deleting state: ");
@@ -564,7 +567,7 @@ public class LoadBalancingRulesManagerImpl<Type> extends ManagerBase implements
     @DB
     @ActionEvent(eventType = EventTypes.EVENT_LB_HEALTHCHECKPOLICY_CREATE, eventDescription = "create load balancer health check to load balancer", create = true)
     public HealthCheckPolicy createLBHealthCheckPolicy(CreateLBHealthCheckPolicyCmd cmd) {
-        UserContext caller = UserContext.current();
+        CallContext caller = CallContext.current();
 
         /*
          * Validation of cmd Monitor interval must be greater than response
@@ -584,7 +587,7 @@ public class LoadBalancingRulesManagerImpl<Type> extends ManagerBase implements
             throw new InvalidParameterValueException("Failed: LB rule id: " + cmd.getLbRuleId() + " not present ");
         }
 
-        _accountMgr.checkAccess(caller.getCaller(), null, true, loadBalancer);
+        _accountMgr.checkAccess(caller.getCallingAccount(), null, true, loadBalancer);
 
         if (loadBalancer.getState() == FirewallRule.State.Revoke) {
             throw new InvalidParameterValueException("Failed:  LB rule id: " + cmd.getLbRuleId()
@@ -738,7 +741,7 @@ public class LoadBalancingRulesManagerImpl<Type> extends ManagerBase implements
     public boolean deleteLBStickinessPolicy(long stickinessPolicyId, boolean apply) {
         boolean success = true;
 
-        UserContext caller = UserContext.current();
+        CallContext caller = CallContext.current();
         LBStickinessPolicyVO stickinessPolicy = _lb2stickinesspoliciesDao.findById(stickinessPolicyId);
 
         if (stickinessPolicy == null) {
@@ -751,7 +754,7 @@ public class LoadBalancingRulesManagerImpl<Type> extends ManagerBase implements
         }
         long loadBalancerId = loadBalancer.getId();
         FirewallRule.State backupState = loadBalancer.getState();
-        _accountMgr.checkAccess(caller.getCaller(), null, true, loadBalancer);
+        _accountMgr.checkAccess(caller.getCallingAccount(), null, true, loadBalancer);
 
         if (apply) {
             if (loadBalancer.getState() == FirewallRule.State.Active) {
@@ -796,7 +799,7 @@ public class LoadBalancingRulesManagerImpl<Type> extends ManagerBase implements
     public boolean deleteLBHealthCheckPolicy(long healthCheckPolicyId, boolean apply) {
         boolean success = true;
 
-        UserContext caller = UserContext.current();
+        CallContext caller = CallContext.current();
         LBHealthCheckPolicyVO healthCheckPolicy = _lb2healthcheckDao.findById(healthCheckPolicyId);
 
         if (healthCheckPolicy == null) {
@@ -809,7 +812,7 @@ public class LoadBalancingRulesManagerImpl<Type> extends ManagerBase implements
         }
         long loadBalancerId = loadBalancer.getId();
         FirewallRule.State backupState = loadBalancer.getState();
-        _accountMgr.checkAccess(caller.getCaller(), null, true, loadBalancer);
+        _accountMgr.checkAccess(caller.getCallingAccount(), null, true, loadBalancer);
 
         if (apply) {
             if (loadBalancer.getState() == FirewallRule.State.Active) {
@@ -948,8 +951,8 @@ public class LoadBalancingRulesManagerImpl<Type> extends ManagerBase implements
     @DB
     @ActionEvent(eventType = EventTypes.EVENT_ASSIGN_TO_LOAD_BALANCER_RULE, eventDescription = "assigning to load balancer", async = true)
     public boolean assignToLoadBalancer(long loadBalancerId, List<Long> instanceIds) {
-        UserContext ctx = UserContext.current();
-        Account caller = ctx.getCaller();
+        CallContext ctx = CallContext.current();
+        Account caller = ctx.getCallingAccount();
 
         LoadBalancerVO loadBalancer = _lbDao.findById(loadBalancerId);
         if (loadBalancer == null) {
@@ -1070,14 +1073,14 @@ public class LoadBalancingRulesManagerImpl<Type> extends ManagerBase implements
     }
 
     private boolean removeFromLoadBalancerInternal(long loadBalancerId, List<Long> instanceIds, boolean rollBack) {
-        UserContext caller = UserContext.current();
+        CallContext caller = CallContext.current();
 
         LoadBalancerVO loadBalancer = _lbDao.findById(Long.valueOf(loadBalancerId));
         if (loadBalancer == null) {
             throw new InvalidParameterException("Invalid load balancer value: " + loadBalancerId);
         }
 
-        _accountMgr.checkAccess(caller.getCaller(), null, true, loadBalancer);
+        _accountMgr.checkAccess(caller.getCallingAccount(), null, true, loadBalancer);
 
         boolean success = false;
         FirewallRule.State backupState = loadBalancer.getState();
@@ -1174,8 +1177,8 @@ public class LoadBalancingRulesManagerImpl<Type> extends ManagerBase implements
     @Override
     @ActionEvent(eventType = EventTypes.EVENT_LOAD_BALANCER_DELETE, eventDescription = "deleting load balancer", async = true)
     public boolean deleteLoadBalancerRule(long loadBalancerId, boolean apply) {
-        UserContext ctx = UserContext.current();
-        Account caller = ctx.getCaller();
+        CallContext ctx = CallContext.current();
+        Account caller = ctx.getCallingAccount();
 
         LoadBalancerVO rule = _lbDao.findById(loadBalancerId);
 
@@ -1184,7 +1187,7 @@ public class LoadBalancingRulesManagerImpl<Type> extends ManagerBase implements
         }
         _accountMgr.checkAccess(caller, null, true, rule);
 
-        boolean result = deleteLoadBalancerRule(loadBalancerId, apply, caller, ctx.getCallerUserId(), true);
+        boolean result = deleteLoadBalancerRule(loadBalancerId, apply, caller, ctx.getCallingUserId(), true);
         if (!result) {
             throw new CloudRuntimeException("Unable to remove load balancer rule " + loadBalancerId);
         }
@@ -1352,7 +1355,7 @@ public class LoadBalancingRulesManagerImpl<Type> extends ManagerBase implements
                             + network);
                 }
 
-                result = createPublicLoadBalancer(xId, name, description, srcPortStart, defPortStart, ipVO.getId(), protocol, algorithm, openFirewall, UserContext.current());
+                result = createPublicLoadBalancer(xId, name, description, srcPortStart, defPortStart, ipVO.getId(), protocol, algorithm, openFirewall, CallContext.current());
             } catch (Exception ex) {
                 s_logger.warn("Failed to create load balancer due to ", ex);
                 if (ex instanceof NetworkRuleConflictException) {
@@ -1382,7 +1385,7 @@ public class LoadBalancingRulesManagerImpl<Type> extends ManagerBase implements
     @DB
     @Override
     public LoadBalancer createPublicLoadBalancer(String xId, String name, String description, 
-            int srcPort, int destPort, long sourceIpId, String protocol, String algorithm, boolean openFirewall, UserContext caller)
+            int srcPort, int destPort, long sourceIpId, String protocol, String algorithm, boolean openFirewall, CallContext caller)
             throws NetworkRuleConflictException {
         
         if (!NetUtils.isValidPort(destPort)) {
@@ -1412,7 +1415,7 @@ public class LoadBalancingRulesManagerImpl<Type> extends ManagerBase implements
             throw ex;
         }
         
-        _accountMgr.checkAccess(caller.getCaller(), null, true, ipAddr);
+        _accountMgr.checkAccess(caller.getCallingAccount(), null, true, ipAddr);
 
 
         Long networkId = ipAddr.getAssociatedWithNetworkId();
@@ -1426,7 +1429,7 @@ public class LoadBalancingRulesManagerImpl<Type> extends ManagerBase implements
         // verify that lb service is supported by the network
         isLbServiceSupportedInNetwork(networkId, Scheme.Public);
 
-        _firewallMgr.validateFirewallRule(caller.getCaller(), ipAddr, srcPort, srcPort, protocol,
+        _firewallMgr.validateFirewallRule(caller.getCallingAccount(), ipAddr, srcPort, srcPort, protocol,
                 Purpose.LoadBalancing, FirewallRuleType.User, networkId, null);
 
         LoadBalancerVO newRule = new LoadBalancerVO(xId, name, description,
@@ -1448,7 +1451,7 @@ public class LoadBalancingRulesManagerImpl<Type> extends ManagerBase implements
 
         //create rule for all CIDRs
         if (openFirewall) {
-            _firewallMgr.createRuleForAllCidrs(sourceIpId, caller.getCaller(), srcPort,
+            _firewallMgr.createRuleForAllCidrs(sourceIpId, caller.getCallingAccount(), srcPort,
                     srcPort, protocol, null, null, newRule.getId(), networkId);
         }
 
@@ -1461,7 +1464,7 @@ public class LoadBalancingRulesManagerImpl<Type> extends ManagerBase implements
             }
             s_logger.debug("Load balancer " + newRule.getId() + " for Ip address id=" + sourceIpId + ", public port "
                     + srcPort + ", private port " + destPort + " is added successfully.");
-            UserContext.current().setEventDetails("Load balancer Id: " + newRule.getId());
+            CallContext.current().setEventDetails("Load balancer Id: " + newRule.getId());
             UsageEventUtils.publishUsageEvent(EventTypes.EVENT_LOAD_BALANCER_CREATE, ipAddr.getAllocatedToAccountId(),
                     ipAddr.getDataCenterId(), newRule.getId(), null, LoadBalancingRule.class.getName(),
                     newRule.getUuid());
@@ -1669,8 +1672,8 @@ public class LoadBalancingRulesManagerImpl<Type> extends ManagerBase implements
         boolean success = true;
         if (ip.getSystem()) {
             s_logger.debug("Releasing system ip address " + lb.getSourceIpAddressId() + " as a part of delete lb rule");
-            if (!_networkMgr.disassociatePublicIpAddress(lb.getSourceIpAddressId(), UserContext.current()
-                    .getCallerUserId(), UserContext.current().getCaller())) {
+            if (!_networkMgr.disassociatePublicIpAddress(lb.getSourceIpAddressId(), CallContext.current()
+                    .getCallingUserId(), CallContext.current().getCallingAccount())) {
                 s_logger.warn("Unable to release system ip address id=" + lb.getSourceIpAddressId()
                         + " as a part of delete lb rule");
                 success = false;
@@ -1762,7 +1765,7 @@ public class LoadBalancingRulesManagerImpl<Type> extends ManagerBase implements
     @Override
     @ActionEvent(eventType = EventTypes.EVENT_LOAD_BALANCER_UPDATE, eventDescription = "updating load balancer", async = true)
     public LoadBalancer updateLoadBalancerRule(UpdateLoadBalancerRuleCmd cmd) {
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
         Long lbRuleId = cmd.getId();
         String name = cmd.getLoadBalancerName();
         String description = cmd.getDescription();
@@ -1834,7 +1837,7 @@ public class LoadBalancingRulesManagerImpl<Type> extends ManagerBase implements
     @Override
     public List<UserVmVO> listLoadBalancerInstances(ListLoadBalancerRuleInstancesCmd cmd)
             throws PermissionDeniedException {
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
         Long loadBalancerId = cmd.getId();
         Boolean applied = cmd.isApplied();
 
@@ -1900,7 +1903,7 @@ public class LoadBalancingRulesManagerImpl<Type> extends ManagerBase implements
     @Override
     public List<LBStickinessPolicyVO> searchForLBStickinessPolicies(ListLBStickinessPoliciesCmd cmd)
             throws PermissionDeniedException {
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
         Long loadBalancerId = cmd.getLbRuleId();
         LoadBalancerVO loadBalancer = _lbDao.findById(loadBalancerId);
         if (loadBalancer == null) {
@@ -1917,7 +1920,7 @@ public class LoadBalancingRulesManagerImpl<Type> extends ManagerBase implements
     @Override
     public List<LBHealthCheckPolicyVO> searchForLBHealthCheckPolicies(ListLBHealthCheckPoliciesCmd cmd)
             throws PermissionDeniedException {
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
         Long loadBalancerId = cmd.getLbRuleId();
         LoadBalancerVO loadBalancer = _lbDao.findById(loadBalancerId);
         if (loadBalancer == null) {
@@ -1939,7 +1942,7 @@ public class LoadBalancingRulesManagerImpl<Type> extends ManagerBase implements
         Long networkId = cmd.getNetworkId();
         Map<String, String> tags = cmd.getTags();
 
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
         List<Long> permittedAccounts = new ArrayList<Long>();
 
         Ternary<Long, Boolean, ListProjectResourcesCriteria> domainIdRecursiveListProject = new Ternary<Long, Boolean, ListProjectResourcesCriteria>(


[44/50] [abbrv] git commit: updated refs/heads/ldapplugin to 7bc705e

Posted by ch...@apache.org.
CLOUDSTACK-3586: Fixed regression test cases for Affinity Groups

Signed-off-by: Prasanna Santhanam <ts...@apache.org>


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

Branch: refs/heads/ldapplugin
Commit: 234db0561ffd7499f1237fb5b7428c0b6fc51601
Parents: 9f9510b
Author: Girish Shilamkar <gi...@clogeny.com>
Authored: Wed Jul 17 00:39:18 2013 -0400
Committer: Prasanna Santhanam <ts...@apache.org>
Committed: Wed Jul 17 19:23:58 2013 +0530

----------------------------------------------------------------------
 test/integration/component/test_affinity_groups.py | 4 ++--
 tools/marvin/marvin/integration/lib/base.py        | 7 +++++--
 2 files changed, 7 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/234db056/test/integration/component/test_affinity_groups.py
----------------------------------------------------------------------
diff --git a/test/integration/component/test_affinity_groups.py b/test/integration/component/test_affinity_groups.py
index 44bf90c..be93827 100644
--- a/test/integration/component/test_affinity_groups.py
+++ b/test/integration/component/test_affinity_groups.py
@@ -1078,7 +1078,7 @@ class TestDeployVMAffinityGroups(cloudstackTestCase):
                templateid=self.template.id,
                serviceofferingid=self.service_offering.id,
                affinitygroupnames=ag_list,
-                affinitygroupids=ag_ids
+               affinitygroupids=ag_ids
             )
         self.debug('Created VM=%s in Affinity Group=%s' %
                     (vm.id, ag_list))
@@ -1114,7 +1114,7 @@ class TestDeployVMAffinityGroups(cloudstackTestCase):
         """
 
         self.create_aff_grp(aff_grp=self.services["host_anti_affinity_0"])
-        vm1, hostid1 = self.create_vm_in_aff_grps([self.aff_grp[0].name])
+        vm1, hostid1 = self.create_vm_in_aff_grps(ag_list=[self.aff_grp[0].name])
 
         vm1.delete(self.api_client)
         wait_for_cleanup(self.apiclient, ["expunge.delay", "expunge.interval"])

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/234db056/tools/marvin/marvin/integration/lib/base.py
----------------------------------------------------------------------
diff --git a/tools/marvin/marvin/integration/lib/base.py b/tools/marvin/marvin/integration/lib/base.py
index bc8c603..161d03c 100755
--- a/tools/marvin/marvin/integration/lib/base.py
+++ b/tools/marvin/marvin/integration/lib/base.py
@@ -237,7 +237,7 @@ class VirtualMachine:
     def create(cls, apiclient, services, templateid=None, accountid=None,
                     domainid=None, zoneid=None, networkids=None, serviceofferingid=None,
                     securitygroupids=None, projectid=None, startvm=None,
-                    diskofferingid=None, affinitygroupnames=None, group=None,
+                    diskofferingid=None, affinitygroupnames=None, affinitygroupids=None, group=None,
                     hostid=None, keypair=None, mode='basic', method='GET'):
         """Create the instance"""
 
@@ -299,6 +299,9 @@ class VirtualMachine:
         elif affinitygroupnames:
             cmd.affinitygroupnames  = affinitygroupnames
 
+        if affinitygroupids:
+            cmd.affinitygroupids  = affinitygroupids
+
         if projectid:
             cmd.projectid = projectid
 
@@ -2988,7 +2991,7 @@ class AffinityGroup:
         if name is not None:
             cmd.name = name
         if account is not None:
-            cmd.account = account
+            cmd.accountname = account
         if domainid is not None:
             cmd.domaindid = domainid
 


[20/50] [abbrv] git commit: updated refs/heads/ldapplugin to 7bc705e

Posted by ch...@apache.org.
CLOUDSTACK-1670: Fix the order of user vm's multiple nics

They should follow the order of networkIds parameter of deployVMCmd(). And eth0
would be always on default network.


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

Branch: refs/heads/ldapplugin
Commit: 43ebb1c822d695ca7db5649892004b6b2ddb9da1
Parents: ee664a1
Author: Sheng Yang <sh...@citrix.com>
Authored: Tue Jul 16 16:06:01 2013 -0700
Committer: Sheng Yang <sh...@citrix.com>
Committed: Tue Jul 16 16:07:36 2013 -0700

----------------------------------------------------------------------
 server/src/com/cloud/vm/UserVmManagerImpl.java | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/43ebb1c8/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 461176e..674f29c 100755
--- a/server/src/com/cloud/vm/UserVmManagerImpl.java
+++ b/server/src/com/cloud/vm/UserVmManagerImpl.java
@@ -20,6 +20,7 @@ import java.util.ArrayList;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.HashSet;
+import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -2563,7 +2564,7 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Use
 
         List<Pair<NetworkVO, NicProfile>> networks = new ArrayList<Pair<NetworkVO, NicProfile>>();
 
-        Map<String, NicProfile> networkNicMap = new HashMap<String, NicProfile>();
+        LinkedHashMap<String, NicProfile> networkNicMap = new LinkedHashMap<String, NicProfile>();
 
         short defaultNetworkNumber = 0;
         boolean securityGroupEnabled = false;


[29/50] [abbrv] git commit: updated refs/heads/ldapplugin to 7bc705e

Posted by ch...@apache.org.
Cloudstack-3313 Cannot deploy vm in ipv6 network

Signed-off-by: Abhinandan Prateek <ap...@apache.org>


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

Branch: refs/heads/ldapplugin
Commit: 6b549074fa239af31920b5a8e7112c8f5aa0b782
Parents: d95d55a
Author: Bharat Kumar <bh...@citrix.com>
Authored: Tue Jul 16 11:40:01 2013 +0530
Committer: Abhinandan Prateek <ap...@apache.org>
Committed: Wed Jul 17 10:06:11 2013 +0530

----------------------------------------------------------------------
 .../systemvm/debian/config/etc/init.d/cloud-early-config    | 9 ++++++++-
 .../com/cloud/configuration/ConfigurationManagerImpl.java   | 3 ++-
 server/src/com/cloud/network/NetworkManagerImpl.java        | 6 ++++--
 3 files changed, 14 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/6b549074/patches/systemvm/debian/config/etc/init.d/cloud-early-config
----------------------------------------------------------------------
diff --git a/patches/systemvm/debian/config/etc/init.d/cloud-early-config b/patches/systemvm/debian/config/etc/init.d/cloud-early-config
index f93c39d..5835c4d 100755
--- a/patches/systemvm/debian/config/etc/init.d/cloud-early-config
+++ b/patches/systemvm/debian/config/etc/init.d/cloud-early-config
@@ -544,7 +544,14 @@ setup_dnsmasq() {
   [ $ETH0_IP ] && echo "dhcp-option=6,$NS" >> /etc/dnsmasq.conf
   [ $ETH0_IP6 ] && echo "dhcp-option=option6:dns-server,$NS6" >> /etc/dnsmasq.conf
 #adding the name data-server to the /etc/hosts for allowing the access to user-data service and ssh-key reset in every subnet.
-  echo "$ETH0_IP data-server" >> /etc/hosts
+  if [ -n "$ETH0_IP" ]
+          then
+           echo "$ETH0_IP data-server" >> /etc/hosts
+  fi
+  if [ -n "$ETH0_IP6" ]
+      then
+       echo "$ETH0_IP6 data-server" >> /etc/hosts
+  fi
 }
 
 setup_sshd(){

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/6b549074/server/src/com/cloud/configuration/ConfigurationManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/configuration/ConfigurationManagerImpl.java b/server/src/com/cloud/configuration/ConfigurationManagerImpl.java
index fd170bd..bdb5260 100755
--- a/server/src/com/cloud/configuration/ConfigurationManagerImpl.java
+++ b/server/src/com/cloud/configuration/ConfigurationManagerImpl.java
@@ -2831,6 +2831,7 @@ public class ConfigurationManagerImpl extends ManagerBase implements Configurati
                     ip6Gateway = network.getIp6Gateway();
                     ip6Cidr = network.getIp6Cidr();
                     _networkModel.checkIp6Parameters(startIPv6, endIPv6, ip6Gateway, ip6Cidr);
+                    sameSubnet = true;
                 }
             }
         }
@@ -2846,7 +2847,7 @@ public class ConfigurationManagerImpl extends ManagerBase implements Configurati
             vlanDetails = new Pair<String, String>(newVlanGateway, newVlanNetmask);
         }
         // check if the gatewayip is the part of the ip range being added.
-        if (NetUtils.ipRangesOverlap(startIP, endIP, vlanDetails.first(), vlanDetails.first())) {
+        if (ipv4 && NetUtils.ipRangesOverlap(startIP, endIP, vlanDetails.first(), vlanDetails.first())) {
             throw new InvalidParameterValueException(
                     "The gateway ip should not be the part of the ip range being added.");
         }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/6b549074/server/src/com/cloud/network/NetworkManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/NetworkManagerImpl.java b/server/src/com/cloud/network/NetworkManagerImpl.java
index f6e9a0a..0e80119 100755
--- a/server/src/com/cloud/network/NetworkManagerImpl.java
+++ b/server/src/com/cloud/network/NetworkManagerImpl.java
@@ -2004,8 +2004,10 @@ public class NetworkManagerImpl extends ManagerBase implements NetworkManager, L
                     _networkModel.isProviderSupportServiceInNetwork(network.getId(), Service.Dhcp, element.getProvider()) &&
                     element instanceof DhcpServiceProvider) {
                 DhcpServiceProvider sp = (DhcpServiceProvider) element;
-                if (!sp.configDhcpSupportForSubnet(network, profile, vmProfile, dest, context)) {
-                     return false;
+                if (profile.getIp6Address() == null) {
+                    if (!sp.configDhcpSupportForSubnet(network, profile, vmProfile, dest, context)) {
+                        return false;
+                    }
                 }
                 sp.addDhcpEntry(network, profile, vmProfile, dest, context);
             }


[32/50] [abbrv] git commit: updated refs/heads/ldapplugin to 7bc705e

Posted by ch...@apache.org.
edits


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

Branch: refs/heads/ldapplugin
Commit: f50e26e153fb39fa7daf0d2ca9ccd625905dcd70
Parents: 954e197
Author: radhikap <ra...@citrix.com>
Authored: Wed Jul 17 11:35:28 2013 +0530
Committer: radhikap <ra...@citrix.com>
Committed: Wed Jul 17 11:35:53 2013 +0530

----------------------------------------------------------------------
 .../add-password-management-to-templates.xml    | 25 ++++---
 docs/en-US/linux-installation.xml               | 70 ++++++++++++--------
 docs/en-US/windows-installation.xml             |  9 ++-
 3 files changed, 65 insertions(+), 39 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/f50e26e1/docs/en-US/add-password-management-to-templates.xml
----------------------------------------------------------------------
diff --git a/docs/en-US/add-password-management-to-templates.xml b/docs/en-US/add-password-management-to-templates.xml
index 581e564..60de951 100644
--- a/docs/en-US/add-password-management-to-templates.xml
+++ b/docs/en-US/add-password-management-to-templates.xml
@@ -21,13 +21,22 @@
  specific language governing permissions and limitations
  under the License.
 -->
-
 <section id="add-password-management-to-templates">
-    <title>Adding Password Management to Your Templates</title>
-    <para>&PRODUCT; provides an optional password reset feature that allows users to set a temporary admin or root password as well as reset the existing admin or root password from the &PRODUCT; UI.</para>
-    <para>To enable the Reset Password feature, you will need to download an additional script to patch your template. When you later upload the template into &PRODUCT;, you can specify whether reset admin/root password feature should be enabled for this template.</para>
-    <para>The password management feature works always resets the account password on instance boot.  The script does an HTTP call to the virtual router to retrieve the account password that should be set.  As long as the virtual router is accessible the guest will have access to the account password that should be used.   When the user requests a password reset the management server generates and sends a new password to the virtual router for the account.  Thus an instance reboot is necessary to effect any password changes.</para>
-    <para>If the script is unable to contact the virtual router during instance boot it will not set the password but boot will continue normally.</para>
-    <xi:include href="linux-installation.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
-    <xi:include href="windows-installation.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+  <title>Adding Password Management to Your Templates</title>
+  <para>&PRODUCT; provides an optional password reset feature that allows users to set a temporary
+    admin or root password as well as reset the existing admin or root password from the &PRODUCT;
+    UI.</para>
+  <para>To enable the Reset Password feature, you will need to download an additional script to
+    patch your template. When you later upload the template into &PRODUCT;, you can specify whether
+    reset admin/root password feature should be enabled for this template.</para>
+  <para>The password management feature works always resets the account password on instance boot.
+    The script does an HTTP call to the virtual router to retrieve the account password that should
+    be set. As long as the virtual router is accessible the guest will have access to the account
+    password that should be used. When the user requests a password reset the management server
+    generates and sends a new password to the virtual router for the account. Thus an instance
+    reboot is necessary to effect any password changes.</para>
+  <para>If the script is unable to contact the virtual router during instance boot it will not set
+    the password but boot will continue normally.</para>
+  <xi:include href="linux-installation.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
+  <xi:include href="windows-installation.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
 </section>

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/f50e26e1/docs/en-US/linux-installation.xml
----------------------------------------------------------------------
diff --git a/docs/en-US/linux-installation.xml b/docs/en-US/linux-installation.xml
index b560ee0..57dbc88 100644
--- a/docs/en-US/linux-installation.xml
+++ b/docs/en-US/linux-installation.xml
@@ -22,32 +22,50 @@
 	under the License.
 -->
 <section id="linux-installation">
-	<title>Linux OS Installation</title>
-	<para>Use the following steps to begin the Linux OS installation:</para>
-	<orderedlist>
-		<listitem><para>Download the script file cloud-set-guest-password:</para>
-		<itemizedlist>
-			<listitem><para>Linux: <ulink url="
+  <title>Linux OS Installation</title>
+  <para>Use the following steps to begin the Linux OS installation:</para>
+  <orderedlist>
+    <listitem>
+      <para>Download the script file cloud-set-guest-password:</para>
+      <itemizedlist>
+        <listitem>
+          <para>Linux: <ulink url="
 				http://cloudstack.org/dl/cloud-set-guest-password
-				"></ulink>				
-			</para></listitem>
-			<listitem><para>Windows: <ulink url="
+				"/>
+          </para>
+        </listitem>
+        <listitem>
+          <para>Windows: <ulink
+              url="
 				http://sourceforge.net/projects/cloudstack/files/Password%20Management%20Scripts/CloudInstanceManager.msi/download
-				"></ulink>		
-			</para></listitem>
-		</itemizedlist>
-		</listitem>
-		<listitem><para>Copy this file to /etc/init.d.</para><para>On some Linux distributions, copy the file to /etc/rc.d/init.d.</para>
-			</listitem>
-		<listitem><para>Run the following command to make the script executable:</para><programlisting>chmod +x /etc/init.d/cloud-set-guest-password</programlisting>
-			</listitem>
-		<listitem><para>Depending on the Linux distribution, continue with the appropriate step.</para><para>On Fedora, CentOS/RHEL, and Debian, run:</para><programlisting>chkconfig --add cloud-set-guest-password</programlisting>
-			<para condition="community">On Ubuntu with VMware tools, link the script file to the /etc/network/if-up and
-				/etc/network/if-down folders, and run the script:</para>
-			<programlisting condition="community">#ln -s /etc/init.d/cloud-set-guest-password /etc/network/if-up/cloud-set-guest-password
+				"
+            />
+          </para>
+        </listitem>
+      </itemizedlist>
+    </listitem>
+    <listitem>
+      <para>Copy this file to /etc/init.d.</para>
+      <para>On some Linux distributions, copy the file to /etc/rc.d/init.d.</para>
+    </listitem>
+    <listitem>
+      <para>Run the following command to make the script executable:</para>
+      <programlisting>chmod +x /etc/init.d/cloud-set-guest-password</programlisting>
+    </listitem>
+    <listitem>
+      <para>Depending on the Linux distribution, continue with the appropriate step.</para>
+      <para>On Fedora, CentOS/RHEL, and Debian, run:</para>
+      <programlisting>chkconfig --add cloud-set-guest-password</programlisting>
+      <para condition="community">On Ubuntu with VMware tools, link the script file to the
+        /etc/network/if-up and /etc/network/if-down folders, and run the script:</para>
+      <programlisting condition="community">#ln -s /etc/init.d/cloud-set-guest-password /etc/network/if-up/cloud-set-guest-password
 #ln -s /etc/init.d/cloud-set-guest-password /etc/network/if-down/cloud-set-guest-password</programlisting>
-			<para condition="community">If you are using Ubuntu 11.04, start by creating a directory called /var/lib/dhcp3 on your Ubuntu machine (works around a known issue with this version of Ubuntu). On all Ubuntu versions: Run “sudo update-rc.d cloud-set-guest-password defaults 98”. To test, run "mkpasswd" and check that it is generating a new password. If the “mkpasswd” command does not exist, run "sudo apt-get install whois"  (or sudo apt-get install mkpasswd, depending on your Ubuntu version) and repeat.</para>
-			</listitem>
-	</orderedlist>
-	
-	</section>
+      <para condition="community">If you are using Ubuntu 11.04, start by creating a directory
+        called /var/lib/dhcp3 on your Ubuntu machine (works around a known issue with this version
+        of Ubuntu). On all Ubuntu versions: Run “sudo update-rc.d cloud-set-guest-password defaults
+        98”. To test, run "mkpasswd" and check that it is generating a new password. If the
+        “mkpasswd” command does not exist, run "sudo apt-get install whois" (or sudo apt-get install
+        mkpasswd, depending on your Ubuntu version) and repeat.</para>
+    </listitem>
+  </orderedlist>
+</section>

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/f50e26e1/docs/en-US/windows-installation.xml
----------------------------------------------------------------------
diff --git a/docs/en-US/windows-installation.xml b/docs/en-US/windows-installation.xml
index bcecc80..29c84b4 100644
--- a/docs/en-US/windows-installation.xml
+++ b/docs/en-US/windows-installation.xml
@@ -22,9 +22,8 @@
     under the License.
 -->
 <section id="windows-installation">
-	<title>Windows OS Installation</title>
-  <para>Download the installer, CloudInstanceManager.msi, from 
-    <ulink url="http://cloudstack.org/download.html">Download page</ulink> 
-    and run the installer in the newly created Windows VM.
-  </para>
+  <title>Windows OS Installation</title>
+  <para>Download the installer, CloudInstanceManager.msi, from <ulink
+      url="http://cloudstack.org/download.html">Download page</ulink> and run the installer in the
+    newly created Windows VM. </para>
 </section>


[22/50] [abbrv] git commit: updated refs/heads/ldapplugin to 7bc705e

Posted by ch...@apache.org.
CLOUDSTACK-494: Loose the limition of same ip used by site-to-site vpn

Different account can have same remote side IP now. Of course the remote side need
to identify them and configured properly to handle it.


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

Branch: refs/heads/ldapplugin
Commit: 86bbe211f2341d52d1d64b0b6d3abcdcef85d3ee
Parents: fff763e
Author: Sheng Yang <sh...@citrix.com>
Authored: Tue Jul 16 17:16:58 2013 -0700
Committer: Sheng Yang <sh...@citrix.com>
Committed: Tue Jul 16 17:26:51 2013 -0700

----------------------------------------------------------------------
 .../src/com/cloud/network/dao/Site2SiteCustomerGatewayDao.java   | 2 +-
 .../com/cloud/network/dao/Site2SiteCustomerGatewayDaoImpl.java   | 3 ++-
 server/src/com/cloud/network/vpn/Site2SiteVpnManagerImpl.java    | 4 ++--
 3 files changed, 5 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/86bbe211/engine/schema/src/com/cloud/network/dao/Site2SiteCustomerGatewayDao.java
----------------------------------------------------------------------
diff --git a/engine/schema/src/com/cloud/network/dao/Site2SiteCustomerGatewayDao.java b/engine/schema/src/com/cloud/network/dao/Site2SiteCustomerGatewayDao.java
index 20ef12d..26279c9 100644
--- a/engine/schema/src/com/cloud/network/dao/Site2SiteCustomerGatewayDao.java
+++ b/engine/schema/src/com/cloud/network/dao/Site2SiteCustomerGatewayDao.java
@@ -21,7 +21,7 @@ import java.util.List;
 import com.cloud.utils.db.GenericDao;
 
 public interface Site2SiteCustomerGatewayDao extends GenericDao<Site2SiteCustomerGatewayVO, Long> {
-    Site2SiteCustomerGatewayVO findByGatewayIp(String ip);
+    Site2SiteCustomerGatewayVO findByGatewayIpAndAccountId(String ip, long accountId);
     Site2SiteCustomerGatewayVO findByNameAndAccountId(String name, long accountId);
     List<Site2SiteCustomerGatewayVO> listByAccountId(long accountId);
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/86bbe211/engine/schema/src/com/cloud/network/dao/Site2SiteCustomerGatewayDaoImpl.java
----------------------------------------------------------------------
diff --git a/engine/schema/src/com/cloud/network/dao/Site2SiteCustomerGatewayDaoImpl.java b/engine/schema/src/com/cloud/network/dao/Site2SiteCustomerGatewayDaoImpl.java
index fcb533a..635e914 100644
--- a/engine/schema/src/com/cloud/network/dao/Site2SiteCustomerGatewayDaoImpl.java
+++ b/engine/schema/src/com/cloud/network/dao/Site2SiteCustomerGatewayDaoImpl.java
@@ -43,9 +43,10 @@ public class Site2SiteCustomerGatewayDaoImpl extends GenericDaoBase<Site2SiteCus
     }
     
     @Override
-    public Site2SiteCustomerGatewayVO findByGatewayIp(String ip) {
+    public Site2SiteCustomerGatewayVO findByGatewayIpAndAccountId(String ip, long accountId) {
         SearchCriteria<Site2SiteCustomerGatewayVO> sc = AllFieldsSearch.create();
         sc.setParameters("gatewayIp", ip);
+        sc.setParameters("accountId", accountId);
         return findOneBy(sc);
     }
 

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/86bbe211/server/src/com/cloud/network/vpn/Site2SiteVpnManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/vpn/Site2SiteVpnManagerImpl.java b/server/src/com/cloud/network/vpn/Site2SiteVpnManagerImpl.java
index 292b73e..1a92c9b 100644
--- a/server/src/com/cloud/network/vpn/Site2SiteVpnManagerImpl.java
+++ b/server/src/com/cloud/network/vpn/Site2SiteVpnManagerImpl.java
@@ -208,7 +208,7 @@ public class Site2SiteVpnManagerImpl extends ManagerBase implements Site2SiteVpn
         }
 
         long accountId = owner.getAccountId();
-        if (_customerGatewayDao.findByGatewayIp(gatewayIp) != null) {
+        if (_customerGatewayDao.findByGatewayIpAndAccountId(gatewayIp, accountId) != null) {
             throw new InvalidParameterValueException("The customer gateway with ip " + gatewayIp + " already existed in the system!");
         }
         if (_customerGatewayDao.findByNameAndAccountId(name, accountId) != null) {
@@ -454,7 +454,7 @@ public class Site2SiteVpnManagerImpl extends ManagerBase implements Site2SiteVpn
         checkCustomerGatewayCidrList(guestCidrList);
 
         long accountId = gw.getAccountId();
-        Site2SiteCustomerGatewayVO existedGw = _customerGatewayDao.findByGatewayIp(gatewayIp);
+        Site2SiteCustomerGatewayVO existedGw = _customerGatewayDao.findByGatewayIpAndAccountId(gatewayIp, accountId);
         if (existedGw != null && existedGw.getId() != gw.getId()) {
             throw new InvalidParameterValueException("The customer gateway with ip " + gatewayIp + " already existed in the system!");
         }


[45/50] [abbrv] git commit: updated refs/heads/ldapplugin to 7bc705e

Posted by ch...@apache.org.
CLOUDSTACK-3592: Fix project email reference.

Emails belong to user's within accounts. Refer to the first user within
the account and use his email for account invites.

Signed-off-by: Prasanna Santhanam <ts...@apache.org>


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

Branch: refs/heads/ldapplugin
Commit: 22cb5be8b6e38fb9e27f86e264c6438e10192311
Parents: 234db05
Author: Prasanna Santhanam <ts...@apache.org>
Authored: Wed Jul 17 19:22:58 2013 +0530
Committer: Prasanna Santhanam <ts...@apache.org>
Committed: Wed Jul 17 19:26:21 2013 +0530

----------------------------------------------------------------------
 test/integration/component/test_projects.py | 28 ++++++++++++++----------
 1 file changed, 16 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/22cb5be8/test/integration/component/test_projects.py
----------------------------------------------------------------------
diff --git a/test/integration/component/test_projects.py b/test/integration/component/test_projects.py
index 5f37f96..39e9bee 100644
--- a/test/integration/component/test_projects.py
+++ b/test/integration/component/test_projects.py
@@ -170,8 +170,7 @@ class TestMultipleProjectCreation(cloudstackTestCase):
 
     @attr(tags = ["advanced", "basic", "sg", "eip", "advancedns", "simulator"])
     def test_01_create_multiple_projects_by_account(self):
-        """ Verify an account can own multiple projects and can belong to
-            multiple projects
+        """ Verify an account can own multiple projects and can belong to multiple projects
         """
         # Validate the following
         # 1. Create multiple project. Verify at step 1 An account is allowed
@@ -245,22 +244,27 @@ class TestMultipleProjectCreation(cloudstackTestCase):
                         "Check list project response returns a valid project"
                         )
 
+        self.assert_(isinstance(self.user.user, list))
+        self.assert_(len(self.user.user) > 0, msg="Account %s has no users" % self.user.name)
+        self.debug("Adding account %s to project with email %s" % (self.user.name, self.user.user[0].email))
+        email = self.user.user[0].email
+
         # Add user to the project
         project_1.addAccount(
                            self.apiclient,
                            self.user.name,
-                           self.user.email
+                           email
                            )
 
         # listProjectAccount to verify the user is added to project or not
-        accounts_reponse = Project.listAccounts(
+        accounts_response = Project.listAccounts(
                                             self.apiclient,
                                             projectid=project_1.id,
                                             account=self.user.name,
                                             )
-        self.debug(accounts_reponse)
+        self.debug(accounts_response)
         self.assertEqual(
-                            isinstance(accounts_reponse, list),
+                            isinstance(accounts_response, list),
                             True,
                             "Check for a valid list accounts response"
                             )
@@ -270,7 +274,7 @@ class TestMultipleProjectCreation(cloudstackTestCase):
                     0,
                     "Check list project response returns a valid project"
                     )
-        account = accounts_reponse[0]
+        account = accounts_response[0]
 
         self.assertEqual(
                             account.role,
@@ -281,18 +285,18 @@ class TestMultipleProjectCreation(cloudstackTestCase):
         project_2.addAccount(
                            self.apiclient,
                            self.user.name,
-                           self.user.email
+                           email
                            )
 
         # listProjectAccount to verify the user is added to project or not
-        accounts_reponse = Project.listAccounts(
+        accounts_response = Project.listAccounts(
                                             self.apiclient,
                                             projectid=project_2.id,
                                             account=self.user.name,
                                             )
-        self.debug(accounts_reponse)
+        self.debug(accounts_response)
         self.assertEqual(
-                            isinstance(accounts_reponse, list),
+                            isinstance(accounts_response, list),
                             True,
                             "Check for a valid list accounts response"
                             )
@@ -302,7 +306,7 @@ class TestMultipleProjectCreation(cloudstackTestCase):
                     0,
                     "Check list project response returns a valid project"
                     )
-        account = accounts_reponse[0]
+        account = accounts_response[0]
 
         self.assertEqual(
                             account.role,


[23/50] [abbrv] git commit: updated refs/heads/ldapplugin to 7bc705e

Posted by ch...@apache.org.
CLOUDSTACK-3570:Vmware - Template downloads are getting re-initiated
every time management server is restarted.


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

Branch: refs/heads/ldapplugin
Commit: 2849f8117fb473f998c78b77aec0f0402d8967de
Parents: 86bbe21
Author: Min Chen <mi...@citrix.com>
Authored: Tue Jul 16 17:54:17 2013 -0700
Committer: Min Chen <mi...@citrix.com>
Committed: Tue Jul 16 18:00:10 2013 -0700

----------------------------------------------------------------------
 .../cloud/storage/template/VmdkProcessor.java   | 81 ++++++++++----------
 1 file changed, 40 insertions(+), 41 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/2849f811/core/src/com/cloud/storage/template/VmdkProcessor.java
----------------------------------------------------------------------
diff --git a/core/src/com/cloud/storage/template/VmdkProcessor.java b/core/src/com/cloud/storage/template/VmdkProcessor.java
index e074041..43650c6 100644
--- a/core/src/com/cloud/storage/template/VmdkProcessor.java
+++ b/core/src/com/cloud/storage/template/VmdkProcessor.java
@@ -24,9 +24,6 @@ import javax.naming.ConfigurationException;
 import javax.xml.parsers.DocumentBuilderFactory;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-
 import org.apache.log4j.Logger;
 
 import com.cloud.exception.InternalErrorException;
@@ -40,27 +37,29 @@ public class VmdkProcessor extends AdapterBase implements Processor {
     private static final Logger s_logger = Logger.getLogger(VmdkProcessor.class);
 
     StorageLayer _storage;
-	
+
     @Override
     public FormatInfo process(String templatePath, ImageFormat format, String templateName) throws InternalErrorException {
         if (format != null) {
-        	if(s_logger.isInfoEnabled())
-        		s_logger.info("We currently don't handle conversion from " + format + " to VMDK.");
+            if(s_logger.isInfoEnabled()) {
+                s_logger.info("We currently don't handle conversion from " + format + " to VMDK.");
+            }
             return null;
         }
-        
+
         s_logger.info("Template processing. templatePath: " + templatePath + ", templateName: " + templateName);
         String templateFilePath = templatePath + File.separator + templateName + "." + ImageFormat.OVA.getFileExtension();
         if (!_storage.exists(templateFilePath)) {
-        	if(s_logger.isInfoEnabled())
-        		s_logger.info("Unable to find the vmware template file: " + templateFilePath);
+            if(s_logger.isInfoEnabled()) {
+                s_logger.info("Unable to find the vmware template file: " + templateFilePath);
+            }
             return null;
         }
-        
+
         s_logger.info("Template processing - untar OVA package. templatePath: " + templatePath + ", templateName: " + templateName);
-        String templateFileFullPath = templatePath + templateName + "." + ImageFormat.OVA.getFileExtension();
+        String templateFileFullPath = templatePath + File.separator + templateName + "." + ImageFormat.OVA.getFileExtension();
         File templateFile = new File(templateFileFullPath);
-        
+
         Script command = new Script("tar", 0, s_logger);
         command.add("--no-same-owner");
         command.add("-xf", templateFileFullPath);
@@ -68,9 +67,9 @@ public class VmdkProcessor extends AdapterBase implements Processor {
         String result = command.execute();
         if (result != null) {
             s_logger.info("failed to untar OVA package due to " + result + ". templatePath: " + templatePath + ", templateName: " + templateName);
-        	return null;
+            return null;
         }
-        
+
         FormatInfo info = new FormatInfo();
         info.format = ImageFormat.OVA;
         info.filename = templateName + "." + ImageFormat.OVA.getFileExtension();
@@ -84,42 +83,42 @@ public class VmdkProcessor extends AdapterBase implements Processor {
 
     public long getTemplateVirtualSize(String templatePath, String templateName) throws InternalErrorException {
         // get the virtual size from the OVF file meta data
-    	long virtualSize=0;
+        long virtualSize=0;
         String templateFileFullPath = templatePath.endsWith(File.separator) ? templatePath : templatePath + File.separator;
-    	templateFileFullPath += templateName.endsWith(ImageFormat.OVA.getFileExtension()) ? templateName : templateName + "." + ImageFormat.OVA.getFileExtension();
+        templateFileFullPath += templateName.endsWith(ImageFormat.OVA.getFileExtension()) ? templateName : templateName + "." + ImageFormat.OVA.getFileExtension();
         String ovfFileName = getOVFFilePath(templateFileFullPath);
         if(ovfFileName == null) {
-            String msg = "Unable to locate OVF file in template package directory: " + templatePath; 
+            String msg = "Unable to locate OVF file in template package directory: " + templatePath;
             s_logger.error(msg);
             throw new InternalErrorException(msg);
         }
         try {
             Document ovfDoc = null;
-        	ovfDoc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new File(ovfFileName));
-        	Element disk  = (Element) ovfDoc.getElementsByTagName("Disk").item(0);
-        	virtualSize = Long.parseLong(disk.getAttribute("ovf:capacity"));
-        	String allocationUnits = disk.getAttribute("ovf:capacityAllocationUnits");
-        	if ((virtualSize != 0) && (allocationUnits != null)) {
-        		long units = 1;
-        		if (allocationUnits.equalsIgnoreCase("KB") || allocationUnits.equalsIgnoreCase("KiloBytes") || allocationUnits.equalsIgnoreCase("byte * 2^10")) {
-        			units = 1024;
-        		} else if (allocationUnits.equalsIgnoreCase("MB") || allocationUnits.equalsIgnoreCase("MegaBytes") || allocationUnits.equalsIgnoreCase("byte * 2^20")) {
-        			units = 1024 * 1024;
-        		} else if (allocationUnits.equalsIgnoreCase("GB") || allocationUnits.equalsIgnoreCase("GigaBytes") || allocationUnits.equalsIgnoreCase("byte * 2^30")) {
-        			units = 1024 * 1024 * 1024;
-        		}
-        		virtualSize = virtualSize * units;
-        	} else {
-        		throw new InternalErrorException("Failed to read capacity and capacityAllocationUnits from the OVF file: " + ovfFileName);
-        	}
-        	return virtualSize;
+            ovfDoc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new File(ovfFileName));
+            Element disk  = (Element) ovfDoc.getElementsByTagName("Disk").item(0);
+            virtualSize = Long.parseLong(disk.getAttribute("ovf:capacity"));
+            String allocationUnits = disk.getAttribute("ovf:capacityAllocationUnits");
+            if ((virtualSize != 0) && (allocationUnits != null)) {
+                long units = 1;
+                if (allocationUnits.equalsIgnoreCase("KB") || allocationUnits.equalsIgnoreCase("KiloBytes") || allocationUnits.equalsIgnoreCase("byte * 2^10")) {
+                    units = 1024;
+                } else if (allocationUnits.equalsIgnoreCase("MB") || allocationUnits.equalsIgnoreCase("MegaBytes") || allocationUnits.equalsIgnoreCase("byte * 2^20")) {
+                    units = 1024 * 1024;
+                } else if (allocationUnits.equalsIgnoreCase("GB") || allocationUnits.equalsIgnoreCase("GigaBytes") || allocationUnits.equalsIgnoreCase("byte * 2^30")) {
+                    units = 1024 * 1024 * 1024;
+                }
+                virtualSize = virtualSize * units;
+            } else {
+                throw new InternalErrorException("Failed to read capacity and capacityAllocationUnits from the OVF file: " + ovfFileName);
+            }
+            return virtualSize;
         } catch (Exception e) {
-        	String msg = "Unable to parse OVF XML document to get the virtual disk size due to"+e;
-        	s_logger.error(msg);
-        	throw new InternalErrorException(msg);
+            String msg = "Unable to parse OVF XML document to get the virtual disk size due to"+e;
+            s_logger.error(msg);
+            throw new InternalErrorException(msg);
         }
     }
-    
+
     private String getOVFFilePath(String srcOVAFileName) {
         File file = new File(srcOVAFileName);
         assert(_storage != null);
@@ -141,7 +140,7 @@ public class VmdkProcessor extends AdapterBase implements Processor {
         if (_storage == null) {
             throw new ConfigurationException("Unable to get storage implementation");
         }
-    	
-    	return true;
+
+        return true;
     }
 }


[14/50] [abbrv] git commit: updated refs/heads/ldapplugin to 7bc705e

Posted by ch...@apache.org.
CLOUDSTACK-2155 Anti-Affinity -When Vm deployment is done in parallel , anti-affinity rule is not honored.

- Changes to the API Cmd needed to use CallContext instead of UserContext


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

Branch: refs/heads/ldapplugin
Commit: 686f9ae64fbf628cf96696c119d4170ea263def4
Parents: aa13152
Author: Prachi Damle <pr...@cloud.com>
Authored: Tue Jul 16 13:17:43 2013 -0700
Committer: Prachi Damle <pr...@cloud.com>
Committed: Tue Jul 16 13:17:43 2013 -0700

----------------------------------------------------------------------
 .../api/command/admin/resource/CleanVMReservationsCmd.java     | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/686f9ae6/api/src/org/apache/cloudstack/api/command/admin/resource/CleanVMReservationsCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/admin/resource/CleanVMReservationsCmd.java b/api/src/org/apache/cloudstack/api/command/admin/resource/CleanVMReservationsCmd.java
index b0be7b2..2000edb 100644
--- a/api/src/org/apache/cloudstack/api/command/admin/resource/CleanVMReservationsCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/admin/resource/CleanVMReservationsCmd.java
@@ -22,10 +22,10 @@ import org.apache.cloudstack.api.BaseAsyncCmd;
 import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.SuccessResponse;
 import org.apache.log4j.Logger;
-
+import org.apache.cloudstack.context.CallContext;
 import com.cloud.event.EventTypes;
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
+
 
 @APICommand(name = "cleanVMReservations", description = "Cleanups VM reservations in the database.", responseObject = SuccessResponse.class)
 public class CleanVMReservationsCmd extends BaseAsyncCmd {
@@ -49,7 +49,7 @@ public class CleanVMReservationsCmd extends BaseAsyncCmd {
 
     @Override
     public long getEntityOwnerId() {
-        Account account = UserContext.current().getCaller();
+        Account account = CallContext.current().getCallingAccount();
         if (account != null) {
             return account.getId();
         }


[35/50] [abbrv] git commit: updated refs/heads/ldapplugin to 7bc705e

Posted by ch...@apache.org.
Incorportaed the review changes Now dhcpservice IPs are removed when last vm from the subnet is removed. Rebased with master.

Signed-off-by: Abhinandan Prateek <ap...@apache.org>


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

Branch: refs/heads/ldapplugin
Commit: d73bb22802cba9116f27fada6780c966b0060b30
Parents: 4ac6ebb
Author: Bharat Kumar <bh...@citrix.com>
Authored: Sun Jul 14 12:15:23 2013 +0530
Committer: Abhinandan Prateek <ap...@apache.org>
Committed: Wed Jul 17 12:35:06 2013 +0530

----------------------------------------------------------------------
 api/src/com/cloud/agent/api/to/DhcpTO.java      |  64 ++++++++
 api/src/com/cloud/agent/api/to/DnsmasqTO.java   |  64 --------
 api/src/com/cloud/network/Network.java          |   1 +
 api/src/com/cloud/network/NetworkService.java   |   3 +
 .../network/element/DhcpServiceProvider.java    |   2 +-
 .../agent/api/routing/DnsMasqConfigCommand.java |  40 ++++-
 .../com/cloud/network/DnsMasqConfigurator.java  |  48 ++++--
 .../com/cloud/capacity/dao/CapacityDaoImpl.java |   2 +-
 .../src/com/cloud/network/dao/IPAddressDao.java |   6 +-
 .../com/cloud/network/dao/IPAddressDaoImpl.java |  33 +++--
 engine/schema/src/com/cloud/vm/dao/NicDao.java  |   3 +
 .../schema/src/com/cloud/vm/dao/NicDaoImpl.java |  13 +-
 .../debian/config/root/createIpAlias.sh         |  12 +-
 .../debian/config/root/deleteIpAlias.sh         |  22 +--
 patches/systemvm/debian/config/root/dnsmasq.sh  |  13 +-
 scripts/network/domr/call_dnsmasq.sh            |   2 -
 .../vm/hypervisor/xenserver/createipAlias.sh    |   1 -
 .../vm/hypervisor/xenserver/deleteipAlias.sh    |   1 -
 .../configuration/ConfigurationManagerImpl.java | 145 ++++++-------------
 .../com/cloud/network/NetworkManagerImpl.java   |   6 +-
 .../com/cloud/network/NetworkServiceImpl.java   |   9 +-
 .../network/element/VirtualRouterElement.java   |  17 +--
 .../VirtualNetworkApplianceManagerImpl.java     |  69 +++++----
 .../VpcVirtualNetworkApplianceManagerImpl.java  |  16 +-
 .../com/cloud/vm/VirtualMachineManagerImpl.java |  74 ++++++++++
 .../cloud/network/MockNetworkManagerImpl.java   |   5 +
 ...cVirtualNetworkApplianceManagerImplTest.java |  31 +++-
 .../com/cloud/vpc/MockNetworkManagerImpl.java   |   5 +
 utils/conf/db.properties                        |   2 +-
 utils/src/com/cloud/utils/net/NetUtils.java     |  19 ++-
 30 files changed, 446 insertions(+), 282 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/d73bb228/api/src/com/cloud/agent/api/to/DhcpTO.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/agent/api/to/DhcpTO.java b/api/src/com/cloud/agent/api/to/DhcpTO.java
new file mode 100644
index 0000000..b0d6c7a
--- /dev/null
+++ b/api/src/com/cloud/agent/api/to/DhcpTO.java
@@ -0,0 +1,64 @@
+// 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.agent.api.to;
+
+public class DhcpTO {
+    String routerIp;
+    String gateway;
+    String netmask;
+    String startIpOfSubnet;
+
+    public DhcpTO(String routerIp, String gateway, String netmask, String StartIpOfSubnet) {
+        this.routerIp = routerIp;
+        this.startIpOfSubnet = StartIpOfSubnet;
+        this.gateway = gateway;
+        this.netmask =netmask;
+
+    }
+
+    public void setRouterIp(String routerIp){
+        this.routerIp = routerIp;
+    }
+
+    public void setGateway(String gateway) {
+        this.gateway = gateway;
+    }
+
+    public void setNetmask(String netmask) {
+        this.netmask = netmask ;
+    }
+
+    public void setStartIpOfSubnet( String ipOfSubNet) {
+        startIpOfSubnet = ipOfSubNet;
+    }
+
+    public String getRouterIp() {
+        return routerIp;
+    }
+
+    public String getGateway() {
+        return gateway;
+    }
+
+    public String getNetmask() {
+        return netmask;
+    }
+    public String getStartIpOfSubnet() {
+        return startIpOfSubnet;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/d73bb228/api/src/com/cloud/agent/api/to/DnsmasqTO.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/agent/api/to/DnsmasqTO.java b/api/src/com/cloud/agent/api/to/DnsmasqTO.java
deleted file mode 100644
index c7be04d..0000000
--- a/api/src/com/cloud/agent/api/to/DnsmasqTO.java
+++ /dev/null
@@ -1,64 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-package com.cloud.agent.api.to;
-
-public class DnsmasqTO {
-    String routerIp;
-    String gateway;
-    String netmask;
-    String startIpOfSubnet;
-
-    public DnsmasqTO(String routerIp, String gateway, String netmask, String StartIpOfSubnet) {
-        this.routerIp = routerIp;
-        this.startIpOfSubnet = StartIpOfSubnet;
-        this.gateway = gateway;
-        this.netmask =netmask;
-
-    }
-
-    public void setRouterIp(String routerIp){
-        this.routerIp = routerIp;
-    }
-
-    public void setGateway(String gateway) {
-        this.gateway = gateway;
-    }
-
-    public void setNetmask(String netmask) {
-        this.netmask = netmask ;
-    }
-
-    public void setStartIpOfSubnet( String ipOfSubNet) {
-        startIpOfSubnet = ipOfSubNet;
-    }
-
-    public String getRouterIp() {
-        return routerIp;
-    }
-
-    public String getGateway() {
-        return gateway;
-    }
-
-    public String getNetmask() {
-        return netmask;
-    }
-    public String getStartIpOfSubnet() {
-        return startIpOfSubnet;
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/d73bb228/api/src/com/cloud/network/Network.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/network/Network.java b/api/src/com/cloud/network/Network.java
index a06208b..9be6171 100644
--- a/api/src/com/cloud/network/Network.java
+++ b/api/src/com/cloud/network/Network.java
@@ -180,6 +180,7 @@ public interface Network extends ControlledEntity, StateObject<Network.State>, I
         public static final Capability SupportedEgressProtocols = new Capability("SupportedEgressProtocols");
         public static final Capability HealthCheckPolicy = new Capability("HealthCheckPolicy");
         public static final Capability LbSchemes = new Capability("LbSchemes");
+        public static final Capability DhcpAccrossMultipleSubnets = new Capability("DhcpAccrossMultipleSubnets");
 
         private String name;
 

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/d73bb228/api/src/com/cloud/network/NetworkService.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/network/NetworkService.java b/api/src/com/cloud/network/NetworkService.java
index 405cecd..59ccdbf 100755
--- a/api/src/com/cloud/network/NetworkService.java
+++ b/api/src/com/cloud/network/NetworkService.java
@@ -17,7 +17,9 @@
 package com.cloud.network;
 
 import java.util.List;
+import java.util.Map;
 
+import com.cloud.offering.NetworkOffering;
 import org.apache.cloudstack.api.command.admin.network.DedicateGuestVlanRangeCmd;
 import org.apache.cloudstack.api.command.admin.network.ListDedicatedGuestVlanRangesCmd;
 import org.apache.cloudstack.api.command.admin.usage.ListTrafficTypeImplementorsCmd;
@@ -180,4 +182,5 @@ public interface NetworkService {
     /* lists the nic informaton */
     List<? extends Nic> listNics(ListNicsCmd listNicsCmd);
 
+    Map<Network.Capability, String> getNetworkOfferingServiceCapabilities(NetworkOffering offering, Service service);
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/d73bb228/api/src/com/cloud/network/element/DhcpServiceProvider.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/network/element/DhcpServiceProvider.java b/api/src/com/cloud/network/element/DhcpServiceProvider.java
index 83008ca..6363d7c 100644
--- a/api/src/com/cloud/network/element/DhcpServiceProvider.java
+++ b/api/src/com/cloud/network/element/DhcpServiceProvider.java
@@ -29,5 +29,5 @@ import com.cloud.vm.VirtualMachineProfile;
 public interface DhcpServiceProvider extends NetworkElement {
     boolean addDhcpEntry(Network network, NicProfile nic, VirtualMachineProfile<? extends VirtualMachine> vm, DeployDestination dest, ReservationContext context) throws ConcurrentOperationException, InsufficientCapacityException, ResourceUnavailableException;
     boolean configDhcpSupportForSubnet(Network network, NicProfile nic, VirtualMachineProfile<? extends VirtualMachine> vm, DeployDestination dest, ReservationContext context) throws ConcurrentOperationException, InsufficientCapacityException, ResourceUnavailableException;
-    boolean  removeDhcpSupportForSubnet(Network network);
+    boolean  removeDhcpSupportForSubnet(Network network) throws ResourceUnavailableException;
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/d73bb228/core/src/com/cloud/agent/api/routing/DnsMasqConfigCommand.java
----------------------------------------------------------------------
diff --git a/core/src/com/cloud/agent/api/routing/DnsMasqConfigCommand.java b/core/src/com/cloud/agent/api/routing/DnsMasqConfigCommand.java
index a52af90..521ad70 100644
--- a/core/src/com/cloud/agent/api/routing/DnsMasqConfigCommand.java
+++ b/core/src/com/cloud/agent/api/routing/DnsMasqConfigCommand.java
@@ -16,7 +16,7 @@
 // under the License.
 package com.cloud.agent.api.routing;
 
-import com.cloud.agent.api.to.DnsmasqTO;
+import com.cloud.agent.api.to.DhcpTO;
 
 import java.util.List;
 
@@ -26,11 +26,14 @@ public class DnsMasqConfigCommand extends NetworkElementCommand {
     String dns2;
     String internal_dns1;
     String internal_dns2;
-    List<DnsmasqTO> dnsmasqTOs;
+    List<DhcpTO> dhcpTOs;
+    boolean useExternal_dns;
+    String domain_suffix;
+    boolean dns;
 
-    public DnsMasqConfigCommand(String domain, List<DnsmasqTO> dnsmasqTOs, String dns1, String dns2, String internal_dns1, String internal_dns2) {
+    public DnsMasqConfigCommand(String domain, List<DhcpTO> dhcpTOs, String dns1, String dns2, String internal_dns1, String internal_dns2) {
         this.domain = domain;
-        this.dnsmasqTOs = dnsmasqTOs;
+        this.dhcpTOs = dhcpTOs;
         this.dns1= dns1;
         this.dns2= dns2;
         this.internal_dns1 = internal_dns1;
@@ -38,8 +41,8 @@ public class DnsMasqConfigCommand extends NetworkElementCommand {
 
     }
 
-    public List<DnsmasqTO> getIps() {
-        return  dnsmasqTOs;
+    public List<DhcpTO> getIps() {
+        return dhcpTOs;
     }
 
     public  String getDomain() {
@@ -62,4 +65,29 @@ public class DnsMasqConfigCommand extends NetworkElementCommand {
         return internal_dns2;
     }
 
+    public void setUseExternalDns(boolean useExternal_dns) {
+        this.useExternal_dns = useExternal_dns;
+    }
+
+    public void setDomainSuffix(String domain_suffix) {
+        this.domain_suffix = domain_suffix;
+    }
+
+    public void setIfDnsProvided(boolean dns) {
+        this.dns =dns;
+    }
+
+    public String getDomainSuffix() {
+        return this.domain_suffix;
+    }
+
+    public boolean getUseExternalDns() {
+        return useExternal_dns;
+    }
+
+    public boolean isDnsProvided() {
+        return dns;
+    }
+
+
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/d73bb228/core/src/com/cloud/network/DnsMasqConfigurator.java
----------------------------------------------------------------------
diff --git a/core/src/com/cloud/network/DnsMasqConfigurator.java b/core/src/com/cloud/network/DnsMasqConfigurator.java
index dd34926..3fc61df 100644
--- a/core/src/com/cloud/network/DnsMasqConfigurator.java
+++ b/core/src/com/cloud/network/DnsMasqConfigurator.java
@@ -17,7 +17,7 @@
 package com.cloud.network;
 
 import com.cloud.agent.api.routing.DnsMasqConfigCommand;
-import com.cloud.agent.api.to.DnsmasqTO;
+import com.cloud.agent.api.to.DhcpTO;
 import org.apache.log4j.Logger;
 
 import java.util.Arrays;
@@ -74,11 +74,10 @@ import java.util.List;
                                            "dhcp-option=6,router_ip,external_dns\n",
                                            "dhcp-optsfile=/etc/dhcpopts.txt\n",
 
-
          };
 
      public String[] generateConfiguration(DnsMasqConfigCommand dnsMasqconfigcmd) {
-         List<DnsmasqTO> dnsmasqTOs = dnsMasqconfigcmd.getIps();
+         List<DhcpTO> dhcpTOs = dnsMasqconfigcmd.getIps();
          List <String> dnsMasqconf = Arrays.asList(Dnsmasq_config);
          String range="";
          String gateway="";
@@ -95,15 +94,42 @@ import java.util.List;
          dns_external = dns_external + "*";
          dns_external = dns_external.replace(",*","");
          int i=0;
-         for (; i< dnsmasqTOs.size(); i++) {
-              range=range + "dhcp-range=set:range"+i+","+dnsmasqTOs.get(i).getStartIpOfSubnet()+",static\n";
-              gateway=gateway +"dhcp-option=tag:range"+i+",3,"+dnsmasqTOs.get(i).getGateway()+"\n";
-              netmask=netmask +"dhcp-option=tag:range"+i+",1,"+dnsmasqTOs.get(i).getNetmask()+"\n";
-              dnsServers=dnsServers+"dhcp-option=tag:range"+i+",6,"+dnsmasqTOs.get(i).getRouterIp()+","+dns_external+"\n";
+         for (; i< dhcpTOs.size(); i++) {
+              range=range + "dhcp-range=set:range"+i+","+ dhcpTOs.get(i).getStartIpOfSubnet()+",static\n";
+              gateway=gateway +"dhcp-option=tag:range"+i+",3,"+ dhcpTOs.get(i).getGateway()+"\n";
+              netmask=netmask +"dhcp-option=tag:range"+i+",1,"+ dhcpTOs.get(i).getNetmask()+"\n";
+              if (!dnsMasqconfigcmd.isDnsProvided()) {
+                  dnsServers = dnsServers+"dhcp-option=tag:range"+i+",6,"+dns_external+"\n";
+              }
+              else {
+                  dnsServers=dnsServers+"dhcp-option=tag:range"+i+",6,"+ dhcpTOs.get(i).getRouterIp()+","+dns_external+"\n";
+              }
+
          }
-         dnsMasqconf.set(12, "domain="+domain+"\n");
-         dnsMasqconf.set(14, "domain="+domain+"\n");
-         dnsMasqconf.set(16,"domain="+domain+"\n");
+         String domain_suffix= dnsMasqconfigcmd.getDomainSuffix();
+
+         if (domain != null) {
+             if (domain_suffix != null) {
+
+                 dnsMasqconf.get(5).replace(" local=/cs1cloud.internal/"," local=/"+domain+"/");
+                 dnsMasqconf.set(12, "domain="+domain_suffix+domain+"\n");
+                 dnsMasqconf.set(14, "domain="+domain_suffix+domain+"\n");
+                 dnsMasqconf.set(16,"domain="+domain_suffix+domain+"\n");
+             } else {
+                 dnsMasqconf.get(5).replace(" local=/cs1cloud.internal/"," local=/"+domain+"/");
+                 dnsMasqconf.set(12, "domain="+domain+"\n");
+                 dnsMasqconf.set(14, "domain="+domain+"\n");
+                 dnsMasqconf.set(16,"domain="+domain+"\n");
+             }
+         }
+         ///if no domain is specified. this happens when dns service is not provided by the virtualrouter.
+         else {
+             dnsMasqconf.get(5).replace(" local=/cs1cloud.internal/"," local=/"+domain+"/");
+             dnsMasqconf.set(12, "domain="+"cloudnine.internal\n");
+             dnsMasqconf.set(14, "domain="+"cloudnine.internal\n");
+             dnsMasqconf.set(16,"domain="+"cloudnine.internal\n");
+         }
+
          dnsMasqconf.set(18, range);
          dnsMasqconf.set(22, gateway);
          dnsMasqconf.set(23, netmask);

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/d73bb228/engine/schema/src/com/cloud/capacity/dao/CapacityDaoImpl.java
----------------------------------------------------------------------
diff --git a/engine/schema/src/com/cloud/capacity/dao/CapacityDaoImpl.java b/engine/schema/src/com/cloud/capacity/dao/CapacityDaoImpl.java
index cecc145..dc2899f 100755
--- a/engine/schema/src/com/cloud/capacity/dao/CapacityDaoImpl.java
+++ b/engine/schema/src/com/cloud/capacity/dao/CapacityDaoImpl.java
@@ -387,7 +387,7 @@ public class CapacityDaoImpl extends GenericDaoBase<CapacityVO, Long> implements
             SummedCapacitySearch.and("clusterId", SummedCapacitySearch.entity().getClusterId(), Op.EQ);
         }
         if (capacityType != null){
-            SummedCapacitySearch.and("capacityType", SummedCapacitySearch.entity().getCapacityType(), Op.EQ);	
+            SummedCapacitySearch.and("capacityType", SummedCapacitySearch.entity().getCapacityType(), Op.EQ);
         }        
 
         SummedCapacitySearch.done();

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/d73bb228/engine/schema/src/com/cloud/network/dao/IPAddressDao.java
----------------------------------------------------------------------
diff --git a/engine/schema/src/com/cloud/network/dao/IPAddressDao.java b/engine/schema/src/com/cloud/network/dao/IPAddressDao.java
index 3eba6d8..314ae18 100755
--- a/engine/schema/src/com/cloud/network/dao/IPAddressDao.java
+++ b/engine/schema/src/com/cloud/network/dao/IPAddressDao.java
@@ -75,7 +75,9 @@ public interface IPAddressDao extends GenericDao<IPAddressVO, Long> {
 
     long countFreeIpsInVlan(long vlanDbId);
 
-    boolean deletePublicIPRangeExceptAliasIP(long vlanDbId, String aliasIp) throws SQLException;
+    void deletePublicIPRangeExceptAliasIP(long vlanDbId, String aliasIp);
 
-    boolean deletePublicIPRange(long vlanDbId) throws SQLException;
+    boolean deletePublicIPRange(long vlanDbId) ;
+
+    void lockRange(long vlandbId);
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/d73bb228/engine/schema/src/com/cloud/network/dao/IPAddressDaoImpl.java
----------------------------------------------------------------------
diff --git a/engine/schema/src/com/cloud/network/dao/IPAddressDaoImpl.java b/engine/schema/src/com/cloud/network/dao/IPAddressDaoImpl.java
index 1051b69..9f5f403 100755
--- a/engine/schema/src/com/cloud/network/dao/IPAddressDaoImpl.java
+++ b/engine/schema/src/com/cloud/network/dao/IPAddressDaoImpl.java
@@ -16,6 +16,7 @@
 // under the License.
 package com.cloud.network.dao;
 
+import com.cloud.dc.DataCenterVnetVO;
 import com.cloud.dc.Vlan.VlanType;
 import com.cloud.dc.VlanVO;
 import com.cloud.dc.dao.VlanDao;
@@ -54,7 +55,8 @@ public class IPAddressDaoImpl extends GenericDaoBase<IPAddressVO, Long> implemen
     protected SearchBuilder<IPAddressVO> VlanDbIdSearchUnallocated;
     protected GenericSearchBuilder<IPAddressVO, Integer> AllIpCount;
     protected GenericSearchBuilder<IPAddressVO, Integer> AllocatedIpCount;
-    protected GenericSearchBuilder<IPAddressVO, Integer> AllIpCountForDashboard;    
+    protected GenericSearchBuilder<IPAddressVO, Integer> AllIpCountForDashboard;
+    protected SearchBuilder<IPAddressVO> DeleteAllExceptGivenIp;
     protected GenericSearchBuilder<IPAddressVO, Long> AllocatedIpCountForAccount;    
     @Inject protected VlanDao _vlanDao;
     protected GenericSearchBuilder<IPAddressVO, Long> CountFreePublicIps;
@@ -128,6 +130,10 @@ public class IPAddressDaoImpl extends GenericDaoBase<IPAddressVO, Long> implemen
         join.and("vlanType", join.entity().getVlanType(), Op.EQ);
         CountFreePublicIps.join("vlans", join, CountFreePublicIps.entity().getVlanId(), join.entity().getId(), JoinBuilder.JoinType.INNER);
         CountFreePublicIps.done();
+
+        DeleteAllExceptGivenIp = createSearchBuilder();
+        DeleteAllExceptGivenIp.and("vlanDbId", DeleteAllExceptGivenIp.entity().getVlanId(), Op.EQ);
+        DeleteAllExceptGivenIp.and("ip", DeleteAllExceptGivenIp.entity().getAddress(), Op.NEQ);
     }
 
     @Override
@@ -366,21 +372,15 @@ public class IPAddressDaoImpl extends GenericDaoBase<IPAddressVO, Long> implemen
     }
 
     @Override
-    public boolean deletePublicIPRangeExceptAliasIP(long vlanDbId, String aliasIp) throws SQLException {
-        Transaction txn = Transaction.currentTxn();
-        String deleteSql = "DELETE FROM `cloud`.`user_ip_address` WHERE vlan_db_id = ? and public_ip_address!=?";
-
-        txn.start();
-        PreparedStatement stmt = txn.prepareAutoCloseStatement(deleteSql);
-        stmt.setLong(1, vlanDbId);
-        stmt.setString(2, aliasIp);
-        stmt.executeUpdate();
-        txn.commit();
-        return true;
+    public void deletePublicIPRangeExceptAliasIP(long vlanDbId, String aliasIp)  {
+        SearchCriteria<IPAddressVO> sc =DeleteAllExceptGivenIp .create();
+        sc.setParameters("vlan", vlanDbId);
+        sc.setParameters("ip", aliasIp);
+        remove(sc);
     }
 
     @Override
-    public boolean deletePublicIPRange(long vlanDbId) throws SQLException{
+    public boolean deletePublicIPRange(long vlanDbId) {
         SearchCriteria<IPAddressVO> sc = AllFieldsSearch.create();
         sc.setParameters("vlan", vlanDbId);
         remove(sc);
@@ -408,4 +408,11 @@ public class IPAddressDaoImpl extends GenericDaoBase<IPAddressVO, Long> implemen
         sc.setParameters("associatedVmIp", vmIp);
         return findOneBy(sc);
     }
+
+    @Override
+    public void lockRange(long vlandbId) {
+        SearchCriteria<IPAddressVO> sc = AllFieldsSearch.create();
+        sc.setParameters("vlan", vlandbId);
+        lockRows(sc,null,true);
+    }
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/d73bb228/engine/schema/src/com/cloud/vm/dao/NicDao.java
----------------------------------------------------------------------
diff --git a/engine/schema/src/com/cloud/vm/dao/NicDao.java b/engine/schema/src/com/cloud/vm/dao/NicDao.java
index 83f280e..37249dd 100644
--- a/engine/schema/src/com/cloud/vm/dao/NicDao.java
+++ b/engine/schema/src/com/cloud/vm/dao/NicDao.java
@@ -20,6 +20,7 @@ import com.cloud.utils.db.GenericDao;
 import com.cloud.vm.NicVO;
 import com.cloud.vm.VirtualMachine;
 
+import java.net.URI;
 import java.util.List;
 
 public interface NicDao extends GenericDao<NicVO, Long> {
@@ -68,4 +69,6 @@ public interface NicDao extends GenericDao<NicVO, Long> {
     List<NicVO> listPlaceholderNicsByNetworkIdAndVmType(long networkId, VirtualMachine.Type vmType);
 
     NicVO findByInstanceIdAndIpAddressAndVmtype(long instanceId, String ipaddress, VirtualMachine.Type type);
+
+    List<NicVO> listByNetworkIdTypeAndGatewayAndBroadcastUri(long networkId, VirtualMachine.Type vmType, String gateway, URI broadcastUri);
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/d73bb228/engine/schema/src/com/cloud/vm/dao/NicDaoImpl.java
----------------------------------------------------------------------
diff --git a/engine/schema/src/com/cloud/vm/dao/NicDaoImpl.java b/engine/schema/src/com/cloud/vm/dao/NicDaoImpl.java
index 420643f..d6433a4 100644
--- a/engine/schema/src/com/cloud/vm/dao/NicDaoImpl.java
+++ b/engine/schema/src/com/cloud/vm/dao/NicDaoImpl.java
@@ -29,6 +29,7 @@ import com.cloud.vm.VirtualMachine;
 import org.springframework.stereotype.Component;
 
 import javax.ejb.Local;
+import java.net.URI;
 import java.util.List;
 
 @Component
@@ -151,7 +152,17 @@ public class NicDaoImpl extends GenericDaoBase<NicVO, Long> implements NicDao {
         sc.setParameters("gateway", gateway);
         return findOneBy(sc);
     }
-    
+
+    @Override
+    public List<NicVO> listByNetworkIdTypeAndGatewayAndBroadcastUri(long networkId, VirtualMachine.Type vmType, String gateway, URI broadcasturi) {
+        SearchCriteria<NicVO> sc = AllFieldsSearch.create();
+        sc.setParameters("network", networkId);
+        sc.setParameters("vmType", vmType);
+        sc.setParameters("gateway", gateway);
+        sc.setParameters("broadcastUri", broadcasturi);
+        return listBy(sc);
+    }
+
     @Override
     public NicVO findByIp4AddressAndNetworkId(String ip4Address, long networkId) {
         SearchCriteria<NicVO> sc = AllFieldsSearch.create();

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/d73bb228/patches/systemvm/debian/config/root/createIpAlias.sh
----------------------------------------------------------------------
diff --git a/patches/systemvm/debian/config/root/createIpAlias.sh b/patches/systemvm/debian/config/root/createIpAlias.sh
index 1db210b..5498195 100755
--- a/patches/systemvm/debian/config/root/createIpAlias.sh
+++ b/patches/systemvm/debian/config/root/createIpAlias.sh
@@ -19,8 +19,16 @@
 usage() {
   printf " %s   <alias_count:ip:netmask;alias_count2:ip2:netmask2;....> \n" $(basename $0) >&2
 }
+source /root/func.sh
+
+lock="biglock"
+locked=$(getLockFile $lock)
+if [ "$locked" != "1" ]
+then
+    exit 1
+fi
+
 
-set -x
 var="$1"
 cert="/root/.ssh/id_rsa.cloud"
 
@@ -35,4 +43,4 @@ do
 done
 #restaring the password service to enable it on the ip aliases
 /etc/init.d/cloud-passwd-srvr restart
-exit $?
\ No newline at end of file
+unlock_exit $? $lock $locked
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/d73bb228/patches/systemvm/debian/config/root/deleteIpAlias.sh
----------------------------------------------------------------------
diff --git a/patches/systemvm/debian/config/root/deleteIpAlias.sh b/patches/systemvm/debian/config/root/deleteIpAlias.sh
index cf6d4de..fa228fb 100755
--- a/patches/systemvm/debian/config/root/deleteIpAlias.sh
+++ b/patches/systemvm/debian/config/root/deleteIpAlias.sh
@@ -20,7 +20,15 @@ usage() {
   printf " %s   <alias_count:ip:netmask;alias_count2:ip2:netmask2;....> \n" $(basename $0) >&2
 }
 
-set -x
+source /root/func.sh
+
+lock="biglock"
+locked=$(getLockFile $lock)
+if [ "$locked" != "1" ]
+then
+    exit 1
+fi
+
 var="$1"
 cert="/root/.ssh/id_rsa.cloud"
 
@@ -32,12 +40,8 @@ do
  var=$( echo $var | sed "s/${var1}-//" )
 done
 
-#recreating the active ip aliases
-sh /root/createIpAlias.sh $2
-result=$?
-if [  "$result" -ne "0" ]
-then
- exit $result
-fi
+releaseLockFile $lock $locked
 
-exit 0
+#recreating the active ip aliases
+/root/createIpAlias.sh $2
+unlock_exit $? $lock $locked

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/d73bb228/patches/systemvm/debian/config/root/dnsmasq.sh
----------------------------------------------------------------------
diff --git a/patches/systemvm/debian/config/root/dnsmasq.sh b/patches/systemvm/debian/config/root/dnsmasq.sh
index 656fd3c..b70e2d3 100755
--- a/patches/systemvm/debian/config/root/dnsmasq.sh
+++ b/patches/systemvm/debian/config/root/dnsmasq.sh
@@ -20,6 +20,15 @@ usage() {
   printf "Usage: %s:  <path to new dnsmasq config file>\n" $(basename $0) >&2
 }
 
+source /root/func.sh
+
+lock="biglock"
+locked=$(getLockFile $lock)
+if [ "$locked" != "1" ]
+then
+    exit 1
+fi
+
 set -x
 #backup the old config file
 cp /etc/dnsmasq.conf /etc/dnsmasq.conf.bak
@@ -37,7 +46,7 @@ then
    echo "reverting to the old config"
    cp /etc/dnsmasq.config.bak /etc/dnsmasq.conf
    service dnsmasq restart
-   exit 2
+   unlock_exit $? $lock $locked
 fi
 rm $1
-echo "success"
+unlock_exit $? $lock $locked

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/d73bb228/scripts/network/domr/call_dnsmasq.sh
----------------------------------------------------------------------
diff --git a/scripts/network/domr/call_dnsmasq.sh b/scripts/network/domr/call_dnsmasq.sh
index 097e185..81c218d 100755
--- a/scripts/network/domr/call_dnsmasq.sh
+++ b/scripts/network/domr/call_dnsmasq.sh
@@ -20,8 +20,6 @@ usage() {
   printf "Usage: %s:  <domR eth1 ip>  <path_to_new_config_file>\n" $(basename $0) >&2
 }
 
-set -x
-
 cert="/root/.ssh/id_rsa.cloud"
 
 ssh -p 3922 -q -o StrictHostKeyChecking=no -i $cert root@$1 "/root/dnsmasq.sh $2"	 

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/d73bb228/scripts/vm/hypervisor/xenserver/createipAlias.sh
----------------------------------------------------------------------
diff --git a/scripts/vm/hypervisor/xenserver/createipAlias.sh b/scripts/vm/hypervisor/xenserver/createipAlias.sh
index c35658e..4ef6618 100755
--- a/scripts/vm/hypervisor/xenserver/createipAlias.sh
+++ b/scripts/vm/hypervisor/xenserver/createipAlias.sh
@@ -21,6 +21,5 @@ usage() {
   printf " %s  routerip  <alias_count:ip:netmask;alias_count2:ip2:netmask2;....> \n" $(basename $0) >&2
 }
 
-set -x
 cert="/root/.ssh/id_rsa.cloud"
 ssh -p 3922 -q -o StrictHostKeyChecking=no -i $cert root@$1 "/root/createIpAlias.sh $2"

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/d73bb228/scripts/vm/hypervisor/xenserver/deleteipAlias.sh
----------------------------------------------------------------------
diff --git a/scripts/vm/hypervisor/xenserver/deleteipAlias.sh b/scripts/vm/hypervisor/xenserver/deleteipAlias.sh
index 6816edd..7604172 100644
--- a/scripts/vm/hypervisor/xenserver/deleteipAlias.sh
+++ b/scripts/vm/hypervisor/xenserver/deleteipAlias.sh
@@ -20,6 +20,5 @@ usage() {
   printf " %s  routerip  <alias_count:ip:netmask;alias_count2:ip2:netmask2;....> \n" $(basename $0) >&2
 }
 
-set -x
 cert="/root/.ssh/id_rsa.cloud"
 ssh -p 3922 -q -o StrictHostKeyChecking=no -i $cert root@$1 "/root/deleteIpAlias.sh $2 $3"

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/d73bb228/server/src/com/cloud/configuration/ConfigurationManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/configuration/ConfigurationManagerImpl.java b/server/src/com/cloud/configuration/ConfigurationManagerImpl.java
index 801028d..92178c9 100755
--- a/server/src/com/cloud/configuration/ConfigurationManagerImpl.java
+++ b/server/src/com/cloud/configuration/ConfigurationManagerImpl.java
@@ -2738,9 +2738,14 @@ public class ConfigurationManagerImpl extends ManagerBase implements Configurati
         Transaction txn = Transaction.currentTxn();
         txn.start();
 
-        if (sameSubnet == null || sameSubnet.first() == false) {
+        if ((sameSubnet == null || sameSubnet.first() == false) && (network.getTrafficType()== TrafficType.Guest) && (network.getGuestType() == GuestType.Shared) && (_vlanDao.listVlansByNetworkId(networkId) != null)) {
+            Map<Capability, String> dhcpCapabilities = _networkSvc.getNetworkOfferingServiceCapabilities(_networkOfferingDao.findById(network.getNetworkOfferingId()), Service.Dhcp);
+            String supportsMultipleSubnets = dhcpCapabilities.get(Capability.DhcpAccrossMultipleSubnets);
+            if (supportsMultipleSubnets == null || !Boolean.valueOf(supportsMultipleSubnets)) {
+                       throw new  InvalidParameterValueException("The Dhcp serivice provider for this network dose not support the dhcp  across multiple subnets");
+            }
             s_logger.info("adding a new subnet to the network " + network.getId());
-        } else {
+        } else if (sameSubnet != null)  {
             // if it is same subnet the user might not send the vlan and the
             // netmask details. so we are
             // figuring out while validation and setting them here.
@@ -2757,7 +2762,7 @@ public class ConfigurationManagerImpl extends ManagerBase implements Configurati
         return vlan;
     }
 
-    public int checkIfSubsetOrSuperset(String newVlanGateway, String newVlanNetmask, VlanVO vlan, String startIP,
+    public NetUtils.supersetOrSubset checkIfSubsetOrSuperset(String newVlanGateway, String newVlanNetmask, VlanVO vlan, String startIP,
             String endIP) {
         if (newVlanGateway == null && newVlanNetmask == null) {
             newVlanGateway = vlan.getVlanGateway();
@@ -2765,10 +2770,10 @@ public class ConfigurationManagerImpl extends ManagerBase implements Configurati
             // this means he is trying to add to the existing subnet.
             if (NetUtils.sameSubnet(startIP, newVlanGateway, newVlanNetmask)) {
                 if (NetUtils.sameSubnet(endIP, newVlanGateway, newVlanNetmask)) {
-                    return 3;
+                    return NetUtils.supersetOrSubset.sameSubnet;
                 }
             }
-            return 0;
+            return NetUtils.supersetOrSubset.neitherSubetNorSuperset;
         } else if (newVlanGateway == null || newVlanGateway == null) {
             throw new InvalidParameterValueException(
                     "either both netmask and gateway should be passed or both should me omited.");
@@ -2798,25 +2803,30 @@ public class ConfigurationManagerImpl extends ManagerBase implements Configurati
                     vlanGateway = vlan.getVlanGateway();
                     vlanNetmask = vlan.getVlanNetmask();
                     // check if subset or super set or neither.
-                    int val = checkIfSubsetOrSuperset(newVlanGateway, newVlanNetmask, vlan, startIP, endIP);
-                    if (val == 1) {
+                    NetUtils.supersetOrSubset val = checkIfSubsetOrSuperset(newVlanGateway, newVlanNetmask, vlan, startIP, endIP);
+                    if (val == NetUtils.supersetOrSubset.isSuperset) {
                         // this means that new cidr is a superset of the
                         // existing subnet.
                         throw new InvalidParameterValueException(
                                 "The subnet you are trying to add is a superset of the existing subnet having gateway"
                                         + vlan.getVlanGateway() + " and netmask  " + vlan.getVlanNetmask());
-                    } else if (val == 0) {
+                    } else if (val == NetUtils.supersetOrSubset.neitherSubetNorSuperset) {
                         // this implies the user is trying to add a new subnet
                         // which is not a superset or subset of this subnet.
                         // checking with the other subnets.
                         continue;
-                    } else if (val == 2) {
+                    } else if (val == NetUtils.supersetOrSubset.isSubset) {
                         // this means he is trying to add to the same subnet.
                         throw new InvalidParameterValueException(
                                 "The subnet you are trying to add is a subset of the existing subnet having gateway"
                                         + vlan.getVlanGateway() + " and netmask  " + vlan.getVlanNetmask());
-                    } else if (val == 3) {
+                    } else if (val == NetUtils.supersetOrSubset.sameSubnet) {
                         sameSubnet = true;
+                        //check if the gateway provided by the user is same as that of the subnet.
+                        if (newVlanGateway != null && !newVlanGateway.equals(vlanGateway)) {
+                             throw new InvalidParameterValueException("The gateway of the subnet should be unique. The subnet alreaddy has a gateway "+ vlanGateway);
+                        }
+                        break;
                     }
                 }
                 if (ipv6) {
@@ -3021,7 +3031,7 @@ public class ConfigurationManagerImpl extends ManagerBase implements Configurati
                 if (otherVlanGateway == null) {
                     continue;
                 }
-                String otherVlanSubnet = NetUtils.getSubNet(vlan.getVlanGateway(), vlan.getVlanNetmask());
+                 String otherVlanSubnet = NetUtils.getSubNet(vlan.getVlanGateway(), vlan.getVlanNetmask());
                 String[] otherVlanIpRange = vlan.getIpRange().split("\\-");
                 String otherVlanStartIP = otherVlanIpRange[0];
                 String otherVlanEndIP = null;
@@ -3149,15 +3159,6 @@ public class ConfigurationManagerImpl extends ManagerBase implements Configurati
         return vlan;
     }
 
-    @DB
-    public void deleteVLANFromDb(long vlanDbId) throws SQLException {
-        Transaction txn = Transaction.currentTxn();
-        txn.start();
-        _publicIpAddressDao.deletePublicIPRange(vlanDbId);
-        _vlanDao.expunge(vlanDbId);
-        txn.commit();
-    }
-
     @Override
     @DB
     public boolean deleteVlanAndPublicIpRange(long userId, long vlanDbId, Account caller) {
@@ -3222,102 +3223,38 @@ public class ConfigurationManagerImpl extends ManagerBase implements Configurati
                         s_logger.warn("Some ip addresses failed to be released as a part of vlan " + vlanDbId
                                 + " removal");
                     }
+                    else {
+                        for (IPAddressVO ip : ips) {
+                            UsageEventUtils.publishUsageEvent(EventTypes.EVENT_NET_IP_RELEASE, acctVln.get(0).getId(), ip
+                                    .getDataCenterId(), ip.getId(), ip.getAddress().toString(), ip.isSourceNat(), vlanRange
+                                    .getVlanType().toString(), ip.getSystem(), ip.getClass().getName(), ip.getUuid());
+                        }
+                    }
                 } finally {
                     _vlanDao.releaseFromLockTable(vlanDbId);
                 }
             }
-        }
-
-        if (success) {
-            // Delete all public IPs in the VLAN
-            // if ip range is dedicated to an account generate usage events for
-            // release of every ip in the range
-            if (isAccountSpecific) {
-                for (IPAddressVO ip : ips) {
-                    UsageEventUtils.publishUsageEvent(EventTypes.EVENT_NET_IP_RELEASE, acctVln.get(0).getId(), ip
-                            .getDataCenterId(), ip.getId(), ip.getAddress().toString(), ip.isSourceNat(), vlanRange
-                            .getVlanType().toString(), ip.getSystem(), ip.getClass().getName(), ip.getUuid());
-                }
-            }
-            try {
-                if (_networkModel.areServicesSupportedInNetwork(vlanRange.getNetworkId(), Service.Dhcp)) {
-                    Network network = _networkDao.findById(vlanRange.getNetworkId());
-                    DhcpServiceProvider dhcpServiceProvider = _networkMgr.getDhcpServiceProvider(network);
-                    if (!dhcpServiceProvider.getProvider().getName().equalsIgnoreCase(Provider.VirtualRouter.getName())) {
-                        deleteVLANFromDb(vlanDbId);
-                    } else {
-                        return  handleIpAliasDeletion(vlanRange, vlanDbId, dhcpServiceProvider, network);
-                    }
+            else {   // !isAccountSpecific
+                NicIpAliasVO ipAlias = _nicIpAliasDao.findByGatewayAndNetworkIdAndState(vlanRange.getVlanGateway(), vlanRange.getNetworkId(), NicIpAlias.state.active);
+                //check if the ipalias belongs to the vlan range being deleted.
+                if (ipAlias != null && vlanDbId == _publicIpAddressDao.findByIpAndSourceNetworkId(vlanRange.getNetworkId(), ipAlias.getIp4Address()).getVlanId()) {
+                    throw new InvalidParameterValueException("Cannot delete vlan range "+vlanDbId+" as "+ipAlias.getIp4Address() +
+                            "is being used for providing dhcp service in this subnet. Delete all VMs in this subnet and try again");
                 }
-
-                else {
-                    deleteVLANFromDb(vlanDbId);
+                allocIpCount = _publicIpAddressDao.countIPs(vlanRange.getDataCenterId(), vlanDbId, true);
+                if (allocIpCount > 0) {
+                    throw new InvalidParameterValueException(allocIpCount + "  Ips are in use. Cannot delete this vlan");
                 }
             }
-            catch ( SQLException e) {
-               throw  new CloudRuntimeException(e.getMessage());
-            }
-
         }
-        return true;
-    }
 
-    @DB
-    private boolean handleIpAliasDeletion(VlanVO vlanRange, long vlanDbId, DhcpServiceProvider dhcpServiceProvider, Network network) throws SQLException {
+
         Transaction txn = Transaction.currentTxn();
         txn.start();
-        IPAddressVO ip = null;
-        NicIpAliasVO ipAlias = null;
-        try{
-            Integer allocIpCount=0;
-            //search if the vlan has any allocated ips.
-            allocIpCount = _publicIpAddressDao.countIPs(vlanRange.getDataCenterId(), vlanDbId, true);
-            if (allocIpCount > 1) {
-                throw  new InvalidParameterValueException ("Cannot delete this range as some of the vlans are in use.");
-            }
-            else if (allocIpCount == 0){
-                deleteVLANFromDb(vlanDbId);
-            }
-            else {
-                ipAlias = _nicIpAliasDao.findByGatewayAndNetworkIdAndState(vlanRange.getVlanGateway(), vlanRange.getNetworkId(),  NicIpAlias.state.active);
-                if (ipAlias == null) {
-                    throw  new InvalidParameterValueException ("Cannot delete this range as some of the Ips are in use.");
-                }
-
-                //check if this ip belongs to this vlan and is allocated.
-                ip = _publicIpAddressDao.findByIpAndVlanId(ipAlias.getIp4Address(), vlanDbId);
-                if (ip != null && ip.getState() == IpAddress.State.Allocated) {
-                    //check if there any other vlan ranges in the same subnet having free ips
-                    List<VlanVO> vlanRanges = _vlanDao.listVlansByNetworkIdAndGateway(vlanRange.getNetworkId(), vlanRange.getVlanGateway());
-                    //if there is no other vlanrage in this subnet. free the ip and delete the vlan.
-                    if (vlanRanges.size() == 1) {
-                        ipAlias.setState(NicIpAlias.state.revoked);
-                        _nicIpAliasDao.update(ipAlias.getId(), ipAlias);
-                        if (!dhcpServiceProvider.removeDhcpSupportForSubnet(network)) {
-                            s_logger.debug("Failed to delete the vlan range as we could not free the ip used to provide the dhcp service.");
-                            //setting the state back to active
-                            ipAlias.setState(NicIpAlias.state.active);
-                            _nicIpAliasDao.update(ipAlias.getId(), ipAlias);
-                        }
-                        else {
-                            _publicIpAddressDao.unassignIpAddress(ip.getId());
-                            deleteVLANFromDb(vlanDbId);
-                        }
-                    } else {
-                        // if there are more vlans in the subnet, free all the ips in the range except the ip alias.
-                        s_logger.info("vlan Range"+vlanRange.getId()+" id being deleted, one of the Ips in this range is used to provide the dhcp service, will free the rest of the IPs in range.");
-                        _publicIpAddressDao.deletePublicIPRangeExceptAliasIP(vlanDbId, ipAlias.getIp4Address());
-                        VlanVO vlan = _vlanDao.findById(vlanDbId);
-                        vlan.setIpRange(ipAlias.getIp4Address()+"-"+ipAlias.getIp4Address());
-                        _vlanDao.update(vlan.getId(), vlan);
-                    }
-                }
-            }
-        } catch (CloudRuntimeException e) {
-            txn.rollback();
-            throw e;
-        }
+        _publicIpAddressDao.deletePublicIPRange(vlanDbId);
+        _vlanDao.expunge(vlanDbId);
         txn.commit();
+
         return true;
     }
 

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/d73bb228/server/src/com/cloud/network/NetworkManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/NetworkManagerImpl.java b/server/src/com/cloud/network/NetworkManagerImpl.java
index db375c3..0fa58be 100755
--- a/server/src/com/cloud/network/NetworkManagerImpl.java
+++ b/server/src/com/cloud/network/NetworkManagerImpl.java
@@ -2002,9 +2002,11 @@ public class NetworkManagerImpl extends ManagerBase implements NetworkManager, L
         if (vmProfile.getType() == Type.User && element.getProvider() != null) {
             if (_networkModel.areServicesSupportedInNetwork(network.getId(), Service.Dhcp) &&
                     _networkModel.isProviderSupportServiceInNetwork(network.getId(), Service.Dhcp, element.getProvider()) &&
-                    element instanceof DhcpServiceProvider) {
+                    element instanceof DhcpServiceProvider ) {
                 DhcpServiceProvider sp = (DhcpServiceProvider) element;
-                if (profile.getIp6Address() == null) {
+                Map <Capability, String> dhcpCapabilities = element.getCapabilities().get(Service.Dhcp);
+                String supportsMultipleSubnets = dhcpCapabilities.get(Capability.DhcpAccrossMultipleSubnets);
+                if ((supportsMultipleSubnets != null || Boolean.valueOf(supportsMultipleSubnets)) && profile.getIp6Address() == null) {
                     if (!sp.configDhcpSupportForSubnet(network, profile, vmProfile, dest, context)) {
                         return false;
                     }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/d73bb228/server/src/com/cloud/network/NetworkServiceImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/NetworkServiceImpl.java b/server/src/com/cloud/network/NetworkServiceImpl.java
index ccd23bf..ad437e5 100755
--- a/server/src/com/cloud/network/NetworkServiceImpl.java
+++ b/server/src/com/cloud/network/NetworkServiceImpl.java
@@ -1822,11 +1822,8 @@ public class NetworkServiceImpl extends ManagerBase implements  NetworkService {
     }
 
 
-
-
-
-
-    protected Map<Capability, String> getNetworkOfferingServiceCapabilities(NetworkOffering offering, Service service) {
+    @Override
+    public Map<Capability, String> getNetworkOfferingServiceCapabilities(NetworkOffering offering, Service service) {
 
         if (!areServicesSupportedByNetworkOffering(offering.getId(), service)) {
             // TBD: We should be sending networkOfferingId and not the offering object itself.
@@ -2676,8 +2673,6 @@ public class NetworkServiceImpl extends ManagerBase implements  NetworkService {
                 }
             }
 
-
-
             if (newVnetRangeString != null) {
                for (Pair<Integer,Integer> vnetRange : existingRanges ){
                     value=vnetMap.get(vnetRange.first());

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/d73bb228/server/src/com/cloud/network/element/VirtualRouterElement.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/element/VirtualRouterElement.java b/server/src/com/cloud/network/element/VirtualRouterElement.java
index 1916678..d26c1e1 100755
--- a/server/src/com/cloud/network/element/VirtualRouterElement.java
+++ b/server/src/com/cloud/network/element/VirtualRouterElement.java
@@ -614,7 +614,10 @@ public class VirtualRouterElement extends AdapterBase implements VirtualRouterEl
         capabilities.put(Service.Dns, dnsCapabilities);
 
         capabilities.put(Service.UserData, null);
-        capabilities.put(Service.Dhcp, null);
+
+        Map<Capability, String> dhcpCapabilities = new HashMap<Capability, String>();
+        dhcpCapabilities.put(Capability.DhcpAccrossMultipleSubnets, "true");
+        capabilities.put(Service.Dhcp, dhcpCapabilities);
 
         capabilities.put(Service.Gateway, null);
 
@@ -873,24 +876,18 @@ public class VirtualRouterElement extends AdapterBase implements VirtualRouterEl
     }
 
     @Override
-    public boolean removeDhcpSupportForSubnet(Network network) {
+    public boolean removeDhcpSupportForSubnet(Network network) throws ResourceUnavailableException{
         if (canHandle(network, Service.Dhcp)) {
             List<DomainRouterVO> routers = _routerDao.listByNetworkAndRole(network.getId(), Role.VIRTUAL_ROUTER);
-           try {
-               if ((routers == null) || (routers.size() == 0)) {
+            if ((routers == null) || (routers.size() == 0)) {
                    throw new ResourceUnavailableException("Can't find at least one router!", DataCenter.class, network.getDataCenterId());
-               }
-           }
-           catch (ResourceUnavailableException e) {
-               s_logger.debug("could not find any router on this network");
-           }
+            }
            try {
                 return _routerMgr.removeDhcpSupportForSubnet(network, routers);
            }
            catch (ResourceUnavailableException e) {
                 s_logger.debug("Router resource unavailable ");
            }
-
         }
         return false;
     }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/d73bb228/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java
index e437af6..66d904c 100755
--- a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java
+++ b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java
@@ -85,7 +85,7 @@ import com.cloud.agent.api.routing.SetPortForwardingRulesVpcCommand;
 import com.cloud.agent.api.routing.SetStaticNatRulesCommand;
 import com.cloud.agent.api.routing.VmDataCommand;
 import com.cloud.agent.api.routing.VpnUsersCfgCommand;
-import com.cloud.agent.api.to.DnsmasqTO;
+import com.cloud.agent.api.to.DhcpTO;
 import com.cloud.agent.api.to.FirewallRuleTO;
 import com.cloud.agent.api.to.IpAddressTO;
 import com.cloud.agent.api.to.LoadBalancerTO;
@@ -141,6 +141,7 @@ import com.cloud.network.Network.Provider;
 import com.cloud.network.Network.Service;
 import com.cloud.network.NetworkManager;
 import com.cloud.network.NetworkModel;
+import com.cloud.network.NetworkService;
 import com.cloud.network.Networks.BroadcastDomainType;
 import com.cloud.network.Networks.IsolationType;
 import com.cloud.network.Networks.TrafficType;
@@ -356,6 +357,8 @@ public class VirtualNetworkApplianceManagerImpl extends ManagerBase implements V
     Site2SiteVpnManager _s2sVpnMgr;
     @Inject
     UserIpv6AddressDao _ipv6Dao;
+    @Inject
+    NetworkService _networkSvc;
 
     
     int _routerRamSize;
@@ -2497,23 +2500,31 @@ public class VirtualNetworkApplianceManagerImpl extends ManagerBase implements V
         }
         //Reapply dhcp and dns configuration.
         if (_networkModel.isProviderSupportServiceInNetwork(guestNetworkId, Service.Dhcp, provider)) {
-            List<NicIpAliasVO> revokedIpAliasVOs = _nicIpAliasDao.listByNetworkIdAndState(guestNetworkId, NicIpAlias.state.revoked);
-            s_logger.debug("Found" + revokedIpAliasVOs.size() + "ip Aliases to revoke on the router as a part of dhcp configuration");
-            List<IpAliasTO> revokedIpAliasTOs = new ArrayList<IpAliasTO>();
-            for (NicIpAliasVO revokedAliasVO : revokedIpAliasVOs) {
-                revokedIpAliasTOs.add(new IpAliasTO(revokedAliasVO.getIp4Address(), revokedAliasVO.getNetmask(), revokedAliasVO.getAliasCount().toString()));
-            }
-            List<NicIpAliasVO> aliasVOs = _nicIpAliasDao.listByNetworkIdAndState(guestNetworkId, NicIpAlias.state.active);
-            s_logger.debug("Found" + aliasVOs.size() + "ip Aliases to apply on the router as a part of dhcp configuration");
-            List<IpAliasTO> activeIpAliasTOs = new ArrayList<IpAliasTO>();
-            for (NicIpAliasVO aliasVO : aliasVOs) {
-                   activeIpAliasTOs.add(new IpAliasTO(aliasVO.getIp4Address(), aliasVO.getNetmask(), aliasVO.getAliasCount().toString()));
-            }
-            if (revokedIpAliasTOs.size() != 0 || activeIpAliasTOs.size() != 0){
-                createDeleteIpAliasCommand(router, revokedIpAliasTOs, activeIpAliasTOs, guestNetworkId, cmds);
-                configDnsMasq(router, _networkDao.findById(guestNetworkId), cmds);
+            Map<Network.Capability, String> dhcpCapabilities = _networkSvc.getNetworkOfferingServiceCapabilities(_networkOfferingDao.findById(_networkDao.findById(guestNetworkId).getNetworkOfferingId()), Service.Dhcp);
+            String supportsMultipleSubnets = dhcpCapabilities.get(Network.Capability.DhcpAccrossMultipleSubnets);
+            if (supportsMultipleSubnets == null || !Boolean.valueOf(supportsMultipleSubnets)) {
+                List<NicIpAliasVO> revokedIpAliasVOs = _nicIpAliasDao.listByNetworkIdAndState(guestNetworkId, NicIpAlias.state.revoked);
+                s_logger.debug("Found" + revokedIpAliasVOs.size() + "ip Aliases to revoke on the router as a part of dhcp configuration");
+                removeRevokedIpAliasFromDb(revokedIpAliasVOs);
+
+                List<NicIpAliasVO> aliasVOs = _nicIpAliasDao.listByNetworkIdAndState(guestNetworkId, NicIpAlias.state.active);
+                s_logger.debug("Found" + aliasVOs.size() + "ip Aliases to apply on the router as a part of dhcp configuration");
+                List<IpAliasTO> activeIpAliasTOs = new ArrayList<IpAliasTO>();
+                for (NicIpAliasVO aliasVO : aliasVOs) {
+                    activeIpAliasTOs.add(new IpAliasTO(aliasVO.getIp4Address(), aliasVO.getNetmask(), aliasVO.getAliasCount().toString()));
+                }
+                if (activeIpAliasTOs.size() != 0){
+                    createIpAlias(router, activeIpAliasTOs, guestNetworkId, cmds);
+                    configDnsMasq(router, _networkDao.findById(guestNetworkId), cmds);
+                }
+
             }
+        }
+    }
 
+    private void removeRevokedIpAliasFromDb(List<NicIpAliasVO> revokedIpAliasVOs) {
+        for (NicIpAliasVO ipalias : revokedIpAliasVOs) {
+            _nicIpAliasDao.expunge(ipalias.getId());
         }
     }
 
@@ -2790,9 +2801,6 @@ public class VirtualNetworkApplianceManagerImpl extends ManagerBase implements V
                     router.getState(), DataCenter.class, network.getDataCenterId());
         }
         //check if this is not the primary subnet.
-
-
-        //check if the the ip Alias is configured on the virtualrouter.
         UserVm vm = updatedProfile.getVirtualMachine();
         NicVO domr_guest_nic = _nicDao.findByInstanceIdAndIpAddressAndVmtype(router.getId(), _nicDao.getIpAddress(nic.getNetworkId(), router.getId()), VirtualMachine.Type.DomainRouter);
         //check if the router ip address and the vm ip address belong to same subnet.
@@ -2849,8 +2857,11 @@ public class VirtualNetworkApplianceManagerImpl extends ManagerBase implements V
                 boolean result = sendCommandsToRouter(router, cmds);
                 if (result == false) {
                     NicIpAliasVO ipAliasVO = _nicIpAliasDao.findByInstanceIdAndNetworkId(network.getId(), router.getId());
+                    Transaction txn = Transaction.currentTxn();
+                    txn.start();
                     _nicIpAliasDao.expunge(ipAliasVO.getId());
                     _ipAddressDao.unassignIpAddress(routerPublicIP.getId());
+                    txn.commit();
                     throw new CloudRuntimeException("failed to configure ip alias on the router as a part of dhcp config");
                 }
             }
@@ -2891,10 +2902,13 @@ public class VirtualNetworkApplianceManagerImpl extends ManagerBase implements V
             configDnsMasq(router, network, cmds);
             boolean result = sendCommandsToRouter(router, cmds);
             if (result) {
+                Transaction txn= Transaction.currentTxn();
+                txn.start();
                 for (NicIpAliasVO revokedAliasVO : revokedIpAliasVOs) {
                     _nicIpAliasDao.expunge(revokedAliasVO.getId());
-                    return true;
                 }
+                txn.commit();
+                return true;
             }
         }
         return  false;
@@ -3461,7 +3475,7 @@ public class VirtualNetworkApplianceManagerImpl extends ManagerBase implements V
         }
         DataCenterVO dcVo = _dcDao.findById(router.getDataCenterId());
         List<NicIpAliasVO> ipAliasVOList = _nicIpAliasDao.listByNetworkIdAndState(network.getId(), NicIpAlias.state.active);
-        List<DnsmasqTO> ipList = new ArrayList<DnsmasqTO>();
+        List<DhcpTO> ipList = new ArrayList<DhcpTO>();
 
         NicVO router_guest_nic = _nicDao.findByNtwkIdAndInstanceId(network.getId(), router.getId());
         String cidr = NetUtils.getCidrFromGatewayAndNetmask(router_guest_nic.getGateway(), router_guest_nic.getNetmask());
@@ -3470,22 +3484,25 @@ public class VirtualNetworkApplianceManagerImpl extends ManagerBase implements V
         long cidrSize = Long.parseLong(cidrPair[1]);
         String startIpOfSubnet = NetUtils.getIpRangeStartIpFromCidr(cidrAddress, cidrSize);
 
-        ipList.add(new DnsmasqTO(router_guest_nic.getIp4Address(),router_guest_nic.getGateway(),router_guest_nic.getNetmask(), startIpOfSubnet));
+        ipList.add(new DhcpTO(router_guest_nic.getIp4Address(),router_guest_nic.getGateway(),router_guest_nic.getNetmask(), startIpOfSubnet));
         for (NicIpAliasVO ipAliasVO : ipAliasVOList) {
-             DnsmasqTO dnsmasqTO = new DnsmasqTO(ipAliasVO.getIp4Address(), ipAliasVO.getGateway(), ipAliasVO.getNetmask(), ipAliasVO.getStartIpOfSubnet());
+             DhcpTO DhcpTO = new DhcpTO(ipAliasVO.getIp4Address(), ipAliasVO.getGateway(), ipAliasVO.getNetmask(), ipAliasVO.getStartIpOfSubnet());
              if (s_logger.isTraceEnabled()) {
-                 s_logger.trace("configDnsMasq : adding ip {" + dnsmasqTO.getGateway() + ", " + dnsmasqTO.getNetmask() + ", " + dnsmasqTO.getRouterIp() + ", " + dnsmasqTO.getStartIpOfSubnet() + "}");
+                 s_logger.trace("configDnsMasq : adding ip {" + DhcpTO.getGateway() + ", " + DhcpTO.getNetmask() + ", " + DhcpTO.getRouterIp() + ", " + DhcpTO.getStartIpOfSubnet() + "}");
              }
-             ipList.add(dnsmasqTO);
+             ipList.add(DhcpTO);
              ipAliasVO.setVmId(router.getId());
         }
         DataCenterVO dcvo = _dcDao.findById(router.getDataCenterId());
+        boolean dnsProvided = _networkModel.isProviderSupportServiceInNetwork(network.getId(), Service.Dns, Provider.VirtualRouter);
+        String domain_suffix = dcvo.getDetail(ZoneConfig.DnsSearchOrder.getName());
         DnsMasqConfigCommand dnsMasqConfigCmd = new DnsMasqConfigCommand(network.getNetworkDomain(),ipList, dcvo.getDns1(), dcvo.getDns2(), dcvo.getInternalDns1(), dcvo.getInternalDns2());
         dnsMasqConfigCmd.setAccessDetail(NetworkElementCommand.ROUTER_IP, getRouterControlIp(router.getId()));
         dnsMasqConfigCmd.setAccessDetail(NetworkElementCommand.ROUTER_NAME, router.getInstanceName());
         dnsMasqConfigCmd.setAccessDetail(NetworkElementCommand.ROUTER_GUEST_IP, getRouterIpInNetwork(network.getId(), router.getId()));
         dnsMasqConfigCmd.setAccessDetail(NetworkElementCommand.ZONE_NETWORK_TYPE, dcVo.getNetworkType().toString());
-
+        dnsMasqConfigCmd.setDomainSuffix(domain_suffix);
+        dnsMasqConfigCmd.setIfDnsProvided(dnsProvided);
         cmds.addCommand("dnsMasqConfig" ,dnsMasqConfigCmd);
         //To change body of created methods use File | Settings | File Templates.
     }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/d73bb228/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImpl.java b/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImpl.java
index 39d0895..986dd4f 100644
--- a/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImpl.java
+++ b/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImpl.java
@@ -27,6 +27,7 @@ import java.util.TreeSet;
 import javax.ejb.Local;
 import javax.inject.Inject;
 
+import com.cloud.configuration.ZoneConfig;
 import org.apache.log4j.Logger;
 import org.springframework.stereotype.Component;
 
@@ -44,7 +45,7 @@ import com.cloud.agent.api.routing.SetNetworkACLCommand;
 import com.cloud.agent.api.routing.SetSourceNatCommand;
 import com.cloud.agent.api.routing.SetStaticRouteCommand;
 import com.cloud.agent.api.routing.Site2SiteVpnCfgCommand;
-import com.cloud.agent.api.to.DnsmasqTO;
+import com.cloud.agent.api.to.DhcpTO;
 import com.cloud.agent.api.to.IpAddressTO;
 import com.cloud.agent.api.to.NetworkACLTO;
 import com.cloud.agent.api.to.NicTO;
@@ -885,24 +886,29 @@ public class VpcVirtualNetworkApplianceManagerImpl extends VirtualNetworkApplian
         }
         VpcVO vpc = _vpcDao.findById(router.getVpcId());
         DataCenterVO dcVo = _dcDao.findById(router.getDataCenterId());
-        List<DnsmasqTO> ipList = new ArrayList<DnsmasqTO>();
+        List<DhcpTO> ipList = new ArrayList<DhcpTO>();
 
         String cidr = vpc.getCidr();
         String[] cidrPair = cidr.split("\\/");
         String cidrAddress = cidrPair[0];
         long cidrSize = Long.parseLong(cidrPair[1]);
         String startIpOfSubnet = NetUtils.getIpRangeStartIpFromCidr(cidrAddress, cidrSize);
-        DnsmasqTO dnsmasqTO = new DnsmasqTO(router.getPrivateIpAddress(), router.getPublicIpAddress(), NetUtils.getCidrNetmask(cidrSize), startIpOfSubnet);
-        ipList.add(dnsmasqTO);
+        DhcpTO DhcpTO = new DhcpTO(router.getPrivateIpAddress(), router.getPublicIpAddress(), NetUtils.getCidrNetmask(cidrSize), startIpOfSubnet);
+        ipList.add(DhcpTO);
 
+        NicVO nic = _nicDao.findByIp4AddressAndVmId(_routerDao.findById(router.getId()).getPrivateIpAddress(), router.getId());
+        DataCenterVO dcvo = _dcDao.findById(router.getDataCenterId());
+        boolean dnsProvided = _networkModel.isProviderSupportServiceInNetwork(nic.getNetworkId(), Service.Dns, Provider.VirtualRouter);
+        String domain_suffix = dcvo.getDetail(ZoneConfig.DnsSearchOrder.getName());
         DnsMasqConfigCommand dnsMasqConfigCmd = new DnsMasqConfigCommand(vpc.getNetworkDomain(),ipList, dcVo.getDns1(), dcVo.getDns2(), dcVo.getInternalDns1(), dcVo.getInternalDns2());
         dnsMasqConfigCmd.setAccessDetail(NetworkElementCommand.ROUTER_IP, getRouterControlIp(router.getId()));
         dnsMasqConfigCmd.setAccessDetail(NetworkElementCommand.ROUTER_NAME, router.getInstanceName());
         dnsMasqConfigCmd.setAccessDetail(NetworkElementCommand.ROUTER_GUEST_IP, router.getPublicIpAddress());
         dnsMasqConfigCmd.setAccessDetail(NetworkElementCommand.ZONE_NETWORK_TYPE, dcVo.getNetworkType().toString());
+        dnsMasqConfigCmd.setDomainSuffix(domain_suffix);
+        dnsMasqConfigCmd.setIfDnsProvided(dnsProvided);
 
         cmds.addCommand("dnsMasqConfig" ,dnsMasqConfigCmd);
-        //To change body of created methods use File | Settings | File Templates.
     }
 
 

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/d73bb228/server/src/com/cloud/vm/VirtualMachineManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/vm/VirtualMachineManagerImpl.java b/server/src/com/cloud/vm/VirtualMachineManagerImpl.java
index afdc85d..6fb2379 100755
--- a/server/src/com/cloud/vm/VirtualMachineManagerImpl.java
+++ b/server/src/com/cloud/vm/VirtualMachineManagerImpl.java
@@ -36,6 +36,13 @@ import javax.ejb.Local;
 import javax.inject.Inject;
 import javax.naming.ConfigurationException;
 
+import com.cloud.dc.dao.VlanDao;
+import com.cloud.network.Networks;
+import com.cloud.network.dao.IPAddressDao;
+import com.cloud.network.dao.IPAddressVO;
+import com.cloud.network.element.DhcpServiceProvider;
+import com.cloud.vm.dao.NicIpAliasDao;
+import com.cloud.vm.dao.NicIpAliasVO;
 import org.apache.log4j.Logger;
 
 import org.apache.cloudstack.affinity.dao.AffinityGroupVMMapDao;
@@ -267,6 +274,12 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
     protected ConfigurationServer _configServer;
     @Inject
     protected ManagementServer _mgmtServer;
+    @Inject
+    protected IPAddressDao _publicIpAddressDao;
+    @Inject
+    protected VlanDao _vlanDao;
+    @Inject
+    protected NicIpAliasDao _nicIpAliasDao;
 
     protected List<DeploymentPlanner> _planners;
     public List<DeploymentPlanner> getPlanners() {
@@ -460,6 +473,10 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
             s_logger.debug("Destroying vm " + vm);
         }
 
+        if (vm.getType() == VirtualMachine.Type.User) {
+              removeDhcpServiceInsubnet(vm);
+        }
+
         VirtualMachineProfile<T> profile = new VirtualMachineProfileImpl<T>(vm);
 
         HypervisorGuru hvGuru = _hvGuruMgr.getGuru(vm.getHypervisorType());
@@ -517,6 +534,41 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
         return true;
     }
 
+    @DB
+    private void removeDhcpServiceInsubnet(VirtualMachine vm) {
+        //list all the nics which belong to this vm and are the last nics  in the subnets.
+        //we are using the info in these nics to remove the dhcp sercvice for these subnets.
+        List<NicVO> nicList = listLastNicsInSubnet(vm);
+
+        if(nicList != null && nicList.size() != 0) {
+            for (NicVO nic : nicList) {
+                //free the ipalias on the routers corresponding to each of the nics.
+                Network network = _networkDao.findById(nic.getNetworkId());
+                DhcpServiceProvider dhcpServiceProvider = _networkMgr.getDhcpServiceProvider(network);
+                try {
+                    NicIpAliasVO ipAlias = _nicIpAliasDao.findByGatewayAndNetworkIdAndState(nic.getGateway(), network.getId(), NicIpAlias.state.active);
+                    if (ipAlias != null) {
+                        ipAlias.setState(NicIpAlias.state.revoked);
+                        Transaction txn = Transaction.currentTxn();
+                        txn.start();
+                        _nicIpAliasDao.update(ipAlias.getId(),ipAlias);
+                        IPAddressVO aliasIpaddressVo = _publicIpAddressDao.findByIpAndSourceNetworkId(ipAlias.getNetworkId(), ipAlias.getIp4Address());
+                        _publicIpAddressDao.unassignIpAddress(aliasIpaddressVo.getId());
+                        txn.commit();
+                        if (!dhcpServiceProvider.removeDhcpSupportForSubnet(network)) {
+                            s_logger.warn("Failed to remove the ip alias on the router, marking it as removed in db and freed the allocated ip " + ipAlias.getIp4Address());
+                        }
+                    }
+                }
+                catch (ResourceUnavailableException e) {
+                    //failed to remove the dhcpconfig on the router.
+                    s_logger.info ("Unable to delete the ip alias due to unable to contact the virtualrouter.");
+                }
+
+            }
+        }
+    }
+
     @Override
     public boolean start() {
         _executor.scheduleAtFixedRate(new CleanupTask(), _cleanupInterval, _cleanupInterval, TimeUnit.SECONDS);
@@ -1337,6 +1389,28 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
         return true;
     }
 
+    //list all the nics which belong to this vm and are the last nics  in the subnets.
+    //we are using the info in these nics to remove the dhcp sercvice for these subnets.
+    private  List<NicVO> listLastNicsInSubnet(VirtualMachine vm) {
+        List<NicVO>  nicList  = _nicsDao.listByVmId(vm.getId());
+        List<NicVO>  copyOfnicList = new ArrayList<NicVO>(nicList);
+        for (NicVO nic : nicList) {
+            Network network = _networkDao.findById(nic.getNetworkId());
+            DhcpServiceProvider dhcpServiceProvider = _networkMgr.getDhcpServiceProvider(network);
+            Map <Network.Capability, String> capabilities = dhcpServiceProvider.getCapabilities().get(Network.Service.Dhcp);
+            String supportsMultipleSubnets = capabilities.get(Network.Capability.DhcpAccrossMultipleSubnets);
+            if ((supportsMultipleSubnets != null && Boolean.valueOf(supportsMultipleSubnets) && network.getTrafficType() == Networks.TrafficType.Guest && network.getGuestType() == Network.GuestType.Shared)) {
+                //including the ip of the vm and the ipAlias
+                if (_nicsDao.listByNetworkIdTypeAndGatewayAndBroadcastUri(nic.getNetworkId(), VirtualMachine.Type.User, nic.getGateway(), nic.getBroadcastUri()).size() > 1) {
+                    copyOfnicList.remove(nic);
+                }
+            } else {
+                copyOfnicList.remove(nic);
+            }
+        }
+        return copyOfnicList;
+    }
+
     protected boolean checkVmOnHost(VirtualMachine vm, long hostId) throws AgentUnavailableException, OperationTimedoutException {
         CheckVirtualMachineAnswer answer = (CheckVirtualMachineAnswer) _agentMgr.send(hostId, new CheckVirtualMachineCommand(vm.getInstanceName()));
         if (!answer.getResult() || answer.getState() == State.Stopped) {

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/d73bb228/server/test/com/cloud/network/MockNetworkManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/test/com/cloud/network/MockNetworkManagerImpl.java b/server/test/com/cloud/network/MockNetworkManagerImpl.java
index 9c7d092..4577d0a 100755
--- a/server/test/com/cloud/network/MockNetworkManagerImpl.java
+++ b/server/test/com/cloud/network/MockNetworkManagerImpl.java
@@ -908,6 +908,11 @@ public class MockNetworkManagerImpl extends ManagerBase implements NetworkManage
     }
 
     @Override
+    public Map<Network.Capability, String> getNetworkOfferingServiceCapabilities(NetworkOffering offering, Service service) {
+        return null;  //To change body of implemented methods use File | Settings | File Templates.
+    }
+
+    @Override
     public String allocatePublicIpForGuestNic(Long networkId, DataCenter dc,
             Pod pod, Account caller, String requestedIp)
             throws InsufficientAddressCapacityException {

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/d73bb228/server/test/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImplTest.java
----------------------------------------------------------------------
diff --git a/server/test/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImplTest.java b/server/test/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImplTest.java
index 04a3601..071f658 100644
--- a/server/test/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImplTest.java
+++ b/server/test/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImplTest.java
@@ -18,11 +18,21 @@
 package com.cloud.network.router;
 
 
+import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.anyLong;
+import static org.mockito.Matchers.anyString;
 import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.mockingDetails;
 import static org.mockito.Mockito.when;
 
 import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Map;
 
+import com.cloud.configuration.ZoneConfig;
+import com.cloud.network.Network;
+import com.cloud.network.NetworkModel;
+import com.cloud.vm.VirtualMachine;
 import org.apache.log4j.Logger;
 import org.junit.Assert;
 import org.junit.Before;
@@ -58,7 +68,10 @@ public class VpcVirtualNetworkApplianceManagerImplTest {
     @Mock VpcDao _vpcDao;
     @Mock VirtualRouter router;
     @Mock NicDao _nicDao;
-    @Mock DomainRouterDao _routerDao; 
+    @Mock DomainRouterDao _routerDao;
+    @Mock NetworkModel _networkmodel;
+    @Mock NicVO nicVO;
+    @Mock DataCenterVO dcVO;
 
     @Before
     public void setup() {
@@ -79,20 +92,28 @@ public class VpcVirtualNetworkApplianceManagerImplTest {
         VpcVO vpc = new VpcVO(1L,"bla","bla",1L,1L,1L,"10.0.0.0/8","blieb.net");
         when( _vpcDao.findById(1L)).thenReturn(vpc);
         DataCenterVO dcVo = new DataCenterVO(1L,"dc","dc","8.8.8.8",null,null,null,"10.0.0.0/8","bla.net",new Long(1L),NetworkType.Advanced,null,".net");
-        when( _dcDao.findById(1L) ).thenReturn(dcVo);
+        Map<String, String> map = new HashMap<String, String>();
+        dcVo.setDetails(map);
+        dcVo.setDetail(ZoneConfig.DnsSearchOrder.getName(), "dummy");
+        when(_dcDao.findById(1L)).thenReturn(dcVo);
         DomainRouterVO routerVo = new DomainRouterVO(1L,1L,1L,"brr",1L,HypervisorType.Any,1L,1L,1L,false,0,false,RedundantState.MASTER,false,false,1L);
         when( _routerDao.findById(1L)).thenReturn(routerVo);
 //        when( vpcVirtNetAppMgr.getRouterControlIp(1L)).thenReturn("10.0.0.1");
         when( router.getInstanceName()).thenReturn("r-vm-1");
         when( router.getPublicIpAddress()).thenReturn("11.11.11.11");
-        when( _nicDao.listByVmId(1L)).thenReturn(new ArrayList<NicVO>());
+        NicVO nicvo = new NicVO("server", 1l, 1l, VirtualMachine.Type.DomainRouter);
+        nicvo.setNetworkId(1l);
+        when(_nicDao.findByIp4AddressAndVmId(anyString(), anyLong())).thenReturn(nicvo);
         NetworkManager netMgr = mock(NetworkManager.class);
         vpcVirtNetAppMgr._networkMgr = netMgr;
-
+        vpcVirtNetAppMgr._networkModel = _networkmodel;
+        when(nicVO.getNetworkId()).thenReturn(1l);
+        when(_networkmodel.isProviderSupportServiceInNetwork(1l, Network.Service.Dhcp, Network.Provider.VirtualRouter)).thenReturn(true);
+        when(dcVO.getDetail(anyString())).thenReturn(null);
         Commands cmds = new Commands(OnError.Stop);
 
         vpcVirtNetAppMgr.configDnsMasq(router, cmds);
-        Assert.assertEquals("expected one command",1,cmds.size());
+        Assert.assertEquals("expected one command",1, cmds.size());
         
         DnsMasqConfigCommand cmd = cmds.getCommand(DnsMasqConfigCommand.class);
     }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/d73bb228/server/test/com/cloud/vpc/MockNetworkManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/test/com/cloud/vpc/MockNetworkManagerImpl.java b/server/test/com/cloud/vpc/MockNetworkManagerImpl.java
index 523dfb8..fd61bc6 100644
--- a/server/test/com/cloud/vpc/MockNetworkManagerImpl.java
+++ b/server/test/com/cloud/vpc/MockNetworkManagerImpl.java
@@ -1382,6 +1382,11 @@ public class MockNetworkManagerImpl extends ManagerBase implements NetworkManage
         return null;
     }
 
+    @Override
+    public Map<Network.Capability, String> getNetworkOfferingServiceCapabilities(NetworkOffering offering, Service service) {
+        return null;  //To change body of implemented methods use File | Settings | File Templates.
+    }
+
 
     @Override
     public String allocatePublicIpForGuestNic(Long networkId, DataCenter dc,

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/d73bb228/utils/conf/db.properties
----------------------------------------------------------------------
diff --git a/utils/conf/db.properties b/utils/conf/db.properties
index e1b5fe9..903cf71 100644
--- a/utils/conf/db.properties
+++ b/utils/conf/db.properties
@@ -25,7 +25,7 @@ region.id=1
 # CloudStack database settings
 db.cloud.username=cloud
 db.cloud.password=cloud
-db.root.password=
+db.root.password=root
 db.cloud.host=localhost
 db.cloud.port=3306
 db.cloud.name=cloud

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/d73bb228/utils/src/com/cloud/utils/net/NetUtils.java
----------------------------------------------------------------------
diff --git a/utils/src/com/cloud/utils/net/NetUtils.java b/utils/src/com/cloud/utils/net/NetUtils.java
index 68f4965..05b485b 100755
--- a/utils/src/com/cloud/utils/net/NetUtils.java
+++ b/utils/src/com/cloud/utils/net/NetUtils.java
@@ -797,13 +797,20 @@ public class NetUtils {
         return new Pair<String, Integer>(tokens[0], Integer.parseInt(tokens[1]));
     }
 
-    public static int isNetowrkASubsetOrSupersetOfNetworkB (String cidrA, String cidrB) {
+    public  static enum supersetOrSubset {
+        isSuperset,
+        isSubset,
+        neitherSubetNorSuperset,
+        sameSubnet,
+        errorInCidrFormat
+    }
+    public static supersetOrSubset isNetowrkASubsetOrSupersetOfNetworkB (String cidrA, String cidrB) {
         Long[] cidrALong = cidrToLong(cidrA);
         Long[] cidrBLong = cidrToLong(cidrB);
         long shift =0;
         if (cidrALong == null || cidrBLong == null) {
             //implies error in the cidr format
-            return -1;
+            return supersetOrSubset.errorInCidrFormat;
         }
         if (cidrALong[1] >= cidrBLong[1]) {
             shift = 32 - cidrBLong[1];
@@ -815,17 +822,17 @@ public class NetUtils {
         if (result == 0) {
             if (cidrALong[1] < cidrBLong[1]) {
                 //this implies cidrA is super set of cidrB
-                return 1;
+                return supersetOrSubset.isSuperset;
             }
             else if (cidrALong[1] == cidrBLong[1]) {
              //this implies both the cidrs are equal
-                return 3;
+                return supersetOrSubset.sameSubnet;
             }
             // implies cidrA is subset of cidrB
-            return 2;
+            return supersetOrSubset.isSubset;
         }
         //this implies no overlap.
-        return 0;
+        return supersetOrSubset.neitherSubetNorSuperset;
     }
 
     public static boolean isNetworkAWithinNetworkB(String cidrA, String cidrB) {


[21/50] [abbrv] git commit: updated refs/heads/ldapplugin to 7bc705e

Posted by ch...@apache.org.
CLOUDSTACK-3514: [Automation] Vmware - Failed to download default template for first zone

Description:

    Fixing reference to null object.


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

Branch: refs/heads/ldapplugin
Commit: fff763ef81be0478d48bf826434fc15ae9df1032
Parents: 43ebb1c
Author: Vijayendra Bhamidipati <vi...@citrix.com>
Authored: Mon Jul 15 11:54:34 2013 -0700
Committer: Sheng Yang <sh...@citrix.com>
Committed: Tue Jul 16 16:14:51 2013 -0700

----------------------------------------------------------------------
 server/src/com/cloud/resourcelimit/ResourceLimitManagerImpl.java | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/fff763ef/server/src/com/cloud/resourcelimit/ResourceLimitManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/resourcelimit/ResourceLimitManagerImpl.java b/server/src/com/cloud/resourcelimit/ResourceLimitManagerImpl.java
index 9ec27bd..5a9d360 100755
--- a/server/src/com/cloud/resourcelimit/ResourceLimitManagerImpl.java
+++ b/server/src/com/cloud/resourcelimit/ResourceLimitManagerImpl.java
@@ -812,7 +812,9 @@ public class ResourceLimitManagerImpl extends ManagerBase implements ResourceLim
         _resourceCountDao.lockRows(sc, null, true);
 
         ResourceCountVO accountRC = _resourceCountDao.findByOwnerAndType(accountId, ResourceOwnerType.Account, type);
-        long oldCount = accountRC.getCount();
+        long oldCount = 0;
+        if (accountRC != null)
+            oldCount = accountRC.getCount();
 
         if (type == Resource.ResourceType.user_vm) {
             newCount = _userVmDao.countAllocatedVMsForAccount(accountId);


[11/50] [abbrv] UserContext switched to CallContext. Added generic storage mechanism for other code to carry information throughout a call. Made the calling User and Account a must have. Added an interface to carry entities in error. Fixed up the cod

Posted by ch...@apache.org.
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/user/loadbalancer/CreateLoadBalancerRuleCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/CreateLoadBalancerRuleCmd.java b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/CreateLoadBalancerRuleCmd.java
index 8e15a6a..f7a0285 100644
--- a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/CreateLoadBalancerRuleCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/CreateLoadBalancerRuleCmd.java
@@ -30,6 +30,8 @@ import org.apache.cloudstack.api.response.IPAddressResponse;
 import org.apache.cloudstack.api.response.LoadBalancerResponse;
 import org.apache.cloudstack.api.response.NetworkResponse;
 import org.apache.cloudstack.api.response.ZoneResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.dc.DataCenter;
@@ -44,7 +46,6 @@ import com.cloud.network.IpAddress;
 import com.cloud.network.Network;
 import com.cloud.network.rules.LoadBalancer;
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
 import com.cloud.utils.net.NetUtils;
 
 @APICommand(name = "createLoadBalancerRule", description="Creates a load balancer rule", responseObject=LoadBalancerResponse.class)
@@ -237,14 +238,14 @@ public class CreateLoadBalancerRuleCmd extends BaseAsyncCreateCmd  /*implements
     @Override
     public void execute() throws ResourceAllocationException, ResourceUnavailableException {
 
-        UserContext callerContext = UserContext.current();
+        CallContext callerContext = CallContext.current();
         boolean success = true;
         LoadBalancer rule = null;
         try {
-            UserContext.current().setEventDetails("Rule Id: " + getEntityId());
+            CallContext.current().setEventDetails("Rule Id: " + getEntityId());
 
             if (getOpenFirewall()) {
-                success = success && _firewallService.applyIngressFirewallRules(getSourceIpAddressId(), callerContext.getCaller());
+                success = success && _firewallService.applyIngressFirewallRules(getSourceIpAddressId(), callerContext.getCallingAccount());
             }
 
             // State might be different after the rule is applied, so get new object here
@@ -327,7 +328,7 @@ public class CreateLoadBalancerRuleCmd extends BaseAsyncCreateCmd  /*implements
         if (domainId != null) {
             return domainId;
         }
-        return UserContext.current().getCaller().getDomainId();
+        return CallContext.current().getCallingAccount().getDomainId();
     }
 
     public int getDefaultPortStart() {

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/user/loadbalancer/DeleteApplicationLoadBalancerCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/DeleteApplicationLoadBalancerCmd.java b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/DeleteApplicationLoadBalancerCmd.java
index 5c83df1..ae41e75 100644
--- a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/DeleteApplicationLoadBalancerCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/DeleteApplicationLoadBalancerCmd.java
@@ -25,12 +25,13 @@ import org.apache.cloudstack.api.Parameter;
 import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.FirewallRuleResponse;
 import org.apache.cloudstack.api.response.SuccessResponse;
+import org.apache.cloudstack.context.CallContext;
 import org.apache.cloudstack.network.lb.ApplicationLoadBalancerRule;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.event.EventTypes;
 import com.cloud.exception.InvalidParameterValueException;
-import com.cloud.user.UserContext;
 
 @APICommand(name = "deleteLoadBalancer", description="Deletes a load balancer", responseObject=SuccessResponse.class, since="4.2.0")
 public class DeleteApplicationLoadBalancerCmd extends BaseAsyncCmd {
@@ -84,7 +85,7 @@ public class DeleteApplicationLoadBalancerCmd extends BaseAsyncCmd {
 
     @Override
     public void execute(){
-        UserContext.current().setEventDetails("Load balancer Id: " + getId());
+        CallContext.current().setEventDetails("Load balancer Id: " + getId());
         boolean result = _appLbService.deleteApplicationLoadBalancer(getId());
 
         if (result) {

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/user/loadbalancer/DeleteLBHealthCheckPolicyCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/DeleteLBHealthCheckPolicyCmd.java b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/DeleteLBHealthCheckPolicyCmd.java
index bf91da5..1d4b88e 100644
--- a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/DeleteLBHealthCheckPolicyCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/DeleteLBHealthCheckPolicyCmd.java
@@ -17,6 +17,7 @@
 package org.apache.cloudstack.api.command.user.loadbalancer;
 
 import org.apache.cloudstack.api.response.LBHealthCheckResponse;
+
 import org.apache.log4j.Logger;
 
 import org.apache.cloudstack.api.ApiConstants;
@@ -26,12 +27,13 @@ import org.apache.cloudstack.api.APICommand;
 import org.apache.cloudstack.api.Parameter;
 import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.SuccessResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import com.cloud.event.EventTypes;
 import com.cloud.exception.InvalidParameterValueException;
 import com.cloud.network.rules.HealthCheckPolicy;
 import com.cloud.network.rules.LoadBalancer;
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
 
 @APICommand(name = "deleteLBHealthCheckPolicy", description = "Deletes a load balancer HealthCheck policy.", responseObject = SuccessResponse.class, since="4.2.0")
 public class DeleteLBHealthCheckPolicyCmd extends BaseAsyncCmd {
@@ -64,7 +66,7 @@ public class DeleteLBHealthCheckPolicyCmd extends BaseAsyncCmd {
 
     @Override
     public long getEntityOwnerId() {
-        Account account = UserContext.current().getCaller();
+        Account account = CallContext.current().getCallingAccount();
         if (account != null) {
             return account.getId();
         }
@@ -84,7 +86,7 @@ public class DeleteLBHealthCheckPolicyCmd extends BaseAsyncCmd {
 
     @Override
     public void execute() {
-        UserContext.current().setEventDetails("Load balancer healthcheck policy Id: " + getId());
+        CallContext.current().setEventDetails("Load balancer healthcheck policy Id: " + getId());
         boolean result = _lbService.deleteLBHealthCheckPolicy(getId() , true);
 
         if (result) {

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/user/loadbalancer/DeleteLBStickinessPolicyCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/DeleteLBStickinessPolicyCmd.java b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/DeleteLBStickinessPolicyCmd.java
index fc7be24..ba2df96 100644
--- a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/DeleteLBStickinessPolicyCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/DeleteLBStickinessPolicyCmd.java
@@ -24,6 +24,8 @@ import org.apache.cloudstack.api.Parameter;
 import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.LBStickinessResponse;
 import org.apache.cloudstack.api.response.SuccessResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.event.EventTypes;
@@ -31,7 +33,6 @@ import com.cloud.exception.InvalidParameterValueException;
 import com.cloud.network.rules.LoadBalancer;
 import com.cloud.network.rules.StickinessPolicy;
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
 
 @APICommand(name = "deleteLBStickinessPolicy", description = "Deletes a LB stickiness policy.", responseObject = SuccessResponse.class, since="3.0.0")
 public class DeleteLBStickinessPolicyCmd extends BaseAsyncCmd {
@@ -64,7 +65,7 @@ public class DeleteLBStickinessPolicyCmd extends BaseAsyncCmd {
 
     @Override
     public long getEntityOwnerId() {
-        Account account = UserContext.current().getCaller();
+        Account account = CallContext.current().getCallingAccount();
         if (account != null) {
             return account.getId();
         }
@@ -84,7 +85,7 @@ public class DeleteLBStickinessPolicyCmd extends BaseAsyncCmd {
 
     @Override
     public void execute() {
-        UserContext.current().setEventDetails("Load balancer stickiness policy Id: " + getId());
+        CallContext.current().setEventDetails("Load balancer stickiness policy Id: " + getId());
         boolean result = _lbService.deleteLBStickinessPolicy(getId(), true);
 
         if (result) {

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/user/loadbalancer/DeleteLoadBalancerRuleCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/DeleteLoadBalancerRuleCmd.java b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/DeleteLoadBalancerRuleCmd.java
index 0e72d67..5afc3b3 100644
--- a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/DeleteLoadBalancerRuleCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/DeleteLoadBalancerRuleCmd.java
@@ -25,13 +25,14 @@ import org.apache.cloudstack.api.Parameter;
 import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.FirewallRuleResponse;
 import org.apache.cloudstack.api.response.SuccessResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.event.EventTypes;
 import com.cloud.exception.InvalidParameterValueException;
 import com.cloud.network.rules.LoadBalancer;
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
 
 @APICommand(name = "deleteLoadBalancerRule", description="Deletes a load balancer rule.", responseObject=SuccessResponse.class)
 public class DeleteLoadBalancerRuleCmd extends BaseAsyncCmd {
@@ -85,7 +86,7 @@ public class DeleteLoadBalancerRuleCmd extends BaseAsyncCmd {
 
     @Override
     public void execute(){
-        UserContext.current().setEventDetails("Load balancer Id: "+getId());
+        CallContext.current().setEventDetails("Load balancer Id: "+getId());
         boolean result = _firewallService.revokeRelatedFirewallRule(id, true);
         result = result && _lbService.deleteLoadBalancerRule(id, true);
 

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/user/loadbalancer/ListLBHealthCheckPoliciesCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/ListLBHealthCheckPoliciesCmd.java b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/ListLBHealthCheckPoliciesCmd.java
index cf5ea32..1c43d56 100644
--- a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/ListLBHealthCheckPoliciesCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/ListLBHealthCheckPoliciesCmd.java
@@ -21,6 +21,7 @@ import java.util.List;
 
 import org.apache.cloudstack.api.APICommand;
 import org.apache.cloudstack.api.response.FirewallRuleResponse;
+
 import org.apache.log4j.Logger;
 
 import org.apache.cloudstack.api.ApiConstants;
@@ -29,11 +30,11 @@ import org.apache.cloudstack.api.Parameter;
 import org.apache.cloudstack.api.response.LBHealthCheckResponse;
 import org.apache.cloudstack.api.response.LBStickinessResponse;
 import org.apache.cloudstack.api.response.ListResponse;
+import org.apache.cloudstack.context.CallContext;
 
 import com.cloud.network.rules.HealthCheckPolicy;
 import com.cloud.network.rules.LoadBalancer;
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
 
 @APICommand(name = "listLBHealthCheckPolicies", description = "Lists load balancer HealthCheck policies.", responseObject = LBHealthCheckResponse.class, since="4.2.0")
 public class ListLBHealthCheckPoliciesCmd extends BaseListCmd {

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/user/loadbalancer/ListLBStickinessPoliciesCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/ListLBStickinessPoliciesCmd.java b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/ListLBStickinessPoliciesCmd.java
index 9456a15..f71b721 100644
--- a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/ListLBStickinessPoliciesCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/ListLBStickinessPoliciesCmd.java
@@ -26,12 +26,13 @@ import org.apache.cloudstack.api.Parameter;
 import org.apache.cloudstack.api.response.FirewallRuleResponse;
 import org.apache.cloudstack.api.response.LBStickinessResponse;
 import org.apache.cloudstack.api.response.ListResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.network.rules.LoadBalancer;
 import com.cloud.network.rules.StickinessPolicy;
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
 
 @APICommand(name = "listLBStickinessPolicies", description = "Lists LBStickiness policies.", responseObject = LBStickinessResponse.class, since="3.0.0")
 public class ListLBStickinessPoliciesCmd extends BaseListCmd {
@@ -71,7 +72,7 @@ public class ListLBStickinessPoliciesCmd extends BaseListCmd {
 
         if (lb != null) {
             //check permissions
-            Account caller = UserContext.current().getCaller();
+            Account caller = CallContext.current().getCallingAccount();
             _accountService.checkAccess(caller, null, true, lb);
             List<? extends StickinessPolicy> stickinessPolicies = _lbService.searchForLBStickinessPolicies(this);
             LBStickinessResponse spResponse = _responseGenerator.createLBStickinessPolicyResponse(stickinessPolicies, lb);

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/user/loadbalancer/RemoveFromLoadBalancerRuleCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/RemoveFromLoadBalancerRuleCmd.java b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/RemoveFromLoadBalancerRuleCmd.java
index 92a05d6..b7ec4d1 100644
--- a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/RemoveFromLoadBalancerRuleCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/RemoveFromLoadBalancerRuleCmd.java
@@ -27,13 +27,14 @@ import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.FirewallRuleResponse;
 import org.apache.cloudstack.api.response.SuccessResponse;
 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.InvalidParameterValueException;
 import com.cloud.network.rules.LoadBalancer;
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
 import com.cloud.utils.StringUtils;
 
 @APICommand(name = "removeFromLoadBalancerRule", description="Removes a virtual machine or a list of virtual machines from a load balancer rule.", responseObject=SuccessResponse.class)
@@ -96,7 +97,7 @@ public class RemoveFromLoadBalancerRuleCmd extends BaseAsyncCmd {
 
     @Override
     public void execute(){
-        UserContext.current().setEventDetails("Load balancer Id: "+getId()+" VmIds: "+StringUtils.join(getVirtualMachineIds(), ","));
+        CallContext.current().setEventDetails("Load balancer Id: "+getId()+" VmIds: "+StringUtils.join(getVirtualMachineIds(), ","));
         boolean result = _lbService.removeFromLoadBalancer(id, virtualMachineIds);
         if (result) {
             SuccessResponse response = new SuccessResponse(getCommandName());

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/user/loadbalancer/UpdateLoadBalancerRuleCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/UpdateLoadBalancerRuleCmd.java b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/UpdateLoadBalancerRuleCmd.java
index c296057..2fd9427 100644
--- a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/UpdateLoadBalancerRuleCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/UpdateLoadBalancerRuleCmd.java
@@ -24,12 +24,13 @@ import org.apache.cloudstack.api.Parameter;
 import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.FirewallRuleResponse;
 import org.apache.cloudstack.api.response.LoadBalancerResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.event.EventTypes;
 import com.cloud.network.rules.LoadBalancer;
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
 
 @APICommand(name = "updateLoadBalancerRule", description="Updates load balancer", responseObject=LoadBalancerResponse.class)
 public class UpdateLoadBalancerRuleCmd extends BaseAsyncCmd {
@@ -103,7 +104,7 @@ public class UpdateLoadBalancerRuleCmd extends BaseAsyncCmd {
 
     @Override
     public void execute(){
-        UserContext.current().setEventDetails("Load balancer Id: "+getId());
+        CallContext.current().setEventDetails("Load balancer Id: "+getId());
         LoadBalancer result = _lbService.updateLoadBalancerRule(this);
         if (result != null){
             LoadBalancerResponse response = _responseGenerator.createLoadBalancerResponse(result);

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/user/nat/CreateIpForwardingRuleCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/nat/CreateIpForwardingRuleCmd.java b/api/src/org/apache/cloudstack/api/command/user/nat/CreateIpForwardingRuleCmd.java
index 354f3e9..39790fa 100644
--- a/api/src/org/apache/cloudstack/api/command/user/nat/CreateIpForwardingRuleCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/nat/CreateIpForwardingRuleCmd.java
@@ -29,6 +29,8 @@ import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.FirewallRuleResponse;
 import org.apache.cloudstack.api.response.IPAddressResponse;
 import org.apache.cloudstack.api.response.IpForwardingRuleResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.event.EventTypes;
@@ -39,7 +41,6 @@ import com.cloud.network.IpAddress;
 import com.cloud.network.rules.FirewallRule;
 import com.cloud.network.rules.StaticNatRule;
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
 
 @APICommand(name = "createIpForwardingRule", description="Creates an ip forwarding rule", responseObject=FirewallRuleResponse.class)
 public class CreateIpForwardingRuleCmd extends BaseAsyncCreateCmd implements StaticNatRule {
@@ -111,13 +112,13 @@ public class CreateIpForwardingRuleCmd extends BaseAsyncCreateCmd implements Sta
         boolean result = true;
         FirewallRule rule = null;
         try {
-            UserContext.current().setEventDetails("Rule Id: "+ getEntityId());
+            CallContext.current().setEventDetails("Rule Id: "+ getEntityId());
 
             if (getOpenFirewall()) {
-                result = result && _firewallService.applyIngressFirewallRules(ipAddressId, UserContext.current().getCaller());
+                result = result && _firewallService.applyIngressFirewallRules(ipAddressId, CallContext.current().getCallingAccount());
             }
 
-            result = result && _rulesService.applyStaticNatRules(ipAddressId, UserContext.current().getCaller());
+            result = result && _rulesService.applyStaticNatRules(ipAddressId, CallContext.current().getCallingAccount());
             rule = _entityMgr.findById(FirewallRule.class, getEntityId());
             StaticNatRule staticNatRule = _rulesService.buildStaticNatRule(rule, false);
             IpForwardingRuleResponse fwResponse = _responseGenerator.createIpForwardingRuleResponse(staticNatRule);
@@ -157,7 +158,7 @@ public class CreateIpForwardingRuleCmd extends BaseAsyncCreateCmd implements Sta
 
     @Override
     public long getEntityOwnerId() {
-        Account account = UserContext.current().getCaller();
+        Account account = CallContext.current().getCallingAccount();
 
         if (account != null) {
             return account.getId();

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/user/nat/DeleteIpForwardingRuleCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/nat/DeleteIpForwardingRuleCmd.java b/api/src/org/apache/cloudstack/api/command/user/nat/DeleteIpForwardingRuleCmd.java
index f2b0b9b..fe41028 100644
--- a/api/src/org/apache/cloudstack/api/command/user/nat/DeleteIpForwardingRuleCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/nat/DeleteIpForwardingRuleCmd.java
@@ -26,12 +26,13 @@ import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.AccountResponse;
 import org.apache.cloudstack.api.response.FirewallRuleResponse;
 import org.apache.cloudstack.api.response.SuccessResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.event.EventTypes;
 import com.cloud.exception.InvalidParameterValueException;
 import com.cloud.network.rules.FirewallRule;
-import com.cloud.user.UserContext;
 
 @APICommand(name = "deleteIpForwardingRule", description="Deletes an ip forwarding rule", responseObject=SuccessResponse.class)
 public class DeleteIpForwardingRuleCmd extends BaseAsyncCmd {
@@ -70,7 +71,7 @@ public class DeleteIpForwardingRuleCmd extends BaseAsyncCmd {
 
     @Override
     public void execute(){
-        UserContext.current().setEventDetails("Rule Id: "+id);
+        CallContext.current().setEventDetails("Rule Id: "+id);
         boolean result = _firewallService.revokeRelatedFirewallRule(id, true);
         result = result && _rulesService.revokeStaticNatRule(id, true);
 

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/user/network/CreateNetworkACLCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/network/CreateNetworkACLCmd.java b/api/src/org/apache/cloudstack/api/command/user/network/CreateNetworkACLCmd.java
index 3a56fe4..02c6cd8 100644
--- a/api/src/org/apache/cloudstack/api/command/user/network/CreateNetworkACLCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/network/CreateNetworkACLCmd.java
@@ -21,6 +21,7 @@ import java.util.List;
 
 import com.cloud.network.vpc.NetworkACL;
 import com.cloud.network.vpc.NetworkACLItem;
+
 import org.apache.cloudstack.api.APICommand;
 import org.apache.cloudstack.api.ApiConstants;
 import org.apache.cloudstack.api.ApiErrorCode;
@@ -31,6 +32,8 @@ import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.NetworkACLItemResponse;
 import org.apache.cloudstack.api.response.NetworkACLResponse;
 import org.apache.cloudstack.api.response.NetworkResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.commons.lang.StringUtils;
 import org.apache.log4j.Logger;
 
@@ -42,7 +45,6 @@ import com.cloud.exception.ResourceUnavailableException;
 import com.cloud.network.Network;
 import com.cloud.network.vpc.Vpc;
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
 import com.cloud.utils.net.NetUtils;
 
 @APICommand(name = "createNetworkACL", description = "Creates a ACL rule in the given network (the network has to belong to VPC)",
@@ -171,7 +173,7 @@ public class CreateNetworkACLCmd extends BaseAsyncCreateCmd {
 
     @Override
     public long getEntityOwnerId() {
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
         return caller.getAccountId();
     }
 
@@ -220,7 +222,7 @@ public class CreateNetworkACLCmd extends BaseAsyncCreateCmd {
         boolean success = false;
         NetworkACLItem rule = _networkACLService.getNetworkACLItem(getEntityId());
         try {
-            UserContext.current().setEventDetails("Rule Id: " + getEntityId());
+            CallContext.current().setEventDetails("Rule Id: " + getEntityId());
             success = _networkACLService.applyNetworkACL(rule.getAclId());
 
             // State is different after the rule is applied, so get new object here

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/user/network/CreateNetworkACLListCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/network/CreateNetworkACLListCmd.java b/api/src/org/apache/cloudstack/api/command/user/network/CreateNetworkACLListCmd.java
index 591a354..d587fe5 100644
--- a/api/src/org/apache/cloudstack/api/command/user/network/CreateNetworkACLListCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/network/CreateNetworkACLListCmd.java
@@ -22,7 +22,7 @@ import com.cloud.exception.ResourceUnavailableException;
 import com.cloud.network.vpc.NetworkACL;
 import com.cloud.network.vpc.Vpc;
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
+
 import org.apache.cloudstack.api.APICommand;
 import org.apache.cloudstack.api.ApiConstants;
 import org.apache.cloudstack.api.ApiErrorCode;
@@ -31,6 +31,8 @@ import org.apache.cloudstack.api.Parameter;
 import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.NetworkACLResponse;
 import org.apache.cloudstack.api.response.VpcResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 @APICommand(name = "createNetworkACLList", description = "Creates a Network ACL for the given VPC",

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/user/network/CreateNetworkCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/network/CreateNetworkCmd.java b/api/src/org/apache/cloudstack/api/command/user/network/CreateNetworkCmd.java
index 445c4ed..c926d81 100644
--- a/api/src/org/apache/cloudstack/api/command/user/network/CreateNetworkCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/network/CreateNetworkCmd.java
@@ -23,6 +23,8 @@ import org.apache.cloudstack.api.BaseCmd;
 import org.apache.cloudstack.api.Parameter;
 import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.*;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.exception.ConcurrentOperationException;
@@ -32,7 +34,6 @@ import com.cloud.exception.ResourceAllocationException;
 import com.cloud.network.Network;
 import com.cloud.network.Network.GuestType;
 import com.cloud.offering.NetworkOffering;
-import com.cloud.user.UserContext;
 
 @APICommand(name = "createNetwork", description="Creates a network", responseObject=NetworkResponse.class)
 public class CreateNetworkCmd extends BaseCmd {
@@ -274,7 +275,7 @@ public class CreateNetworkCmd extends BaseCmd {
     public long getEntityOwnerId() {
         Long accountId = finalyzeAccountId(accountName, domainId, projectId, true);
         if (accountId == null) {
-            return UserContext.current().getCaller().getId();
+            return CallContext.current().getCallingAccount().getId();
         }
 
         return accountId;

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/user/network/DeleteNetworkACLCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/network/DeleteNetworkACLCmd.java b/api/src/org/apache/cloudstack/api/command/user/network/DeleteNetworkACLCmd.java
index d35b22c..94bf50a 100644
--- a/api/src/org/apache/cloudstack/api/command/user/network/DeleteNetworkACLCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/network/DeleteNetworkACLCmd.java
@@ -18,6 +18,7 @@ package org.apache.cloudstack.api.command.user.network;
 
 import com.cloud.network.vpc.NetworkACLItem;
 import com.cloud.user.Account;
+
 import org.apache.cloudstack.api.APICommand;
 import org.apache.cloudstack.api.ApiConstants;
 import org.apache.cloudstack.api.ApiErrorCode;
@@ -28,6 +29,8 @@ import org.apache.cloudstack.api.response.AccountResponse;
 import org.apache.cloudstack.api.response.FirewallRuleResponse;
 import org.apache.cloudstack.api.response.NetworkACLItemResponse;
 import org.apache.cloudstack.api.response.SuccessResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.async.AsyncJob;
@@ -35,7 +38,6 @@ import com.cloud.event.EventTypes;
 import com.cloud.exception.InvalidParameterValueException;
 import com.cloud.exception.ResourceUnavailableException;
 import com.cloud.network.rules.FirewallRule;
-import com.cloud.user.UserContext;
 
 @APICommand(name = "deleteNetworkACL", description="Deletes a Network ACL", responseObject=SuccessResponse.class)
 public class DeleteNetworkACLCmd extends BaseAsyncCmd {
@@ -78,13 +80,13 @@ public class DeleteNetworkACLCmd extends BaseAsyncCmd {
 
     @Override
     public long getEntityOwnerId() {
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
         return caller.getAccountId();
     }
 
     @Override
     public void execute() throws ResourceUnavailableException {
-        UserContext.current().setEventDetails("Network ACL Item Id: " + id);
+        CallContext.current().setEventDetails("Network ACL Item Id: " + id);
         boolean result = _networkACLService.revokeNetworkACLItem(id);
 
         if (result) {

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/user/network/DeleteNetworkACLListCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/network/DeleteNetworkACLListCmd.java b/api/src/org/apache/cloudstack/api/command/user/network/DeleteNetworkACLListCmd.java
index 379b44a..bbfe908 100644
--- a/api/src/org/apache/cloudstack/api/command/user/network/DeleteNetworkACLListCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/network/DeleteNetworkACLListCmd.java
@@ -24,12 +24,14 @@ import com.cloud.network.rules.FirewallRule;
 import com.cloud.network.vpc.NetworkACL;
 import com.cloud.network.vpc.Vpc;
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
+
 import org.apache.cloudstack.api.*;
 import org.apache.cloudstack.api.response.AccountResponse;
 import org.apache.cloudstack.api.response.FirewallRuleResponse;
 import org.apache.cloudstack.api.response.NetworkACLResponse;
 import org.apache.cloudstack.api.response.SuccessResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 @APICommand(name = "deleteNetworkACLList", description="Deletes a Network ACL", responseObject=SuccessResponse.class)
@@ -73,13 +75,13 @@ public class DeleteNetworkACLListCmd extends BaseAsyncCmd {
 
     @Override
     public long getEntityOwnerId() {
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
         return caller.getAccountId();
     }
 
     @Override
     public void execute() throws ResourceUnavailableException {
-        UserContext.current().setEventDetails("Network ACL Id: " + id);
+        CallContext.current().setEventDetails("Network ACL Id: " + id);
         boolean result = _networkACLService.deleteNetworkACL(id);
 
         if (result) {

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/user/network/DeleteNetworkCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/network/DeleteNetworkCmd.java b/api/src/org/apache/cloudstack/api/command/user/network/DeleteNetworkCmd.java
index 954146e..6e1b380 100644
--- a/api/src/org/apache/cloudstack/api/command/user/network/DeleteNetworkCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/network/DeleteNetworkCmd.java
@@ -25,12 +25,13 @@ import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.command.admin.network.DeleteNetworkOfferingCmd;
 import org.apache.cloudstack.api.response.NetworkResponse;
 import org.apache.cloudstack.api.response.SuccessResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.event.EventTypes;
 import com.cloud.exception.InvalidParameterValueException;
 import com.cloud.network.Network;
-import com.cloud.user.UserContext;
 
 @APICommand(name = "deleteNetwork", description="Deletes a network", responseObject=SuccessResponse.class)
 public class DeleteNetworkCmd extends BaseAsyncCmd{
@@ -66,7 +67,7 @@ public class DeleteNetworkCmd extends BaseAsyncCmd{
 
     @Override
     public void execute(){
-        UserContext.current().setEventDetails("Network Id: " + id);
+        CallContext.current().setEventDetails("Network Id: " + id);
         boolean result = _networkService.deleteNetwork(id);
         if (result) {
             SuccessResponse response = new SuccessResponse(getCommandName());

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/user/network/ReplaceNetworkACLListCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/network/ReplaceNetworkACLListCmd.java b/api/src/org/apache/cloudstack/api/command/user/network/ReplaceNetworkACLListCmd.java
index 67f40d1..c92992c 100644
--- a/api/src/org/apache/cloudstack/api/command/user/network/ReplaceNetworkACLListCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/network/ReplaceNetworkACLListCmd.java
@@ -22,12 +22,14 @@ import com.cloud.exception.ResourceUnavailableException;
 import com.cloud.network.vpc.NetworkACL;
 import com.cloud.network.vpc.Vpc;
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
+
 import org.apache.cloudstack.api.*;
 import org.apache.cloudstack.api.response.NetworkACLResponse;
 import org.apache.cloudstack.api.response.NetworkResponse;
 import org.apache.cloudstack.api.response.PrivateGatewayResponse;
 import org.apache.cloudstack.api.response.SuccessResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 @APICommand(name = "replaceNetworkACLList", description="Replaces ACL associated with a Network or private gateway", responseObject=SuccessResponse.class)
@@ -87,7 +89,7 @@ public class ReplaceNetworkACLListCmd extends BaseAsyncCmd {
 
     @Override
     public long getEntityOwnerId() {
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
         return caller.getAccountId();
     }
 
@@ -101,7 +103,7 @@ public class ReplaceNetworkACLListCmd extends BaseAsyncCmd {
             throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Network id and private gateway can't be passed  at  the same time");
         }
 
-        UserContext.current().setEventDetails("Network ACL Id: " + aclId);
+        CallContext.current().setEventDetails("Network ACL Id: " + aclId);
         boolean result = false;
         if (getPrivateGatewayId() != null) {
             result = _networkACLService.replaceNetworkACLonPrivateGw(aclId, privateGatewayId);

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/user/network/UpdateNetworkACLItemCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/network/UpdateNetworkACLItemCmd.java b/api/src/org/apache/cloudstack/api/command/user/network/UpdateNetworkACLItemCmd.java
index 1ea815a..d7862a1 100644
--- a/api/src/org/apache/cloudstack/api/command/user/network/UpdateNetworkACLItemCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/network/UpdateNetworkACLItemCmd.java
@@ -21,12 +21,14 @@ import com.cloud.exception.InvalidParameterValueException;
 import com.cloud.exception.ResourceUnavailableException;
 import com.cloud.network.vpc.NetworkACLItem;
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
 import com.cloud.utils.net.NetUtils;
+
 import org.apache.cloudstack.api.*;
 import org.apache.cloudstack.api.response.NetworkACLItemResponse;
 import org.apache.cloudstack.api.response.NetworkACLResponse;
 import org.apache.cloudstack.api.response.NetworkResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import java.util.ArrayList;
@@ -134,7 +136,7 @@ public class UpdateNetworkACLItemCmd extends BaseAsyncCmd {
 
     @Override
     public long getEntityOwnerId() {
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
         return caller.getAccountId();
     }
 
@@ -158,7 +160,7 @@ public class UpdateNetworkACLItemCmd extends BaseAsyncCmd {
 
     @Override
     public void execute() throws ResourceUnavailableException {
-        UserContext.current().setEventDetails("Rule Id: " + getId());
+        CallContext.current().setEventDetails("Rule Id: " + getId());
         NetworkACLItem aclItem = _networkACLService.updateNetworkACLItem(getId(), getProtocol(), getSourceCidrList(), getTrafficType(),
                 getAction(), getNumber(), getSourcePortStart(), getSourcePortEnd(), getIcmpCode(), getIcmpType());
         if (aclItem == null) {

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/user/network/UpdateNetworkCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/network/UpdateNetworkCmd.java b/api/src/org/apache/cloudstack/api/command/user/network/UpdateNetworkCmd.java
index fe38124..d024e4b 100644
--- a/api/src/org/apache/cloudstack/api/command/user/network/UpdateNetworkCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/network/UpdateNetworkCmd.java
@@ -24,6 +24,8 @@ import org.apache.cloudstack.api.Parameter;
 import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.NetworkOfferingResponse;
 import org.apache.cloudstack.api.response.NetworkResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.event.EventTypes;
@@ -33,7 +35,6 @@ import com.cloud.exception.InvalidParameterValueException;
 import com.cloud.network.Network;
 import com.cloud.user.Account;
 import com.cloud.user.User;
-import com.cloud.user.UserContext;
 
 @APICommand(name = "updateNetwork", description="Updates a network", responseObject=NetworkResponse.class)
 public class UpdateNetworkCmd extends BaseAsyncCmd {
@@ -129,7 +130,7 @@ public class UpdateNetworkCmd extends BaseAsyncCmd {
 
     @Override
     public void execute() throws InsufficientCapacityException, ConcurrentOperationException{
-        User callerUser = _accountService.getActiveUser(UserContext.current().getCallerUserId());
+        User callerUser = _accountService.getActiveUser(CallContext.current().getCallingUserId());
         Account callerAccount = _accountService.getActiveAccountById(callerUser.getAccountId());
         Network network = _networkService.getNetwork(id);
         if (network == null) {

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/user/project/ActivateProjectCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/project/ActivateProjectCmd.java b/api/src/org/apache/cloudstack/api/command/user/project/ActivateProjectCmd.java
index 95889fe..1f49d8c 100644
--- a/api/src/org/apache/cloudstack/api/command/user/project/ActivateProjectCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/project/ActivateProjectCmd.java
@@ -23,12 +23,13 @@ import org.apache.cloudstack.api.BaseAsyncCmd;
 import org.apache.cloudstack.api.Parameter;
 import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.ProjectResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.event.EventTypes;
 import com.cloud.exception.InvalidParameterValueException;
 import com.cloud.projects.Project;
-import com.cloud.user.UserContext;
 
 @APICommand(name = "activateProject", description="Activates a project", responseObject=ProjectResponse.class, since="3.0.0")
 public class ActivateProjectCmd extends BaseAsyncCmd {
@@ -76,7 +77,7 @@ public class ActivateProjectCmd extends BaseAsyncCmd {
 
     @Override
     public void execute(){
-        UserContext.current().setEventDetails("Project id: "+ getId());
+        CallContext.current().setEventDetails("Project id: "+ getId());
         Project project = _projectService.activateProject(getId());
         if (project != null) {
             ProjectResponse response = _responseGenerator.createProjectResponse(project);

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/user/project/CreateProjectCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/project/CreateProjectCmd.java b/api/src/org/apache/cloudstack/api/command/user/project/CreateProjectCmd.java
index 7515f05..71c8f26 100644
--- a/api/src/org/apache/cloudstack/api/command/user/project/CreateProjectCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/project/CreateProjectCmd.java
@@ -24,6 +24,8 @@ import org.apache.cloudstack.api.Parameter;
 import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.DomainResponse;
 import org.apache.cloudstack.api.response.ProjectResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.event.EventTypes;
@@ -31,7 +33,6 @@ import com.cloud.exception.InvalidParameterValueException;
 import com.cloud.exception.ResourceAllocationException;
 import com.cloud.projects.Project;
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
 
 @APICommand(name = "createProject", description = "Creates a project", responseObject = ProjectResponse.class, since = "3.0.0")
 public class CreateProjectCmd extends BaseAsyncCreateCmd {
@@ -65,7 +66,7 @@ public class CreateProjectCmd extends BaseAsyncCreateCmd {
         if (accountName != null) {
             return accountName;
         } else {
-            return UserContext.current().getCaller().getAccountName();
+            return CallContext.current().getCallingAccount().getAccountName();
         }
     }
 
@@ -73,7 +74,7 @@ public class CreateProjectCmd extends BaseAsyncCreateCmd {
         if (domainId != null) {
             return domainId;
         } else {
-            return UserContext.current().getCaller().getDomainId();
+            return CallContext.current().getCallingAccount().getDomainId();
         }
 
     }
@@ -93,7 +94,7 @@ public class CreateProjectCmd extends BaseAsyncCreateCmd {
 
     @Override
     public long getEntityOwnerId() {
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
 
         if ((accountName != null && domainId == null) || (domainId != null && accountName == null)) {
             throw new InvalidParameterValueException("Account name and domain id must be specified together");
@@ -124,7 +125,7 @@ public class CreateProjectCmd extends BaseAsyncCreateCmd {
 
     @Override
     public void create() throws ResourceAllocationException {
-        UserContext.current().setEventDetails("Project Name: " + getName());
+        CallContext.current().setEventDetails("Project Name: " + getName());
         Project project = _projectService.createProject(getName(), getDisplayText(), getAccountName(), getDomainId());
         if (project != null) {
             this.setEntityId(project.getId());

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/user/project/DeleteProjectCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/project/DeleteProjectCmd.java b/api/src/org/apache/cloudstack/api/command/user/project/DeleteProjectCmd.java
index 9b61b69..c3208fb 100644
--- a/api/src/org/apache/cloudstack/api/command/user/project/DeleteProjectCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/project/DeleteProjectCmd.java
@@ -24,12 +24,13 @@ import org.apache.cloudstack.api.Parameter;
 import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.ProjectResponse;
 import org.apache.cloudstack.api.response.SuccessResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.event.EventTypes;
 import com.cloud.exception.InvalidParameterValueException;
 import com.cloud.projects.Project;
-import com.cloud.user.UserContext;
 
 @APICommand(name = "deleteProject", description="Deletes a project", responseObject=SuccessResponse.class, since="3.0.0")
 public class DeleteProjectCmd extends BaseAsyncCmd {
@@ -65,7 +66,7 @@ public class DeleteProjectCmd extends BaseAsyncCmd {
 
     @Override
     public void execute(){
-        UserContext.current().setEventDetails("Project Id: " + id);
+        CallContext.current().setEventDetails("Project Id: " + id);
         boolean result = _projectService.deleteProject(id);
         if (result) {
             SuccessResponse response = new SuccessResponse(getCommandName());

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/user/project/DeleteProjectInvitationCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/project/DeleteProjectInvitationCmd.java b/api/src/org/apache/cloudstack/api/command/user/project/DeleteProjectInvitationCmd.java
index 27d1b50..46eb4fd 100644
--- a/api/src/org/apache/cloudstack/api/command/user/project/DeleteProjectInvitationCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/project/DeleteProjectInvitationCmd.java
@@ -24,11 +24,12 @@ import org.apache.cloudstack.api.Parameter;
 import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.ProjectInvitationResponse;
 import org.apache.cloudstack.api.response.SuccessResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.event.EventTypes;
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
 
 @APICommand(name = "deleteProjectInvitation", description = "Accepts or declines project invitation", responseObject = SuccessResponse.class, since = "3.0.0")
 public class DeleteProjectInvitationCmd extends BaseAsyncCmd {
@@ -66,7 +67,7 @@ public class DeleteProjectInvitationCmd extends BaseAsyncCmd {
 
     @Override
     public void execute() {
-        UserContext.current().setEventDetails("Project invitation id " + id);
+        CallContext.current().setEventDetails("Project invitation id " + id);
         boolean result = _projectService.deleteProjectInvitation(id);
         if (result) {
             SuccessResponse response = new SuccessResponse(getCommandName());

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/user/project/SuspendProjectCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/project/SuspendProjectCmd.java b/api/src/org/apache/cloudstack/api/command/user/project/SuspendProjectCmd.java
index e2f4bd6..b5e59ce 100644
--- a/api/src/org/apache/cloudstack/api/command/user/project/SuspendProjectCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/project/SuspendProjectCmd.java
@@ -23,6 +23,8 @@ import org.apache.cloudstack.api.BaseAsyncCmd;
 import org.apache.cloudstack.api.Parameter;
 import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.ProjectResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.event.EventTypes;
@@ -30,7 +32,6 @@ import com.cloud.exception.ConcurrentOperationException;
 import com.cloud.exception.InvalidParameterValueException;
 import com.cloud.exception.ResourceUnavailableException;
 import com.cloud.projects.Project;
-import com.cloud.user.UserContext;
 
 @APICommand(name = "suspendProject", description="Suspends a project", responseObject=ProjectResponse.class, since="3.0.0")
 public class SuspendProjectCmd extends BaseAsyncCmd {
@@ -66,7 +67,7 @@ public class SuspendProjectCmd extends BaseAsyncCmd {
 
     @Override
     public void execute() throws ConcurrentOperationException, ResourceUnavailableException{
-        UserContext.current().setEventDetails("Project Id: " + id);
+        CallContext.current().setEventDetails("Project Id: " + id);
         Project project = _projectService.suspendProject(id);
         if (project != null) {
             ProjectResponse response = _responseGenerator.createProjectResponse(project);

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/user/project/UpdateProjectCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/project/UpdateProjectCmd.java b/api/src/org/apache/cloudstack/api/command/user/project/UpdateProjectCmd.java
index e475bc7..ac7de8d 100644
--- a/api/src/org/apache/cloudstack/api/command/user/project/UpdateProjectCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/project/UpdateProjectCmd.java
@@ -23,13 +23,14 @@ import org.apache.cloudstack.api.BaseAsyncCmd;
 import org.apache.cloudstack.api.Parameter;
 import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.ProjectResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.event.EventTypes;
 import com.cloud.exception.InvalidParameterValueException;
 import com.cloud.exception.ResourceAllocationException;
 import com.cloud.projects.Project;
-import com.cloud.user.UserContext;
 
 @APICommand(name = "updateProject", description="Updates a project", responseObject=ProjectResponse.class, since="3.0.0")
 public class UpdateProjectCmd extends BaseAsyncCmd {
@@ -90,7 +91,7 @@ public class UpdateProjectCmd extends BaseAsyncCmd {
 
     @Override
     public void execute() throws ResourceAllocationException{
-        UserContext.current().setEventDetails("Project id: "+ getId());
+        CallContext.current().setEventDetails("Project id: "+ getId());
         Project project = _projectService.updateProject(getId(), getDisplayText(), getAccountName());
         if (project != null) {
             ProjectResponse response = _responseGenerator.createProjectResponse(project);

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/user/project/UpdateProjectInvitationCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/project/UpdateProjectInvitationCmd.java b/api/src/org/apache/cloudstack/api/command/user/project/UpdateProjectInvitationCmd.java
index f34814a..3ce8890 100644
--- a/api/src/org/apache/cloudstack/api/command/user/project/UpdateProjectInvitationCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/project/UpdateProjectInvitationCmd.java
@@ -24,11 +24,12 @@ import org.apache.cloudstack.api.Parameter;
 import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.ProjectResponse;
 import org.apache.cloudstack.api.response.SuccessResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.event.EventTypes;
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
 
 @APICommand(name = "updateProjectInvitation", description = "Accepts or declines project invitation", responseObject = SuccessResponse.class, since = "3.0.0")
 public class UpdateProjectInvitationCmd extends BaseAsyncCmd {
@@ -90,7 +91,7 @@ public class UpdateProjectInvitationCmd extends BaseAsyncCmd {
 
     @Override
     public void execute() {
-        UserContext.current().setEventDetails("Project id: " + projectId + "; accountName " + accountName + "; accept " + getAccept());
+        CallContext.current().setEventDetails("Project id: " + projectId + "; accountName " + accountName + "; accept " + getAccept());
         boolean result = _projectService.updateInvitation(projectId, accountName, token, getAccept());
         if (result) {
             SuccessResponse response = new SuccessResponse(getCommandName());

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/user/region/ha/gslb/AssignToGlobalLoadBalancerRuleCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/region/ha/gslb/AssignToGlobalLoadBalancerRuleCmd.java b/api/src/org/apache/cloudstack/api/command/user/region/ha/gslb/AssignToGlobalLoadBalancerRuleCmd.java
index c66cc46..b34dc3e 100644
--- a/api/src/org/apache/cloudstack/api/command/user/region/ha/gslb/AssignToGlobalLoadBalancerRuleCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/region/ha/gslb/AssignToGlobalLoadBalancerRuleCmd.java
@@ -24,15 +24,18 @@ import com.cloud.network.rules.LoadBalancer;
 import com.cloud.region.ha.GlobalLoadBalancerRule;
 import com.cloud.region.ha.GlobalLoadBalancingRulesService;
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
 import com.cloud.utils.StringUtils;
+
 import org.apache.cloudstack.api.*;
 import org.apache.cloudstack.api.response.FirewallRuleResponse;
 import org.apache.cloudstack.api.response.GlobalLoadBalancerResponse;
 import org.apache.cloudstack.api.response.SuccessResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import javax.inject.Inject;
+
 import java.util.Collection;
 import java.util.HashMap;
 import java.util.Iterator;
@@ -146,7 +149,7 @@ public class AssignToGlobalLoadBalancerRuleCmd extends BaseAsyncCmd {
 
     @Override
     public void execute(){
-        UserContext.current().setEventDetails("Global Load balancer rule Id: "+ getGlobalLoadBalancerRuleId()+ " VmIds: "
+        CallContext.current().setEventDetails("Global Load balancer rule Id: "+ getGlobalLoadBalancerRuleId()+ " VmIds: "
                 + StringUtils.join(getLoadBalancerRulesIds(), ","));
         boolean result = _gslbService.assignToGlobalLoadBalancerRule(this);
         if (result) {

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/user/region/ha/gslb/CreateGlobalLoadBalancerRuleCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/region/ha/gslb/CreateGlobalLoadBalancerRuleCmd.java b/api/src/org/apache/cloudstack/api/command/user/region/ha/gslb/CreateGlobalLoadBalancerRuleCmd.java
index d39e466..57b227d 100644
--- a/api/src/org/apache/cloudstack/api/command/user/region/ha/gslb/CreateGlobalLoadBalancerRuleCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/region/ha/gslb/CreateGlobalLoadBalancerRuleCmd.java
@@ -22,11 +22,13 @@ import com.cloud.exception.ResourceAllocationException;
 import com.cloud.exception.ResourceUnavailableException;
 import com.cloud.region.ha.GlobalLoadBalancerRule;
 import com.cloud.region.ha.GlobalLoadBalancingRulesService;
-import com.cloud.user.UserContext;
+
 import org.apache.cloudstack.api.*;
 import org.apache.cloudstack.api.response.DomainResponse;
 import org.apache.cloudstack.api.response.GlobalLoadBalancerResponse;
 import org.apache.cloudstack.api.response.RegionResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import javax.inject.Inject;
@@ -129,7 +131,7 @@ public class CreateGlobalLoadBalancerRuleCmd extends BaseAsyncCreateCmd {
     @Override
     public void execute() throws ResourceAllocationException, ResourceUnavailableException {
 
-        UserContext callerContext = UserContext.current();
+        CallContext callerContext = CallContext.current();
         GlobalLoadBalancerRule rule = _entityMgr.findById(GlobalLoadBalancerRule.class, getEntityId());
         GlobalLoadBalancerResponse response = null;
         if (rule != null) {
@@ -145,7 +147,7 @@ public class CreateGlobalLoadBalancerRuleCmd extends BaseAsyncCreateCmd {
             GlobalLoadBalancerRule gslbRule = _gslbService.createGlobalLoadBalancerRule(this);
             this.setEntityId(gslbRule.getId());
             this.setEntityUuid(gslbRule.getUuid());
-            UserContext.current().setEventDetails("Rule Id: " + getEntityId());
+            CallContext.current().setEventDetails("Rule Id: " + getEntityId());
         } catch (Exception ex) {
             s_logger.warn("Exception: ", ex);
             throw new ServerApiException(ApiErrorCode.PARAM_ERROR, ex.getMessage());
@@ -174,7 +176,7 @@ public class CreateGlobalLoadBalancerRuleCmd extends BaseAsyncCreateCmd {
     public long getEntityOwnerId() {
         Long accountId = finalyzeAccountId(accountName, domainId, null, true);
         if (accountId == null) {
-            return UserContext.current().getCaller().getId();
+            return CallContext.current().getCallingAccount().getId();
         }
         return accountId;
     }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/user/region/ha/gslb/DeleteGlobalLoadBalancerRuleCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/region/ha/gslb/DeleteGlobalLoadBalancerRuleCmd.java b/api/src/org/apache/cloudstack/api/command/user/region/ha/gslb/DeleteGlobalLoadBalancerRuleCmd.java
index 35401e8..6608660 100644
--- a/api/src/org/apache/cloudstack/api/command/user/region/ha/gslb/DeleteGlobalLoadBalancerRuleCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/region/ha/gslb/DeleteGlobalLoadBalancerRuleCmd.java
@@ -21,10 +21,12 @@ import com.cloud.event.EventTypes;
 import com.cloud.region.ha.GlobalLoadBalancerRule;
 import com.cloud.region.ha.GlobalLoadBalancingRulesService;
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
+
 import org.apache.cloudstack.api.*;
 import org.apache.cloudstack.api.response.GlobalLoadBalancerResponse;
 import org.apache.cloudstack.api.response.SuccessResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import javax.inject.Inject;
@@ -86,7 +88,7 @@ public class DeleteGlobalLoadBalancerRuleCmd extends BaseAsyncCmd {
 
     @Override
     public void execute(){
-        UserContext.current().setEventDetails("Deleting global Load balancer rule Id: " + getGlobalLoadBalancerId());
+        CallContext.current().setEventDetails("Deleting global Load balancer rule Id: " + getGlobalLoadBalancerId());
         boolean result = _gslbService.deleteGlobalLoadBalancerRule(this);
         if (result) {
             SuccessResponse response = new SuccessResponse(getCommandName());

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/user/region/ha/gslb/RemoveFromGlobalLoadBalancerRuleCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/region/ha/gslb/RemoveFromGlobalLoadBalancerRuleCmd.java b/api/src/org/apache/cloudstack/api/command/user/region/ha/gslb/RemoveFromGlobalLoadBalancerRuleCmd.java
index fa051af..ff71f67 100644
--- a/api/src/org/apache/cloudstack/api/command/user/region/ha/gslb/RemoveFromGlobalLoadBalancerRuleCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/region/ha/gslb/RemoveFromGlobalLoadBalancerRuleCmd.java
@@ -22,15 +22,18 @@ import com.cloud.exception.InvalidParameterValueException;
 import com.cloud.region.ha.GlobalLoadBalancerRule;
 import com.cloud.region.ha.GlobalLoadBalancingRulesService;
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
 import com.cloud.utils.StringUtils;
+
 import org.apache.cloudstack.api.*;
 import org.apache.cloudstack.api.response.FirewallRuleResponse;
 import org.apache.cloudstack.api.response.GlobalLoadBalancerResponse;
 import org.apache.cloudstack.api.response.SuccessResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import javax.inject.Inject;
+
 import java.util.List;
 
 @APICommand(name = "removeFromGlobalLoadBalancerRule", description="Removes a load balancer rule association with" +
@@ -98,7 +101,7 @@ public class RemoveFromGlobalLoadBalancerRuleCmd extends BaseAsyncCmd {
 
     @Override
     public void execute(){
-        UserContext.current().setEventDetails("Global Load balancer rule Id: "+ getGlobalLoadBalancerRuleId()+ " VmIds: "
+        CallContext.current().setEventDetails("Global Load balancer rule Id: "+ getGlobalLoadBalancerRuleId()+ " VmIds: "
                 + StringUtils.join(getLoadBalancerRulesIds(), ","));
         boolean result = _gslbService.removeFromGlobalLoadBalancerRule(this);
         if (result) {

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/user/region/ha/gslb/UpdateGlobalLoadBalancerRuleCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/region/ha/gslb/UpdateGlobalLoadBalancerRuleCmd.java b/api/src/org/apache/cloudstack/api/command/user/region/ha/gslb/UpdateGlobalLoadBalancerRuleCmd.java
index 6671886..6d76413 100644
--- a/api/src/org/apache/cloudstack/api/command/user/region/ha/gslb/UpdateGlobalLoadBalancerRuleCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/region/ha/gslb/UpdateGlobalLoadBalancerRuleCmd.java
@@ -99,7 +99,7 @@ public class UpdateGlobalLoadBalancerRuleCmd extends BaseAsyncCmd {
 
     @Override
     public void execute() {
-        com.cloud.user.UserContext.current().setEventDetails("Global Load balancer Id: "+getId());
+        org.apache.cloudstack.context.CallContext.current().setEventDetails("Global Load balancer Id: "+getId());
         GlobalLoadBalancerRule gslbRule = _gslbService.updateGlobalLoadBalancerRule(this);
         if (gslbRule != null) {
             GlobalLoadBalancerResponse response = _responseGenerator.createGlobalLoadBalancerResponse(gslbRule);

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/user/resource/UpdateResourceCountCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/resource/UpdateResourceCountCmd.java b/api/src/org/apache/cloudstack/api/command/user/resource/UpdateResourceCountCmd.java
index 0f4c932..9c726d1 100644
--- a/api/src/org/apache/cloudstack/api/command/user/resource/UpdateResourceCountCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/resource/UpdateResourceCountCmd.java
@@ -29,11 +29,12 @@ import org.apache.cloudstack.api.response.DomainResponse;
 import org.apache.cloudstack.api.response.ListResponse;
 import org.apache.cloudstack.api.response.ProjectResponse;
 import org.apache.cloudstack.api.response.ResourceCountResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.configuration.ResourceCount;
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
 
 @APICommand(name = "updateResourceCount", description="Recalculate and update resource count for an account or domain.", responseObject=ResourceCountResponse.class)
 public class UpdateResourceCountCmd extends BaseCmd {
@@ -99,7 +100,7 @@ public class UpdateResourceCountCmd extends BaseCmd {
 
     @Override
     public long getEntityOwnerId() {
-        Account account = UserContext.current().getCaller();
+        Account account = CallContext.current().getCallingAccount();
         if ((account == null) || isAdmin(account.getType())) {
             if ((domainId != null) && (accountName != null)) {
                 Account userAccount = _responseGenerator.findAccountByNameDomain(accountName, domainId);

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/user/resource/UpdateResourceLimitCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/resource/UpdateResourceLimitCmd.java b/api/src/org/apache/cloudstack/api/command/user/resource/UpdateResourceLimitCmd.java
index 826596c..4a5b345 100644
--- a/api/src/org/apache/cloudstack/api/command/user/resource/UpdateResourceLimitCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/resource/UpdateResourceLimitCmd.java
@@ -25,10 +25,11 @@ import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.DomainResponse;
 import org.apache.cloudstack.api.response.ProjectResponse;
 import org.apache.cloudstack.api.response.ResourceLimitResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.configuration.ResourceLimit;
-import com.cloud.user.UserContext;
 
 @APICommand(name = "updateResourceLimit", description="Updates resource limits for an account or domain.", responseObject=ResourceLimitResponse.class)
 public class UpdateResourceLimitCmd extends BaseCmd {
@@ -96,7 +97,7 @@ public class UpdateResourceLimitCmd extends BaseCmd {
     public long getEntityOwnerId() {
         Long accountId = finalyzeAccountId(accountName, domainId, projectId, true);
         if (accountId == null) {
-            return UserContext.current().getCaller().getId();
+            return CallContext.current().getCallingAccount().getId();
         }
 
         return accountId;

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/user/securitygroup/AuthorizeSecurityGroupEgressCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/securitygroup/AuthorizeSecurityGroupEgressCmd.java b/api/src/org/apache/cloudstack/api/command/user/securitygroup/AuthorizeSecurityGroupEgressCmd.java
index 321a5f6..cac9614 100644
--- a/api/src/org/apache/cloudstack/api/command/user/securitygroup/AuthorizeSecurityGroupEgressCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/securitygroup/AuthorizeSecurityGroupEgressCmd.java
@@ -33,12 +33,13 @@ import org.apache.cloudstack.api.response.DomainResponse;
 import org.apache.cloudstack.api.response.ProjectAccountResponse;
 import org.apache.cloudstack.api.response.SecurityGroupResponse;
 import org.apache.cloudstack.api.response.SecurityGroupRuleResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.event.EventTypes;
 import com.cloud.exception.InvalidParameterValueException;
 import com.cloud.network.security.SecurityRule;
-import com.cloud.user.UserContext;
 import com.cloud.utils.StringUtils;
 
 @APICommand(name = "authorizeSecurityGroupEgress", responseObject = SecurityGroupRuleResponse.class, description = "Authorizes a particular egress rule for this security group", since="3.0.0")
@@ -164,7 +165,7 @@ public class AuthorizeSecurityGroupEgressCmd extends BaseAsyncCmd {
     public long getEntityOwnerId() {
         Long accountId = finalyzeAccountId(accountName, domainId, projectId, true);
         if (accountId == null) {
-            return UserContext.current().getCaller().getId();
+            return CallContext.current().getCallingAccount().getId();
         }
 
         return accountId;

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/user/securitygroup/AuthorizeSecurityGroupIngressCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/securitygroup/AuthorizeSecurityGroupIngressCmd.java b/api/src/org/apache/cloudstack/api/command/user/securitygroup/AuthorizeSecurityGroupIngressCmd.java
index 9ab0fb5..3dfcd05 100644
--- a/api/src/org/apache/cloudstack/api/command/user/securitygroup/AuthorizeSecurityGroupIngressCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/securitygroup/AuthorizeSecurityGroupIngressCmd.java
@@ -33,12 +33,13 @@ import org.apache.cloudstack.api.response.DomainResponse;
 import org.apache.cloudstack.api.response.ProjectAccountResponse;
 import org.apache.cloudstack.api.response.SecurityGroupResponse;
 import org.apache.cloudstack.api.response.SecurityGroupRuleResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.event.EventTypes;
 import com.cloud.exception.InvalidParameterValueException;
 import com.cloud.network.security.SecurityRule;
-import com.cloud.user.UserContext;
 import com.cloud.utils.StringUtils;
 import com.cloud.utils.net.NetUtils;
 
@@ -165,7 +166,7 @@ public class AuthorizeSecurityGroupIngressCmd extends BaseAsyncCmd {
     public long getEntityOwnerId() {
         Long accountId = finalyzeAccountId(accountName, domainId, projectId, true);
         if (accountId == null) {
-            return UserContext.current().getCaller().getId();
+            return CallContext.current().getCallingAccount().getId();
         }
 
         return accountId;

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/user/securitygroup/CreateSecurityGroupCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/securitygroup/CreateSecurityGroupCmd.java b/api/src/org/apache/cloudstack/api/command/user/securitygroup/CreateSecurityGroupCmd.java
index 839afb2..52611b8 100644
--- a/api/src/org/apache/cloudstack/api/command/user/securitygroup/CreateSecurityGroupCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/securitygroup/CreateSecurityGroupCmd.java
@@ -25,11 +25,12 @@ import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.DomainResponse;
 import org.apache.cloudstack.api.response.ProjectAccountResponse;
 import org.apache.cloudstack.api.response.SecurityGroupResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.network.security.SecurityGroup;
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
 
 @APICommand(name = "createSecurityGroup", responseObject = SecurityGroupResponse.class, description = "Creates a security group")
 public class CreateSecurityGroupCmd extends BaseCmd {
@@ -91,7 +92,7 @@ public class CreateSecurityGroupCmd extends BaseCmd {
 
     @Override
     public long getEntityOwnerId() {
-        Account account = UserContext.current().getCaller();
+        Account account = CallContext.current().getCallingAccount();
         if ((account == null) || isAdmin(account.getType())) {
             if ((domainId != null) && (accountName != null)) {
                 Account userAccount = _responseGenerator.findAccountByNameDomain(accountName, domainId);

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/user/securitygroup/DeleteSecurityGroupCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/securitygroup/DeleteSecurityGroupCmd.java b/api/src/org/apache/cloudstack/api/command/user/securitygroup/DeleteSecurityGroupCmd.java
index aa6ec2d..7e9b9de 100644
--- a/api/src/org/apache/cloudstack/api/command/user/securitygroup/DeleteSecurityGroupCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/securitygroup/DeleteSecurityGroupCmd.java
@@ -26,11 +26,12 @@ import org.apache.cloudstack.api.response.DomainResponse;
 import org.apache.cloudstack.api.response.ProjectAccountResponse;
 import org.apache.cloudstack.api.response.SecurityGroupResponse;
 import org.apache.cloudstack.api.response.SuccessResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.exception.InvalidParameterValueException;
 import com.cloud.exception.ResourceInUseException;
-import com.cloud.user.UserContext;
 
 @APICommand(name = "deleteSecurityGroup", description="Deletes security group", responseObject=SuccessResponse.class)
 public class DeleteSecurityGroupCmd extends BaseCmd {
@@ -107,7 +108,7 @@ public class DeleteSecurityGroupCmd extends BaseCmd {
     public long getEntityOwnerId() {
         Long accountId = finalyzeAccountId(accountName, domainId, projectId, true);
         if (accountId == null) {
-            return UserContext.current().getCaller().getId();
+            return CallContext.current().getCallingAccount().getId();
         }
 
         return accountId;

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/user/snapshot/CreateSnapshotCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/snapshot/CreateSnapshotCmd.java b/api/src/org/apache/cloudstack/api/command/user/snapshot/CreateSnapshotCmd.java
index f5cb900..9fe5ffe 100644
--- a/api/src/org/apache/cloudstack/api/command/user/snapshot/CreateSnapshotCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/snapshot/CreateSnapshotCmd.java
@@ -28,6 +28,8 @@ import org.apache.cloudstack.api.response.DomainResponse;
 import org.apache.cloudstack.api.response.SnapshotPolicyResponse;
 import org.apache.cloudstack.api.response.SnapshotResponse;
 import org.apache.cloudstack.api.response.VolumeResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.event.EventTypes;
@@ -38,7 +40,6 @@ import com.cloud.projects.Project;
 import com.cloud.storage.Snapshot;
 import com.cloud.storage.Volume;
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
 
 @APICommand(name = "createSnapshot", description = "Creates an instant snapshot of a volume.", responseObject = SnapshotResponse.class)
 public class CreateSnapshotCmd extends BaseAsyncCreateCmd {
@@ -164,7 +165,7 @@ public class CreateSnapshotCmd extends BaseAsyncCreateCmd {
     @Override
     public void execute() {
         s_logger.info("VOLSS: createSnapshotCmd starts:" + System.currentTimeMillis());
-        UserContext.current().setEventDetails("Volume Id: "+getVolumeId());
+        CallContext.current().setEventDetails("Volume Id: "+getVolumeId());
         Snapshot snapshot;
         try {
             snapshot = _volumeService.takeSnapshot(this.getVolumeId(), this.getPolicyId(), this.getEntityId(), _accountService.getAccount(getEntityOwnerId()));

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/user/snapshot/DeleteSnapshotCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/snapshot/DeleteSnapshotCmd.java b/api/src/org/apache/cloudstack/api/command/user/snapshot/DeleteSnapshotCmd.java
index 6c26e81..7892261 100644
--- a/api/src/org/apache/cloudstack/api/command/user/snapshot/DeleteSnapshotCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/snapshot/DeleteSnapshotCmd.java
@@ -25,12 +25,13 @@ import org.apache.cloudstack.api.Parameter;
 import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.SnapshotResponse;
 import org.apache.cloudstack.api.response.SuccessResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.event.EventTypes;
 import com.cloud.storage.Snapshot;
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
 
 @APICommand(name = "deleteSnapshot", description="Deletes a snapshot of a disk volume.", responseObject=SuccessResponse.class)
 public class DeleteSnapshotCmd extends BaseAsyncCmd {
@@ -92,7 +93,7 @@ public class DeleteSnapshotCmd extends BaseAsyncCmd {
 
     @Override
     public void execute(){
-        UserContext.current().setEventDetails("Snapshot Id: "+getId());
+        CallContext.current().setEventDetails("Snapshot Id: "+getId());
         boolean result = _snapshotService.deleteSnapshot(getId());
         if (result) {
             SuccessResponse response = new SuccessResponse(getCommandName());

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/user/ssh/CreateSSHKeyPairCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/ssh/CreateSSHKeyPairCmd.java b/api/src/org/apache/cloudstack/api/command/user/ssh/CreateSSHKeyPairCmd.java
index 56bec7e..6f1a081 100644
--- a/api/src/org/apache/cloudstack/api/command/user/ssh/CreateSSHKeyPairCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/ssh/CreateSSHKeyPairCmd.java
@@ -23,10 +23,11 @@ import org.apache.cloudstack.api.Parameter;
 import org.apache.cloudstack.api.response.DomainResponse;
 import org.apache.cloudstack.api.response.ProjectResponse;
 import org.apache.cloudstack.api.response.SSHKeyPairResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.user.SSHKeyPair;
-import com.cloud.user.UserContext;
 
 @APICommand(name = "createSSHKeyPair", description="Create a new keypair and returns the private key", responseObject=SSHKeyPairResponse.class)
 public class CreateSSHKeyPairCmd extends BaseCmd {
@@ -81,7 +82,7 @@ public class CreateSSHKeyPairCmd extends BaseCmd {
     public long getEntityOwnerId() {
         Long accountId = finalyzeAccountId(accountName, domainId, projectId, true);
         if (accountId == null) {
-            return UserContext.current().getCaller().getId();
+            return CallContext.current().getCallingAccount().getId();
         }
 
         return accountId;

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/user/ssh/DeleteSSHKeyPairCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/ssh/DeleteSSHKeyPairCmd.java b/api/src/org/apache/cloudstack/api/command/user/ssh/DeleteSSHKeyPairCmd.java
index b05a675..eb2d237 100644
--- a/api/src/org/apache/cloudstack/api/command/user/ssh/DeleteSSHKeyPairCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/ssh/DeleteSSHKeyPairCmd.java
@@ -23,10 +23,11 @@ import org.apache.cloudstack.api.Parameter;
 import org.apache.cloudstack.api.response.DomainResponse;
 import org.apache.cloudstack.api.response.ProjectResponse;
 import org.apache.cloudstack.api.response.SuccessResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
 
 @APICommand(name = "deleteSSHKeyPair", description="Deletes a keypair by name", responseObject=SuccessResponse.class)
 public class DeleteSSHKeyPairCmd extends BaseCmd {
@@ -90,7 +91,7 @@ public class DeleteSSHKeyPairCmd extends BaseCmd {
 
     @Override
     public long getEntityOwnerId() {
-        Account account = UserContext.current().getCaller();
+        Account account = CallContext.current().getCallingAccount();
         if ((account == null) || isAdmin(account.getType())) {
             if ((domainId != null) && (accountName != null)) {
                 Account userAccount = _responseGenerator.findAccountByNameDomain(accountName, domainId);

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/user/ssh/RegisterSSHKeyPairCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/ssh/RegisterSSHKeyPairCmd.java b/api/src/org/apache/cloudstack/api/command/user/ssh/RegisterSSHKeyPairCmd.java
index b05c6b1..8530375 100644
--- a/api/src/org/apache/cloudstack/api/command/user/ssh/RegisterSSHKeyPairCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/ssh/RegisterSSHKeyPairCmd.java
@@ -23,10 +23,11 @@ import org.apache.cloudstack.api.Parameter;
 import org.apache.cloudstack.api.response.DomainResponse;
 import org.apache.cloudstack.api.response.ProjectResponse;
 import org.apache.cloudstack.api.response.SSHKeyPairResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.user.SSHKeyPair;
-import com.cloud.user.UserContext;
 
 @APICommand(name = "registerSSHKeyPair", description="Register a public key in a keypair under a certain name", responseObject=SSHKeyPairResponse.class)
 public class RegisterSSHKeyPairCmd extends BaseCmd {
@@ -87,7 +88,7 @@ public class RegisterSSHKeyPairCmd extends BaseCmd {
     public long getEntityOwnerId() {
         Long accountId = finalyzeAccountId(accountName, domainId, projectId, true);
         if (accountId == null) {
-            return UserContext.current().getCaller().getId();
+            return CallContext.current().getCallingAccount().getId();
         }
 
         return accountId;

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/user/template/CopyTemplateCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/template/CopyTemplateCmd.java b/api/src/org/apache/cloudstack/api/command/user/template/CopyTemplateCmd.java
index 4921b5e..a25bd65 100644
--- a/api/src/org/apache/cloudstack/api/command/user/template/CopyTemplateCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/template/CopyTemplateCmd.java
@@ -28,6 +28,8 @@ import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.TemplateResponse;
 import org.apache.cloudstack.api.response.UserVmResponse;
 import org.apache.cloudstack.api.response.ZoneResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.event.EventTypes;
@@ -35,7 +37,6 @@ import com.cloud.exception.ResourceAllocationException;
 import com.cloud.exception.StorageUnavailableException;
 import com.cloud.template.VirtualMachineTemplate;
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
 
 @APICommand(name = "copyTemplate", description="Copies a template from one zone to another.", responseObject=TemplateResponse.class)
 public class CopyTemplateCmd extends BaseAsyncCmd {
@@ -120,7 +121,7 @@ public class CopyTemplateCmd extends BaseAsyncCmd {
     @Override
     public void execute() throws ResourceAllocationException{
         try {
-            UserContext.current().setEventDetails(getEventDescription());
+            CallContext.current().setEventDetails(getEventDescription());
             VirtualMachineTemplate template = _templateService.copyTemplate(this);
 
             if (template != null){

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/user/template/CreateTemplateCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/template/CreateTemplateCmd.java b/api/src/org/apache/cloudstack/api/command/user/template/CreateTemplateCmd.java
index 07aeb0a..271357d 100644
--- a/api/src/org/apache/cloudstack/api/command/user/template/CreateTemplateCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/template/CreateTemplateCmd.java
@@ -25,7 +25,7 @@ import com.cloud.storage.Snapshot;
 import com.cloud.storage.Volume;
 import com.cloud.template.VirtualMachineTemplate;
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
+
 import org.apache.cloudstack.api.APICommand;
 import org.apache.cloudstack.api.ApiCommandJobType;
 import org.apache.cloudstack.api.ApiConstants;
@@ -38,6 +38,8 @@ import org.apache.cloudstack.api.response.SnapshotResponse;
 import org.apache.cloudstack.api.response.TemplateResponse;
 import org.apache.cloudstack.api.response.UserVmResponse;
 import org.apache.cloudstack.api.response.VolumeResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import java.util.Collection;
@@ -251,7 +253,7 @@ import java.util.Map;
 
     @Override
     public void execute() {
-        UserContext.current().setEventDetails("Template Id: "+getEntityId()+((getSnapshotId() == null) ? " from volume Id: " + getVolumeId() : " from snapshot Id: " + getSnapshotId()));
+        CallContext.current().setEventDetails("Template Id: "+getEntityId()+((getSnapshotId() == null) ? " from volume Id: " + getVolumeId() : " from snapshot Id: " + getSnapshotId()));
         VirtualMachineTemplate template = null;
         template = this._templateService.createPrivateTemplate(this);
 

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/user/template/DeleteTemplateCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/template/DeleteTemplateCmd.java b/api/src/org/apache/cloudstack/api/command/user/template/DeleteTemplateCmd.java
index b2be2f2..bfaff99 100644
--- a/api/src/org/apache/cloudstack/api/command/user/template/DeleteTemplateCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/template/DeleteTemplateCmd.java
@@ -26,13 +26,13 @@ import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.SuccessResponse;
 import org.apache.cloudstack.api.response.TemplateResponse;
 import org.apache.cloudstack.api.response.ZoneResponse;
+import org.apache.cloudstack.context.CallContext;
 
 import org.apache.log4j.Logger;
 
 import com.cloud.event.EventTypes;
 import com.cloud.template.VirtualMachineTemplate;
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
 
 @APICommand(name = "deleteTemplate", responseObject=SuccessResponse.class, description="Deletes a template from the system. All virtual machines using the deleted template will not be affected.")
 public class DeleteTemplateCmd extends BaseAsyncCmd {
@@ -108,7 +108,7 @@ public class DeleteTemplateCmd extends BaseAsyncCmd {
 
     @Override
     public void execute(){
-        UserContext.current().setEventDetails("Template Id: "+getId());
+        CallContext.current().setEventDetails("Template Id: "+getId());
         boolean result = _templateService.deleteTemplate(this);
         if (result) {
             SuccessResponse response = new SuccessResponse(getCommandName());


[50/50] [abbrv] git commit: updated refs/heads/ldapplugin to 7bc705e

Posted by ch...@apache.org.
Merge remote-tracking branch 'origin/master' into ldapplugin

Conflicts:
	setup/db/db/schema-410to420.sql


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

Branch: refs/heads/ldapplugin
Commit: 7bc705e9e8911c9fffd41b9709877f9986b5b792
Parents: c50d9fe 4bbaac2
Author: Chip Childers <ch...@apache.org>
Authored: Wed Jul 17 13:34:18 2013 -0400
Committer: Chip Childers <ch...@apache.org>
Committed: Wed Jul 17 13:34:18 2013 -0400

----------------------------------------------------------------------
 agent/src/com/cloud/agent/Agent.java            |  45 --
 agent/src/com/cloud/agent/AgentShell.java       |  86 ---
 agent/src/com/cloud/agent/IAgentShell.java      |   2 -
 agent/test/com/cloud/agent/TestAgentShell.java  |  43 --
 api/src/com/cloud/agent/api/to/DhcpTO.java      |  64 ++
 api/src/com/cloud/agent/api/to/DnsmasqTO.java   |  64 --
 api/src/com/cloud/agent/api/to/NfsTO.java       |   2 +-
 api/src/com/cloud/agent/api/to/SwiftTO.java     |  12 +-
 api/src/com/cloud/event/EventTypes.java         |   4 +-
 .../com/cloud/hypervisor/HypervisorGuru.java    |   9 +-
 api/src/com/cloud/network/Network.java          |   1 +
 api/src/com/cloud/network/NetworkService.java   |   3 +
 .../network/element/DhcpServiceProvider.java    |   2 +-
 api/src/com/cloud/offering/NetworkOffering.java |   1 +
 api/src/com/cloud/resource/ResourceService.java |  15 -
 api/src/com/cloud/server/ManagementService.java |  14 +-
 api/src/com/cloud/user/UserContext.java         | 140 ----
 .../com/cloud/user/UserContextInitializer.java  |  40 --
 api/src/com/cloud/vm/VirtualMachineName.java    |   4 -
 .../affinity/AffinityGroupProcessor.java        |  13 +
 .../affinity/AffinityGroupService.java          |   2 +
 .../affinity/AffinityProcessorBase.java         |   7 +
 .../org/apache/cloudstack/api/ApiConstants.java |   2 +-
 .../org/apache/cloudstack/api/BaseAsyncCmd.java |  10 +-
 .../org/apache/cloudstack/api/BaseListCmd.java  |  12 +-
 .../BaseListTemplateOrIsoPermissionsCmd.java    |   5 +-
 .../command/admin/account/CreateAccountCmd.java |   6 +-
 .../command/admin/account/DeleteAccountCmd.java |   7 +-
 .../admin/account/DisableAccountCmd.java        |   5 +-
 .../api/command/admin/config/ListCfgsByCmd.java |  14 +-
 .../command/admin/domain/CreateDomainCmd.java   |   5 +-
 .../command/admin/domain/DeleteDomainCmd.java   |   5 +-
 .../command/admin/domain/UpdateDomainCmd.java   |   5 +-
 .../admin/host/CancelMaintenanceCmd.java        |   5 +-
 .../admin/host/PrepareForMaintenanceCmd.java    |   5 +-
 .../command/admin/host/ReconnectHostCmd.java    |   5 +-
 .../admin/host/ReleaseHostReservationCmd.java   |   5 +-
 ...ConfigureInternalLoadBalancerElementCmd.java |   7 +-
 .../CreateInternalLoadBalancerElementCmd.java   |   5 +-
 .../admin/internallb/StartInternalLBVMCmd.java  |   7 +-
 .../admin/internallb/StopInternalLBVMCmd.java   |   7 +-
 .../network/AddNetworkServiceProviderCmd.java   |   5 +-
 .../admin/network/CreateNetworkOfferingCmd.java |   7 +
 .../admin/network/CreatePhysicalNetworkCmd.java |   5 +-
 .../admin/network/DeletePhysicalNetworkCmd.java |   5 +-
 .../ReleaseDedicatedGuestVlanRangeCmd.java      |   6 +-
 .../admin/network/UpdateNetworkOfferingCmd.java |   6 +
 .../admin/resource/ArchiveAlertsCmd.java        |  24 +-
 .../admin/resource/CleanVMReservationsCmd.java  |  80 +++
 .../command/admin/resource/DeleteAlertsCmd.java |  23 +-
 .../ConfigureVirtualRouterElementCmd.java       |   5 +-
 .../router/CreateVirtualRouterElementCmd.java   |   5 +-
 .../command/admin/router/DestroyRouterCmd.java  |   7 +-
 .../command/admin/router/RebootRouterCmd.java   |   5 +-
 .../command/admin/router/StartRouterCmd.java    |   5 +-
 .../api/command/admin/router/StopRouterCmd.java |   5 +-
 .../CancelPrimaryStorageMaintenanceCmd.java     |   5 +-
 .../admin/storage/CreateStoragePoolCmd.java     |   2 +
 .../PreparePrimaryStorageForMaintenanceCmd.java |   5 +-
 .../api/command/admin/swift/AddSwiftCmd.java    | 118 ----
 .../api/command/admin/swift/ListSwiftsCmd.java  |  70 --
 .../admin/systemvm/DestroySystemVmCmd.java      |   7 +-
 .../admin/systemvm/MigrateSystemVMCmd.java      |   7 +-
 .../admin/systemvm/RebootSystemVmCmd.java       |   7 +-
 .../admin/systemvm/ScaleSystemVMCmd.java        |   8 +-
 .../admin/systemvm/StartSystemVMCmd.java        |   7 +-
 .../command/admin/systemvm/StopSystemVmCmd.java |   7 +-
 .../admin/systemvm/UpgradeSystemVMCmd.java      |   7 +-
 .../command/admin/usage/AddTrafficTypeCmd.java  |   5 +-
 .../api/command/admin/user/CreateUserCmd.java   |   7 +-
 .../api/command/admin/user/DeleteUserCmd.java   |   5 +-
 .../api/command/admin/user/DisableUserCmd.java  |   5 +-
 .../api/command/admin/user/EnableUserCmd.java   |   5 +-
 .../api/command/admin/user/UpdateUserCmd.java   |   5 +-
 .../api/command/admin/vm/MigrateVMCmd.java      |   7 +-
 .../vm/MigrateVirtualMachineWithVolumeCmd.java  |   5 +-
 .../admin/vpc/DeletePrivateGatewayCmd.java      |   5 +-
 .../api/command/admin/zone/CreateZoneCmd.java   |   5 +-
 .../api/command/admin/zone/DeleteZoneCmd.java   |   5 +-
 .../api/command/admin/zone/UpdateZoneCmd.java   |   5 +-
 .../user/account/AddAccountToProjectCmd.java    |   5 +-
 .../account/DeleteAccountFromProjectCmd.java    |   5 +-
 .../user/address/AssociateIPAddrCmd.java        |  11 +-
 .../user/address/DisassociateIPAddrCmd.java     |   5 +-
 .../affinitygroup/CreateAffinityGroupCmd.java   |   5 +-
 .../affinitygroup/DeleteAffinityGroupCmd.java   |   5 +-
 .../affinitygroup/UpdateVMAffinityGroupCmd.java |   5 +-
 .../autoscale/CreateAutoScaleVmProfileCmd.java  |   7 +-
 .../user/autoscale/CreateConditionCmd.java      |   9 +-
 .../autoscale/DeleteAutoScalePolicyCmd.java     |   5 +-
 .../autoscale/DeleteAutoScaleVmGroupCmd.java    |   5 +-
 .../autoscale/DeleteAutoScaleVmProfileCmd.java  |   5 +-
 .../autoscale/UpdateAutoScalePolicyCmd.java     |   5 +-
 .../autoscale/UpdateAutoScaleVmGroupCmd.java    |   5 +-
 .../autoscale/UpdateAutoScaleVmProfileCmd.java  |   5 +-
 .../command/user/event/ArchiveEventsCmd.java    |  29 +-
 .../api/command/user/event/DeleteEventsCmd.java |  26 +-
 .../firewall/CreateEgressFirewallRuleCmd.java   |  11 +-
 .../user/firewall/CreateFirewallRuleCmd.java    |  11 +-
 .../firewall/CreatePortForwardingRuleCmd.java   |  13 +-
 .../firewall/DeleteEgressFirewallRuleCmd.java   |   5 +-
 .../user/firewall/DeleteFirewallRuleCmd.java    |   5 +-
 .../firewall/DeletePortForwardingRuleCmd.java   |   5 +-
 .../api/command/user/iso/AttachIsoCmd.java      |   5 +-
 .../api/command/user/iso/DeleteIsoCmd.java      |   5 +-
 .../api/command/user/iso/ExtractIsoCmd.java     |   5 +-
 .../api/command/user/iso/ListIsosCmd.java       |   5 +-
 .../api/command/user/iso/RegisterIsoCmd.java    |   5 +-
 .../AssignToLoadBalancerRuleCmd.java            |   5 +-
 .../CreateApplicationLoadBalancerCmd.java       |   5 +-
 .../CreateLBHealthCheckPolicyCmd.java           |  10 +-
 .../CreateLBStickinessPolicyCmd.java            |   7 +-
 .../loadbalancer/CreateLoadBalancerRuleCmd.java |  11 +-
 .../DeleteApplicationLoadBalancerCmd.java       |   5 +-
 .../DeleteLBHealthCheckPolicyCmd.java           |   8 +-
 .../DeleteLBStickinessPolicyCmd.java            |   7 +-
 .../loadbalancer/DeleteLoadBalancerRuleCmd.java |   5 +-
 .../ListLBHealthCheckPoliciesCmd.java           |   3 +-
 .../ListLBStickinessPoliciesCmd.java            |   5 +-
 .../RemoveFromLoadBalancerRuleCmd.java          |   5 +-
 .../loadbalancer/UpdateLoadBalancerRuleCmd.java |   5 +-
 .../user/nat/CreateIpForwardingRuleCmd.java     |  11 +-
 .../user/nat/DeleteIpForwardingRuleCmd.java     |   5 +-
 .../user/network/CreateNetworkACLCmd.java       |   8 +-
 .../user/network/CreateNetworkACLListCmd.java   |   4 +-
 .../command/user/network/CreateNetworkCmd.java  |   5 +-
 .../user/network/DeleteNetworkACLCmd.java       |   8 +-
 .../user/network/DeleteNetworkACLListCmd.java   |   8 +-
 .../command/user/network/DeleteNetworkCmd.java  |   5 +-
 .../user/network/ReplaceNetworkACLListCmd.java  |   8 +-
 .../user/network/UpdateNetworkACLItemCmd.java   |   8 +-
 .../command/user/network/UpdateNetworkCmd.java  |   5 +-
 .../user/project/ActivateProjectCmd.java        |   5 +-
 .../command/user/project/CreateProjectCmd.java  |  11 +-
 .../command/user/project/DeleteProjectCmd.java  |   5 +-
 .../project/DeleteProjectInvitationCmd.java     |   5 +-
 .../command/user/project/SuspendProjectCmd.java |   5 +-
 .../command/user/project/UpdateProjectCmd.java  |   5 +-
 .../project/UpdateProjectInvitationCmd.java     |   5 +-
 .../gslb/AssignToGlobalLoadBalancerRuleCmd.java |   7 +-
 .../gslb/CreateGlobalLoadBalancerRuleCmd.java   |  10 +-
 .../gslb/DeleteGlobalLoadBalancerRuleCmd.java   |   6 +-
 .../RemoveFromGlobalLoadBalancerRuleCmd.java    |   7 +-
 .../gslb/UpdateGlobalLoadBalancerRuleCmd.java   |   2 +-
 .../user/resource/UpdateResourceCountCmd.java   |   5 +-
 .../user/resource/UpdateResourceLimitCmd.java   |   5 +-
 .../AuthorizeSecurityGroupEgressCmd.java        |   5 +-
 .../AuthorizeSecurityGroupIngressCmd.java       |   5 +-
 .../securitygroup/CreateSecurityGroupCmd.java   |   5 +-
 .../securitygroup/DeleteSecurityGroupCmd.java   |   5 +-
 .../user/snapshot/CreateSnapshotCmd.java        |   5 +-
 .../user/snapshot/DeleteSnapshotCmd.java        |   5 +-
 .../command/user/ssh/CreateSSHKeyPairCmd.java   |   5 +-
 .../command/user/ssh/DeleteSSHKeyPairCmd.java   |   5 +-
 .../command/user/ssh/RegisterSSHKeyPairCmd.java |   5 +-
 .../command/user/template/CopyTemplateCmd.java  |   5 +-
 .../user/template/CreateTemplateCmd.java        |   6 +-
 .../user/template/DeleteTemplateCmd.java        |   4 +-
 .../user/template/ExtractTemplateCmd.java       |   4 +-
 .../command/user/template/ListTemplatesCmd.java |   5 +-
 .../user/template/RegisterTemplateCmd.java      |   5 +-
 .../api/command/user/vm/AddIpToVmNicCmd.java    |  11 +-
 .../api/command/user/vm/AddNicToVMCmd.java      |   5 +-
 .../api/command/user/vm/DeployVMCmd.java        |  11 +-
 .../api/command/user/vm/DestroyVMCmd.java       |   5 +-
 .../api/command/user/vm/ListNicsCmd.java        |   8 +-
 .../api/command/user/vm/RebootVMCmd.java        |   5 +-
 .../command/user/vm/RemoveIpFromVmNicCmd.java   |  10 +-
 .../api/command/user/vm/RemoveNicFromVMCmd.java |   5 +-
 .../api/command/user/vm/ResetVMPasswordCmd.java |   5 +-
 .../api/command/user/vm/ResetVMSSHKeyCmd.java   |   4 +-
 .../api/command/user/vm/RestoreVMCmd.java       |   5 +-
 .../api/command/user/vm/ScaleVMCmd.java         |   4 +-
 .../api/command/user/vm/StartVMCmd.java         |   5 +-
 .../api/command/user/vm/StopVMCmd.java          |   5 +-
 .../user/vm/UpdateDefaultNicForVMCmd.java       |   5 +-
 .../api/command/user/vm/UpdateVMCmd.java        |   5 +-
 .../api/command/user/vm/UpgradeVMCmd.java       |   5 +-
 .../command/user/vmgroup/CreateVMGroupCmd.java  |   5 +-
 .../user/vmsnapshot/CreateVMSnapshotCmd.java    |   4 +-
 .../user/vmsnapshot/DeleteVMSnapshotCmd.java    |   5 +-
 .../user/vmsnapshot/RevertToVMSnapshotCmd.java  |   4 +-
 .../user/volume/AddResourceDetailCmd.java       |   4 +-
 .../command/user/volume/AttachVolumeCmd.java    |   5 +-
 .../command/user/volume/CreateVolumeCmd.java    |   7 +-
 .../command/user/volume/DeleteVolumeCmd.java    |   7 +-
 .../command/user/volume/DetachVolumeCmd.java    |   5 +-
 .../command/user/volume/ExtractVolumeCmd.java   |   5 +-
 .../user/volume/RemoveResourceDetailCmd.java    |   4 +-
 .../command/user/volume/ResizeVolumeCmd.java    |   5 +-
 .../command/user/volume/UpdateVolumeCmd.java    |   5 +-
 .../command/user/volume/UploadVolumeCmd.java    |   5 +-
 .../command/user/vpc/CreateStaticRouteCmd.java  |   5 +-
 .../api/command/user/vpc/CreateVPCCmd.java      |   5 +-
 .../command/user/vpc/DeleteStaticRouteCmd.java  |   5 +-
 .../api/command/user/vpn/AddVpnUserCmd.java     |   5 +-
 .../user/vpn/CreateVpnCustomerGatewayCmd.java   |   5 +-
 .../user/vpn/DeleteRemoteAccessVpnCmd.java      |   5 +-
 .../api/command/user/vpn/RemoveVpnUserCmd.java  |   7 +-
 .../command/user/vpn/ResetVpnConnectionCmd.java |   5 +-
 .../user/vpn/UpdateVpnCustomerGatewayCmd.java   |   5 +-
 .../apache/cloudstack/context/CallContext.java  | 218 ++++++
 .../classes/resources/messages.properties       |   4 +-
 client/pom.xml                                  | 224 ++++---
 client/tomcatconf/applicationContext.xml.in     |   8 +-
 client/tomcatconf/commands.properties.in        |   6 +-
 core/src/com/cloud/agent/api/StopCommand.java   |  11 -
 .../cloud/agent/api/UnregisterNicCommand.java   |  55 ++
 core/src/com/cloud/agent/api/UpgradeAnswer.java |  26 -
 .../src/com/cloud/agent/api/UpgradeCommand.java |  42 --
 .../agent/api/routing/DnsMasqConfigCommand.java |  40 +-
 .../api/routing/LoadBalancerConfigCommand.java  |   4 +-
 .../virtualnetwork/VirtualRoutingResource.java  |  15 +-
 .../com/cloud/network/DnsMasqConfigurator.java  |  48 +-
 .../com/cloud/network/HAProxyConfigurator.java  |   5 +-
 .../cloud/storage/template/VmdkProcessor.java   |  81 ++-
 .../storage/command/DownloadCommand.java        |   9 +-
 developer/pom.xml                               |  12 -
 docs/en-US/LDAP-for-user-authentication.xml     |  42 ++
 .../LDAPserver-for-user-authentication.xml      |  39 --
 docs/en-US/accounts.xml                         |   6 +-
 .../add-password-management-to-templates.xml    |  25 +-
 docs/en-US/add-remove-nic-ui.xml                |  21 +-
 docs/en-US/add-remove-nic.xml                   |  12 +-
 docs/en-US/added-API-commands-4-1.xml           |   1 -
 docs/en-US/added-API-commands-4.2.xml           | 335 +++++++++-
 docs/en-US/aws-ec2-configuration.xml            |   4 +-
 docs/en-US/change-database-config.xml           |   2 +-
 docs/en-US/change-database-password.xml         |  10 +-
 docs/en-US/citrix-xenserver-installation.xml    |  12 +-
 docs/en-US/configure-acl.xml                    |   2 +-
 docs/en-US/egress-firewall-rule.xml             |   6 +-
 .../example-LDAP-configuration-commands.xml     |  47 --
 .../example-activedirectory-configuration.xml   |  43 ++
 docs/en-US/example-openldap-configuration.xml   |  44 ++
 docs/en-US/first_ms_node_install.xml            |   4 +-
 docs/en-US/hardware-firewall.xml                |   1 +
 docs/en-US/host-add-xenserver-kvm-ovm.xml       |   2 +-
 docs/en-US/images/add-ldap-configuration-ad.png | Bin 0 -> 31803 bytes
 .../images/add-ldap-configuration-openldap.png  | Bin 0 -> 30176 bytes
 .../increase-management-server-max-memory.xml   |   2 +-
 docs/en-US/inter-vlan-routing.xml               |  28 +-
 docs/en-US/linux-installation.xml               |  70 +-
 docs/en-US/management-server-install-client.xml |   2 +-
 docs/en-US/management-server-install-flow.xml   |  28 +-
 .../management-server-install-multi-node.xml    |   6 +-
 .../management-server-install-systemvm.xml      |   2 +-
 docs/en-US/multiple-ip-nic.xml                  |  73 ++-
 docs/en-US/network-service-providers.xml        | 233 ++++---
 docs/en-US/password-storage-engine.xml          |  68 ++
 docs/en-US/query-filter.xml                     |  60 --
 docs/en-US/search-user-bind-dn.xml              |  47 --
 docs/en-US/vnmc-cisco.xml                       | 306 +++++++++
 docs/en-US/vpc.xml                              |   6 +
 docs/en-US/windows-installation.xml             |   9 +-
 .../cloudstack/storage/command/CopyCommand.java |   7 +-
 .../command/DownloadSystemTemplateCommand.java  | 129 ----
 .../storage/datastore/db/StoragePoolVO.java     |   4 +-
 .../cloudstack/context/ServerContexts.java      |  66 ++
 .../cloud/entity/api/VMEntityManagerImpl.java   |  59 +-
 .../cloud/entity/api/db/VMComputeTagVO.java     |  67 --
 .../engine/cloud/entity/api/db/VMEntityVO.java  | 577 ----------------
 .../cloud/entity/api/db/VMNetworkMapVO.java     |  71 --
 .../cloud/entity/api/db/VMReservationVO.java    | 127 ----
 .../cloud/entity/api/db/VMRootDiskTagVO.java    |  67 --
 .../entity/api/db/VolumeReservationVO.java      |  84 ---
 .../entity/api/db/dao/VMComputeTagDao.java      |  31 -
 .../entity/api/db/dao/VMComputeTagDaoImpl.java  |  89 ---
 .../cloud/entity/api/db/dao/VMEntityDao.java    |  41 --
 .../entity/api/db/dao/VMEntityDaoImpl.java      | 169 -----
 .../entity/api/db/dao/VMNetworkMapDao.java      |  31 -
 .../entity/api/db/dao/VMNetworkMapDaoImpl.java  |  85 ---
 .../entity/api/db/dao/VMReservationDao.java     |  34 -
 .../entity/api/db/dao/VMReservationDaoImpl.java | 111 ----
 .../entity/api/db/dao/VMRootDiskTagDao.java     |  31 -
 .../entity/api/db/dao/VMRootDiskTagDaoImpl.java |  88 ---
 .../entity/api/db/dao/VolumeReservationDao.java |  31 -
 .../api/db/dao/VolumeReservationDaoImpl.java    |  68 --
 .../src/com/cloud/alert/dao/AlertDao.java       |   4 +-
 .../src/com/cloud/alert/dao/AlertDaoImpl.java   |  37 +-
 .../com/cloud/capacity/dao/CapacityDaoImpl.java |   2 +-
 .../configuration/dao/ConfigurationDaoImpl.java |  64 +-
 .../src/com/cloud/dc/dao/DataCenterDao.java     |   2 +-
 .../src/com/cloud/dc/dao/DataCenterDaoImpl.java |   4 +-
 .../src/com/cloud/dc/dao/DataCenterVnetDao.java |   4 +-
 .../com/cloud/dc/dao/DataCenterVnetDaoImpl.java |  28 +-
 .../src/com/cloud/event/dao/EventDao.java       |   2 +-
 .../src/com/cloud/event/dao/EventDaoImpl.java   |  11 +-
 .../src/com/cloud/network/dao/IPAddressDao.java |   6 +-
 .../com/cloud/network/dao/IPAddressDaoImpl.java |  33 +-
 .../dao/Site2SiteCustomerGatewayDao.java        |   2 +-
 .../dao/Site2SiteCustomerGatewayDaoImpl.java    |   3 +-
 .../com/cloud/offerings/NetworkOfferingVO.java  |  10 +
 .../schema/src/com/cloud/storage/SwiftVO.java   |   2 +-
 .../com/cloud/storage/VMTemplateSwiftVO.java    | 108 ---
 .../src/com/cloud/storage/VMTemplateVO.java     |   3 +-
 .../src/com/cloud/storage/dao/SwiftDao.java     |  31 -
 .../src/com/cloud/storage/dao/SwiftDaoImpl.java |  58 --
 .../cloud/storage/dao/VMTemplateSwiftDao.java   |  37 --
 .../storage/dao/VMTemplateSwiftDaoImpl.java     |  87 ---
 .../com/cloud/upgrade/dao/Upgrade410to420.java  | 182 +++--
 engine/schema/src/com/cloud/vm/dao/NicDao.java  |   3 +
 .../schema/src/com/cloud/vm/dao/NicDaoImpl.java |  13 +-
 .../src/com/cloud/vm/dao/VMInstanceDao.java     |   2 +
 .../src/com/cloud/vm/dao/VMInstanceDaoImpl.java |  12 +
 .../affinity/dao/AffinityGroupVMMapDao.java     |   3 +-
 .../affinity/dao/AffinityGroupVMMapDaoImpl.java |  17 +-
 .../cloud/entity/api/db/VMComputeTagVO.java     |  67 ++
 .../engine/cloud/entity/api/db/VMEntityVO.java  | 577 ++++++++++++++++
 .../cloud/entity/api/db/VMNetworkMapVO.java     |  71 ++
 .../cloud/entity/api/db/VMReservationVO.java    | 127 ++++
 .../cloud/entity/api/db/VMRootDiskTagVO.java    |  67 ++
 .../entity/api/db/VolumeReservationVO.java      |  84 +++
 .../entity/api/db/dao/VMComputeTagDao.java      |  31 +
 .../entity/api/db/dao/VMComputeTagDaoImpl.java  |  89 +++
 .../cloud/entity/api/db/dao/VMEntityDao.java    |  41 ++
 .../entity/api/db/dao/VMEntityDaoImpl.java      | 169 +++++
 .../entity/api/db/dao/VMNetworkMapDao.java      |  31 +
 .../entity/api/db/dao/VMNetworkMapDaoImpl.java  |  85 +++
 .../entity/api/db/dao/VMReservationDao.java     |  34 +
 .../entity/api/db/dao/VMReservationDaoImpl.java | 111 ++++
 .../entity/api/db/dao/VMRootDiskTagDao.java     |  31 +
 .../entity/api/db/dao/VMRootDiskTagDaoImpl.java |  88 +++
 .../entity/api/db/dao/VolumeReservationDao.java |  31 +
 .../api/db/dao/VolumeReservationDaoImpl.java    |  68 ++
 .../motion/AncientDataMotionStrategy.java       |  19 +-
 engine/storage/image/pom.xml                    |   1 +
 .../storage/image/TemplateServiceImpl.java      |   5 +-
 .../MockLocalNfsSecondaryStorageResource.java   |  57 +-
 .../storage/test/ChildTestConfiguration.java    |   6 -
 .../cloudstack/storage/LocalHostEndpoint.java   |  24 +-
 .../allocator/AbstractStoragePoolAllocator.java |   3 +
 .../ClusterScopeStoragePoolAllocator.java       |   3 +
 .../allocator/LocalStoragePoolAllocator.java    |   3 +
 .../endpoint/DefaultEndPointSelector.java       |   2 +-
 .../storage/image/BaseImageStoreDriverImpl.java |  30 +-
 .../datastore/PrimaryDataStoreHelper.java       |   2 +-
 packaging/centos63/cloud.spec                   |   3 +
 .../debian/config/etc/init.d/cloud-early-config |  50 +-
 .../debian/config/etc/init.d/cloud-passwd-srvr  |   2 +-
 .../debian/config/etc/iptables/iptables-router  |   1 -
 .../debian/config/opt/cloud/bin/ipassoc.sh      |  53 +-
 .../debian/config/root/createIpAlias.sh         |  12 +-
 .../debian/config/root/deleteIpAlias.sh         |  22 +-
 patches/systemvm/debian/config/root/dnsmasq.sh  |  13 +-
 .../systemvm/debian/config/root/edithosts.sh    |  16 +-
 patches/systemvm/debian/config/root/func.sh     |  64 +-
 .../affinity/HostAntiAffinityProcessor.java     |  43 ++
 .../api/command/user/discovery/ListApisCmd.java |   5 +-
 .../admin/ratelimit/ResetApiLimitCmd.java       |   5 +-
 .../command/user/ratelimit/GetApiLimitCmd.java  |   7 +-
 .../dedicated/DedicatedResourceManagerImpl.java |  12 +-
 .../dedicated/manager/DedicatedApiUnitTest.java |  28 +-
 .../implicitplanner/ImplicitPlannerTest.java    |  77 ++-
 .../cloudstack/api/AddBaremetalDhcpCmd.java     |   5 +-
 .../cloudstack/api/AddBaremetalPxeCmd.java      |   5 +-
 .../kvm/resource/BridgeVifDriver.java           |  74 ++-
 .../kvm/resource/LibvirtComputingResource.java  |  98 +--
 .../hypervisor/kvm/resource/OvsVifDriver.java   |   6 -
 .../kvm/storage/LibvirtStorageAdaptor.java      |  13 +-
 .../src/com/cloud/ucs/manager/UcsCommands.java  |   2 +-
 .../com/cloud/hypervisor/guru/VMwareGuru.java   |  80 ++-
 .../vmware/VmwareDatacenterService.java         |   6 +
 .../vmware/VmwareServerDiscoverer.java          |  70 +-
 .../hypervisor/vmware/dao/LegacyZoneDao.java    |   4 +-
 .../vmware/manager/VmwareHostService.java       |  13 +-
 .../vmware/manager/VmwareManagerImpl.java       |  63 +-
 .../vmware/resource/VmwareResource.java         | 539 ++++++++++-----
 .../VmwareSecondaryStorageResourceHandler.java  |  11 +
 .../resource/VmwareStorageProcessor.java        |  50 +-
 .../command/admin/zone/ListVmwareDcsCmd.java    | 118 ++++
 .../command/admin/zone/RemoveVmwareDcCmd.java   |  15 +-
 .../api/response/VmwareDatacenterResponse.java  |  27 +-
 .../vmware/VmwareDatacenterApiUnitTest.java     |  30 +-
 .../xen/resource/CitrixResourceBase.java        |   5 +
 .../api/commands/AddBigSwitchVnsDeviceCmd.java  |   4 +-
 .../commands/DeleteBigSwitchVnsDeviceCmd.java   |   4 +-
 .../commands/AddCiscoAsa1000vResourceCmd.java   |   5 +-
 .../api/commands/AddCiscoVnmcResourceCmd.java   |   5 +-
 .../DeleteCiscoAsa1000vResourceCmd.java         |   5 +-
 .../commands/DeleteCiscoVnmcResourceCmd.java    |   5 +-
 .../cloud/network/element/CiscoVnmcElement.java |   7 +-
 .../lb/ElasticLoadBalancerManagerImpl.java      |  38 +-
 .../api/commands/AddF5LoadBalancerCmd.java      |   6 +-
 .../commands/ConfigureF5LoadBalancerCmd.java    |   6 +-
 .../api/commands/DeleteF5LoadBalancerCmd.java   |   6 +-
 .../lb/InternalLoadBalancerVMManagerImpl.java   |  36 +-
 .../InternalLBVMManagerTest.java                |   9 +-
 .../InternalLBVMServiceTest.java                |  19 +-
 .../cloud/api/commands/AddSrxFirewallCmd.java   |   6 +-
 .../api/commands/ConfigureSrxFirewallCmd.java   |   5 +-
 .../api/commands/DeleteSrxFirewallCmd.java      |   5 +-
 .../commands/AddNetscalerLoadBalancerCmd.java   |   6 +-
 .../ConfigureNetscalerLoadBalancerCmd.java      |   6 +-
 .../DeleteNetscalerLoadBalancerCmd.java         |   5 +-
 .../cloud/network/element/NetscalerElement.java |   5 +
 .../api/commands/AddNiciraNvpDeviceCmd.java     |   6 +-
 .../api/commands/DeleteNiciraNvpDeviceCmd.java  |   6 +-
 .../cloud/network/guru/OvsGuestNetworkGuru.java |   6 +-
 .../cloudstack/api/commands/AddSspCmd.java      |   5 +-
 .../cloudstack/api/commands/DeleteSspCmd.java   |   5 +-
 plugins/pom.xml                                 |   1 -
 .../allocator/RandomStoragePoolAllocator.java   |   5 +
 .../driver/SwiftImageStoreDriverImpl.java       |  49 +-
 ...CloudStackPrimaryDataStoreLifeCycleImpl.java |   7 +-
 .../driver/SolidfirePrimaryDataStoreDriver.java | 106 ++-
 .../SolidFirePrimaryDataStoreLifeCycle.java     |  56 +-
 .../storage/datastore/util/SolidFireUtil.java   |   4 +
 pom.xml                                         |  14 -
 scripts/network/domr/call_dnsmasq.sh            |   2 -
 scripts/storage/qcow2/cleanupmyvms.sh           |  83 ---
 scripts/storage/qcow2/managesnapshot.sh         |  13 +-
 .../vm/hypervisor/xenserver/createipAlias.sh    |   1 -
 .../vm/hypervisor/xenserver/deleteipAlias.sh    |   1 -
 scripts/vm/hypervisor/xenserver/vmops           |   2 +-
 scripts/vm/network/security_group.py            | 318 ++++-----
 server/pom.xml                                  |   4 +-
 .../cloud/agent/manager/AgentManagerImpl.java   |  38 +-
 server/src/com/cloud/api/ApiDBUtils.java        |  60 +-
 server/src/com/cloud/api/ApiDispatcher.java     | 141 ++--
 server/src/com/cloud/api/ApiResponseHelper.java |   7 +-
 server/src/com/cloud/api/ApiServer.java         |  85 +--
 server/src/com/cloud/api/ApiServlet.java        |  27 +-
 .../com/cloud/api/query/QueryManagerImpl.java   |  51 +-
 .../com/cloud/api/query/ViewResponseHelper.java |  18 +-
 .../api/query/dao/DataCenterJoinDaoImpl.java    |   7 +-
 .../api/query/dao/TemplateJoinDaoImpl.java      |   8 +-
 .../cloud/api/query/dao/VolumeJoinDaoImpl.java  |   5 +-
 .../com/cloud/api/query/vo/TemplateJoinVO.java  |  13 +
 .../com/cloud/async/AsyncJobManagerImpl.java    | 176 ++---
 .../com/cloud/capacity/CapacityManagerImpl.java |   3 -
 server/src/com/cloud/configuration/Config.java  |   3 +-
 .../configuration/ConfigurationManager.java     |   2 +-
 .../configuration/ConfigurationManagerImpl.java | 280 +++-----
 .../consoleproxy/ConsoleProxyManagerImpl.java   |  47 +-
 .../cloud/deploy/DeploymentPlanningManager.java |   6 +
 .../deploy/DeploymentPlanningManagerImpl.java   | 104 ++-
 .../com/cloud/event/ActionEventInterceptor.java |  21 +-
 .../src/com/cloud/event/ActionEventUtils.java   |  41 +-
 .../cloud/hypervisor/HypervisorGuruBase.java    |  28 +-
 .../metadata/ResourceMetaDataManagerImpl.java   |   5 +-
 .../com/cloud/network/NetworkManagerImpl.java   | 104 ++-
 .../com/cloud/network/NetworkServiceImpl.java   | 231 +++----
 .../cloud/network/NetworkUsageManagerImpl.java  |   3 +-
 .../cloud/network/as/AutoScaleManagerImpl.java  |  44 +-
 .../network/element/VirtualRouterElement.java   |  17 +-
 .../network/firewall/FirewallManagerImpl.java   |  17 +-
 .../network/guru/ExternalGuestNetworkGuru.java  |   6 +-
 .../cloud/network/guru/GuestNetworkGuru.java    |   8 +-
 .../network/lb/LoadBalancingRulesManager.java   |   5 +-
 .../lb/LoadBalancingRulesManagerImpl.java       |  61 +-
 .../VirtualNetworkApplianceManagerImpl.java     | 418 ++++++------
 .../VpcVirtualNetworkApplianceManagerImpl.java  | 151 ++---
 .../cloud/network/rules/RulesManagerImpl.java   |  43 +-
 .../security/SecurityGroupManagerImpl.java      |  17 +-
 .../network/vpc/NetworkACLManagerImpl.java      |   7 +-
 .../network/vpc/NetworkACLServiceImpl.java      |  19 +-
 .../com/cloud/network/vpc/VpcManagerImpl.java   |  57 +-
 .../network/vpn/RemoteAccessVpnManagerImpl.java |  28 +-
 .../network/vpn/Site2SiteVpnManagerImpl.java    |  39 +-
 .../com/cloud/projects/ProjectManagerImpl.java  |  30 +-
 .../com/cloud/resource/ResourceManagerImpl.java |  50 +-
 .../resourcelimit/ResourceLimitManagerImpl.java |  13 +-
 .../cloud/server/ConfigurationServerImpl.java   |   2 +-
 .../src/com/cloud/server/ManagementServer.java  |   2 -
 .../com/cloud/server/ManagementServerImpl.java  | 136 ++--
 .../com/cloud/storage/StorageManagerImpl.java   |  34 +-
 .../storage/StoragePoolAutomationImpl.java      |  11 +-
 .../com/cloud/storage/VolumeManagerImpl.java    |  44 +-
 .../secondary/SecondaryStorageManagerImpl.java  |  47 +-
 .../storage/snapshot/SnapshotManagerImpl.java   |  36 +-
 .../com/cloud/storage/swift/SwiftManager.java   |  57 --
 .../cloud/storage/swift/SwiftManagerImpl.java   | 298 ---------
 .../cloud/storage/upload/UploadMonitorImpl.java |  27 +-
 .../cloud/tags/TaggedResourceManagerImpl.java   |  10 +-
 .../template/HypervisorTemplateAdapter.java     |   3 +-
 .../com/cloud/template/TemplateAdapterBase.java |  27 +-
 .../com/cloud/template/TemplateManagerImpl.java |  71 +-
 .../src/com/cloud/usage/UsageServiceImpl.java   |   5 +-
 .../src/com/cloud/user/AccountManagerImpl.java  |  98 +--
 .../src/com/cloud/user/DomainManagerImpl.java   |  76 ++-
 server/src/com/cloud/vm/UserVmManagerImpl.java  | 202 ++----
 server/src/com/cloud/vm/VirtualMachineGuru.java |  36 -
 .../com/cloud/vm/VirtualMachineManagerImpl.java | 471 ++++++++-----
 .../vm/snapshot/VMSnapshotManagerImpl.java      |   7 +-
 .../affinity/AffinityGroupServiceImpl.java      |  32 +-
 .../lb/ApplicationLoadBalancerManagerImpl.java  |   9 +-
 .../GlobalLoadBalancingRulesServiceImpl.java    |  25 +-
 .../com/cloud/alert/AlertControlsUnitTest.java  |   8 +-
 .../test/com/cloud/async/CleanupDelegate.java   |  29 -
 server/test/com/cloud/async/TestAsync.java      | 281 --------
 .../com/cloud/async/TestAsyncJobManager.java    | 252 -------
 .../com/cloud/async/TestSyncQueueManager.java   | 208 ------
 .../configuration/ConfigurationManagerTest.java |  43 +-
 .../com/cloud/event/EventControlsUnitTest.java  |   2 +-
 .../network/DedicateGuestVlanRangesTest.java    |  43 +-
 .../cloud/network/MockNetworkManagerImpl.java   |   5 +
 .../network/UpdatePhysicalNetworkTest.java      |  11 +-
 ...cVirtualNetworkApplianceManagerImplTest.java | 121 ++++
 .../cloud/resource/MockResourceManagerImpl.java |  52 +-
 .../upgrade/AdvanceZone217To224UpgradeTest.java | 117 ----
 .../upgrade/AdvanceZone223To224UpgradeTest.java |  57 --
 .../upgrade/BasicZone218To224UpgradeTest.java   | 211 ------
 .../test/com/cloud/upgrade/DbUpgrade22Test.java |  29 -
 .../cloud/upgrade/HostCapacity218to22Test.java  |  66 --
 .../InstanceGroup218To224UpgradeTest.java       | 216 ------
 .../PortForwarding218To224UpgradeTest.java      | 132 ----
 .../upgrade/Sanity220To224UpgradeTest.java      |  95 ---
 .../upgrade/Sanity222To224UpgradeTest.java      |  96 ---
 .../upgrade/Sanity223To225UpgradeTest.java      |  94 ---
 .../upgrade/Sanity224To225UpgradeTest.java      |  95 ---
 .../upgrade/Template2214To30UpgradeTest.java    | 123 ----
 .../cloud/upgrade/Test2214To30DBUpgrade.java    | 199 ------
 .../cloud/upgrade/Usage217To224UpgradeTest.java |  94 ---
 .../upgrade/UsageEvents218To224UpgradeTest.java |  91 ---
 .../vm/DeploymentPlanningManagerImplTest.java   |   6 +
 .../com/cloud/vm/MockUserVmManagerImpl.java     |  27 +-
 server/test/com/cloud/vm/UserVmManagerTest.java | 156 +++--
 .../cloud/vpc/MockConfigurationManagerImpl.java |   2 +-
 .../com/cloud/vpc/MockNetworkManagerImpl.java   |   5 +
 .../com/cloud/vpc/NetworkACLManagerTest.java    |  65 +-
 .../com/cloud/vpc/NetworkACLServiceTest.java    |  61 +-
 server/test/com/cloud/vpc/VpcTest.java          |  71 +-
 .../affinity/AffinityApiUnitTest.java           |  34 +-
 .../lb/ApplicationLoadBalancerTest.java         |  39 +-
 .../networkoffering/ChildTestConfiguration.java |  40 +-
 .../CreateNetworkOfferingTest.java              |  62 +-
 .../cloudstack/region/RegionManagerTest.java    |   3 +-
 ...GlobalLoadBalancingRulesServiceImplTest.java | 114 ++--
 server/test/resources/VpcVirtNetAppContext.xml  |  41 ++
 services/console-proxy/server/js/ajaxkeys.js    |   4 +
 .../console-proxy/server/scripts/config_ssl.sh  |   9 +
 services/secondary-storage/pom.xml              |   9 +
 .../secondary-storage/scripts/config_ssl.sh     |   9 +
 .../LocalNfsSecondaryStorageResource.java       |  73 +--
 .../resource/NfsSecondaryStorageResource.java   | 326 +++++----
 .../LocalNfsSecondaryStorageResourceTest.java   |  90 +++
 setup/db/db/schema-410to420.sql                 |  26 +-
 setup/dev/s3.cfg                                | 140 ++++
 .../component/test_affinity_groups.py           |   4 +-
 test/integration/component/test_assign_vm.py    |  29 +-
 .../component/test_netscaler_configs.py         | 180 ++---
 test/integration/component/test_netscaler_lb.py |  22 +-
 .../component/test_netscaler_lb_algo.py         |   2 +-
 .../component/test_netscaler_lb_sticky.py       |   2 +-
 .../component/test_netscaler_nw_off.py          | 120 ++--
 test/integration/component/test_projects.py     |  28 +-
 .../component/test_resource_limits.py           |   2 +-
 .../component/test_vpc_network_lbrules.py       |   2 +-
 .../smoke/test_non_contigiousvlan.py            |   4 +-
 .../definitions/systemvmtemplate/postinstall.sh |   1 +
 .../systemvmtemplate64/postinstall.sh           |   5 +
 tools/marvin/marvin/deployDataCenter.py         |   7 +-
 tools/marvin/marvin/integration/lib/base.py     |   7 +-
 ui/css/cloudstack3.css                          |   3 +-
 .../vnmcNetworkProvider/vnmcNetworkProvider.js  | 372 ++++++++---
 ui/modules/vpc/vpc.js                           |   1 +
 ui/scripts/cloudStack.js                        | 256 ++++----
 ui/scripts/configuration.js                     |  22 +-
 ui/scripts/docs.js                              |  48 ++
 ui/scripts/instances.js                         |  75 +--
 ui/scripts/lbStickyPolicy.js                    |   6 +-
 ui/scripts/network.js                           |   7 +-
 ui/scripts/plugins.js                           |  10 +
 ui/scripts/sharedFunctions.js                   | 512 +++++++++++++++
 ui/scripts/system.js                            | 656 ++++---------------
 ui/scripts/templates.js                         |  15 +-
 ui/scripts/ui-custom/instanceWizard.js          |   9 +-
 ui/scripts/ui-custom/login.js                   |   3 +
 ui/scripts/ui-custom/physicalResources.js       |   5 +-
 ui/scripts/vm_snapshots.js                      |   4 +-
 ui/scripts/vpc.js                               |  38 +-
 ui/scripts/zoneWizard.js                        |  10 +-
 utils/conf/db.properties                        |   2 +-
 utils/src/com/cloud/utils/SwiftUtil.java        | 112 ++++
 utils/src/com/cloud/utils/UuidUtils.java        |  23 +
 .../utils/exception/CloudRuntimeException.java  |  21 +-
 .../com/cloud/utils/exception/ErrorContext.java |  28 +
 utils/src/com/cloud/utils/net/NetUtils.java     |  19 +-
 .../cloud/hypervisor/vmware/mo/DatastoreMO.java |  15 +-
 .../vmware/mo/HypervisorHostHelper.java         |  97 ++-
 .../hypervisor/vmware/mo/VirtualMachineMO.java  |  76 ++-
 582 files changed, 11507 insertions(+), 11531 deletions(-)
----------------------------------------------------------------------


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

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/7bc705e9/client/tomcatconf/applicationContext.xml.in
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/7bc705e9/client/tomcatconf/commands.properties.in
----------------------------------------------------------------------
diff --cc client/tomcatconf/commands.properties.in
index dce938f,d8d176f..9e14d0f
--- a/client/tomcatconf/commands.properties.in
+++ b/client/tomcatconf/commands.properties.in
@@@ -210,8 -210,11 +210,9 @@@ scaleSystemVm=
  #### configuration commands
  updateConfiguration=1
  listConfigurations=1
 -ldapConfig=1
 -ldapRemove=1
  listCapabilities=15
  listDeploymentPlanners=1
+ cleanVMReservations=1
  
  #### pod commands
  createPod=1

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/7bc705e9/server/src/com/cloud/api/ApiResponseHelper.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/7bc705e9/server/src/com/cloud/configuration/Config.java
----------------------------------------------------------------------
diff --cc server/src/com/cloud/configuration/Config.java
index d47a2a5,bb0237c..8d8c0c4
--- a/server/src/com/cloud/configuration/Config.java
+++ b/server/src/com/cloud/configuration/Config.java
@@@ -441,9 -433,9 +442,9 @@@ public enum Config 
  	           "routes", ConfigurationParameterScope.zone.toString()),
  	
      InternalLbVmServiceOfferingId("Advanced", ManagementServer.class, String.class, "internallbvm.service.offering", null, "Uuid of the service offering used by internal lb vm; if NULL - default system internal lb offering will be used", null),
-     ExecuteInSequence("Advanced", ManagementServer.class, Boolean.class, "execute.in.sequence.hypervisor.commands", "false", "If set to true, StartCommand, StopCommand, CopyVolumeCommand, CreateCommand will be synchronized on the agent side." +
+     ExecuteInSequence("Advanced", ManagementServer.class, Boolean.class, "execute.in.sequence.hypervisor.commands", "false", "If set to true, StartCommand, StopCommand, CopyCommand will be synchronized on the agent side." +
      		" If set to false, these commands become asynchronous. Default value is false.", null),
 -    ExecuteInSequenceNetworkElementCommands("Advanced", NetworkManager.class, Boolean.class, "execute.in.sequence.network.element.commands", "false", "If set to true, DhcpEntryCommand, SavePasswordCommand, UserDataCommand, VmDataCommand will be synchronized on the agent side." + 
 +    ExecuteInSequenceNetworkElementCommands("Advanced", NetworkManager.class, Boolean.class, "execute.in.sequence.network.element.commands", "false", "If set to true, DhcpEntryCommand, SavePasswordCommand, UserDataCommand, VmDataCommand will be synchronized on the agent side." +
              " If set to false, these commands become asynchronous. Default value is false.", null);
  	
  	private final String _category;

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/7bc705e9/server/src/com/cloud/configuration/ConfigurationManagerImpl.java
----------------------------------------------------------------------
diff --cc server/src/com/cloud/configuration/ConfigurationManagerImpl.java
index 8d73102,92178c9..4498006
--- a/server/src/com/cloud/configuration/ConfigurationManagerImpl.java
+++ b/server/src/com/cloud/configuration/ConfigurationManagerImpl.java
@@@ -39,8 -39,14 +39,11 @@@ import javax.naming.NamingException
  import javax.naming.directory.DirContext;
  import javax.naming.directory.InitialDirContext;
  
+ import org.apache.log4j.Logger;
+ import org.springframework.stereotype.Component;
+ 
  import org.apache.cloudstack.acl.SecurityChecker;
 -import org.apache.cloudstack.api.ApiConstants.LDAPParams;
  import org.apache.cloudstack.api.command.admin.config.UpdateCfgCmd;
 -import org.apache.cloudstack.api.command.admin.ldap.LDAPConfigCmd;
 -import org.apache.cloudstack.api.command.admin.ldap.LDAPRemoveCmd;
  import org.apache.cloudstack.api.command.admin.network.CreateNetworkOfferingCmd;
  import org.apache.cloudstack.api.command.admin.network.DeleteNetworkOfferingCmd;
  import org.apache.cloudstack.api.command.admin.network.UpdateNetworkOfferingCmd;

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/7bc705e9/server/src/com/cloud/server/ManagementServerImpl.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/7bc705e9/server/test/com/cloud/vpc/MockConfigurationManagerImpl.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/7bc705e9/setup/db/db/schema-410to420.sql
----------------------------------------------------------------------
diff --cc setup/db/db/schema-410to420.sql
index 039afd5,fe1426e..cdb45a1
--- a/setup/db/db/schema-410to420.sql
+++ b/setup/db/db/schema-410to420.sql
@@@ -2238,18 -2232,6 +2232,22 @@@ CREATE VIEW `cloud`.`project_view` A
              and resource_tags.resource_type = 'Project'
              left join
          `cloud`.`project_account` pacct ON projects.id = pacct.project_id;
 +        
 +INSERT IGNORE INTO `cloud`.`configuration` VALUES ('Advanced', 'DEFAULT', 'management-server', 'ldap.bind.principal', NULL, 'Specifies the bind principal to use for bind to LDAP');
 +INSERT IGNORE INTO `cloud`.`configuration` VALUES ('Advanced', 'DEFAULT', 'management-server', 'ldap.bind.password', NULL, 'Specifies the password to use for binding to LDAP');
 +INSERT IGNORE INTO `cloud`.`configuration` VALUES ('Advanced', 'DEFAULT', 'management-server', 'ldap.username.attribute', 'uid', 'Sets the username attribute used within LDAP');
 +INSERT IGNORE INTO `cloud`.`configuration` VALUES ('Advanced', 'DEFAULT', 'management-server', 'ldap.email.attribute', 'mail', 'Sets the email attribute used within LDAP');
 +INSERT IGNORE INTO `cloud`.`configuration` VALUES ('Advanced', 'DEFAULT', 'management-server', 'ldap.realname.attribute', 'cn', 'Sets the realname attribute used within LDAP');
 +INSERT IGNORE INTO `cloud`.`configuration` VALUES ('Advanced', 'DEFAULT', 'management-server', 'ldap.user.object', 'inetOrgPerson', 'Sets the object type of users within LDAP');
 +INSERT IGNORE INTO `cloud`.`configuration` VALUES ('Advanced', 'DEFAULT', 'management-server', 'ldap.basedn', NULL, 'Sets the basedn for LDAP');
 +
 +CREATE TABLE `cloud`.`ldap_configuration` (
 +  `id` bigint unsigned NOT NULL auto_increment COMMENT 'id',
 +  `hostname` varchar(255) NOT NULL COMMENT 'the hostname of the ldap server',
 +  `port` int(10) COMMENT 'port that the ldap server is listening on',
 +  PRIMARY KEY  (`id`)
 +) ENGINE=InnoDB DEFAULT CHARSET=utf8;
++
+ INSERT IGNORE INTO `cloud`.`configuration` VALUES ('Network', 'DEFAULT', 'management-server', 'network.loadbalancer.haproxy.max.conn', '4096', 'Load Balancer(haproxy) maximum number of concurrent connections(global max)');
+ 
+ ALTER TABLE `cloud`.`network_offerings` ADD COLUMN `concurrent_connections` int(10) unsigned COMMENT 'Load Balancer(haproxy) maximum number of concurrent connections(global max)';


[36/50] [abbrv] git commit: updated refs/heads/ldapplugin to 7bc705e

Posted by ch...@apache.org.
CLOUDSTACK-3582: Add sleep so Netscaler recognizes the service to be up

Signed-off-by: Prasanna Santhanam <ts...@apache.org>


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

Branch: refs/heads/ldapplugin
Commit: 2910f9058d6f0d16e7aa0ff65200473490f58e07
Parents: d73bb22
Author: Sowmya Krishnan <so...@citrix.com>
Authored: Wed Jul 17 11:09:25 2013 +0530
Committer: Prasanna Santhanam <ts...@apache.org>
Committed: Wed Jul 17 12:36:27 2013 +0530

----------------------------------------------------------------------
 test/integration/component/test_netscaler_lb.py | 2 ++
 1 file changed, 2 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/2910f905/test/integration/component/test_netscaler_lb.py
----------------------------------------------------------------------
diff --git a/test/integration/component/test_netscaler_lb.py b/test/integration/component/test_netscaler_lb.py
index 534ffb1..146b4c6 100644
--- a/test/integration/component/test_netscaler_lb.py
+++ b/test/integration/component/test_netscaler_lb.py
@@ -2571,6 +2571,8 @@ class TestVmWithLb(cloudstackTestCase):
         self.debug("Starting VM instance: %s" % self.vm_2.name)
         self.vm_2.start(self.apiclient)
         self.debug("Starting VM: %s" % self.vm_2.name)
+        self.debug("Sleeping for netscaler to recognize service is up")
+        time.sleep( 120 )
 
         try:
             self.debug(


[30/50] [abbrv] git commit: updated refs/heads/ldapplugin to 7bc705e

Posted by ch...@apache.org.
Cloudstack-2997 Make haproxy maxconn configurable

Signed-off-by: Abhinandan Prateek <ap...@apache.org>


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

Branch: refs/heads/ldapplugin
Commit: dd33abffbe3b7c5b615e8f64b1824a720329dd0d
Parents: 6b54907
Author: Bharat Kumar <bh...@citrix.com>
Authored: Tue Jun 25 18:13:31 2013 +0530
Committer: Abhinandan Prateek <ap...@apache.org>
Committed: Wed Jul 17 10:06:11 2013 +0530

----------------------------------------------------------------------
 api/src/com/cloud/offering/NetworkOffering.java |  1 +
 .../org/apache/cloudstack/api/ApiConstants.java |  1 +
 .../admin/network/CreateNetworkOfferingCmd.java |  7 +++++++
 .../admin/network/UpdateNetworkOfferingCmd.java |  6 ++++++
 .../api/routing/LoadBalancerConfigCommand.java  |  4 +++-
 .../com/cloud/network/HAProxyConfigurator.java  |  5 +++--
 .../com/cloud/offerings/NetworkOfferingVO.java  | 10 ++++++++++
 .../lb/ElasticLoadBalancerManagerImpl.java      | 10 +++++++++-
 .../lb/InternalLoadBalancerVMManagerImpl.java   | 14 +++++++++++---
 .../InternalLBVMManagerTest.java                |  9 +++++++--
 server/src/com/cloud/configuration/Config.java  |  1 +
 .../configuration/ConfigurationManager.java     |  2 +-
 .../configuration/ConfigurationManagerImpl.java | 18 ++++++++++++++++--
 .../com/cloud/network/NetworkManagerImpl.java   | 18 +++++++++---------
 .../VirtualNetworkApplianceManagerImpl.java     | 15 +++++++++++----
 .../cloud/vpc/MockConfigurationManagerImpl.java |  2 +-
 .../CreateNetworkOfferingTest.java              | 20 ++++++++++----------
 setup/db/db/schema-410to420.sql                 |  3 +++
 18 files changed, 110 insertions(+), 36 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/dd33abff/api/src/com/cloud/offering/NetworkOffering.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/offering/NetworkOffering.java b/api/src/com/cloud/offering/NetworkOffering.java
index 43312db..6c5573e 100644
--- a/api/src/com/cloud/offering/NetworkOffering.java
+++ b/api/src/com/cloud/offering/NetworkOffering.java
@@ -129,4 +129,5 @@ public interface NetworkOffering extends InfrastructureEntity, InternalIdentity,
     boolean getPublicLb();
     boolean getEgressDefaultPolicy();
 
+    Integer getConcurrentConnections();
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/dd33abff/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 83999b6..0550a39 100755
--- a/api/src/org/apache/cloudstack/api/ApiConstants.java
+++ b/api/src/org/apache/cloudstack/api/ApiConstants.java
@@ -518,6 +518,7 @@ public class ApiConstants {
     public static final String NUMBER = "number";
     public static final String IS_DYNAMICALLY_SCALABLE = "isdynamicallyscalable";
     public static final String ROUTING = "isrouting";
+    public static final String MAX_CONNECTIONS = "maxconnections";
 
     public enum HostDetails {
         all, capacity, events, stats, min;

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/dd33abff/api/src/org/apache/cloudstack/api/command/admin/network/CreateNetworkOfferingCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/CreateNetworkOfferingCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/CreateNetworkOfferingCmd.java
index 94e263c..bdad904 100644
--- a/api/src/org/apache/cloudstack/api/command/admin/network/CreateNetworkOfferingCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/admin/network/CreateNetworkOfferingCmd.java
@@ -102,6 +102,9 @@ public class CreateNetworkOfferingCmd extends BaseCmd {
     @Parameter(name=ApiConstants.EGRESS_DEFAULT_POLICY, type=CommandType.BOOLEAN, description="true if default guest network egress policy is allow; false if default egress policy is deny")
     private Boolean egressDefaultPolicy;
 
+    @Parameter(name=ApiConstants.MAX_CONNECTIONS, type=CommandType.INTEGER, description="maximum number of concurrent connections supported by the network offering")
+    private Integer maxConnections;
+
     /////////////////////////////////////////////////////
     /////////////////// Accessors ///////////////////////
     /////////////////////////////////////////////////////
@@ -172,6 +175,10 @@ public class CreateNetworkOfferingCmd extends BaseCmd {
         return egressDefaultPolicy;
     }
 
+    public Integer getMaxconnections() {
+        return maxConnections;
+    }
+
     public Map<String, List<String>> getServiceProviders() {
         Map<String, List<String>> serviceProviderMap = null;
         if (serviceProviderList != null && !serviceProviderList.isEmpty()) {

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/dd33abff/api/src/org/apache/cloudstack/api/command/admin/network/UpdateNetworkOfferingCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/UpdateNetworkOfferingCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/UpdateNetworkOfferingCmd.java
index ba685a9..c9c4c8a 100644
--- a/api/src/org/apache/cloudstack/api/command/admin/network/UpdateNetworkOfferingCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/admin/network/UpdateNetworkOfferingCmd.java
@@ -57,6 +57,9 @@ public class UpdateNetworkOfferingCmd extends BaseCmd {
     @Parameter(name=ApiConstants.STATE, type=CommandType.STRING, description="update state for the network offering")
     private String state;
 
+    @Parameter(name=ApiConstants.MAX_CONNECTIONS, type=CommandType.INTEGER, description="maximum number of concurrent connections supported by the network offering")
+    private Integer maxConnections;
+
     /////////////////////////////////////////////////////
     /////////////////// Accessors ///////////////////////
     /////////////////////////////////////////////////////
@@ -85,6 +88,9 @@ public class UpdateNetworkOfferingCmd extends BaseCmd {
         return sortKey;
     }
 
+    public Integer getMaxconnections() {
+        return maxConnections;
+    }
     /////////////////////////////////////////////////////
     /////////////// API Implementation///////////////////
     /////////////////////////////////////////////////////

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/dd33abff/core/src/com/cloud/agent/api/routing/LoadBalancerConfigCommand.java
----------------------------------------------------------------------
diff --git a/core/src/com/cloud/agent/api/routing/LoadBalancerConfigCommand.java b/core/src/com/cloud/agent/api/routing/LoadBalancerConfigCommand.java
index 1c1fb91..ee29290 100644
--- a/core/src/com/cloud/agent/api/routing/LoadBalancerConfigCommand.java
+++ b/core/src/com/cloud/agent/api/routing/LoadBalancerConfigCommand.java
@@ -32,6 +32,7 @@ public class LoadBalancerConfigCommand extends NetworkElementCommand {
     public String lbStatsSrcCidrs = "0/0" ; /* TODO : currently there is no filtering based on the source ip */
     public String lbStatsAuth = "admin1:AdMiN123";
     public String lbStatsUri = "/admin?stats";
+    public String maxconn ="";
     NicTO nic;
     Long vpcId;
 
@@ -43,13 +44,14 @@ public class LoadBalancerConfigCommand extends NetworkElementCommand {
     	this.vpcId = vpcId;
     }
 
-    public LoadBalancerConfigCommand(LoadBalancerTO[] loadBalancers,String PublicIp,String GuestIp,String PrivateIp, NicTO nic, Long vpcId) {
+    public LoadBalancerConfigCommand(LoadBalancerTO[] loadBalancers,String PublicIp,String GuestIp,String PrivateIp, NicTO nic, Long vpcId, String maxconn) {
     	this.loadBalancers = loadBalancers;
     	this.lbStatsPublicIP = PublicIp;
     	this.lbStatsPrivateIP = PrivateIp;
     	this.lbStatsGuestIP = GuestIp;
     	this.nic = nic;
     	this.vpcId = vpcId;
+        this.maxconn=maxconn;
     }
 
     public NicTO getNic() {

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/dd33abff/core/src/com/cloud/network/HAProxyConfigurator.java
----------------------------------------------------------------------
diff --git a/core/src/com/cloud/network/HAProxyConfigurator.java b/core/src/com/cloud/network/HAProxyConfigurator.java
index 162571f..2309125 100644
--- a/core/src/com/cloud/network/HAProxyConfigurator.java
+++ b/core/src/com/cloud/network/HAProxyConfigurator.java
@@ -528,8 +528,9 @@ public class HAProxyConfigurator implements LoadBalancerConfigurator {
     @Override
     public String[] generateConfiguration(LoadBalancerConfigCommand lbCmd)   {
         List<String> result = new ArrayList<String>();
-
-        result.addAll(Arrays.asList(globalSection));
+        List <String> gSection =  Arrays.asList(globalSection);
+        gSection.set(2,"\tmaxconn " + lbCmd.maxconn);
+        result.addAll(gSection);
         result.add(blankLine);
         result.addAll(Arrays.asList(defaultsSection));
         if (!lbCmd.lbStatsVisibility.equals("disabled")) {

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/dd33abff/engine/schema/src/com/cloud/offerings/NetworkOfferingVO.java
----------------------------------------------------------------------
diff --git a/engine/schema/src/com/cloud/offerings/NetworkOfferingVO.java b/engine/schema/src/com/cloud/offerings/NetworkOfferingVO.java
index 6317f72..f8f25ea 100755
--- a/engine/schema/src/com/cloud/offerings/NetworkOfferingVO.java
+++ b/engine/schema/src/com/cloud/offerings/NetworkOfferingVO.java
@@ -133,6 +133,9 @@ public class NetworkOfferingVO implements NetworkOffering {
     @Column(name = "egress_default_policy")
     boolean egressdefaultpolicy;
 
+    @Column(name = "concurrent_connections")
+    Integer concurrent_connections;
+
     @Override
     public String getDisplayText() {
         return displayText;
@@ -426,4 +429,11 @@ public class NetworkOfferingVO implements NetworkOffering {
         this.internalLb = internalLb;
     }
 
+    public Integer getConcurrentConnections() {
+        return  this.concurrent_connections;
+    }
+
+    public void setConcurrentConnections(Integer concurrent_connections) {
+        this.concurrent_connections = concurrent_connections;
+    }
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/dd33abff/plugins/network-elements/elastic-loadbalancer/src/com/cloud/network/lb/ElasticLoadBalancerManagerImpl.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/elastic-loadbalancer/src/com/cloud/network/lb/ElasticLoadBalancerManagerImpl.java b/plugins/network-elements/elastic-loadbalancer/src/com/cloud/network/lb/ElasticLoadBalancerManagerImpl.java
index 9c34a8b..3e2cbbe 100644
--- a/plugins/network-elements/elastic-loadbalancer/src/com/cloud/network/lb/ElasticLoadBalancerManagerImpl.java
+++ b/plugins/network-elements/elastic-loadbalancer/src/com/cloud/network/lb/ElasticLoadBalancerManagerImpl.java
@@ -303,8 +303,16 @@ ElasticLoadBalancerManager, VirtualMachineGuru<DomainRouterVO> {
             lbs[i++] = lb; 
         }
 
+        NetworkOffering offering =_networkOfferingDao.findById(guestNetworkId);
+        String maxconn= null;
+        if (offering.getConcurrentConnections() == null) {
+            maxconn =  _configDao.getValue(Config.NetworkLBHaproxyMaxConn.key());
+        }
+        else {
+            maxconn = offering.getConcurrentConnections().toString();
+        }
         LoadBalancerConfigCommand cmd = new LoadBalancerConfigCommand(lbs,elbVm.getPublicIpAddress(),
-                _nicDao.getIpAddress(guestNetworkId, elbVm.getId()),elbVm.getPrivateIpAddress(), null, null);
+                _nicDao.getIpAddress(guestNetworkId, elbVm.getId()),elbVm.getPrivateIpAddress(), null, null, maxconn);
         cmd.setAccessDetail(NetworkElementCommand.ROUTER_IP,
                 elbVm.getPrivateIpAddress());
         cmd.setAccessDetail(NetworkElementCommand.ROUTER_NAME,

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/dd33abff/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 5d6a671..e027ec3 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
@@ -482,9 +482,17 @@ public class InternalLoadBalancerVMManagerImpl extends ManagerBase implements
                 _ntwkModel.isSecurityGroupSupportedInNetwork(guestNetwork), 
                 _ntwkModel.getNetworkTag(internalLbVm.getHypervisorType(), guestNetwork));
 
-        LoadBalancerConfigCommand cmd = new LoadBalancerConfigCommand(lbs, guestNic.getIp4Address(), 
+        NetworkOffering offering =_networkOfferingDao.findById(guestNetworkId);
+        String maxconn= null;
+        if (offering.getConcurrentConnections() == null) {
+            maxconn =  _configDao.getValue(Config.NetworkLBHaproxyMaxConn.key());
+        }
+        else {
+            maxconn = offering.getConcurrentConnections().toString();
+        }
+        LoadBalancerConfigCommand cmd = new LoadBalancerConfigCommand(lbs, guestNic.getIp4Address(),
                 guestNic.getIp4Address(), internalLbVm.getPrivateIpAddress(), 
-                _itMgr.toNicTO(guestNicProfile, internalLbVm.getHypervisorType()), internalLbVm.getVpcId());
+                _itMgr.toNicTO(guestNicProfile, internalLbVm.getHypervisorType()), internalLbVm.getVpcId(), maxconn);
 
         cmd.lbStatsVisibility = _configDao.getValue(Config.NetworkLBHaproxyStatsVisbility.key());
         cmd.lbStatsUri = _configDao.getValue(Config.NetworkLBHaproxyStatsUri.key());
@@ -878,7 +886,7 @@ public class InternalLoadBalancerVMManagerImpl extends ManagerBase implements
             s_logger.debug("No lb rules to be applied for network " + network);
             return true;
         }
-        
+        s_logger.info("lb rules to be applied for network ");
         //only one internal lb vm is supported per ip address at this time
         if (internalLbVms == null || internalLbVms.isEmpty()) {
             throw new CloudRuntimeException("Can't apply the lb rules on network " + network + " as the list of internal lb vms is empty");

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/dd33abff/plugins/network-elements/internal-loadbalancer/test/org/apache/cloudstack/internallbvmmgr/InternalLBVMManagerTest.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/internal-loadbalancer/test/org/apache/cloudstack/internallbvmmgr/InternalLBVMManagerTest.java b/plugins/network-elements/internal-loadbalancer/test/org/apache/cloudstack/internallbvmmgr/InternalLBVMManagerTest.java
index a19a82e..85cf87e 100644
--- a/plugins/network-elements/internal-loadbalancer/test/org/apache/cloudstack/internallbvmmgr/InternalLBVMManagerTest.java
+++ b/plugins/network-elements/internal-loadbalancer/test/org/apache/cloudstack/internallbvmmgr/InternalLBVMManagerTest.java
@@ -24,6 +24,9 @@ import java.util.List;
 
 import javax.inject.Inject;
 
+import com.cloud.offering.NetworkOffering;
+import com.cloud.offerings.NetworkOfferingVO;
+import com.cloud.offerings.dao.NetworkOfferingDao;
 import junit.framework.TestCase;
 
 import org.apache.cloudstack.lb.ApplicationLoadBalancerRuleVO;
@@ -91,7 +94,7 @@ public class InternalLBVMManagerTest extends TestCase {
     @Inject NetworkModel _ntwkModel;
     @Inject VirtualMachineManager _itMgr;
     @Inject DataCenterDao _dcDao;
-    
+    @Inject NetworkOfferingDao _offeringDao;
     long validNtwkId = 1L;
     long invalidNtwkId = 2L;
     String requestedIp = "10.1.1.1";
@@ -153,7 +156,9 @@ public class InternalLBVMManagerTest extends TestCase {
         DataCenterVO dc = new DataCenterVO
                 (1L, null, null, null, null, null, null, null, null, null, NetworkType.Advanced, null, null);
         Mockito.when(_dcDao.findById(Mockito.anyLong())).thenReturn(dc);
-        
+        NetworkOfferingVO networkOfferingVO = new NetworkOfferingVO();
+        networkOfferingVO.setConcurrentConnections(500);
+        Mockito.when(_offeringDao.findById(Mockito.anyLong())).thenReturn(networkOfferingVO);
         
         try {
             Mockito.when(_itMgr.expunge(Mockito.any(DomainRouterVO.class), Mockito.any(User.class), Mockito.any(Account.class))).thenReturn(true);

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/dd33abff/server/src/com/cloud/configuration/Config.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/configuration/Config.java b/server/src/com/cloud/configuration/Config.java
index e77f6ce..bb0237c 100755
--- a/server/src/com/cloud/configuration/Config.java
+++ b/server/src/com/cloud/configuration/Config.java
@@ -92,6 +92,7 @@ public enum Config {
 	NetworkLBHaproxyStatsUri("Network", ManagementServer.class, String.class, "network.loadbalancer.haproxy.stats.uri","/admin?stats","Load Balancer(haproxy) uri.",null),
 	NetworkLBHaproxyStatsAuth("Secure", ManagementServer.class, String.class, "network.loadbalancer.haproxy.stats.auth","admin1:AdMiN123","Load Balancer(haproxy) authetication string in the format username:password",null),
 	NetworkLBHaproxyStatsPort("Network", ManagementServer.class, String.class, "network.loadbalancer.haproxy.stats.port","8081","Load Balancer(haproxy) stats port number.",null),
+    NetworkLBHaproxyMaxConn("Network", ManagementServer.class, Integer.class, "network.loadbalancer.haproxy.max.conn", "4096", "Load Balancer(haproxy) maximum number of concurrent connections(global max)", null),
 	NetworkRouterRpFilter("Network", ManagementServer.class, Integer.class, "network.disable.rpfilter", "true", "disable rp_filter on Domain Router VM public interfaces.", null),
 
 	GuestVlanBits("Network", ManagementServer.class, Integer.class, "guest.vlan.bits", "12", "The number of bits to reserve for the VLAN identifier in the guest subnet.", null),

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/dd33abff/server/src/com/cloud/configuration/ConfigurationManager.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/configuration/ConfigurationManager.java b/server/src/com/cloud/configuration/ConfigurationManager.java
index 1b99b63..e06488e 100755
--- a/server/src/com/cloud/configuration/ConfigurationManager.java
+++ b/server/src/com/cloud/configuration/ConfigurationManager.java
@@ -219,7 +219,7 @@ public interface ConfigurationManager extends ConfigurationService, Manager {
 
     NetworkOfferingVO createNetworkOffering(String name, String displayText, TrafficType trafficType, String tags, boolean specifyVlan, Availability availability, Integer networkRate, Map<Service, Set<Provider>> serviceProviderMap,
             boolean isDefault, Network.GuestType type, boolean systemOnly, Long serviceOfferingId, boolean conserveMode, Map<Service, Map<Capability, String>> serviceCapabilityMap,
-            boolean specifyIpRanges, boolean isPersistent, Map<NetworkOffering.Detail,String> details, boolean egressDefaultPolicy);
+            boolean specifyIpRanges, boolean isPersistent, Map<NetworkOffering.Detail,String> details, boolean egressDefaultPolicy, Integer maxconn);
 
     Vlan createVlanAndPublicIpRange(long zoneId, long networkId, long physicalNetworkId, boolean forVirtualNetwork, Long podId, String startIP, String endIP, String vlanGateway, String vlanNetmask, String vlanId, Account vlanOwner, String startIPv6, String endIPv6, String vlanIp6Gateway, String vlanIp6Cidr) throws InsufficientCapacityException, ConcurrentOperationException, InvalidParameterValueException;
 

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/dd33abff/server/src/com/cloud/configuration/ConfigurationManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/configuration/ConfigurationManagerImpl.java b/server/src/com/cloud/configuration/ConfigurationManagerImpl.java
index bdb5260..9498c82 100755
--- a/server/src/com/cloud/configuration/ConfigurationManagerImpl.java
+++ b/server/src/com/cloud/configuration/ConfigurationManagerImpl.java
@@ -3827,6 +3827,7 @@ public class ConfigurationManagerImpl extends ManagerBase implements Configurati
         boolean isPersistent = cmd.getIsPersistent();
         Map<String, String> detailsStr = cmd.getDetails();
         Boolean egressDefaultPolicy = cmd.getEgressDefaultPolicy();
+        Integer maxconn = null;
 
         // Verify traffic type
         for (TrafficType tType : TrafficType.values()) {
@@ -3981,7 +3982,14 @@ public class ConfigurationManagerImpl extends ManagerBase implements Configurati
                     "Capabilities for LB service can be specifed only when LB service is enabled for network offering.");
         }
         validateLoadBalancerServiceCapabilities(lbServiceCapabilityMap);
-
+        
+        if (lbServiceCapabilityMap != null && !lbServiceCapabilityMap.isEmpty()) {
+            maxconn = cmd.getMaxconnections();
+            if (maxconn == null) {
+                maxconn=Integer.parseInt(_configDao.getValue(Config.NetworkLBHaproxyMaxConn.key()));
+            }
+        }
+        
         // validate the Source NAT service capabilities specified in the network
         // offering
         Map<Capability, String> sourceNatServiceCapabilityMap = cmd.getServiceCapabilities(Service.SourceNat);
@@ -4176,7 +4184,7 @@ public class ConfigurationManagerImpl extends ManagerBase implements Configurati
             Map<Service, Set<Provider>> serviceProviderMap, boolean isDefault, Network.GuestType type,
             boolean systemOnly, Long serviceOfferingId, boolean conserveMode,
             Map<Service, Map<Capability, String>> serviceCapabilityMap, boolean specifyIpRanges, boolean isPersistent,
-            Map<NetworkOffering.Detail, String> details, boolean egressDefaultPolicy) {
+            Map<NetworkOffering.Detail, String> details, boolean egressDefaultPolicy, Integer maxconn) {
 
         String multicastRateStr = _configDao.getValue("multicast.throttling.rate");
         int multicastRate = ((multicastRateStr == null) ? 10 : Integer.parseInt(multicastRateStr));
@@ -4334,6 +4342,7 @@ public class ConfigurationManagerImpl extends ManagerBase implements Configurati
         txn.start();
         // 1) create network offering object
         s_logger.debug("Adding network offering " + offering);
+        offering.setConcurrentConnections(maxconn);
         offering = _networkOfferingDao.persist(offering, details);
         // 2) populate services and providers
         if (serviceProviderMap != null) {
@@ -4694,6 +4703,7 @@ public class ConfigurationManagerImpl extends ManagerBase implements Configurati
         String name = cmd.getNetworkOfferingName();
         String availabilityStr = cmd.getAvailability();
         Integer sortKey = cmd.getSortKey();
+        Integer maxconn = cmd.getMaxconnections();
         Availability availability = null;
         String state = cmd.getState();
         CallContext.current().setEventDetails(" Id: " + id);
@@ -4768,6 +4778,10 @@ public class ConfigurationManagerImpl extends ManagerBase implements Configurati
             }
         }
 
+        if (maxconn != null) {
+            offering.setConcurrentConnections(maxconn);
+        }
+
         if (_networkOfferingDao.update(id, offering)) {
             return _networkOfferingDao.findById(id);
         } else {

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/dd33abff/server/src/com/cloud/network/NetworkManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/NetworkManagerImpl.java b/server/src/com/cloud/network/NetworkManagerImpl.java
index 0e80119..db375c3 100755
--- a/server/src/com/cloud/network/NetworkManagerImpl.java
+++ b/server/src/com/cloud/network/NetworkManagerImpl.java
@@ -1336,7 +1336,7 @@ public class NetworkManagerImpl extends ManagerBase implements NetworkManager, L
                     _configMgr.createNetworkOffering(NetworkOffering.QuickCloudNoServices,
                             "Offering for QuickCloud with no services", TrafficType.Guest, null, true,
                             Availability.Optional, null, new HashMap<Network.Service, Set<Network.Provider>>(), true,
-                            Network.GuestType.Shared, false, null, true, null, true, false, null, false);
+                            Network.GuestType.Shared, false, null, true, null, true, false, null, false, null);
             offering.setState(NetworkOffering.State.Enabled);
             _networkOfferingDao.update(offering.getId(), offering);
         }
@@ -1347,7 +1347,7 @@ public class NetworkManagerImpl extends ManagerBase implements NetworkManager, L
                     _configMgr.createNetworkOffering(NetworkOffering.DefaultSharedNetworkOfferingWithSGService,
                             "Offering for Shared Security group enabled networks", TrafficType.Guest, null, true,
                             Availability.Optional, null, defaultSharedNetworkOfferingProviders, true,
-                            Network.GuestType.Shared, false, null, true, null, true, false, null, false);
+                            Network.GuestType.Shared, false, null, true, null, true, false, null, false, null);
             offering.setState(NetworkOffering.State.Enabled);
             _networkOfferingDao.update(offering.getId(), offering);
         }
@@ -1355,7 +1355,7 @@ public class NetworkManagerImpl extends ManagerBase implements NetworkManager, L
         //#3 - shared network offering with no SG service
         if (_networkOfferingDao.findByUniqueName(NetworkOffering.DefaultSharedNetworkOffering) == null) {
             offering = _configMgr.createNetworkOffering(NetworkOffering.DefaultSharedNetworkOffering, "Offering for Shared networks", TrafficType.Guest, null, true, Availability.Optional, null,
-                    defaultSharedNetworkOfferingProviders, true, Network.GuestType.Shared, false, null, true, null, true, false, null, false);
+                    defaultSharedNetworkOfferingProviders, true, Network.GuestType.Shared, false, null, true, null, true, false, null, false, null);
             offering.setState(NetworkOffering.State.Enabled);
             _networkOfferingDao.update(offering.getId(), offering);
         }
@@ -1366,7 +1366,7 @@ public class NetworkManagerImpl extends ManagerBase implements NetworkManager, L
             offering = _configMgr.createNetworkOffering(NetworkOffering.DefaultIsolatedNetworkOfferingWithSourceNatService,
                     "Offering for Isolated networks with Source Nat service enabled", TrafficType.Guest,
                     null, false, Availability.Required, null, defaultIsolatedSourceNatEnabledNetworkOfferingProviders,
-                    true, Network.GuestType.Isolated, false, null, true, null, false, false, null, false);
+                    true, Network.GuestType.Isolated, false, null, true, null, false, false, null, false, null);
 
             offering.setState(NetworkOffering.State.Enabled);
             _networkOfferingDao.update(offering.getId(), offering);
@@ -1377,7 +1377,7 @@ public class NetworkManagerImpl extends ManagerBase implements NetworkManager, L
             offering = _configMgr.createNetworkOffering(NetworkOffering.DefaultIsolatedNetworkOfferingForVpcNetworks,
                     "Offering for Isolated VPC networks with Source Nat service enabled", TrafficType.Guest,
                     null, false, Availability.Optional, null, defaultVPCOffProviders,
-                    true, Network.GuestType.Isolated, false, null, false, null, false, false, null,false);
+                    true, Network.GuestType.Isolated, false, null, false, null, false, false, null,false, null);
             offering.setState(NetworkOffering.State.Enabled);
             _networkOfferingDao.update(offering.getId(), offering);
         }
@@ -1389,7 +1389,7 @@ public class NetworkManagerImpl extends ManagerBase implements NetworkManager, L
             offering = _configMgr.createNetworkOffering(NetworkOffering.DefaultIsolatedNetworkOfferingForVpcNetworksNoLB,
                     "Offering for Isolated VPC networks with Source Nat service enabled and LB service disabled", TrafficType.Guest,
                     null, false, Availability.Optional, null, defaultVPCOffProviders,
-                    true, Network.GuestType.Isolated, false, null, false, null, false, false, null, false);
+                    true, Network.GuestType.Isolated, false, null, false, null, false, false, null, false, null);
             offering.setState(NetworkOffering.State.Enabled);
             _networkOfferingDao.update(offering.getId(), offering);
         }
@@ -1399,7 +1399,7 @@ public class NetworkManagerImpl extends ManagerBase implements NetworkManager, L
             offering = _configMgr.createNetworkOffering(NetworkOffering.DefaultIsolatedNetworkOffering,
                     "Offering for Isolated networks with no Source Nat service", TrafficType.Guest, null, true,
                     Availability.Optional, null, defaultIsolatedNetworkOfferingProviders, true, Network.GuestType.Isolated,
-                    false, null, true, null, true, false, null, false);
+                    false, null, true, null, true, false, null, false, null);
             offering.setState(NetworkOffering.State.Enabled);
             _networkOfferingDao.update(offering.getId(), offering);
         }
@@ -1425,7 +1425,7 @@ public class NetworkManagerImpl extends ManagerBase implements NetworkManager, L
             offering = _configMgr.createNetworkOffering(NetworkOffering.DefaultIsolatedNetworkOfferingForVpcNetworksWithInternalLB,
                     "Offering for Isolated VPC networks with Internal Lb support", TrafficType.Guest,
                     null, false, Availability.Optional, null, internalLbOffProviders,
-                    true, Network.GuestType.Isolated, false, null, false, null, false, false, null, false);
+                    true, Network.GuestType.Isolated, false, null, false, null, false, false, null, false, null);
             offering.setState(NetworkOffering.State.Enabled);
             offering.setInternalLb(true);
             _networkOfferingDao.update(offering.getId(), offering);
@@ -1455,7 +1455,7 @@ public class NetworkManagerImpl extends ManagerBase implements NetworkManager, L
 
         if (_networkOfferingDao.findByUniqueName(NetworkOffering.DefaultSharedEIPandELBNetworkOffering) == null) {
             offering = _configMgr.createNetworkOffering(NetworkOffering.DefaultSharedEIPandELBNetworkOffering, "Offering for Shared networks with Elastic IP and Elastic LB capabilities", TrafficType.Guest, null, true,
-                    Availability.Optional, null, netscalerServiceProviders, true, Network.GuestType.Shared, false, null, true, serviceCapabilityMap, true, false, null, false);
+                    Availability.Optional, null, netscalerServiceProviders, true, Network.GuestType.Shared, false, null, true, serviceCapabilityMap, true, false, null, false, null);
             offering.setState(NetworkOffering.State.Enabled);
             offering.setDedicatedLB(false);
             _networkOfferingDao.update(offering.getId(), offering);

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/dd33abff/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java
index 0a67cff..e437af6 100755
--- a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java
+++ b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java
@@ -3319,10 +3319,17 @@ public class VirtualNetworkApplianceManagerImpl extends ManagerBase implements V
                 _networkModel.getNetworkRate(guestNetwork.getId(), router.getId()),
                 _networkModel.isSecurityGroupSupportedInNetwork(guestNetwork),
                 _networkModel.getNetworkTag(router.getHypervisorType(), guestNetwork));
-
-        LoadBalancerConfigCommand cmd = new LoadBalancerConfigCommand(lbs,routerPublicIp,
-                getRouterIpInNetwork(guestNetworkId, router.getId()),router.getPrivateIpAddress(),
-                _itMgr.toNicTO(nicProfile, router.getHypervisorType()), router.getVpcId());
+        NetworkOffering offering =_networkOfferingDao.findById(guestNetwork.getNetworkOfferingId());
+        String maxconn= null;
+        if (offering.getConcurrentConnections() == null) {
+            maxconn =  _configDao.getValue(Config.NetworkLBHaproxyMaxConn.key());
+        }
+        else {
+            maxconn = offering.getConcurrentConnections().toString();
+        }
+        LoadBalancerConfigCommand cmd = new LoadBalancerConfigCommand(lbs, routerPublicIp,
+                getRouterIpInNetwork(guestNetworkId, router.getId()), router.getPrivateIpAddress(),
+                _itMgr.toNicTO(nicProfile, router.getHypervisorType()), router.getVpcId(), maxconn);
 
         cmd.lbStatsVisibility = _configDao.getValue(Config.NetworkLBHaproxyStatsVisbility.key());
         cmd.lbStatsUri = _configDao.getValue(Config.NetworkLBHaproxyStatsUri.key());

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/dd33abff/server/test/com/cloud/vpc/MockConfigurationManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/test/com/cloud/vpc/MockConfigurationManagerImpl.java b/server/test/com/cloud/vpc/MockConfigurationManagerImpl.java
index 7a61978..80b9e23 100755
--- a/server/test/com/cloud/vpc/MockConfigurationManagerImpl.java
+++ b/server/test/com/cloud/vpc/MockConfigurationManagerImpl.java
@@ -555,7 +555,7 @@ public class MockConfigurationManagerImpl extends ManagerBase implements Configu
     @Override
     public NetworkOfferingVO createNetworkOffering(String name, String displayText, TrafficType trafficType, String tags, boolean specifyVlan, Availability availability, Integer networkRate,
             Map<Service, Set<Provider>> serviceProviderMap, boolean isDefault, GuestType type, boolean systemOnly, Long serviceOfferingId, boolean conserveMode,
-            Map<Service, Map<Capability, String>> serviceCapabilityMap, boolean specifyIpRanges, boolean isPersistent, Map<NetworkOffering.Detail,String> details, boolean egressDefaultPolicy) {
+            Map<Service, Map<Capability, String>> serviceCapabilityMap, boolean specifyIpRanges, boolean isPersistent, Map<NetworkOffering.Detail,String> details, boolean egressDefaultPolicy, Integer maxconn) {
         // TODO Auto-generated method stub
         return null;
     }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/dd33abff/server/test/org/apache/cloudstack/networkoffering/CreateNetworkOfferingTest.java
----------------------------------------------------------------------
diff --git a/server/test/org/apache/cloudstack/networkoffering/CreateNetworkOfferingTest.java b/server/test/org/apache/cloudstack/networkoffering/CreateNetworkOfferingTest.java
index 9825cab..5527031 100644
--- a/server/test/org/apache/cloudstack/networkoffering/CreateNetworkOfferingTest.java
+++ b/server/test/org/apache/cloudstack/networkoffering/CreateNetworkOfferingTest.java
@@ -106,7 +106,7 @@ public class CreateNetworkOfferingTest extends TestCase{
     public void createSharedNtwkOffWithVlan() {
         NetworkOfferingVO off = configMgr.createNetworkOffering("shared", "shared", TrafficType.Guest, null, true,
                 Availability.Optional, 200, null, false, Network.GuestType.Shared, false,
-                null, false, null, true, false, null, false);
+                null, false, null, true, false, null, false, null);
         assertNotNull("Shared network offering with specifyVlan=true failed to create ", off);
     }
     
@@ -115,7 +115,7 @@ public class CreateNetworkOfferingTest extends TestCase{
         try {
             NetworkOfferingVO off = configMgr.createNetworkOffering("shared", "shared", TrafficType.Guest, null, false,
                     Availability.Optional, 200, null, false, Network.GuestType.Shared, false,
-                    null, false, null, true, false, null, false);
+                    null, false, null, true, false, null, false, null);
             assertNull("Shared network offering with specifyVlan=false was created", off);
         } catch (InvalidParameterValueException ex) {
         }
@@ -125,7 +125,7 @@ public class CreateNetworkOfferingTest extends TestCase{
     public void createSharedNtwkOffWithSpecifyIpRanges() {
         NetworkOfferingVO off = configMgr.createNetworkOffering("shared", "shared", TrafficType.Guest, null, true,
                 Availability.Optional, 200, null, false, Network.GuestType.Shared, false,
-                null, false, null, true, false, null, false);
+                null, false, null, true, false, null, false, null);
         
         assertNotNull("Shared network offering with specifyIpRanges=true failed to create ", off);
     }
@@ -135,7 +135,7 @@ public class CreateNetworkOfferingTest extends TestCase{
         try {
             NetworkOfferingVO off = configMgr.createNetworkOffering("shared", "shared", TrafficType.Guest, null, true,
                     Availability.Optional, 200, null, false, Network.GuestType.Shared, false,
-                    null, false, null, false, false, null, false);
+                    null, false, null, false, false, null, false, null);
             assertNull("Shared network offering with specifyIpRanges=false was created", off);
         } catch (InvalidParameterValueException ex) {
         }
@@ -150,7 +150,7 @@ public class CreateNetworkOfferingTest extends TestCase{
         serviceProviderMap.put(Network.Service.SourceNat, vrProvider);
         NetworkOfferingVO off = configMgr.createNetworkOffering("isolated", "isolated", TrafficType.Guest, null, false,
                 Availability.Optional, 200, serviceProviderMap, false, Network.GuestType.Isolated, false,
-                null, false, null, false, false, null, false);
+                null, false, null, false, false, null, false, null);
         
         assertNotNull("Isolated network offering with specifyIpRanges=false failed to create ", off);
     }
@@ -163,7 +163,7 @@ public class CreateNetworkOfferingTest extends TestCase{
         serviceProviderMap.put(Network.Service.SourceNat, vrProvider);
         NetworkOfferingVO off = configMgr.createNetworkOffering("isolated", "isolated", TrafficType.Guest, null, true,
                 Availability.Optional, 200, serviceProviderMap, false, Network.GuestType.Isolated, false,
-                null, false, null, false, false, null, false);
+                null, false, null, false, false, null, false, null);
         assertNotNull("Isolated network offering with specifyVlan=true wasn't created", off);
        
     }
@@ -177,7 +177,7 @@ public class CreateNetworkOfferingTest extends TestCase{
             serviceProviderMap.put(Network.Service.SourceNat, vrProvider);
             NetworkOfferingVO off = configMgr.createNetworkOffering("isolated", "isolated", TrafficType.Guest, null, false,
                     Availability.Optional, 200, serviceProviderMap, false, Network.GuestType.Isolated, false,
-                    null, false, null, true, false, null, false);
+                    null, false, null, true, false, null, false, null);
             assertNull("Isolated network offering with specifyIpRanges=true and source nat service enabled, was created", off);
         } catch (InvalidParameterValueException ex) {
         }
@@ -190,7 +190,7 @@ public class CreateNetworkOfferingTest extends TestCase{
         Set<Network.Provider> vrProvider = new HashSet<Network.Provider>();
         NetworkOfferingVO off = configMgr.createNetworkOffering("isolated", "isolated", TrafficType.Guest, null, false,
                 Availability.Optional, 200, serviceProviderMap, false, Network.GuestType.Isolated, false,
-                null, false, null, true, false, null, false);
+                null, false, null, true, false, null, false, null);
         assertNotNull("Isolated network offering with specifyIpRanges=true and with no sourceNatService, failed to create", off);
         
     }
@@ -208,7 +208,7 @@ public class CreateNetworkOfferingTest extends TestCase{
         serviceProviderMap.put(Network.Service.Lb , vrProvider);
         NetworkOfferingVO off = configMgr.createNetworkOffering("isolated", "isolated", TrafficType.Guest, null, true,
                 Availability.Optional, 200, serviceProviderMap, false, Network.GuestType.Isolated, false,
-                null, false, null, false, false, null, false);
+                null, false, null, false, false, null, false, null);
         // System.out.println("Creating Vpc Network Offering");
         assertNotNull("Vpc Isolated network offering with Vpc provider ", off);
     }
@@ -228,7 +228,7 @@ public class CreateNetworkOfferingTest extends TestCase{
         serviceProviderMap.put(Network.Service.Lb, lbProvider);
         NetworkOfferingVO off = configMgr.createNetworkOffering("isolated", "isolated", TrafficType.Guest, null, true,
                 Availability.Optional, 200, serviceProviderMap, false, Network.GuestType.Isolated, false, null, false,
-                null, false, false, null, false);
+                null, false, false, null, false, null);
         // System.out.println("Creating Vpc Network Offering");
         assertNotNull("Vpc Isolated network offering with Vpc and Netscaler provider ", off);
     }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/dd33abff/setup/db/db/schema-410to420.sql
----------------------------------------------------------------------
diff --git a/setup/db/db/schema-410to420.sql b/setup/db/db/schema-410to420.sql
index e9fa995..fe1426e 100644
--- a/setup/db/db/schema-410to420.sql
+++ b/setup/db/db/schema-410to420.sql
@@ -2232,3 +2232,6 @@ CREATE VIEW `cloud`.`project_view` AS
             and resource_tags.resource_type = 'Project'
             left join
         `cloud`.`project_account` pacct ON projects.id = pacct.project_id;
+INSERT IGNORE INTO `cloud`.`configuration` VALUES ('Network', 'DEFAULT', 'management-server', 'network.loadbalancer.haproxy.max.conn', '4096', 'Load Balancer(haproxy) maximum number of concurrent connections(global max)');
+
+ALTER TABLE `cloud`.`network_offerings` ADD COLUMN `concurrent_connections` int(10) unsigned COMMENT 'Load Balancer(haproxy) maximum number of concurrent connections(global max)';


[04/50] [abbrv] UserContext switched to CallContext. Added generic storage mechanism for other code to carry information throughout a call. Made the calling User and Account a must have. Added an interface to carry entities in error. Fixed up the cod

Posted by ch...@apache.org.
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/server/src/com/cloud/user/AccountManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/user/AccountManagerImpl.java b/server/src/com/cloud/user/AccountManagerImpl.java
index 283e832..4b06e78 100755
--- a/server/src/com/cloud/user/AccountManagerImpl.java
+++ b/server/src/com/cloud/user/AccountManagerImpl.java
@@ -37,6 +37,9 @@ import javax.ejb.Local;
 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.RoleType;
 import org.apache.cloudstack.acl.SecurityChecker;
@@ -46,9 +49,9 @@ import org.apache.cloudstack.api.command.admin.account.UpdateAccountCmd;
 import org.apache.cloudstack.api.command.admin.user.DeleteUserCmd;
 import org.apache.cloudstack.api.command.admin.user.RegisterCmd;
 import org.apache.cloudstack.api.command.admin.user.UpdateUserCmd;
+import org.apache.cloudstack.context.CallContext;
+import org.apache.cloudstack.context.ServerContexts;
 import org.apache.cloudstack.region.gslb.GlobalLoadBalancerRuleDao;
-import org.apache.commons.codec.binary.Base64;
-import org.apache.log4j.Logger;
 
 import com.cloud.api.ApiDBUtils;
 import com.cloud.api.query.vo.ControlledViewEntity;
@@ -104,7 +107,6 @@ import com.cloud.projects.ProjectManager;
 import com.cloud.projects.ProjectVO;
 import com.cloud.projects.dao.ProjectAccountDao;
 import com.cloud.projects.dao.ProjectDao;
-import com.cloud.region.ha.GlobalLoadBalancingRulesService;
 import com.cloud.server.auth.UserAuthenticator;
 import com.cloud.storage.VMTemplateVO;
 import com.cloud.storage.Volume;
@@ -277,7 +279,7 @@ public class AccountManagerImpl extends ManagerBase implements AccountManager, M
 	}
 
 	public void setSecurityCheckers(List<SecurityChecker> securityCheckers) {
-		this._securityCheckers = securityCheckers;
+		_securityCheckers = securityCheckers;
 	}
     
     @Override
@@ -621,7 +623,7 @@ public class AccountManagerImpl extends ManagerBase implements AccountManager, M
             for (VolumeVO volume : volumes) {
                 if (!volume.getState().equals(Volume.State.Destroy)) {
                     try {
-                        this.volumeMgr.deleteVolume(volume.getId(), caller);
+                        volumeMgr.deleteVolume(volume.getId(), caller);
                     } catch (Exception ex) {
                         s_logger.warn("Failed to cleanup volumes as a part of account id=" + accountId + " cleanup due to Exception: ", ex);
                         accountCleanupNeeded = true;
@@ -875,7 +877,7 @@ public class AccountManagerImpl extends ManagerBase implements AccountManager, M
         }
 
         // Check permissions
-        checkAccess(UserContext.current().getCaller(), domain);
+        checkAccess(CallContext.current().getCallingAccount(), domain);
 
         if (!_userAccountDao.validateUsernameInDomain(userName, domainId)) {
             throw new InvalidParameterValueException("The user " + userName + " already exists in domain " + domainId);
@@ -910,7 +912,7 @@ public class AccountManagerImpl extends ManagerBase implements AccountManager, M
         }
         txn.commit();
 
-        UserContext.current().setEntityDetails(Account.class, account.getUuid());
+        CallContext.current().putContextParameter(Account.class, account.getUuid());
 
         //check success
         return _userAccountDao.findById(user.getId());
@@ -931,7 +933,7 @@ public class AccountManagerImpl extends ManagerBase implements AccountManager, M
             throw new CloudRuntimeException("The user cannot be created as domain " + domain.getName() + " is being deleted");
         }
 
-        checkAccess(UserContext.current().getCaller(), domain);
+        checkAccess(CallContext.current().getCallingAccount(), domain);
 
         Account account = _accountDao.findEnabledAccount(accountName, domainId);
         if (account == null || account.getType() == Account.ACCOUNT_TYPE_PROJECT) {
@@ -987,7 +989,7 @@ public class AccountManagerImpl extends ManagerBase implements AccountManager, M
             throw new PermissionDeniedException("user id : " + id + " is system account, update is not allowed");
         }
 
-        checkAccess(UserContext.current().getCaller(), null, true, account);
+        checkAccess(CallContext.current().getCallingAccount(), null, true, account);
 
         if (firstName != null) {
             if (firstName.isEmpty()) {
@@ -1073,7 +1075,7 @@ public class AccountManagerImpl extends ManagerBase implements AccountManager, M
             throw new CloudRuntimeException("Unable to update user " + id);
         }
 
-        UserContext.current().setEntityDetails(User.class, user.getUuid());
+        CallContext.current().putContextParameter(User.class, user.getUuid());
 
         return _userAccountDao.findById(id);
     }
@@ -1081,7 +1083,7 @@ public class AccountManagerImpl extends ManagerBase implements AccountManager, M
     @Override
     @ActionEvent(eventType = EventTypes.EVENT_USER_DISABLE, eventDescription = "disabling User", async = true)
     public UserAccount disableUser(long userId) {
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
 
         // Check if user exists in the system
         User user = _userDao.findById(userId);
@@ -1106,7 +1108,7 @@ public class AccountManagerImpl extends ManagerBase implements AccountManager, M
         boolean success = doSetUserStatus(userId, State.disabled);
         if (success) {
 
-            UserContext.current().setEntityDetails(User.class, user.getUuid());
+            CallContext.current().putContextParameter(User.class, user.getUuid());
 
             // user successfully disabled
             return _userAccountDao.findById(userId);
@@ -1120,7 +1122,7 @@ public class AccountManagerImpl extends ManagerBase implements AccountManager, M
     @ActionEvent(eventType = EventTypes.EVENT_USER_ENABLE, eventDescription = "enabling User")
     public UserAccount enableUser(long userId) {
 
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
 
         // Check if user exists in the system
         User user = _userDao.findById(userId);
@@ -1155,7 +1157,7 @@ public class AccountManagerImpl extends ManagerBase implements AccountManager, M
             // whenever the user is successfully enabled, reset the login attempts to zero
             updateLoginAttempts(userId, 0, false);
 
-            UserContext.current().setEntityDetails(User.class, user.getUuid());
+            CallContext.current().putContextParameter(User.class, user.getUuid());
 
             return _userAccountDao.findById(userId);
         } else {
@@ -1166,7 +1168,7 @@ public class AccountManagerImpl extends ManagerBase implements AccountManager, M
     @Override
     @ActionEvent(eventType = EventTypes.EVENT_USER_LOCK, eventDescription = "locking User")
     public UserAccount lockUser(long userId) {
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
 
         // Check if user with id exists in the system
         User user = _userDao.findById(userId);
@@ -1219,7 +1221,7 @@ public class AccountManagerImpl extends ManagerBase implements AccountManager, M
 
         if (success) {
 
-            UserContext.current().setEntityDetails(User.class, user.getUuid());
+            CallContext.current().putContextParameter(User.class, user.getUuid());
 
             return _userAccountDao.findById(userId);
         } else {
@@ -1232,9 +1234,9 @@ public class AccountManagerImpl extends ManagerBase implements AccountManager, M
     // This method deletes the account
     public boolean deleteUserAccount(long accountId) {
 
-        UserContext ctx = UserContext.current();
-        long callerUserId = ctx.getCallerUserId();
-        Account caller = ctx.getCaller();
+        CallContext ctx = CallContext.current();
+        long callerUserId = ctx.getCallingUserId();
+        Account caller = ctx.getCallingAccount();
 
         // If the user is a System user, return an error. We do not allow this
         AccountVO account = _accountDao.findById(accountId);
@@ -1267,7 +1269,7 @@ public class AccountManagerImpl extends ManagerBase implements AccountManager, M
             throw new InvalidParameterValueException("The account id=" + accountId + " manages project(s) with ids " + projectIds + "and can't be removed");
         }
 
-        UserContext.current().setEntityDetails(Account.class, account.getUuid());
+        CallContext.current().putContextParameter(Account.class, account.getUuid());
 
         return deleteAccount(account, callerUserId, caller);
     }
@@ -1293,13 +1295,13 @@ public class AccountManagerImpl extends ManagerBase implements AccountManager, M
         }
 
         // Check if user performing the action is allowed to modify this account
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
         checkAccess(caller, null, true, account);
 
         boolean success = enableAccount(account.getId());
         if (success) {
 
-            UserContext.current().setEntityDetails(Account.class, account.getUuid());
+            CallContext.current().putContextParameter(Account.class, account.getUuid());
 
             return _accountDao.findById(account.getId());
         } else {
@@ -1310,7 +1312,7 @@ public class AccountManagerImpl extends ManagerBase implements AccountManager, M
     @Override
     @ActionEvent(eventType = EventTypes.EVENT_ACCOUNT_DISABLE, eventDescription = "locking account", async = true)
     public AccountVO lockAccount(String accountName, Long domainId, Long accountId) {
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
 
         Account account = null;
         if (accountId != null) {
@@ -1330,7 +1332,7 @@ public class AccountManagerImpl extends ManagerBase implements AccountManager, M
         checkAccess(caller, null, true, account);
 
         if (lockAccount(account.getId())) {
-            UserContext.current().setEntityDetails(Account.class, account.getUuid());
+            CallContext.current().putContextParameter(Account.class, account.getUuid());
             return _accountDao.findById(account.getId());
         } else {
             throw new CloudRuntimeException("Unable to lock account by accountId: " + accountId + " OR by name: " + accountName + " in domain " + domainId);
@@ -1340,7 +1342,7 @@ public class AccountManagerImpl extends ManagerBase implements AccountManager, M
     @Override
     @ActionEvent(eventType = EventTypes.EVENT_ACCOUNT_DISABLE, eventDescription = "disabling account", async = true)
     public AccountVO disableAccount(String accountName, Long domainId, Long accountId) throws ConcurrentOperationException, ResourceUnavailableException {
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
 
         Account account = null;
         if (accountId != null) {
@@ -1360,7 +1362,7 @@ public class AccountManagerImpl extends ManagerBase implements AccountManager, M
         checkAccess(caller, null, true, account);
 
         if (disableAccount(account.getId())) {
-            UserContext.current().setEntityDetails(Account.class, account.getUuid());
+            CallContext.current().putContextParameter(Account.class, account.getUuid());
             return _accountDao.findById(account.getId());
         } else {
             throw new CloudRuntimeException("Unable to update account by accountId: " + accountId + " OR by name: " + accountName + " in domain " + domainId);
@@ -1398,7 +1400,7 @@ public class AccountManagerImpl extends ManagerBase implements AccountManager, M
         }
 
         // Check if user performing the action is allowed to modify this account
-        checkAccess(UserContext.current().getCaller(), _domainMgr.getDomain(account.getDomainId()));
+        checkAccess(CallContext.current().getCallingAccount(), _domainMgr.getDomain(account.getDomainId()));
 
         // check if the given account name is unique in this domain for updating
         Account duplicateAcccount = _accountDao.findActiveAccount(newAccountName, domainId);
@@ -1443,7 +1445,7 @@ public class AccountManagerImpl extends ManagerBase implements AccountManager, M
         txn.commit();
 
         if (success) {
-            UserContext.current().setEntityDetails(Account.class, account.getUuid());
+            CallContext.current().putContextParameter(Account.class, account.getUuid());
             return _accountDao.findById(account.getId());
         } else {
             throw new CloudRuntimeException("Unable to update account by accountId: " + accountId + " OR by name: " + accountName + " in domain " + domainId);
@@ -1473,8 +1475,8 @@ public class AccountManagerImpl extends ManagerBase implements AccountManager, M
             throw new InvalidParameterValueException("The user is default and can't be removed");
         }
 
-        checkAccess(UserContext.current().getCaller(), null, true, account);
-        UserContext.current().setEntityDetails(User.class, user.getUuid());
+        checkAccess(CallContext.current().getCallingAccount(), null, true, account);
+        CallContext.current().putContextParameter(User.class, user.getUuid());
         return _userDao.remove(id);
     }
 
@@ -1489,6 +1491,7 @@ public class AccountManagerImpl extends ManagerBase implements AccountManager, M
         @Override
         public void run() {
             try {
+                ServerContexts.registerSystemContext();
                 GlobalLock lock = GlobalLock.getInternLock("AccountCleanup");
                 if (lock == null) {
                     s_logger.debug("Couldn't get the global lock");
@@ -1500,10 +1503,7 @@ public class AccountManagerImpl extends ManagerBase implements AccountManager, M
                     return;
                 }
 
-                Transaction txn = null;
                 try {
-                    txn = Transaction.open(Transaction.CLOUD_DB);
-
                     // Cleanup removed accounts
                     List<AccountVO> removedAccounts = _accountDao.findCleanupsForRemovedAccounts(null);
                     s_logger.info("Found " + removedAccounts.size() + " removed accounts to cleanup");
@@ -1560,7 +1560,7 @@ public class AccountManagerImpl extends ManagerBase implements AccountManager, M
                             Account projectAccount = getAccount(project.getProjectAccountId());
                             if (projectAccount == null) {
                                 s_logger.debug("Removing inactive project id=" + project.getId());
-                                _projectMgr.deleteProject(UserContext.current().getCaller(), UserContext.current().getCallerUserId(), project);
+                                _projectMgr.deleteProject(CallContext.current().getCallingAccount(), CallContext.current().getCallingUserId(), project);
                             } else {
                                 s_logger.debug("Can't remove disabled project " + project + " as it has non removed account id=" + project.getId());
                             }
@@ -1572,11 +1572,8 @@ public class AccountManagerImpl extends ManagerBase implements AccountManager, M
                 } catch (Exception e) {
                     s_logger.error("Exception ", e);
                 } finally {
-                    if (txn != null) {
-                        txn.close();
-                    }
-
                     lock.unlock();
+                    ServerContexts.unregisterSystemContext();
                 }
             } catch (Exception e) {
                 s_logger.error("Exception ", e);
@@ -1793,7 +1790,7 @@ public class AccountManagerImpl extends ManagerBase implements AccountManager, M
             userUUID =  UUID.randomUUID().toString();
         }
         UserVO user = _userDao.persist(new UserVO(accountId, userName, encodedPassword, firstName, lastName, email, timezone, userUUID));
-        UserContext.current().setEntityDetails(User.class, user.getUuid());
+        CallContext.current().putContextParameter(User.class, user.getUuid());
         return user;
     }
 

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/server/src/com/cloud/user/DomainManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/user/DomainManagerImpl.java b/server/src/com/cloud/user/DomainManagerImpl.java
index aad5787..c862061 100644
--- a/server/src/com/cloud/user/DomainManagerImpl.java
+++ b/server/src/com/cloud/user/DomainManagerImpl.java
@@ -24,12 +24,14 @@ import java.util.UUID;
 import javax.ejb.Local;
 import javax.inject.Inject;
 
+import org.apache.log4j.Logger;
+import org.springframework.stereotype.Component;
+
 import org.apache.cloudstack.api.command.admin.domain.ListDomainChildrenCmd;
 import org.apache.cloudstack.api.command.admin.domain.ListDomainsCmd;
 import org.apache.cloudstack.api.command.admin.domain.UpdateDomainCmd;
+import org.apache.cloudstack.context.CallContext;
 import org.apache.cloudstack.region.RegionManager;
-import org.apache.log4j.Logger;
-import org.springframework.stereotype.Component;
 
 import com.cloud.configuration.Resource.ResourceOwnerType;
 import com.cloud.configuration.ResourceLimit;
@@ -133,7 +135,7 @@ public class DomainManagerImpl extends ManagerBase implements DomainManager, Dom
     @Override
     @ActionEvent(eventType = EventTypes.EVENT_DOMAIN_CREATE, eventDescription = "creating Domain")
     public Domain createDomain(String name, Long parentId, String networkDomain, String domainUUID) {
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
 
         if (parentId == null) {
             parentId = Long.valueOf(DomainVO.ROOT_DOMAIN);
@@ -184,7 +186,7 @@ public class DomainManagerImpl extends ManagerBase implements DomainManager, Dom
         DomainVO domain = _domainDao.create(new DomainVO(name, ownerId, parentId, networkDomain, domainUUID));
         _resourceCountDao.createResourceCounts(domain.getId(), ResourceLimit.ResourceOwnerType.Domain);
         txn.commit();
-        UserContext.current().setEntityDetails(Domain.class, domain.getUuid());
+        CallContext.current().putContextParameter(Domain.class, domain.getUuid());
         return domain;
     }
 
@@ -211,7 +213,7 @@ public class DomainManagerImpl extends ManagerBase implements DomainManager, Dom
     @Override
     @ActionEvent(eventType = EventTypes.EVENT_DOMAIN_DELETE, eventDescription = "deleting Domain", async = true)
     public boolean deleteDomain(long domainId, Boolean cleanup) {
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
 
         DomainVO domain = _domainDao.findById(domainId);
 
@@ -281,7 +283,7 @@ public class DomainManagerImpl extends ManagerBase implements DomainManager, Dom
             }
 
             cleanupDomainOfferings(domain.getId());
-            UserContext.current().setEntityDetails(Domain.class, domain.getUuid());
+            CallContext.current().putContextParameter(Domain.class, domain.getUuid());
             return true;
         } catch (Exception ex) {
             s_logger.error("Exception deleting domain with id " + domain.getId(), ex);
@@ -350,15 +352,15 @@ public class DomainManagerImpl extends ManagerBase implements DomainManager, Dom
         for (AccountVO account : accounts) {
             if (account.getType() != Account.ACCOUNT_TYPE_PROJECT) {
                 s_logger.debug("Deleting account " + account + " as a part of domain id=" + domainId + " cleanup");
-                boolean deleteAccount = _accountMgr.deleteAccount(account, UserContext.current().getCallerUserId(), UserContext.current().getCaller());
+                boolean deleteAccount = _accountMgr.deleteAccount(account, CallContext.current().getCallingUserId(), CallContext.current().getCallingAccount());
                 if (!deleteAccount) {
                     s_logger.warn("Failed to cleanup account id=" + account.getId() + " as a part of domain cleanup");
                 }
-                success = (success && deleteAccount);    
+                success = (success && deleteAccount);
             } else {
                 ProjectVO project = _projectDao.findByProjectAccountId(account.getId());
                 s_logger.debug("Deleting project " + project + " as a part of domain id=" + domainId + " cleanup");
-                boolean deleteProject = _projectMgr.deleteProject(UserContext.current().getCaller(), UserContext.current().getCallerUserId(), project);
+                boolean deleteProject = _projectMgr.deleteProject(CallContext.current().getCallingAccount(), CallContext.current().getCallingUserId(), project);
                 if (!deleteProject) {
                     s_logger.warn("Failed to cleanup project " + project + " as a part of domain cleanup");
                 }
@@ -370,8 +372,8 @@ public class DomainManagerImpl extends ManagerBase implements DomainManager, Dom
         boolean networksDeleted = true;
         s_logger.debug("Deleting networks for domain id=" + domainId);
         List<Long> networkIds = _networkDomainDao.listNetworkIdsByDomain(domainId);
-        UserContext ctx = UserContext.current();
-        ReservationContext context = new ReservationContextImpl(null, null, _accountMgr.getActiveUser(ctx.getCallerUserId()), ctx.getCaller());
+        CallContext ctx = CallContext.current();
+        ReservationContext context = new ReservationContextImpl(null, null, _accountMgr.getActiveUser(ctx.getCallingUserId()), ctx.getCallingAccount());
         for (Long networkId : networkIds) {
             s_logger.debug("Deleting network id=" + networkId + " as a part of domain id=" + domainId + " cleanup");
             
@@ -419,7 +421,7 @@ public class DomainManagerImpl extends ManagerBase implements DomainManager, Dom
 
     @Override
     public Pair<List<? extends Domain>, Integer> searchForDomains(ListDomainsCmd cmd) {
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
         Long domainId = cmd.getId();
         boolean listAll = cmd.listAll();
         boolean isRecursive = false;
@@ -491,7 +493,7 @@ public class DomainManagerImpl extends ManagerBase implements DomainManager, Dom
         boolean listAll = cmd.listAll();
         String path = null;
 
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
         if (domainId != null) {
             _accountMgr.checkAccess(caller, getDomain(domainId));
         } else {
@@ -560,7 +562,7 @@ public class DomainManagerImpl extends ManagerBase implements DomainManager, Dom
         }
 
         // check permissions
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
         _accountMgr.checkAccess(caller, domain);
 
         // domain name is unique in the cloud
@@ -606,7 +608,7 @@ public class DomainManagerImpl extends ManagerBase implements DomainManager, Dom
             }
         }
         _domainDao.update(domainId, domain);
-        UserContext.current().setEntityDetails(Domain.class, domain.getUuid());
+        CallContext.current().putContextParameter(Domain.class, domain.getUuid());
         txn.commit();
 
         return _domainDao.findById(domainId);

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/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 ef9fcbc..bd7a791 100755
--- a/server/src/com/cloud/vm/UserVmManagerImpl.java
+++ b/server/src/com/cloud/vm/UserVmManagerImpl.java
@@ -58,6 +58,8 @@ import org.apache.cloudstack.api.command.user.vm.UpdateVMCmd;
 import org.apache.cloudstack.api.command.user.vm.UpgradeVMCmd;
 import org.apache.cloudstack.api.command.user.vmgroup.CreateVMGroupCmd;
 import org.apache.cloudstack.api.command.user.vmgroup.DeleteVMGroupCmd;
+import org.apache.cloudstack.context.CallContext;
+import org.apache.cloudstack.context.ServerContexts;
 import org.apache.cloudstack.engine.cloud.entity.api.VirtualMachineEntity;
 import org.apache.cloudstack.engine.service.api.OrchestrationService;
 import org.apache.cloudstack.engine.subsystem.api.storage.TemplateDataFactory;
@@ -210,7 +212,6 @@ import com.cloud.user.ResourceLimitService;
 import com.cloud.user.SSHKeyPair;
 import com.cloud.user.SSHKeyPairVO;
 import com.cloud.user.User;
-import com.cloud.user.UserContext;
 import com.cloud.user.UserVO;
 import com.cloud.user.VmDiskStatisticsVO;
 import com.cloud.user.dao.AccountDao;
@@ -469,7 +470,7 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Use
     @ActionEvent(eventType = EventTypes.EVENT_VM_RESETPASSWORD, eventDescription = "resetting Vm password", async = true)
     public UserVm resetVMPassword(ResetVMPasswordCmd cmd, String password)
             throws ResourceUnavailableException, InsufficientCapacityException {
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
         Long vmId = cmd.getId();
         UserVmVO userVm = _vmDao.findById(cmd.getId());
         _vmDao.loadDetails(userVm);
@@ -515,7 +516,7 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Use
     private boolean resetVMPasswordInternal(Long vmId,
             String password) throws ResourceUnavailableException,
             InsufficientCapacityException {
-        Long userId = UserContext.current().getCallerUserId();
+        Long userId = CallContext.current().getCallingUserId();
         VMInstanceVO vmInstance = _vmDao.findById(vmId);
 
         if (password == null || password.equals("")) {
@@ -584,7 +585,7 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Use
     public UserVm resetVMSSHKey(ResetVMSSHKeyCmd cmd)
             throws ResourceUnavailableException, InsufficientCapacityException {
 
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
         Account owner = _accountMgr.finalizeOwner(caller, cmd.getAccountName(), cmd.getDomainId(), cmd.getProjectId());
         Long vmId = cmd.getId();
 
@@ -636,7 +637,7 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Use
     }
 
     private boolean resetVMSSHKeyInternal(Long vmId, String SSHPublicKey, String password) throws ResourceUnavailableException, InsufficientCapacityException {
-        Long userId = UserContext.current().getCallerUserId();
+        Long userId = CallContext.current().getCallingUserId();
         VMInstanceVO vmInstance = _vmDao.findById(vmId);
 
         VMTemplateVO template = _templateDao.findByIdIncludingRemoved(vmInstance.getTemplateId());
@@ -754,7 +755,7 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Use
 
 
     private UserVm upgradeStoppedVirtualMachine(Long vmId, Long svcOffId) throws ResourceAllocationException {
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
 
         // Verify input parameters
         UserVmVO vmInstance = _vmDao.findById(vmId);
@@ -827,7 +828,7 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Use
         Long vmId = cmd.getVmId();
         Long networkId = cmd.getNetworkId();
         String ipAddress = cmd.getIpAddress();
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
 
         UserVmVO vmInstance = _vmDao.findById(vmId);
         if(vmInstance == null) {
@@ -902,7 +903,7 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Use
     public UserVm removeNicFromVirtualMachine(RemoveNicFromVMCmd cmd) throws InvalidParameterValueException, PermissionDeniedException, CloudRuntimeException {
         Long vmId = cmd.getVmId();
         Long nicId = cmd.getNicId();
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
 
         UserVmVO vmInstance = _vmDao.findById(vmId);
         if(vmInstance == null) {
@@ -959,7 +960,7 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Use
     public UserVm updateDefaultNicForVirtualMachine(UpdateDefaultNicForVMCmd cmd) throws InvalidParameterValueException, CloudRuntimeException {
         Long vmId = cmd.getVmId();
         Long nicId = cmd.getNicId();
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
 
         UserVmVO vmInstance = _vmDao.findById(vmId);
         if (vmInstance == null){
@@ -1122,7 +1123,7 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Use
 
     @Override
     public boolean upgradeVirtualMachine(Long vmId, Long newServiceOfferingId) throws ResourceUnavailableException, ConcurrentOperationException, ManagementServerException, VirtualMachineMigrationException{
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
 
         // Verify input parameters
         VMInstanceVO vmInstance = _vmInstanceDao.findById(vmId);
@@ -1285,7 +1286,7 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Use
             throws ResourceAllocationException, CloudRuntimeException {
 
         Long vmId = cmd.getId();
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
 
         // Verify input parameters
         UserVmVO vm = _vmDao.findById(vmId.longValue());
@@ -1496,9 +1497,6 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Use
 
     @Override
     public boolean expunge(UserVmVO vm, long callerUserId, Account caller) {
-        UserContext ctx = UserContext.current();
-        ctx.setAccountId(vm.getAccountId());
-
         try {
             // expunge the vm
             if (!_itMgr.advanceExpunge(vm, _accountMgr.getSystemUser(), caller)) {
@@ -1651,7 +1649,7 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Use
 
         @Override
         public void run() {
-            UserContext.registerContext(_accountMgr.getSystemUser().getId(), _accountMgr.getSystemAccount(), null, false);
+            ServerContexts.registerSystemContext();
             GlobalLock scanLock = GlobalLock.getInternLock("UserVMExpunge");
             try {
                 if (scanLock.lock(ACQUIRE_GLOBAL_LOCK_TIMEOUT_FOR_COOPERATION)) {
@@ -1685,9 +1683,10 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Use
                 }
             } finally {
                 scanLock.releaseRef();
-                UserContext.unregisterContext();
+                ServerContexts.unregisterSystemContext();
             }
         }
+
     }
 
     private static boolean isAdmin(short accountType) {
@@ -1708,7 +1707,7 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Use
         Long osTypeId = cmd.getOsTypeId();
         String userData = cmd.getUserData();
         Boolean isDynamicallyScalable = cmd.isDynamicallyScalable();
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
 
         // Input validation
         UserVmVO vmInstance = null;
@@ -1728,7 +1727,7 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Use
                     "Can't enable ha for the vm as it's created from the Service offering having HA disabled");
         }
 
-        _accountMgr.checkAccess(UserContext.current().getCaller(), null, true,
+        _accountMgr.checkAccess(CallContext.current().getCallingAccount(), null, true,
                 vmInstance);
 
         if (displayName == null) {
@@ -1863,7 +1862,7 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Use
     @ActionEvent(eventType = EventTypes.EVENT_VM_REBOOT, eventDescription = "rebooting Vm", async = true)
     public UserVm rebootVirtualMachine(RebootVMCmd cmd)
             throws InsufficientCapacityException, ResourceUnavailableException {
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
         Long vmId = cmd.getId();
 
         // Verify input parameters
@@ -1886,7 +1885,7 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Use
             throw new InvalidParameterValueException("Unable to find service offering: " + serviceOfferingId + " corresponding to the vm");
         }
 
-        return rebootVirtualMachine(UserContext.current().getCallerUserId(),
+        return rebootVirtualMachine(CallContext.current().getCallingUserId(),
                 vmId);
     }
 
@@ -1900,7 +1899,7 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Use
     @Override
     @DB
     public InstanceGroupVO createVmGroup(CreateVMGroupCmd cmd) {
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
         Long domainId = cmd.getDomainId();
         String accountName = cmd.getAccountName();
         String groupName = cmd.getGroupName();
@@ -1955,7 +1954,7 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Use
 
     @Override
     public boolean deleteVmGroup(DeleteVMGroupCmd cmd) {
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
         Long groupId = cmd.getId();
 
         // Verify input parameters
@@ -2108,7 +2107,7 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Use
 	    List<Long> affinityGroupIdList)
         throws InsufficientCapacityException, ConcurrentOperationException, ResourceUnavailableException, StorageUnavailableException, ResourceAllocationException {
 
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
         List<NetworkVO> networkList = new ArrayList<NetworkVO>();
 
         // Verify that caller can perform actions in behalf of vm owner
@@ -2168,7 +2167,7 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Use
 	        List<Long> affinityGroupIdList) throws InsufficientCapacityException, ConcurrentOperationException,
 	        ResourceUnavailableException, StorageUnavailableException, ResourceAllocationException {
 
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
         List<NetworkVO> networkList = new ArrayList<NetworkVO>();
         boolean isSecurityGroupEnabledNetworkUsed = false;
         boolean isVmWare = (template.getHypervisorType() == HypervisorType.VMware || (hypervisor != null && hypervisor == HypervisorType.VMware));
@@ -2283,7 +2282,7 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Use
 	    IpAddresses defaultIps, Boolean displayvm, String keyboard, List<Long> affinityGroupIdList)
         throws InsufficientCapacityException, ConcurrentOperationException, ResourceUnavailableException, StorageUnavailableException, ResourceAllocationException {
 
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
         List<NetworkVO> networkList = new ArrayList<NetworkVO>();
 
         // Verify that caller can perform actions in behalf of vm owner
@@ -2779,7 +2778,7 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Use
         if (s_logger.isDebugEnabled()) {
             s_logger.debug("Successfully allocated DB entry for " + vm);
         }
-        UserContext.current().setEventDetails("Vm Id: " + vm.getId());
+        CallContext.current().setEventDetails("Vm Id: " + vm.getId());
 
         UsageEventUtils.publishUsageEvent(EventTypes.EVENT_VM_CREATE, accountId, zone.getId(), vm.getId(),
                 vm.getHostName(), offering.getId(), template.getId(), hypervisorType.toString(),
@@ -3113,8 +3112,8 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Use
     public UserVm stopVirtualMachine(long vmId, boolean forced)
             throws ConcurrentOperationException {
         // Input validation
-        Account caller = UserContext.current().getCaller();
-        Long userId = UserContext.current().getCallerUserId();
+        Account caller = CallContext.current().getCallingAccount();
+        Long userId = CallContext.current().getCallingUserId();
 
         // if account is removed, return error
         if (caller != null && caller.getRemoved() != null) {
@@ -3155,13 +3154,13 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Use
         // release elastic IP here
         IPAddressVO ip = _ipAddressDao.findByAssociatedVmId(profile.getId());
         if (ip != null && ip.getSystem()) {
-            UserContext ctx = UserContext.current();
+            CallContext ctx = CallContext.current();
             try {
                 long networkId = ip.getAssociatedWithNetworkId();
                 Network guestNetwork = _networkDao.findById(networkId);
                 NetworkOffering offering = _configMgr.getNetworkOffering(guestNetwork.getNetworkOfferingId());
                 assert (offering.getAssociatePublicIP() == true) : "User VM should not have system owned public IP associated with it when offering configured not to associate public IP.";
-                _rulesMgr.disableStaticNat(ip.getId(), ctx.getCaller(), ctx.getCallerUserId(), true);
+                _rulesMgr.disableStaticNat(ip.getId(), ctx.getCallingAccount(), ctx.getCallingUserId(), true);
             } catch (Exception ex) {
                 s_logger.warn(
                         "Failed to disable static nat and release system ip "
@@ -3195,9 +3194,9 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Use
                     throws ConcurrentOperationException, ResourceUnavailableException,
                     InsufficientCapacityException {
         // Input validation
-        Account callerAccount = UserContext.current().getCaller();
-        UserVO callerUser = _userDao.findById(UserContext.current()
-                .getCallerUserId());
+        Account callerAccount = CallContext.current().getCallingAccount();
+        UserVO callerUser = _userDao.findById(CallContext.current()
+                .getCallingUserId());
 
         // if account is removed, return error
         if (callerAccount != null && callerAccount.getRemoved() != null) {
@@ -3227,7 +3226,7 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Use
 
         Host destinationHost = null;
         if (hostId != null) {
-            Account account = UserContext.current().getCaller();
+            Account account = CallContext.current().getCallingAccount();
             if (!_accountService.isRootAdmin(account.getType())) {
                 throw new PermissionDeniedException(
                         "Parameter hostid can only be specified by a Root Admin, permission denied");
@@ -3329,8 +3328,8 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Use
     @Override
     public UserVm destroyVm(long vmId) throws ResourceUnavailableException,
     ConcurrentOperationException {
-        Account caller = UserContext.current().getCaller();
-        Long userId = UserContext.current().getCallerUserId();
+        Account caller = CallContext.current().getCallingAccount();
+        Long userId = CallContext.current().getCallingUserId();
 
         // Verify input parameters
         UserVmVO vm = _vmDao.findById(vmId);
@@ -3395,7 +3394,7 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Use
     public void collectVmDiskStatistics (UserVmVO userVm) {
         // support KVM only util 2013.06.25
         if (!userVm.getHypervisorType().equals(HypervisorType.KVM))
-            return;        
+            return;
     	// Collect vm disk statistics from host before stopping Vm
     	long hostId = userVm.getHostId();
     	List<String> vmNames = new ArrayList<String>();
@@ -3721,7 +3720,7 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Use
     @Override
     public VirtualMachine vmStorageMigration(Long vmId, StoragePool destPool) {
         // access check - only root admin can migrate VM
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
         if (caller.getType() != Account.ACCOUNT_TYPE_ADMIN) {
             if (s_logger.isDebugEnabled()) {
                 s_logger.debug("Caller is not a root admin, permission denied to migrate the VM");
@@ -3794,7 +3793,7 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Use
             throws ResourceUnavailableException, ConcurrentOperationException,
             ManagementServerException, VirtualMachineMigrationException {
         // access check - only root admin can migrate VM
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
         if (caller.getType() != Account.ACCOUNT_TYPE_ADMIN) {
             if (s_logger.isDebugEnabled()) {
                 s_logger.debug("Caller is not a root admin, permission denied to migrate the VM");
@@ -3920,7 +3919,7 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Use
             Map<String, String> volumeToPool) throws ResourceUnavailableException, ConcurrentOperationException,
             ManagementServerException, VirtualMachineMigrationException {
         // Access check - only root administrator can migrate VM.
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
         if (caller.getType() != Account.ACCOUNT_TYPE_ADMIN) {
             if (s_logger.isDebugEnabled()) {
                 s_logger.debug("Caller is not a root admin, permission denied to migrate the VM");
@@ -4044,7 +4043,7 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Use
         // VERIFICATIONS and VALIDATIONS
 
         // VV 1: verify the two users
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
         if (caller.getType() != Account.ACCOUNT_TYPE_ADMIN
                 && caller.getType() != Account.ACCOUNT_TYPE_DOMAIN_ADMIN) { // only
             // root
@@ -4383,7 +4382,7 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Use
                             // if the network offering has persistent set to true, implement the network
                             if (requiredOfferings.get(0).getIsPersistent()) {
                                 DeployDestination dest = new DeployDestination(zone, null, null, null);
-                                UserVO callerUser = _userDao.findById(UserContext.current().getCallerUserId());
+                                UserVO callerUser = _userDao.findById(CallContext.current().getCallingUserId());
                                 Journal journal = new Journal.LogJournal("Implementing " + newNetwork, s_logger);
                                 ReservationContext context = new ReservationContextImpl(UUID.randomUUID().toString(),
                                         journal, callerUser, caller);
@@ -4453,7 +4452,7 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Use
     @Override
     public UserVm restoreVM(RestoreVMCmd cmd) throws InsufficientCapacityException, ResourceUnavailableException {
         // Input validation
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
 
         long vmId = cmd.getVmId();
         Long newTemplateId = cmd.getTemplateId();

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/server/src/com/cloud/vm/snapshot/VMSnapshotManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/vm/snapshot/VMSnapshotManagerImpl.java b/server/src/com/cloud/vm/snapshot/VMSnapshotManagerImpl.java
index 8687163..686c688 100644
--- a/server/src/com/cloud/vm/snapshot/VMSnapshotManagerImpl.java
+++ b/server/src/com/cloud/vm/snapshot/VMSnapshotManagerImpl.java
@@ -28,9 +28,11 @@ import javax.inject.Inject;
 import javax.naming.ConfigurationException;
 
 import org.apache.cloudstack.api.command.user.vmsnapshot.ListVMSnapshotCmd;
+import org.apache.cloudstack.context.CallContext;
 import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreManager;
 import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao;
 import org.apache.cloudstack.storage.datastore.db.StoragePoolVO;
+
 import org.apache.log4j.Logger;
 import org.springframework.stereotype.Component;
 
@@ -72,7 +74,6 @@ import com.cloud.storage.dao.SnapshotDao;
 import com.cloud.storage.dao.VolumeDao;
 import com.cloud.user.Account;
 import com.cloud.user.AccountManager;
-import com.cloud.user.UserContext;
 import com.cloud.user.UserVO;
 import com.cloud.user.dao.AccountDao;
 import com.cloud.user.dao.UserDao;
@@ -232,7 +233,7 @@ public class VMSnapshotManagerImpl extends ManagerBase implements VMSnapshotMana
     }
 
     protected Account getCaller(){
-        return UserContext.current().getCaller();
+        return CallContext.current().getCallingAccount();
     }
     
     @Override
@@ -663,7 +664,7 @@ public class VMSnapshotManagerImpl extends ManagerBase implements VMSnapshotMana
                     "VM Snapshot reverting failed due to vm snapshot is not in the state of Created.");
         }
 
-        UserVO callerUser = _userDao.findById(UserContext.current().getCallerUserId());
+        UserVO callerUser = _userDao.findById(CallContext.current().getCallingUserId());
         
         UserVmVO vm = null;
         Long hostId = null;

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/server/src/org/apache/cloudstack/affinity/AffinityGroupServiceImpl.java
----------------------------------------------------------------------
diff --git a/server/src/org/apache/cloudstack/affinity/AffinityGroupServiceImpl.java b/server/src/org/apache/cloudstack/affinity/AffinityGroupServiceImpl.java
index 5211279..287e622 100644
--- a/server/src/org/apache/cloudstack/affinity/AffinityGroupServiceImpl.java
+++ b/server/src/org/apache/cloudstack/affinity/AffinityGroupServiceImpl.java
@@ -28,10 +28,13 @@ import javax.naming.ConfigurationException;
 
 import org.apache.cloudstack.affinity.dao.AffinityGroupDao;
 import org.apache.cloudstack.affinity.dao.AffinityGroupVMMapDao;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 import org.springframework.context.annotation.Primary;
 
 
+
 import com.cloud.deploy.DeploymentPlanner;
 import com.cloud.event.ActionEvent;
 import com.cloud.event.EventTypes;
@@ -41,7 +44,6 @@ import com.cloud.exception.ResourceInUseException;
 import com.cloud.network.security.SecurityGroup;
 import com.cloud.user.Account;
 import com.cloud.user.AccountManager;
-import com.cloud.user.UserContext;
 import com.cloud.uservm.UserVm;
 import com.cloud.utils.Pair;
 import com.cloud.utils.component.ComponentContext;
@@ -85,7 +87,7 @@ public class AffinityGroupServiceImpl extends ManagerBase implements AffinityGro
     public AffinityGroup createAffinityGroup(String account, Long domainId, String affinityGroupName,
             String affinityGroupType, String description) {
 
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
         Account owner = _accountMgr.finalizeOwner(caller, account, domainId, null);
 
         if (_affinityGroupDao.isNameInUse(owner.getAccountId(), owner.getDomainId(), affinityGroupName)) {
@@ -127,7 +129,7 @@ public class AffinityGroupServiceImpl extends ManagerBase implements AffinityGro
     @ActionEvent(eventType = EventTypes.EVENT_AFFINITY_GROUP_DELETE, eventDescription = "Deleting affinity group")
     public boolean deleteAffinityGroup(Long affinityGroupId, String account, Long domainId, String affinityGroupName) {
 
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
         Account owner = _accountMgr.finalizeOwner(caller, account, domainId, null);
 
         AffinityGroupVO group = null;
@@ -187,7 +189,7 @@ public class AffinityGroupServiceImpl extends ManagerBase implements AffinityGro
     public Pair<List<? extends AffinityGroup>, Integer> listAffinityGroups(Long affinityGroupId, String affinityGroupName, String affinityGroupType, Long vmId, Long startIndex, Long pageSize) {
         Filter searchFilter = new Filter(AffinityGroupVO.class, "id", Boolean.TRUE, startIndex, pageSize);
 
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
 
         Long accountId = caller.getAccountId();
         Long domainId = caller.getDomainId();
@@ -329,7 +331,7 @@ public class AffinityGroupServiceImpl extends ManagerBase implements AffinityGro
                     + "; make sure the virtual machine is stopped and not in an error state before updating.");
         }
 
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
         Account owner = _accountMgr.getAccount(vmInstance.getAccountId());
 
         // check that the affinity groups exist

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/server/src/org/apache/cloudstack/network/lb/ApplicationLoadBalancerManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/org/apache/cloudstack/network/lb/ApplicationLoadBalancerManagerImpl.java b/server/src/org/apache/cloudstack/network/lb/ApplicationLoadBalancerManagerImpl.java
index ac3b8f5..560768c 100644
--- a/server/src/org/apache/cloudstack/network/lb/ApplicationLoadBalancerManagerImpl.java
+++ b/server/src/org/apache/cloudstack/network/lb/ApplicationLoadBalancerManagerImpl.java
@@ -26,8 +26,10 @@ import javax.inject.Inject;
 
 import org.apache.cloudstack.acl.SecurityChecker.AccessType;
 import org.apache.cloudstack.api.command.user.loadbalancer.ListApplicationLoadBalancersCmd;
+import org.apache.cloudstack.context.CallContext;
 import org.apache.cloudstack.lb.ApplicationLoadBalancerRuleVO;
 import org.apache.cloudstack.lb.dao.ApplicationLoadBalancerRuleDao;
+
 import org.apache.log4j.Logger;
 import org.springframework.stereotype.Component;
 
@@ -59,7 +61,6 @@ import com.cloud.tags.ResourceTagVO;
 import com.cloud.tags.dao.ResourceTagDao;
 import com.cloud.user.Account;
 import com.cloud.user.AccountManager;
-import com.cloud.user.UserContext;
 import com.cloud.utils.Pair;
 import com.cloud.utils.Ternary;
 import com.cloud.utils.component.ManagerBase;
@@ -99,7 +100,7 @@ public class ApplicationLoadBalancerManagerImpl extends ManagerBase implements A
             throw new InvalidParameterValueException("Can't find guest network by id");
         }
         
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
         _accountMgr.checkAccess(caller, AccessType.UseNetwork, false, guestNtwk);
         
         Network sourceIpNtwk = _networkModel.getNetwork(sourceIpNetworkId);
@@ -166,7 +167,7 @@ public class ApplicationLoadBalancerManagerImpl extends ManagerBase implements A
             }
             s_logger.debug("Load balancer " + newRule.getId() + " for Ip address " + newRule.getSourceIp().addr() + ", source port "
                     + newRule.getSourcePortStart() + ", instance port " + newRule.getDefaultPortStart() + " is added successfully.");
-            UserContext.current().setEventDetails("Load balancer Id: " + newRule.getId());
+            CallContext.current().setEventDetails("Load balancer Id: " + newRule.getId());
             Network ntwk = _networkModel.getNetwork(newRule.getNetworkId());
             UsageEventUtils.publishUsageEvent(EventTypes.EVENT_LOAD_BALANCER_CREATE, newRule.getAccountId(),
                     ntwk.getDataCenterId(), newRule.getId(), null, LoadBalancingRule.class.getName(),
@@ -373,7 +374,7 @@ public class ApplicationLoadBalancerManagerImpl extends ManagerBase implements A
         
         Map<String, String> tags = cmd.getTags();
 
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
         List<Long> permittedAccounts = new ArrayList<Long>();
 
         Ternary<Long, Boolean, ListProjectResourcesCriteria> domainIdRecursiveListProject = new Ternary<Long, Boolean, ListProjectResourcesCriteria>(

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/server/src/org/apache/cloudstack/region/gslb/GlobalLoadBalancingRulesServiceImpl.java
----------------------------------------------------------------------
diff --git a/server/src/org/apache/cloudstack/region/gslb/GlobalLoadBalancingRulesServiceImpl.java b/server/src/org/apache/cloudstack/region/gslb/GlobalLoadBalancingRulesServiceImpl.java
index ad36fae..38ba37c 100644
--- a/server/src/org/apache/cloudstack/region/gslb/GlobalLoadBalancingRulesServiceImpl.java
+++ b/server/src/org/apache/cloudstack/region/gslb/GlobalLoadBalancingRulesServiceImpl.java
@@ -34,20 +34,23 @@ import com.cloud.region.ha.GlobalLoadBalancerRule;
 import com.cloud.region.ha.GlobalLoadBalancingRulesService;
 import com.cloud.user.Account;
 import com.cloud.user.AccountManager;
-import com.cloud.user.UserContext;
 import com.cloud.utils.Pair;
 import com.cloud.utils.db.DB;
 import com.cloud.utils.db.Transaction;
 import com.cloud.utils.exception.CloudRuntimeException;
 import com.cloud.utils.net.NetUtils;
+
 import org.apache.cloudstack.acl.SecurityChecker;
 import org.apache.cloudstack.api.command.user.region.ha.gslb.*;
+import org.apache.cloudstack.context.CallContext;
 import org.apache.cloudstack.region.Region;
 import org.apache.cloudstack.region.dao.RegionDao;
+
 import org.apache.log4j.Logger;
 
 import javax.ejb.Local;
 import javax.inject.Inject;
+
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
@@ -150,8 +153,8 @@ public class GlobalLoadBalancingRulesServiceImpl implements GlobalLoadBalancingR
             "Assigning a load balancer rule to global load balancer rule", async=true)
     public boolean assignToGlobalLoadBalancerRule(AssignToGlobalLoadBalancerRuleCmd assignToGslbCmd) {
 
-        UserContext ctx = UserContext.current();
-        Account caller = ctx.getCaller();
+        CallContext ctx = CallContext.current();
+        Account caller = ctx.getCallingAccount();
 
         long gslbRuleId =  assignToGslbCmd.getGlobalLoadBalancerRuleId();
         GlobalLoadBalancerRuleVO gslbRule = _gslbRuleDao.findById(gslbRuleId);
@@ -292,8 +295,8 @@ public class GlobalLoadBalancingRulesServiceImpl implements GlobalLoadBalancingR
             "Removing a load balancer rule to be part of global load balancer rule")
     public boolean removeFromGlobalLoadBalancerRule(RemoveFromGlobalLoadBalancerRuleCmd removeFromGslbCmd) {
 
-        UserContext ctx = UserContext.current();
-        Account caller = ctx.getCaller();
+        CallContext ctx = CallContext.current();
+        Account caller = ctx.getCallingAccount();
 
         long gslbRuleId =  removeFromGslbCmd.getGlobalLoadBalancerRuleId();
         GlobalLoadBalancerRuleVO gslbRule = _gslbRuleDao.findById(gslbRuleId);
@@ -405,8 +408,8 @@ public class GlobalLoadBalancingRulesServiceImpl implements GlobalLoadBalancingR
             "Delete global load balancer rule")
     public boolean deleteGlobalLoadBalancerRule(DeleteGlobalLoadBalancerRuleCmd deleteGslbCmd) {
 
-        UserContext ctx = UserContext.current();
-        Account caller = ctx.getCaller();
+        CallContext ctx = CallContext.current();
+        Account caller = ctx.getCallingAccount();
         long gslbRuleId =  deleteGslbCmd.getGlobalLoadBalancerId();
 
         try {
@@ -493,8 +496,8 @@ public class GlobalLoadBalancingRulesServiceImpl implements GlobalLoadBalancingR
             throw new InvalidParameterValueException("Invalid global load balancer rule id: " + gslbRuleId);
         }
 
-        UserContext ctx = UserContext.current();
-        Account caller = ctx.getCaller();
+        CallContext ctx = CallContext.current();
+        Account caller = ctx.getCallingAccount();
 
         _accountMgr.checkAccess(caller, SecurityChecker.AccessType.ModifyEntry, true, gslbRule);
 
@@ -541,8 +544,8 @@ public class GlobalLoadBalancingRulesServiceImpl implements GlobalLoadBalancingR
     @Override
     public List<GlobalLoadBalancerRule> listGlobalLoadBalancerRule(ListGlobalLoadBalancerRuleCmd listGslbCmd) {
 
-        UserContext ctx = UserContext.current();
-        Account caller = ctx.getCaller();
+        CallContext ctx = CallContext.current();
+        Account caller = ctx.getCallingAccount();
 
         Integer regionId =  listGslbCmd.getRegionId();
         Long ruleId = listGslbCmd.getId();

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/server/test/com/cloud/configuration/ConfigurationManagerTest.java
----------------------------------------------------------------------
diff --git a/server/test/com/cloud/configuration/ConfigurationManagerTest.java b/server/test/com/cloud/configuration/ConfigurationManagerTest.java
index 5c1cabf..eb362b7 100755
--- a/server/test/com/cloud/configuration/ConfigurationManagerTest.java
+++ b/server/test/com/cloud/configuration/ConfigurationManagerTest.java
@@ -17,25 +17,38 @@
 
 package com.cloud.configuration;
 
+import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.anyBoolean;
+import static org.mockito.Matchers.anyInt;
+import static org.mockito.Matchers.anyLong;
+import static org.mockito.Matchers.anyString;
+import static org.mockito.Mockito.doNothing;
+import static org.mockito.Mockito.when;
+
+import java.lang.reflect.Field;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.UUID;
-import java.lang.reflect.Field;
 
-import org.apache.cloudstack.api.command.admin.vlan.DedicatePublicIpRangeCmd;
-import org.apache.cloudstack.api.command.admin.vlan.ReleasePublicIpRangeCmd;
+import junit.framework.Assert;
+
 import org.apache.log4j.Logger;
+import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
 
+import org.apache.cloudstack.api.command.admin.vlan.DedicatePublicIpRangeCmd;
+import org.apache.cloudstack.api.command.admin.vlan.ReleasePublicIpRangeCmd;
+import org.apache.cloudstack.context.CallContext;
+
 import com.cloud.configuration.Resource.ResourceType;
 import com.cloud.dc.AccountVlanMapVO;
+import com.cloud.dc.DataCenter.NetworkType;
 import com.cloud.dc.DataCenterVO;
 import com.cloud.dc.Vlan;
 import com.cloud.dc.VlanVO;
-import com.cloud.dc.DataCenter.NetworkType;
 import com.cloud.dc.dao.AccountVlanMapDao;
 import com.cloud.dc.dao.DataCenterDao;
 import com.cloud.dc.dao.VlanDao;
@@ -48,17 +61,11 @@ import com.cloud.user.Account;
 import com.cloud.user.AccountManager;
 import com.cloud.user.AccountVO;
 import com.cloud.user.ResourceLimitService;
-import com.cloud.user.UserContext;
+import com.cloud.user.UserVO;
 import com.cloud.user.dao.AccountDao;
 import com.cloud.utils.db.Transaction;
 import com.cloud.utils.net.Ip;
 
-import junit.framework.Assert;
-
-import static org.mockito.Matchers.*;
-import static org.mockito.Mockito.when;
-import static org.mockito.Mockito.doNothing;
-
 public class ConfigurationManagerTest {
 
     private static final Logger s_logger = Logger.getLogger(ConfigurationManagerTest.class);
@@ -98,11 +105,14 @@ public class ConfigurationManagerTest {
         configurationMgr._zoneDao = _zoneDao;
         configurationMgr._firewallDao = _firewallDao;
 
-        Account account = (Account) new AccountVO("testaccount", 1, "networkdomain", (short) 0, UUID.randomUUID().toString());
+        Account account = new AccountVO("testaccount", 1, "networkdomain", (short) 0, UUID.randomUUID().toString());
         when(configurationMgr._accountMgr.getAccount(anyLong())).thenReturn(account);
         when(configurationMgr._accountDao.findActiveAccount(anyString(), anyLong())).thenReturn(account);
         when(configurationMgr._accountMgr.getActiveAccountById(anyLong())).thenReturn(account);
 
+        UserVO user = new UserVO(1, "testuser", "password", "firstname", "lastName", "email", "timezone", UUID.randomUUID().toString());
+        CallContext.register(user, account);
+
         when(configurationMgr._publicIpAddressDao.countIPs(anyLong(), anyLong(), anyBoolean())).thenReturn(1);
 
         doNothing().when(configurationMgr._resourceLimitMgr).checkResourceLimit(any(Account.class),
@@ -112,8 +122,6 @@ public class ConfigurationManagerTest {
 
         when(configurationMgr._vlanDao.acquireInLockTable(anyLong(), anyInt())).thenReturn(vlan);
 
-        UserContext.registerContext(1, account, null, true);
-
         Field dedicateIdField = _dedicatePublicIpRangeClass.getDeclaredField("id");
         dedicateIdField.setAccessible(true);
         dedicateIdField.set(dedicatePublicIpRangesCmd, 1L);
@@ -135,6 +143,11 @@ public class ConfigurationManagerTest {
         releaseIdField.set(releasePublicIpRangesCmd, 1L);
     }
 
+    @After
+    public void tearDown() {
+        CallContext.unregister();
+    }
+
     @Test
     public void testDedicatePublicIpRange() throws Exception {
 
@@ -400,12 +413,14 @@ public class ConfigurationManagerTest {
 
 
     public class DedicatePublicIpRangeCmdExtn extends DedicatePublicIpRangeCmd {
+        @Override
         public long getEntityOwnerId() {
             return 1;
         }
     }
 
     public class ReleasePublicIpRangeCmdExtn extends ReleasePublicIpRangeCmd {
+        @Override
         public long getEntityOwnerId() {
             return 1;
         }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/server/test/com/cloud/network/DedicateGuestVlanRangesTest.java
----------------------------------------------------------------------
diff --git a/server/test/com/cloud/network/DedicateGuestVlanRangesTest.java b/server/test/com/cloud/network/DedicateGuestVlanRangesTest.java
index e5d3329..d6ee630 100644
--- a/server/test/com/cloud/network/DedicateGuestVlanRangesTest.java
+++ b/server/test/com/cloud/network/DedicateGuestVlanRangesTest.java
@@ -17,21 +17,32 @@
 
 package com.cloud.network;
 
+import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.anyInt;
+import static org.mockito.Matchers.anyLong;
+import static org.mockito.Matchers.anyString;
+import static org.mockito.Mockito.doNothing;
+import static org.mockito.Mockito.when;
+
+import java.lang.reflect.Field;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.UUID;
-import java.lang.reflect.Field;
 
-import org.apache.cloudstack.api.command.admin.network.DedicateGuestVlanRangeCmd;
-import org.apache.cloudstack.api.command.admin.network.ListDedicatedGuestVlanRangesCmd;
-import org.apache.cloudstack.api.command.admin.network.ReleaseDedicatedGuestVlanRangeCmd;
+import junit.framework.Assert;
 
 import org.apache.log4j.Logger;
+import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
 
+import org.apache.cloudstack.api.command.admin.network.DedicateGuestVlanRangeCmd;
+import org.apache.cloudstack.api.command.admin.network.ListDedicatedGuestVlanRangesCmd;
+import org.apache.cloudstack.api.command.admin.network.ReleaseDedicatedGuestVlanRangeCmd;
+import org.apache.cloudstack.context.CallContext;
+
 import com.cloud.dc.DataCenterVnetVO;
 import com.cloud.dc.dao.DataCenterVnetDao;
 import com.cloud.network.dao.AccountGuestVlanMapDao;
@@ -40,18 +51,12 @@ import com.cloud.network.dao.PhysicalNetworkDao;
 import com.cloud.network.dao.PhysicalNetworkVO;
 import com.cloud.projects.ProjectManager;
 import com.cloud.user.Account;
-import com.cloud.user.dao.AccountDao;
 import com.cloud.user.AccountManager;
 import com.cloud.user.AccountVO;
-import com.cloud.user.UserContext;
+import com.cloud.user.UserVO;
+import com.cloud.user.dao.AccountDao;
 import com.cloud.utils.db.Transaction;
 
-import junit.framework.Assert;
-
-import static org.mockito.Matchers.*;
-import static org.mockito.Mockito.when;
-import static org.mockito.Mockito.doNothing;
-
 public class DedicateGuestVlanRangesTest {
 
     private static final Logger s_logger = Logger.getLogger(DedicateGuestVlanRangesTest.class);
@@ -86,11 +91,13 @@ public class DedicateGuestVlanRangesTest {
         networkService._datacneter_vnet = _dataCenterVnetDao;
         networkService._accountGuestVlanMapDao = _accountGuestVlanMapDao;
 
-        Account account = (Account) new AccountVO("testaccount", 1, "networkdomain", (short) 0, UUID.randomUUID().toString());
+        Account account = new AccountVO("testaccount", 1, "networkdomain", (short) 0, UUID.randomUUID().toString());
         when(networkService._accountMgr.getAccount(anyLong())).thenReturn(account);
         when(networkService._accountDao.findActiveAccount(anyString(), anyLong())).thenReturn(account);
+        
+        UserVO user = new UserVO(1, "testuser", "password", "firstname", "lastName", "email", "timezone", UUID.randomUUID().toString());
 
-        UserContext.registerContext(1, account, null, true);
+        CallContext.register(user, account);
 
         Field accountNameField = _dedicateGuestVlanRangeClass.getDeclaredField("accountName");
         accountNameField.setAccessible(true);
@@ -113,6 +120,11 @@ public class DedicateGuestVlanRangesTest {
         releaseIdField.set(releaseDedicatedGuestVlanRangesCmd, 1L);
     }
 
+    @After
+    public void tearDown() {
+        CallContext.unregister();
+    }
+
     @Test
     public void testDedicateGuestVlanRange() throws Exception {
         s_logger.info("Running tests for DedicateGuestVlanRange API");
@@ -359,18 +371,21 @@ public class DedicateGuestVlanRangesTest {
     }
     
     public class DedicateGuestVlanRangeCmdExtn extends DedicateGuestVlanRangeCmd {
+        @Override
         public long getEntityOwnerId() {
             return 1;
         }
     }
 
     public class ReleaseDedicatedGuestVlanRangeCmdExtn extends ReleaseDedicatedGuestVlanRangeCmd {
+        @Override
         public long getEntityOwnerId() {
             return 1;
         }
     }
 
     public class ListDedicatedGuestVlanRangesCmdExtn extends ListDedicatedGuestVlanRangesCmd {
+        @Override
         public long getEntityOwnerId() {
             return 1;
         }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/server/test/com/cloud/vm/UserVmManagerTest.java
----------------------------------------------------------------------
diff --git a/server/test/com/cloud/vm/UserVmManagerTest.java b/server/test/com/cloud/vm/UserVmManagerTest.java
index 5eedfa5..0eb9a08 100755
--- a/server/test/com/cloud/vm/UserVmManagerTest.java
+++ b/server/test/com/cloud/vm/UserVmManagerTest.java
@@ -24,24 +24,30 @@ import static org.mockito.Matchers.anyInt;
 import static org.mockito.Matchers.anyLong;
 import static org.mockito.Matchers.anyString;
 import static org.mockito.Matchers.eq;
-import static org.mockito.Mockito.*;
+import static org.mockito.Mockito.doNothing;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.doThrow;
 import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
 
 import java.lang.reflect.Field;
 import java.util.List;
 import java.util.UUID;
 
+import org.junit.Before;
+import org.junit.Test;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.mockito.Spy;
+
 import org.apache.cloudstack.acl.ControlledEntity;
 import org.apache.cloudstack.acl.SecurityChecker.AccessType;
 import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.command.admin.vm.AssignVMCmd;
 import org.apache.cloudstack.api.command.user.vm.RestoreVMCmd;
 import org.apache.cloudstack.api.command.user.vm.ScaleVMCmd;
-import org.junit.Before;
-import org.junit.Test;
-import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-import org.mockito.Spy;
+import org.apache.cloudstack.context.CallContext;
 
 import com.cloud.capacity.CapacityManager;
 import com.cloud.configuration.ConfigurationManager;
@@ -56,18 +62,17 @@ import com.cloud.hypervisor.Hypervisor;
 import com.cloud.hypervisor.Hypervisor.HypervisorType;
 import com.cloud.offering.ServiceOffering;
 import com.cloud.service.ServiceOfferingVO;
+import com.cloud.storage.Storage.ImageFormat;
 import com.cloud.storage.VMTemplateVO;
 import com.cloud.storage.Volume;
 import com.cloud.storage.VolumeManager;
 import com.cloud.storage.VolumeVO;
 import com.cloud.storage.dao.VMTemplateDao;
 import com.cloud.storage.dao.VolumeDao;
-import com.cloud.storage.Storage.ImageFormat;
 import com.cloud.user.Account;
 import com.cloud.user.AccountManager;
 import com.cloud.user.AccountService;
 import com.cloud.user.AccountVO;
-import com.cloud.user.UserContext;
 import com.cloud.user.UserVO;
 import com.cloud.user.dao.AccountDao;
 import com.cloud.user.dao.UserDao;
@@ -138,7 +143,15 @@ public class UserVmManagerTest {
         when(_vmDao.findById(anyLong())).thenReturn(_vmMock);
         when(_templateDao.findById(anyLong())).thenReturn(_templateMock);
         doReturn(VirtualMachine.State.Error).when(_vmMock).getState();
-        _userVmMgr.restoreVMInternal(_account, _vmMock, null);
+        Account account = new AccountVO("testaccount", 1L, "networkdomain", (short)0, "uuid");
+        UserVO user = new UserVO(1, "testuser", "password", "firstname", "lastName", "email", "timezone", UUID.randomUUID().toString());
+
+        CallContext.register(user, account);
+        try {
+            _userVmMgr.restoreVMInternal(_account, _vmMock, null);
+        } finally {
+            CallContext.unregister();
+        }
     }
 
     // Test restoreVm when VM is in stopped state
@@ -160,7 +173,15 @@ public class UserVmManagerTest {
       
         when(_templateMock.getUuid()).thenReturn("e0552266-7060-11e2-bbaa-d55f5db67735");
 
-        _userVmMgr.restoreVMInternal(_account, _vmMock, null);
+        Account account = new AccountVO("testaccount", 1L, "networkdomain", (short)0, "uuid");
+        UserVO user = new UserVO(1, "testuser", "password", "firstname", "lastName", "email", "timezone", UUID.randomUUID().toString());
+
+        CallContext.register(user, account);
+        try {
+            _userVmMgr.restoreVMInternal(_account, _vmMock, null);
+        } finally {
+            CallContext.unregister();
+        }
 
     }
 
@@ -185,7 +206,15 @@ public class UserVmManagerTest {
      
         when(_templateMock.getUuid()).thenReturn("e0552266-7060-11e2-bbaa-d55f5db67735");
 
-        _userVmMgr.restoreVMInternal(_account, _vmMock, null);
+        Account account = new AccountVO("testaccount", 1L, "networkdomain", (short)0, "uuid");
+        UserVO user = new UserVO(1, "testuser", "password", "firstname", "lastName", "email", "timezone", UUID.randomUUID().toString());
+
+        CallContext.register(user, account);
+        try {
+            _userVmMgr.restoreVMInternal(_account, _vmMock, null);
+        } finally {
+            CallContext.unregister();
+        }
 
     }
 
@@ -216,7 +245,15 @@ public class UserVmManagerTest {
       
         when(_templateMock.getUuid()).thenReturn("b1a3626e-72e0-4697-8c7c-a110940cc55d");
 
-        _userVmMgr.restoreVMInternal(_account, _vmMock, 14L);
+        Account account = new AccountVO("testaccount", 1L, "networkdomain", (short)0, "uuid");
+        UserVO user = new UserVO(1, "testuser", "password", "firstname", "lastName", "email", "timezone", UUID.randomUUID().toString());
+
+        CallContext.register(user, account);
+        try {
+            _userVmMgr.restoreVMInternal(_account, _vmMock, 14L);
+        } finally {
+            CallContext.unregister();
+        }
 
     }
 
@@ -249,7 +286,15 @@ public class UserVmManagerTest {
 
         when(_templateMock.getUuid()).thenReturn("b1a3626e-72e0-4697-8c7c-a110940cc55d");
 
-        _userVmMgr.restoreVMInternal(_account, _vmMock, 14L);
+        Account account = new AccountVO("testaccount", 1L, "networkdomain", (short)0, "uuid");
+        UserVO user = new UserVO(1, "testuser", "password", "firstname", "lastName", "email", "timezone", UUID.randomUUID().toString());
+
+        CallContext.register(user, account);
+        try {
+            _userVmMgr.restoreVMInternal(_account, _vmMock, 14L);
+        } finally {
+            CallContext.unregister();
+        }
 
         verify(_vmMock, times(1)).setIsoId(14L);
 
@@ -269,14 +314,19 @@ public class UserVmManagerTest {
         serviceOfferingIdField.setAccessible(true);
         serviceOfferingIdField.set(cmd, 1L);
 
+        when(_vmInstanceDao.findById(anyLong())).thenReturn(_vmInstance);
+
        // UserContext.current().setEventDetails("Vm Id: "+getId());
-        Account account = (Account) new AccountVO("testaccount", 1L, "networkdomain", (short) 0, "uuid");
-        //AccountVO(String accountName, long domainId, String networkDomain, short type, int regionId)
-       UserContext.registerContext(1, account, null, true);
+        Account account = new AccountVO("testaccount", 1L, "networkdomain", (short) 0, "uuid");
+        UserVO user = new UserVO(1, "testuser", "password", "firstname", "lastName", "email", "timezone", UUID.randomUUID().toString());
 
-        when(_vmInstanceDao.findById(anyLong())).thenReturn(_vmInstance);
+        CallContext.register(user, account);
+        try {
+            _userVmMgr.upgradeVirtualMachine(cmd);
+        } finally {
+            CallContext.unregister();
+        }
 
-        _userVmMgr.upgradeVirtualMachine(cmd);
 
     }
 
@@ -306,13 +356,20 @@ public class UserVmManagerTest {
         doNothing().when(_itMgr).checkIfCanUpgrade(_vmMock, cmd.getServiceOfferingId());
 
 
-        ServiceOffering so1 =  (ServiceOffering) getSvcoffering(512);
-        ServiceOffering so2 =  (ServiceOffering) getSvcoffering(256);
+        ServiceOffering so1 =  getSvcoffering(512);
+        ServiceOffering so2 =  getSvcoffering(256);
 
         when(_configMgr.getServiceOffering(anyLong())).thenReturn(so1);
         when(_configMgr.getServiceOffering(1L)).thenReturn(so1);
 
-        _userVmMgr.upgradeVirtualMachine(cmd);
+        Account account = new AccountVO("testaccount", 1L, "networkdomain", (short)0, UUID.randomUUID().toString());
+        UserVO user = new UserVO(1, "testuser", "password", "firstname", "lastName", "email", "timezone", UUID.randomUUID().toString());
+        CallContext.register(user, account);
+        try {
+            _userVmMgr.upgradeVirtualMachine(cmd);
+        } finally {
+            CallContext.unregister();
+        }
 
     }
 
@@ -331,17 +388,13 @@ public class UserVmManagerTest {
         serviceOfferingIdField.setAccessible(true);
         serviceOfferingIdField.set(cmd, 1L);
 
-        //UserContext.current().setEventDetails("Vm Id: "+getId());
-        //Account account = (Account) new AccountVO("testaccount", 1L, "networkdomain", (short) 0, 1);
-        //AccountVO(String accountName, long domainId, String networkDomain, short type, int regionId)
-        //UserContext.registerContext(1, account, null, true);
 
         when(_vmInstanceDao.findById(anyLong())).thenReturn(_vmInstance);
         doReturn(Hypervisor.HypervisorType.XenServer).when(_vmInstance).getHypervisorType();
 
 
-        ServiceOffering so1 =  (ServiceOffering) getSvcoffering(512);
-        ServiceOffering so2 =  (ServiceOffering) getSvcoffering(256);
+        ServiceOffering so1 =  getSvcoffering(512);
+        ServiceOffering so2 =  getSvcoffering(256);
 
         when(_configMgr.getServiceOffering(anyLong())).thenReturn(so2);
         when(_configMgr.getServiceOffering(1L)).thenReturn(so1);
@@ -354,7 +407,14 @@ public class UserVmManagerTest {
 
         //when(_vmDao.findById(anyLong())).thenReturn(_vmMock);
 
-        _userVmMgr.upgradeVirtualMachine(cmd);
+        Account account = new AccountVO("testaccount", 1L, "networkdomain", (short)0, UUID.randomUUID().toString());
+        UserVO user = new UserVO(1, "testuser", "password", "firstname", "lastName", "email", "timezone", UUID.randomUUID().toString());
+        CallContext.register(user, account);
+        try {
+            _userVmMgr.upgradeVirtualMachine(cmd);
+        } finally {
+            CallContext.unregister();
+        }
 
     }
 
@@ -380,8 +440,8 @@ public class UserVmManagerTest {
         when(_vmInstanceDao.findById(anyLong())).thenReturn(_vmInstance);
         doReturn(Hypervisor.HypervisorType.XenServer).when(_vmInstance).getHypervisorType();
 
-        ServiceOffering so1 =  (ServiceOffering) getSvcoffering(512);
-        ServiceOffering so2 =  (ServiceOffering) getSvcoffering(256);
+        ServiceOffering so1 =  getSvcoffering(512);
+        ServiceOffering so2 =  getSvcoffering(256);
 
         when(_configMgr.getServiceOffering(anyLong())).thenReturn(so2);
         when(_configMgr.getServiceOffering(1L)).thenReturn(so1);
@@ -396,7 +456,14 @@ public class UserVmManagerTest {
 
         when(_vmDao.findById(anyLong())).thenReturn(_vmMock);
 
-        _userVmMgr.upgradeVirtualMachine(cmd);
+        Account account = new AccountVO("testaccount", 1L, "networkdomain", (short)0, UUID.randomUUID().toString());
+        UserVO user = new UserVO(1, "testuser", "password", "firstname", "lastName", "email", "timezone", UUID.randomUUID().toString());
+        CallContext.register(user, account);
+        try {
+            _userVmMgr.upgradeVirtualMachine(cmd);
+        } finally {
+            CallContext.unregister();
+        }
 
     }
 
@@ -435,11 +502,17 @@ public class UserVmManagerTest {
         domainIdField.set(cmd, 1L);
 
         // caller is of type 0
-        Account caller = (Account) new AccountVO("testaccount", 1, "networkdomain", (short) 0,
+        Account caller = new AccountVO("testaccount", 1, "networkdomain", (short) 0,
                 UUID.randomUUID().toString());
-        UserContext.registerContext(1, caller, null, true);
+        UserVO user = new UserVO(1, "testuser", "password", "firstname", "lastName", "email", "timezone", UUID.randomUUID().toString());
+
+        CallContext.register(user, caller);
+        try {
 
         _userVmMgr.moveVMToUser(cmd);
+        } finally {
+            CallContext.unregister();
+        }
     }
 
 
@@ -462,13 +535,13 @@ public class UserVmManagerTest {
         domainIdField.set(cmd, 1L);
 
         // caller is of type 0
-        Account caller = (Account) new AccountVO("testaccount", 1, "networkdomain", (short) 1,
-                UUID.randomUUID().toString());
-        UserContext.registerContext(1, caller, null, true);
+        Account caller = new AccountVO("testaccount", 1, "networkdomain", (short)1, UUID.randomUUID().toString());
+        UserVO user = new UserVO(1, "testuser", "password", "firstname", "lastName", "email", "timezone", UUID.randomUUID().toString());
+
 
-        Account oldAccount = (Account) new AccountVO("testaccount", 1, "networkdomain", (short) 0,
+        Account oldAccount = new AccountVO("testaccount", 1, "networkdomain", (short) 0,
                 UUID.randomUUID().toString());
-        Account newAccount = (Account) new AccountVO("testaccount", 1, "networkdomain", (short) 1,
+        Account newAccount = new AccountVO("testaccount", 1, "networkdomain", (short) 1,
                 UUID.randomUUID().toString());
 
         UserVmVO vm = new UserVmVO(10L, "test", "test", 1L, HypervisorType.Any, 1L, false, false, 1L, 1L,
@@ -483,7 +556,12 @@ public class UserVmManagerTest {
         doThrow(new PermissionDeniedException("Access check failed")).when(_accountMgr).checkAccess(any(Account.class), any(AccessType.class),
                 any(Boolean.class), any(ControlledEntity.class));
 
-        _userVmMgr.moveVMToUser(cmd);
+        CallContext.register(user, caller);
+        try {
+            _userVmMgr.moveVMToUser(cmd);
+        } finally {
+            CallContext.unregister();
+        }
     }
 
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/server/test/com/cloud/vpc/NetworkACLManagerTest.java
----------------------------------------------------------------------
diff --git a/server/test/com/cloud/vpc/NetworkACLManagerTest.java b/server/test/com/cloud/vpc/NetworkACLManagerTest.java
index ddcfe7f..446e4e1 100644
--- a/server/test/com/cloud/vpc/NetworkACLManagerTest.java
+++ b/server/test/com/cloud/vpc/NetworkACLManagerTest.java
@@ -15,6 +15,35 @@
 
 package com.cloud.vpc;
 
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.UUID;
+
+import javax.inject.Inject;
+
+import junit.framework.TestCase;
+
+import org.apache.log4j.Logger;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mockito;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.FilterType;
+import org.springframework.core.type.classreading.MetadataReader;
+import org.springframework.core.type.classreading.MetadataReaderFactory;
+import org.springframework.core.type.filter.TypeFilter;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+import org.springframework.test.context.support.AnnotationConfigContextLoader;
+
+import org.apache.cloudstack.context.CallContext;
+import org.apache.cloudstack.test.utils.SpringUtils;
+
 import com.cloud.configuration.ConfigurationManager;
 import com.cloud.network.Network;
 import com.cloud.network.NetworkManager;
@@ -35,32 +64,9 @@ import com.cloud.tags.dao.ResourceTagDao;
 import com.cloud.user.Account;
 import com.cloud.user.AccountManager;
 import com.cloud.user.AccountVO;
-import com.cloud.user.UserContext;
+import com.cloud.user.UserVO;
 import com.cloud.utils.component.ComponentContext;
 import com.cloud.utils.exception.CloudRuntimeException;
-import junit.framework.TestCase;
-import org.apache.cloudstack.test.utils.SpringUtils;
-import org.apache.log4j.Logger;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Mockito;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.ComponentScan;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.context.annotation.FilterType;
-import org.springframework.core.type.classreading.MetadataReader;
-import org.springframework.core.type.classreading.MetadataReaderFactory;
-import org.springframework.core.type.filter.TypeFilter;
-import org.springframework.test.context.ContextConfiguration;
-import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
-import org.springframework.test.context.support.AnnotationConfigContextLoader;
-
-import javax.inject.Inject;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.UUID;
 
 @RunWith(SpringJUnit4ClassRunner.class)
 @ContextConfiguration(loader = AnnotationConfigContextLoader.class)
@@ -90,15 +96,24 @@ public class NetworkACLManagerTest extends TestCase{
 
     private static final Logger s_logger = Logger.getLogger( NetworkACLManagerTest.class);
 
+    @Override
     @Before
     public void setUp() {
         ComponentContext.initComponentsLifeCycle();
         Account account = new AccountVO("testaccount", 1, "testdomain", (short) 0, UUID.randomUUID().toString());
-        UserContext.registerContext(1, account, null, true);
+        UserVO user = new UserVO(1, "testuser", "password", "firstname", "lastName", "email", "timezone", UUID.randomUUID().toString());
+
+        CallContext.register(user, account);
         acl = Mockito.mock(NetworkACLVO.class);
         aclItem = Mockito.mock(NetworkACLItemVO.class);
     }
 
+    @Override
+    @After
+    public void tearDown() {
+        CallContext.unregister();
+    }
+
     @Test
     public void testCreateACL() throws Exception {
         Mockito.when(_networkACLDao.persist(Mockito.any(NetworkACLVO.class))).thenReturn(acl);


[06/50] [abbrv] UserContext switched to CallContext. Added generic storage mechanism for other code to carry information throughout a call. Made the calling User and Account a must have. Added an interface to carry entities in error. Fixed up the cod

Posted by ch...@apache.org.
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java
index 7bd2864..0a67cff 100755
--- a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java
+++ b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java
@@ -5,7 +5,7 @@
 // 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,
@@ -44,6 +44,8 @@ import org.apache.log4j.Logger;
 import org.springframework.stereotype.Component;
 
 import org.apache.cloudstack.api.command.admin.router.UpgradeRouterCmd;
+import org.apache.cloudstack.context.CallContext;
+import org.apache.cloudstack.context.ServerContexts;
 
 import com.cloud.agent.AgentManager;
 import com.cloud.agent.AgentManager.OnError;
@@ -205,7 +207,6 @@ import com.cloud.storage.dao.VolumeDao;
 import com.cloud.user.Account;
 import com.cloud.user.AccountManager;
 import com.cloud.user.User;
-import com.cloud.user.UserContext;
 import com.cloud.user.UserStatisticsVO;
 import com.cloud.user.UserStatsLogVO;
 import com.cloud.user.UserVO;
@@ -253,13 +254,12 @@ import com.cloud.vm.dao.NicIpAliasVO;
 import com.cloud.vm.dao.UserVmDao;
 import com.cloud.vm.dao.UserVmDetailsDao;
 import com.cloud.vm.dao.VMInstanceDao;
-
 /**
  * VirtualNetworkApplianceManagerImpl manages the different types of virtual network appliances available in the Cloud Stack.
  */
 @Component
 @Local(value = { VirtualNetworkApplianceManager.class, VirtualNetworkApplianceService.class })
-public class VirtualNetworkApplianceManagerImpl extends ManagerBase implements VirtualNetworkApplianceManager, VirtualNetworkApplianceService, 
+public class VirtualNetworkApplianceManagerImpl extends ManagerBase implements VirtualNetworkApplianceManager, VirtualNetworkApplianceService,
                             VirtualMachineGuru<DomainRouterVO>, Listener {
     private static final Logger s_logger = Logger.getLogger(VirtualNetworkApplianceManagerImpl.class);
 
@@ -431,7 +431,7 @@ public class VirtualNetworkApplianceManagerImpl extends ManagerBase implements V
     public VirtualRouter upgradeRouter(UpgradeRouterCmd cmd) {
         Long routerId = cmd.getId();
         Long serviceOfferingId = cmd.getServiceOfferingId();
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
 
         DomainRouterVO router = _routerDao.findById(routerId);
         if (router == null) {
@@ -467,7 +467,7 @@ public class VirtualNetworkApplianceManagerImpl extends ManagerBase implements V
         // Check that the service offering being upgraded to has the same storage pool preference as the VM's current service
         // offering
         if (currentServiceOffering.getUseLocalStorage() != newServiceOffering.getUseLocalStorage()) {
-            throw new InvalidParameterValueException("Can't upgrade, due to new local storage status : " + 
+            throw new InvalidParameterValueException("Can't upgrade, due to new local storage status : " +
         newServiceOffering.getUseLocalStorage() + " is different from "
                     + "curruent local storage status: " + currentServiceOffering.getUseLocalStorage());
         }
@@ -541,8 +541,8 @@ public class VirtualNetworkApplianceManagerImpl extends ManagerBase implements V
 
     @Override @ActionEvent(eventType = EventTypes.EVENT_ROUTER_STOP, eventDescription = "stopping router Vm", async = true)
     public VirtualRouter stopRouter(long routerId, boolean forced) throws ResourceUnavailableException, ConcurrentOperationException {
-        UserContext context = UserContext.current();
-        Account account = context.getCaller();
+        CallContext context = CallContext.current();
+        Account account = context.getCallingAccount();
 
         // verify parameters
         DomainRouterVO router = _routerDao.findById(routerId);
@@ -552,7 +552,7 @@ public class VirtualNetworkApplianceManagerImpl extends ManagerBase implements V
 
         _accountMgr.checkAccess(account, null, true, router);
 
-        UserVO user = _userDao.findById(UserContext.current().getCallerUserId());
+        UserVO user = _userDao.findById(CallContext.current().getCallingUserId());
 
         VirtualRouter virtualRouter = stop(router, forced, user, account);
         if(virtualRouter == null){
@@ -602,9 +602,9 @@ public class VirtualNetworkApplianceManagerImpl extends ManagerBase implements V
     }
 
     @Override @ActionEvent(eventType = EventTypes.EVENT_ROUTER_REBOOT, eventDescription = "rebooting router Vm", async = true)
-    public VirtualRouter rebootRouter(long routerId, boolean reprogramNetwork) throws ConcurrentOperationException, 
+    public VirtualRouter rebootRouter(long routerId, boolean reprogramNetwork) throws ConcurrentOperationException,
     ResourceUnavailableException, InsufficientCapacityException {
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
 
         // verify parameters
         DomainRouterVO router = _routerDao.findById(routerId);
@@ -621,7 +621,7 @@ public class VirtualNetworkApplianceManagerImpl extends ManagerBase implements V
                     DataCenter.class, router.getDataCenterId());
         }
 
-        UserVO user = _userDao.findById(UserContext.current().getCallerUserId());
+        UserVO user = _userDao.findById(CallContext.current().getCallingUserId());
         s_logger.debug("Stopping and starting router " + router + " as a part of router reboot");
 
         if (stop(router, false, user, caller) != null) {
@@ -666,11 +666,11 @@ public class VirtualNetworkApplianceManagerImpl extends ManagerBase implements V
         value = configs.get("router.check.poolsize");
         _rvrStatusUpdatePoolSize = NumbersUtil.parseInt(value, 10);
 
-        /* 
+        /*
          * We assume that one thread can handle 20 requests in 1 minute in normal situation, so here we give the queue size up to 50 minutes.
          * It's mostly for buffer, since each time CheckRouterTask running, it would add all the redundant networks in the queue immediately
          */
-        _vrUpdateQueue = new LinkedBlockingQueue<Long>(_rvrStatusUpdatePoolSize * 1000); 
+        _vrUpdateQueue = new LinkedBlockingQueue<Long>(_rvrStatusUpdatePoolSize * 1000);
 
         _rvrStatusUpdateExecutor = Executors.newFixedThreadPool(_rvrStatusUpdatePoolSize, new NamedThreadFactory("RedundantRouterStatusMonitor"));
 
@@ -796,7 +796,7 @@ public class VirtualNetworkApplianceManagerImpl extends ManagerBase implements V
         return VirtualMachineName.getRouterId(vmName);
     }
 
-    private VmDataCommand generateVmDataCommand(VirtualRouter router, String vmPrivateIpAddress, String userData, 
+    private VmDataCommand generateVmDataCommand(VirtualRouter router, String vmPrivateIpAddress, String userData,
             String serviceOffering, String zoneName, String guestIpAddress, String vmName,
             String vmInstanceName, long vmId, String vmUuid, String publicKey, long guestNetworkId) {
         VmDataCommand cmd = new VmDataCommand(vmPrivateIpAddress, vmName, _networkModel.getExecuteInSeqNtwkElmtCmd());
@@ -860,6 +860,7 @@ public class VirtualNetworkApplianceManagerImpl extends ManagerBase implements V
 
         @Override
         public void run() {
+            ServerContexts.registerSystemContext();
             try{
                 final List<DomainRouterVO> routers = _routerDao.listByStateAndNetworkType(State.Running, GuestType.Isolated, mgmtSrvrId);
                 s_logger.debug("Found " + routers.size() + " running routers. ");
@@ -873,7 +874,7 @@ public class VirtualNetworkApplianceManagerImpl extends ManagerBase implements V
                         for (Nic routerNic : routerNics) {
                             Network network = _networkModel.getNetwork(routerNic.getNetworkId());
                             //Send network usage command for public nic in VPC VR
-                            //Send network usage command for isolated guest nic of non VPC VR                            
+                            //Send network usage command for isolated guest nic of non VPC VR
                             if ((forVpc && network.getTrafficType() == TrafficType.Public) || (!forVpc && network.getTrafficType() == TrafficType.Guest && network.getGuestType() == Network.GuestType.Isolated)) {
                                 final NetworkUsageCommand usageCmd = new NetworkUsageCommand(privateIP, router.getHostName(),
                                         forVpc, routerNic.getIp4Address());
@@ -957,6 +958,8 @@ public class VirtualNetworkApplianceManagerImpl extends ManagerBase implements V
                 }
             } catch (Exception e) {
                 s_logger.warn("Error while collecting network stats", e);
+            } finally {
+                ServerContexts.unregisterSystemContext();
             }
         }
     }
@@ -986,12 +989,12 @@ public class VirtualNetworkApplianceManagerImpl extends ManagerBase implements V
                         List<UserStatisticsVO> updatedStats = _userStatsDao.listUpdatedStats();
                         Date updatedTime = new Date();
                         for(UserStatisticsVO stat : updatedStats){
-                            //update agg bytes                    
+                            //update agg bytes
                             stat.setAggBytesReceived(stat.getCurrentBytesReceived() + stat.getNetBytesReceived());
                             stat.setAggBytesSent(stat.getCurrentBytesSent() + stat.getNetBytesSent());
                             _userStatsDao.update(stat.getId(), stat);
                             //insert into op_user_stats_log
-                            UserStatsLogVO statsLog = new UserStatsLogVO(stat.getId(), stat.getNetBytesReceived(), stat.getNetBytesSent(), stat.getCurrentBytesReceived(), 
+                            UserStatsLogVO statsLog = new UserStatsLogVO(stat.getId(), stat.getNetBytesReceived(), stat.getNetBytesSent(), stat.getCurrentBytesReceived(),
                                                                          stat.getCurrentBytesSent(), stat.getAggBytesReceived(), stat.getAggBytesSent(), updatedTime);
                             _userStatsLogDao.persist(statsLog);
                         }
@@ -1083,7 +1086,7 @@ public class VirtualNetworkApplianceManagerImpl extends ManagerBase implements V
                         if (oldState != conn.getState()) {
                             String title = "Site-to-site Vpn Connection to " + gw.getName() +
                                     " just switch from " + oldState + " to " + conn.getState();
-                            String context = "Site-to-site Vpn Connection to " + gw.getName() + " on router " + router.getHostName() + 
+                            String context = "Site-to-site Vpn Connection to " + gw.getName() + " on router " + router.getHostName() +
                                     "(id: " + router.getId() + ") " + " just switch from " + oldState + " to " + conn.getState();
                             s_logger.info(context);
                             _alertMgr.sendAlert(AlertManager.ALERT_TYPE_DOMAIN_ROUTER,
@@ -1168,8 +1171,6 @@ public class VirtualNetworkApplianceManagerImpl extends ManagerBase implements V
 
     //Ensure router status is update to date before execute this function. The function would try best to recover all routers except MASTER
     protected void recoverRedundantNetwork(DomainRouterVO masterRouter, DomainRouterVO backupRouter) {
-        UserContext context = UserContext.current();
-        context.setAccountId(1);                            
         if (masterRouter.getState() == State.Running && backupRouter.getState() == State.Running) {
             HostVO masterHost = _hostDao.findById(masterRouter.getHostId());
             HostVO backupHost = _hostDao.findById(backupRouter.getHostId());
@@ -1281,45 +1282,49 @@ public class VirtualNetworkApplianceManagerImpl extends ManagerBase implements V
 
         @Override
         public void run() {
-            while (true) {
+            ServerContexts.registerSystemContext();
             try {
-                    Long networkId = _vrUpdateQueue.take();
-                    List <DomainRouterVO> routers = _routerDao.listByNetworkAndRole(networkId, Role.VIRTUAL_ROUTER);
-
-                    if (routers.size() != 2) {
-                        continue;
-                    }
-                    /*
-                     * We update the router pair which the lower id router owned by this mgmt server, in order
-                     * to prevent duplicate update of router status from cluster mgmt servers
-                     */
-                    DomainRouterVO router0 = routers.get(0);
-                    DomainRouterVO router1 = routers.get(1);
-                    DomainRouterVO router = router0;
-                    if ((router0.getId() < router1.getId()) && router0.getHostId() != null) {
-                    	router = router0;
-                    } else {
-                    	router = router1;
-                    }
-                    if (router.getHostId() == null) {
-                    	s_logger.debug("Skip router pair (" + router0.getInstanceName() + "," + router1.getInstanceName() + ") due to can't find host");
-                    	continue;
-                    }
-                    HostVO host = _hostDao.findById(router.getHostId());
-                    if (host == null || host.getManagementServerId() == null ||
-                            host.getManagementServerId() != ManagementServerNode.getManagementServerId()) {
-                    	s_logger.debug("Skip router pair (" + router0.getInstanceName() + "," + router1.getInstanceName() + ") due to not belong to this mgmt server");
-                        continue;
+                while (true) {
+                    try {
+                            Long networkId = _vrUpdateQueue.take();  // This is a blocking call so this thread won't run all the time if no work item in queue.
+                            List <DomainRouterVO> routers = _routerDao.listByNetworkAndRole(networkId, Role.VIRTUAL_ROUTER);
+        
+                            if (routers.size() != 2) {
+                                continue;
+                            }
+                            /*
+                             * We update the router pair which the lower id router owned by this mgmt server, in order
+                             * to prevent duplicate update of router status from cluster mgmt servers
+                             */
+                            DomainRouterVO router0 = routers.get(0);
+                            DomainRouterVO router1 = routers.get(1);
+                            DomainRouterVO router = router0;
+                            if ((router0.getId() < router1.getId()) && router0.getHostId() != null) {
+                            	router = router0;
+                            } else {
+                            	router = router1;
+                            }
+                            if (router.getHostId() == null) {
+                            	s_logger.debug("Skip router pair (" + router0.getInstanceName() + "," + router1.getInstanceName() + ") due to can't find host");
+                            	continue;
+                            }
+                            HostVO host = _hostDao.findById(router.getHostId());
+                            if (host == null || host.getManagementServerId() == null ||
+                                    host.getManagementServerId() != ManagementServerNode.getManagementServerId()) {
+                            	s_logger.debug("Skip router pair (" + router0.getInstanceName() + "," + router1.getInstanceName() + ") due to not belong to this mgmt server");
+                                continue;
+                            }
+                        updateRoutersRedundantState(routers);
+                        checkDuplicateMaster(routers);
+                        checkSanity(routers);
+                    } catch (Exception ex) {
+                        s_logger.error("Fail to complete the RvRStatusUpdateTask! ", ex);
                     }
-                updateRoutersRedundantState(routers);
-                checkDuplicateMaster(routers);
-                checkSanity(routers);
-            } catch (Exception ex) {
-                    s_logger.error("Fail to complete the RvRStatusUpdateTask! ", ex);
                 }
+            } finally {
+                ServerContexts.unregisterSystemContext();
             }
         }
-        
     }
 
     protected class CheckRouterTask implements Runnable {
@@ -1329,6 +1334,7 @@ public class VirtualNetworkApplianceManagerImpl extends ManagerBase implements V
 
         @Override
         public void run() {
+            ServerContexts.registerSystemContext();
             try {
                 final List<DomainRouterVO> routers = _routerDao.listIsolatedByHostId(null);
                 s_logger.debug("Found " + routers.size() + " routers to update status. ");
@@ -1345,6 +1351,8 @@ public class VirtualNetworkApplianceManagerImpl extends ManagerBase implements V
                 }
             } catch (Exception ex) {
                 s_logger.error("Fail to complete the CheckRouterTask! ", ex);
+            } finally {
+                ServerContexts.unregisterSystemContext();
             }
         }
     }
@@ -1402,7 +1410,7 @@ public class VirtualNetworkApplianceManagerImpl extends ManagerBase implements V
 
             for (HostVO h : hosts) {
                 if (h.getStatus() == Status.Up) {
-                    s_logger.debug("Pick up host that has hypervisor type " + h.getHypervisorType() + " in cluster " + 
+                    s_logger.debug("Pick up host that has hypervisor type " + h.getHypervisorType() + " in cluster " +
                                 cv.getId() + " to start domain router for OVM");
                     return h.getHypervisorType();
                 }
@@ -1419,7 +1427,7 @@ public class VirtualNetworkApplianceManagerImpl extends ManagerBase implements V
 
     @DB
     protected List<DomainRouterVO> findOrDeployVirtualRouterInGuestNetwork(Network guestNetwork, DeployDestination dest, Account owner,
-            boolean isRedundant, Map<Param, Object> params) throws ConcurrentOperationException, 
+            boolean isRedundant, Map<Param, Object> params) throws ConcurrentOperationException,
             InsufficientCapacityException, ResourceUnavailableException {
 
         List<DomainRouterVO> routers = new ArrayList<DomainRouterVO>();
@@ -1642,9 +1650,9 @@ public class VirtualNetworkApplianceManagerImpl extends ManagerBase implements V
                     offerHA = false;
                 }
 
-                router = new DomainRouterVO(id, routerOffering.getId(), vrProvider.getId(), 
+                router = new DomainRouterVO(id, routerOffering.getId(), vrProvider.getId(),
                 VirtualMachineName.getRouterName(id, _instance), template.getId(), template.getHypervisorType(),
-                template.getGuestOSId(), owner.getDomainId(), owner.getId(), isRedundant, 0, false, 
+                template.getGuestOSId(), owner.getDomainId(), owner.getId(), isRedundant, 0, false,
                 RedundantState.UNKNOWN, offerHA, false, vpcId);
                 router.setRole(Role.VIRTUAL_ROUTER);
                 router = _itMgr.allocate(router, template, routerOffering, networks, plan, null, owner);
@@ -1687,7 +1695,7 @@ public class VirtualNetworkApplianceManagerImpl extends ManagerBase implements V
     }
 
 
-    protected List<HypervisorType> getHypervisors(DeployDestination dest, DeploymentPlan plan, 
+    protected List<HypervisorType> getHypervisors(DeployDestination dest, DeploymentPlan plan,
             List<HypervisorType> supportedHypervisors) throws InsufficientServerCapacityException {
         List<HypervisorType> hypervisors = new ArrayList<HypervisorType>();
 
@@ -1758,7 +1766,7 @@ public class VirtualNetworkApplianceManagerImpl extends ManagerBase implements V
                         if (startIp != null && _ipAddressDao.findByIpAndSourceNetworkId(guestNetwork.getId(), startIp).getAllocatedTime() == null) {
                             defaultNetworkStartIp = startIp;
                         } else if (s_logger.isDebugEnabled()){
-            				s_logger.debug("First ipv4 " + startIp + " in network id=" + guestNetwork.getId() + 
+            				s_logger.debug("First ipv4 " + startIp + " in network id=" + guestNetwork.getId() +
                                     " is already allocated, can't use it for domain router; will get random ip address from the range");
                         }
             	    }
@@ -1767,13 +1775,13 @@ public class VirtualNetworkApplianceManagerImpl extends ManagerBase implements V
             	if (guestNetwork.getIp6Cidr() != null) {
             		if (placeholder != null && placeholder.getIp6Address() != null) {
             			s_logger.debug("Requesting ipv6 address " + placeholder.getIp6Address() + " stored in placeholder nic for the network " + guestNetwork);
-            			defaultNetworkStartIpv6 = placeholder.getIp6Address(); 
+            			defaultNetworkStartIpv6 = placeholder.getIp6Address();
             		} else {
             		String startIpv6 = _networkModel.getStartIpv6Address(guestNetwork.getId());
             		if (startIpv6 != null && _ipv6Dao.findByNetworkIdAndIp(guestNetwork.getId(), startIpv6) == null) {
             			defaultNetworkStartIpv6 = startIpv6;
             		} else if (s_logger.isDebugEnabled()){
-            			s_logger.debug("First ipv6 " + startIpv6 + " in network id=" + guestNetwork.getId() + 
+            			s_logger.debug("First ipv6 " + startIpv6 + " in network id=" + guestNetwork.getId() +
             					" is already allocated, can't use it for domain router; will get random ipv6 address from the range");
             		}
             	}
@@ -1842,7 +1850,7 @@ public class VirtualNetworkApplianceManagerImpl extends ManagerBase implements V
     }
 
     
-    protected Pair<DeploymentPlan, List<DomainRouterVO>> getDeploymentPlanAndRouters(boolean isPodBased, 
+    protected Pair<DeploymentPlan, List<DomainRouterVO>> getDeploymentPlanAndRouters(boolean isPodBased,
             DeployDestination dest, long guestNetworkId) {
         long dcId = dest.getDataCenter().getId();
         List<DomainRouterVO> routers = null;
@@ -1865,7 +1873,7 @@ public class VirtualNetworkApplianceManagerImpl extends ManagerBase implements V
     }
     
     
-    private DomainRouterVO startVirtualRouter(DomainRouterVO router, User user, Account caller, Map<Param, Object> params) 
+    private DomainRouterVO startVirtualRouter(DomainRouterVO router, User user, Account caller, Map<Param, Object> params)
             throws StorageUnavailableException, InsufficientCapacityException,
     ConcurrentOperationException, ResourceUnavailableException {
 
@@ -1908,7 +1916,7 @@ public class VirtualNetworkApplianceManagerImpl extends ManagerBase implements V
             }
         }
         if (routerToBeAvoid == null) {
-            return this.start(router, user, caller, params, null); 
+            return this.start(router, user, caller, params, null);
         }
         // We would try best to deploy the router to another place
         int retryIndex = 5;
@@ -1945,7 +1953,7 @@ public class VirtualNetworkApplianceManagerImpl extends ManagerBase implements V
     }
 
     @Override
-    public List<DomainRouterVO> deployVirtualRouterInGuestNetwork(Network guestNetwork, DeployDestination dest, Account owner, 
+    public List<DomainRouterVO> deployVirtualRouterInGuestNetwork(Network guestNetwork, DeployDestination dest, Account owner,
             Map<Param, Object> params, boolean isRedundant) throws InsufficientCapacityException,
     ConcurrentOperationException, ResourceUnavailableException {
 
@@ -1985,7 +1993,7 @@ public class VirtualNetworkApplianceManagerImpl extends ManagerBase implements V
     }
 
     @Override
-    public boolean finalizeVirtualMachineProfile(VirtualMachineProfile<DomainRouterVO> profile, DeployDestination dest, 
+    public boolean finalizeVirtualMachineProfile(VirtualMachineProfile<DomainRouterVO> profile, DeployDestination dest,
             ReservationContext context) {
         
         boolean dnsProvided = true;
@@ -2048,7 +2056,7 @@ public class VirtualNetworkApplianceManagerImpl extends ManagerBase implements V
                 // DOMR control command is sent over management server in VMware
                 if (dest.getHost().getHypervisorType() == HypervisorType.VMware) {
                     if (s_logger.isInfoEnabled()) {
-                        s_logger.info("Check if we need to add management server explicit route to DomR. pod cidr: " 
+                        s_logger.info("Check if we need to add management server explicit route to DomR. pod cidr: "
                     + dest.getPod().getCidrAddress() + "/" + dest.getPod().getCidrSize()
                                 + ", pod gateway: " + dest.getPod().getGateway() + ", management host: " + _mgmt_host);
                     }
@@ -2106,7 +2114,7 @@ public class VirtualNetworkApplianceManagerImpl extends ManagerBase implements V
             type = "router";
             if (_disable_rp_filter) {
                 rpFilter=" disable_rp_filter=true";
-        }  
+        }
         }
         
         if (_disable_rp_filter) {
@@ -2124,8 +2132,8 @@ public class VirtualNetworkApplianceManagerImpl extends ManagerBase implements V
             buf.append(" extra_pubnics=" + _routerExtraPublicNics);
         }
         
-        /* If virtual router didn't provide DNS service but provide DHCP service, we need to override the DHCP response 
-         * to return DNS server rather than 
+        /* If virtual router didn't provide DNS service but provide DHCP service, we need to override the DHCP response
+         * to return DNS server rather than
          * virtual router itself. */
         if (dnsProvided || dhcpProvided) {
             if (defaultDns1 != null) {
@@ -2161,7 +2169,7 @@ public class VirtualNetworkApplianceManagerImpl extends ManagerBase implements V
         }
 
     
-    protected StringBuilder createGuestBootLoadArgs(NicProfile guestNic, String defaultDns1, 
+    protected StringBuilder createGuestBootLoadArgs(NicProfile guestNic, String defaultDns1,
             String defaultDns2, DomainRouterVO router) {
         long guestNetworkId = guestNic.getNetworkId();
         NetworkVO guestNetwork = _networkDao.findById(guestNetworkId);
@@ -2203,7 +2211,7 @@ public class VirtualNetworkApplianceManagerImpl extends ManagerBase implements V
                 if (cidr != null) {
                     dhcpRange = NetUtils.getIpRangeStartIpFromCidr(cidr, cidrSize);
                 }
-            }  
+            }
         } else if (dc.getNetworkType() == NetworkType.Advanced) {
             String cidr = guestNetwork.getCidr();
             if (cidr != null) {
@@ -2268,7 +2276,7 @@ public class VirtualNetworkApplianceManagerImpl extends ManagerBase implements V
     }
     
     @Override
-    public boolean finalizeDeployment(Commands cmds, VirtualMachineProfile<DomainRouterVO> profile, 
+    public boolean finalizeDeployment(Commands cmds, VirtualMachineProfile<DomainRouterVO> profile,
             DeployDestination dest, ReservationContext context) throws ResourceUnavailableException {
         DomainRouterVO router = profile.getVirtualMachine();
 
@@ -2303,7 +2311,7 @@ public class VirtualNetworkApplianceManagerImpl extends ManagerBase implements V
 
         // restart network if restartNetwork = false is not specified in profile parameters
         boolean reprogramGuestNtwks = true;
-        if (profile.getParameter(Param.ReProgramGuestNetworks) != null 
+        if (profile.getParameter(Param.ReProgramGuestNetworks) != null
                 && (Boolean) profile.getParameter(Param.ReProgramGuestNetworks) == false) {
             reprogramGuestNtwks = false;
         }
@@ -2509,7 +2517,7 @@ public class VirtualNetworkApplianceManagerImpl extends ManagerBase implements V
         }
     }
 
-    protected void finalizeIpAssocForNetwork(Commands cmds, VirtualRouter router, Provider provider, 
+    protected void finalizeIpAssocForNetwork(Commands cmds, VirtualRouter router, Provider provider,
             Long guestNetworkId, Map<String, String> vlanMacAddress) {
         
         ArrayList<? extends PublicIpAddress> publicIps = getPublicIpsToApply(router, provider, guestNetworkId);
@@ -2523,7 +2531,7 @@ public class VirtualNetworkApplianceManagerImpl extends ManagerBase implements V
         }
     }
 
-    protected ArrayList<? extends PublicIpAddress> getPublicIpsToApply(VirtualRouter router, Provider provider, 
+    protected ArrayList<? extends PublicIpAddress> getPublicIpsToApply(VirtualRouter router, Provider provider,
             Long guestNetworkId, com.cloud.network.IpAddress.State... skipInStates) {
         long ownerId = router.getAccountId();
         final List<? extends IpAddress> userIps = _networkModel.listPublicIpsAssignedToGuestNtwk(ownerId, guestNetworkId, null);
@@ -2642,7 +2650,7 @@ public class VirtualNetworkApplianceManagerImpl extends ManagerBase implements V
 
 
     @Override
-    public boolean startRemoteAccessVpn(Network network, RemoteAccessVpn vpn, List<? extends VirtualRouter> routers) 
+    public boolean startRemoteAccessVpn(Network network, RemoteAccessVpn vpn, List<? extends VirtualRouter> routers)
             throws ResourceUnavailableException {
         if (routers == null || routers.isEmpty()) {
             s_logger.warn("Failed to start remote access VPN: no router found for account and zone");
@@ -2653,7 +2661,7 @@ public class VirtualNetworkApplianceManagerImpl extends ManagerBase implements V
         for (VirtualRouter router : routers) {
             if (router.getState() != State.Running) {
                 s_logger.warn("Failed to start remote access VPN: router not in right state " + router.getState());
-                throw new ResourceUnavailableException("Failed to start remote access VPN: router not in right state " 
+                throw new ResourceUnavailableException("Failed to start remote access VPN: router not in right state "
                 + router.getState(), DataCenter.class, network.getDataCenterId());
             }
 
@@ -2668,16 +2676,16 @@ public class VirtualNetworkApplianceManagerImpl extends ManagerBase implements V
             }
             Answer answer = cmds.getAnswer("users");
             if (!answer.getResult()) {
-                s_logger.error("Unable to start vpn: unable add users to vpn in zone " + router.getDataCenterId() 
+                s_logger.error("Unable to start vpn: unable add users to vpn in zone " + router.getDataCenterId()
                         + " for account " + vpn.getAccountId() + " on domR: " + router.getInstanceName()
                         + " due to " + answer.getDetails());
-                throw new ResourceUnavailableException("Unable to start vpn: Unable to add users to vpn in zone " + 
+                throw new ResourceUnavailableException("Unable to start vpn: Unable to add users to vpn in zone " +
                         router.getDataCenterId() + " for account " + vpn.getAccountId() + " on domR: "
                         + router.getInstanceName() + " due to " + answer.getDetails(), DataCenter.class, router.getDataCenterId());
             }
             answer = cmds.getAnswer("startVpn");
             if (!answer.getResult()) {
-                s_logger.error("Unable to start vpn in zone " + router.getDataCenterId() + " for account " + 
+                s_logger.error("Unable to start vpn in zone " + router.getDataCenterId() + " for account " +
             vpn.getAccountId() + " on domR: " + router.getInstanceName() + " due to "
                         + answer.getDetails());
                 throw new ResourceUnavailableException("Unable to start vpn in zone " + router.getDataCenterId()
@@ -2691,7 +2699,7 @@ public class VirtualNetworkApplianceManagerImpl extends ManagerBase implements V
 
 
     @Override
-    public boolean deleteRemoteAccessVpn(Network network, RemoteAccessVpn vpn, List<? extends VirtualRouter> routers) 
+    public boolean deleteRemoteAccessVpn(Network network, RemoteAccessVpn vpn, List<? extends VirtualRouter> routers)
             throws ResourceUnavailableException {
         if (routers == null || routers.isEmpty()) {
             s_logger.warn("Failed to delete remote access VPN: no router found for account and zone");
@@ -2704,7 +2712,7 @@ public class VirtualNetworkApplianceManagerImpl extends ManagerBase implements V
                 Commands cmds = new Commands(OnError.Continue);
                 IpAddress ip = _networkModel.getIp(vpn.getServerAddressId());
 
-                RemoteAccessVpnCfgCommand removeVpnCmd = new RemoteAccessVpnCfgCommand(false, ip.getAddress().addr(), 
+                RemoteAccessVpnCfgCommand removeVpnCmd = new RemoteAccessVpnCfgCommand(false, ip.getAddress().addr(),
                         vpn.getLocalIp(), vpn.getIpRange(), vpn.getIpsecPresharedKey());
                 removeVpnCmd.setAccessDetail(NetworkElementCommand.ROUTER_IP, getRouterControlIp(router.getId()));
                 removeVpnCmd.setAccessDetail(NetworkElementCommand.ROUTER_GUEST_IP, getRouterIpInNetwork(network.getId(), router.getId()));
@@ -2721,7 +2729,7 @@ public class VirtualNetworkApplianceManagerImpl extends ManagerBase implements V
                 continue;
             } else {
                 s_logger.warn("Failed to delete remote access VPN: domR " + router + " is not in right state " + router.getState());
-                throw new ResourceUnavailableException("Failed to delete remote access VPN: domR is not in right state " + 
+                throw new ResourceUnavailableException("Failed to delete remote access VPN: domR is not in right state " +
                 router.getState(), DataCenter.class, network.getDataCenterId());
             }
         }
@@ -2730,7 +2738,7 @@ public class VirtualNetworkApplianceManagerImpl extends ManagerBase implements V
     }
 
 
-    private DomainRouterVO start(DomainRouterVO router, User user, Account caller, Map<Param, Object> params, DeploymentPlan planToDeploy) 
+    private DomainRouterVO start(DomainRouterVO router, User user, Account caller, Map<Param, Object> params, DeploymentPlan planToDeploy)
             throws StorageUnavailableException, InsufficientCapacityException,
     ConcurrentOperationException, ResourceUnavailableException {
         s_logger.debug("Starting router " + router);
@@ -2807,7 +2815,7 @@ public class VirtualNetworkApplianceManagerImpl extends ManagerBase implements V
                 try {
                     if (network.getTrafficType() == TrafficType.Guest && network.getGuestType() == GuestType.Shared) {
                         Pod pod = _podDao.findById(vm.getPodIdToDeployIn());
-                        Account caller = UserContext.current().getCaller();
+                        Account caller = CallContext.current().getCallingAccount();
                         List<VlanVO> vlanList = _vlanDao.listVlansByNetworkIdAndGateway(network.getId(), nic.getGateway());
                         List<Long>   vlanDbIdList = new ArrayList<Long>();
                         for (VlanVO vlan : vlanList) {
@@ -2829,7 +2837,7 @@ public class VirtualNetworkApplianceManagerImpl extends ManagerBase implements V
                     return false;
                 }
                 //this means we did not create a ip alis on the router.
-                NicIpAliasVO alias = new NicIpAliasVO(domr_guest_nic.getId(), routerAliasIp, router.getId(), UserContext.current().getAccountId(), network.getDomainId(), nic.getNetworkId(),nic.getGateway(), nic.getNetmask());
+                NicIpAliasVO alias = new NicIpAliasVO(domr_guest_nic.getId(), routerAliasIp, router.getId(), CallContext.current().getCallingAccountId(), network.getDomainId(), nic.getNetworkId(),nic.getGateway(), nic.getNetmask());
                 alias.setAliasCount((routerPublicIP.getIpMacAddress()));
                 _nicIpAliasDao.persist(alias);
                 List<IpAliasTO> ipaliasTo = new ArrayList<IpAliasTO>();
@@ -2894,7 +2902,7 @@ public class VirtualNetworkApplianceManagerImpl extends ManagerBase implements V
 
 
     @Override
-    public boolean applyDhcpEntry(Network network, final NicProfile nic, VirtualMachineProfile<UserVm> profile, 
+    public boolean applyDhcpEntry(Network network, final NicProfile nic, VirtualMachineProfile<UserVm> profile,
             DeployDestination dest, List<DomainRouterVO> routers)
             throws ResourceUnavailableException {
         if(s_logger.isTraceEnabled()) {
@@ -2908,7 +2916,7 @@ public class VirtualNetworkApplianceManagerImpl extends ManagerBase implements V
         
         boolean podLevelException = false;
         //for user vm in Basic zone we should try to re-deploy vm in a diff pod if it fails to deploy in original pod; so throwing exception with Pod scope
-        if (isZoneBasic && podId != null && updatedProfile.getVirtualMachine().getType() == VirtualMachine.Type.User 
+        if (isZoneBasic && podId != null && updatedProfile.getVirtualMachine().getType() == VirtualMachine.Type.User
                 && network.getTrafficType() == TrafficType.Guest && network.getGuestType() == Network.GuestType.Shared) {
             podLevelException = true;
         }
@@ -2982,7 +2990,7 @@ public class VirtualNetworkApplianceManagerImpl extends ManagerBase implements V
         
         boolean podLevelException = false;
         //for user vm in Basic zone we should try to re-deploy vm in a diff pod if it fails to deploy in original pod; so throwing exception with Pod scope
-        if (isZoneBasic && podId != null && updatedProfile.getVirtualMachine().getType() == VirtualMachine.Type.User 
+        if (isZoneBasic && podId != null && updatedProfile.getVirtualMachine().getType() == VirtualMachine.Type.User
                 && network.getTrafficType() == TrafficType.Guest && network.getGuestType() == Network.GuestType.Shared) {
             podLevelException = true;
         }
@@ -3014,7 +3022,7 @@ public class VirtualNetworkApplianceManagerImpl extends ManagerBase implements V
     public String[] applyVpnUsers(Network network, List<? extends VpnUser> users, List<DomainRouterVO> routers) throws ResourceUnavailableException {
         if (routers == null || routers.isEmpty()) {
             s_logger.warn("Failed to add/remove VPN users: no router found for account and zone");
-            throw new ResourceUnavailableException("Unable to assign ip addresses, domR doesn't exist for network " + 
+            throw new ResourceUnavailableException("Unable to assign ip addresses, domR doesn't exist for network " +
             network.getId(), DataCenter.class, network.getDataCenterId());
         }
 
@@ -3023,7 +3031,7 @@ public class VirtualNetworkApplianceManagerImpl extends ManagerBase implements V
         for (DomainRouterVO router : routers) {
             if (router.getState() != State.Running) {
                 s_logger.warn("Failed to add/remove VPN users: router not in running state");
-                throw new ResourceUnavailableException("Unable to assign ip addresses, domR is not in right state " + 
+                throw new ResourceUnavailableException("Unable to assign ip addresses, domR is not in right state " +
                 router.getState(), DataCenter.class, network.getDataCenterId());
             }
 
@@ -3088,10 +3096,10 @@ public class VirtualNetworkApplianceManagerImpl extends ManagerBase implements V
     }
 
     @Override
-    public VirtualRouter startRouter(long routerId, boolean reprogramNetwork) throws ResourceUnavailableException, 
+    public VirtualRouter startRouter(long routerId, boolean reprogramNetwork) throws ResourceUnavailableException,
     InsufficientCapacityException, ConcurrentOperationException {
-        Account caller = UserContext.current().getCaller();
-        User callerUser = _accountMgr.getActiveUser(UserContext.current().getCallerUserId());
+        Account caller = CallContext.current().getCallingAccount();
+        User callerUser = _accountMgr.getActiveUser(CallContext.current().getCallingUserId());
 
         // verify parameters
         DomainRouterVO router = _routerDao.findById(routerId);
@@ -3127,7 +3135,7 @@ public class VirtualNetworkApplianceManagerImpl extends ManagerBase implements V
             return router;
         }
 
-        UserVO user = _userDao.findById(UserContext.current().getCallerUserId());
+        UserVO user = _userDao.findById(CallContext.current().getCallingUserId());
         Map<Param, Object> params = new HashMap<Param, Object>();
         if (reprogramNetwork) {
             params.put(Param.ReProgramGuestNetworks, true);
@@ -3209,7 +3217,7 @@ public class VirtualNetworkApplianceManagerImpl extends ManagerBase implements V
                 	vifMacAddress = ipAddr.getMacAddress();
                 }
 
-                IpAddressTO ip = new IpAddressTO(ipAddr.getAccountId(), ipAddr.getAddress().addr(), add, firstIP, 
+                IpAddressTO ip = new IpAddressTO(ipAddr.getAccountId(), ipAddr.getAddress().addr(), add, firstIP,
                         sourceNat, vlanId, vlanGateway, vlanNetmask, vifMacAddress, networkRate, ipAddr.isOneToOneNat());
 
                 ip.setTrafficType(network.getTrafficType());
@@ -3307,13 +3315,13 @@ public class VirtualNetworkApplianceManagerImpl extends ManagerBase implements V
         
         Network guestNetwork = _networkModel.getNetwork(guestNetworkId);
         Nic nic = _nicDao.findByNtwkIdAndInstanceId(guestNetwork.getId(), router.getId());
-        NicProfile nicProfile = new NicProfile(nic, guestNetwork, nic.getBroadcastUri(), nic.getIsolationUri(), 
-                _networkModel.getNetworkRate(guestNetwork.getId(), router.getId()), 
-                _networkModel.isSecurityGroupSupportedInNetwork(guestNetwork), 
+        NicProfile nicProfile = new NicProfile(nic, guestNetwork, nic.getBroadcastUri(), nic.getIsolationUri(),
+                _networkModel.getNetworkRate(guestNetwork.getId(), router.getId()),
+                _networkModel.isSecurityGroupSupportedInNetwork(guestNetwork),
                 _networkModel.getNetworkTag(router.getHypervisorType(), guestNetwork));
 
-        LoadBalancerConfigCommand cmd = new LoadBalancerConfigCommand(lbs,routerPublicIp, 
-                getRouterIpInNetwork(guestNetworkId, router.getId()),router.getPrivateIpAddress(), 
+        LoadBalancerConfigCommand cmd = new LoadBalancerConfigCommand(lbs,routerPublicIp,
+                getRouterIpInNetwork(guestNetworkId, router.getId()),router.getPrivateIpAddress(),
                 _itMgr.toNicTO(nicProfile, router.getHypervisorType()), router.getVpcId());
 
         cmd.lbStatsVisibility = _configDao.getValue(Config.NetworkLBHaproxyStatsVisbility.key());
@@ -3350,7 +3358,7 @@ public class VirtualNetworkApplianceManagerImpl extends ManagerBase implements V
 
         IpAddress ip = _networkModel.getIp(vpn.getServerAddressId());
 
-        RemoteAccessVpnCfgCommand startVpnCmd = new RemoteAccessVpnCfgCommand(true, ip.getAddress().addr(), 
+        RemoteAccessVpnCfgCommand startVpnCmd = new RemoteAccessVpnCfgCommand(true, ip.getAddress().addr(),
                 vpn.getLocalIp(), vpn.getIpRange(), vpn.getIpsecPresharedKey());
         startVpnCmd.setAccessDetail(NetworkElementCommand.ROUTER_IP, getRouterControlIp(router.getId()));
         startVpnCmd.setAccessDetail(NetworkElementCommand.ROUTER_GUEST_IP, getRouterIpInNetwork(vpn.getNetworkId(), router.getId()));
@@ -3369,7 +3377,7 @@ public class VirtualNetworkApplianceManagerImpl extends ManagerBase implements V
         // password should be set only on default network element
         if (password != null && nic.isDefaultNic()) {
             String encodedPassword = PasswordGenerator.rot13(password);
-            // We would unset password for BACKUP router in the RvR, to prevent user from accidently reset the 
+            // We would unset password for BACKUP router in the RvR, to prevent user from accidently reset the
             // password again after BACKUP become MASTER
             if (router.getIsRedundantRouter() && router.getRedundantState() != RedundantState.MASTER) {
             	encodedPassword = PasswordGenerator.rot13("saved_password");
@@ -3663,7 +3671,7 @@ public class VirtualNetworkApplianceManagerImpl extends ManagerBase implements V
                     LoadBalancingRule loadBalancing = new LoadBalancingRule(lb, dstList, policyList, hcPolicyList, sourceIp);
                     lbRules.add(loadBalancing);
                 }
-                return sendLBRules(router, lbRules, network.getId());  
+                return sendLBRules(router, lbRules, network.getId());
             }
         });
     }
@@ -3756,7 +3764,7 @@ public class VirtualNetworkApplianceManagerImpl extends ManagerBase implements V
         boolean execute(Network network, VirtualRouter router) throws ResourceUnavailableException;
     }
     
-    protected boolean applyRules(Network network, List<? extends VirtualRouter> routers, String typeString, 
+    protected boolean applyRules(Network network, List<? extends VirtualRouter> routers, String typeString,
             boolean isPodLevelException, Long podId, boolean failWhenDisconnect, RuleApplier applier) throws ResourceUnavailableException {
         if (routers == null || routers.isEmpty()) {
             s_logger.warn("Unable to apply " + typeString + ", virtual router doesn't exist in the network " + network.getId());
@@ -3779,11 +3787,11 @@ public class VirtualNetworkApplianceManagerImpl extends ManagerBase implements V
 
                 if (router.isStopPending()) {
                     if (_hostDao.findById(router.getHostId()).getStatus() == Status.Up) {
-                        throw new ResourceUnavailableException("Unable to process due to the stop pending router " + 
+                        throw new ResourceUnavailableException("Unable to process due to the stop pending router " +
                     router.getInstanceName() + " haven't been stopped after it's host coming back!",
                                 DataCenter.class, router.getDataCenterId());
                     }
-                    s_logger.debug("Router " + router.getInstanceName() + " is stop pending, so not sending apply " + 
+                    s_logger.debug("Router " + router.getInstanceName() + " is stop pending, so not sending apply " +
                     typeString + " commands to the backend");
                     continue;
                 }
@@ -3805,15 +3813,15 @@ public class VirtualNetworkApplianceManagerImpl extends ManagerBase implements V
                 }
 
             } else if (router.getState() == State.Stopped || router.getState() == State.Stopping) {
-                s_logger.debug("Router " + router.getInstanceName() + " is in " + router.getState() + 
+                s_logger.debug("Router " + router.getInstanceName() + " is in " + router.getState() +
                         ", so not sending apply " + typeString + " commands to the backend");
             } else {
                 s_logger.warn("Unable to apply " + typeString +", virtual router is not in the right state " + router.getState());
                 if (isZoneBasic && isPodLevelException) {
-                    throw new ResourceUnavailableException("Unable to apply " + typeString + 
+                    throw new ResourceUnavailableException("Unable to apply " + typeString +
                             ", virtual router is not in the right state", Pod.class, podId);
                 }
-                throw new ResourceUnavailableException("Unable to apply " + typeString + 
+                throw new ResourceUnavailableException("Unable to apply " + typeString +
                         ", virtual router is not in the right state", DataCenter.class, router.getDataCenterId());
             }
         }
@@ -3870,7 +3878,7 @@ public class VirtualNetworkApplianceManagerImpl extends ManagerBase implements V
             rulesTO = new ArrayList<StaticNatRuleTO>();
             for (StaticNat rule : rules) {
                 IpAddress sourceIp = _networkModel.getIp(rule.getSourceIpAddressId());
-                StaticNatRuleTO ruleTO = new StaticNatRuleTO(0, sourceIp.getAddress().addr(), null, 
+                StaticNatRuleTO ruleTO = new StaticNatRuleTO(0, sourceIp.getAddress().addr(), null,
                         null, rule.getDestIpAddress(), null, null, null, rule.isForRevoke(), false);
                 rulesTO.add(ruleTO);
             }
@@ -3907,8 +3915,6 @@ public class VirtualNetworkApplianceManagerImpl extends ManagerBase implements V
 
     @Override
     public void processConnect(Host host, StartupCommand cmd, boolean forRebalance) throws ConnectionException {
-        UserContext context = UserContext.current();
-        context.setAccountId(1);
         List<DomainRouterVO> routers = _routerDao.listIsolatedByHostId(host.getId());
         for (DomainRouterVO router : routers) {
             if (router.isStopPending()) {

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/server/src/com/cloud/network/rules/RulesManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/rules/RulesManagerImpl.java b/server/src/com/cloud/network/rules/RulesManagerImpl.java
index 397ece8..4c1fa37 100755
--- a/server/src/com/cloud/network/rules/RulesManagerImpl.java
+++ b/server/src/com/cloud/network/rules/RulesManagerImpl.java
@@ -26,6 +26,8 @@ import javax.ejb.Local;
 import javax.inject.Inject;
 
 import org.apache.cloudstack.api.command.user.firewall.ListPortForwardingRulesCmd;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 import org.springframework.stereotype.Component;
 
@@ -63,7 +65,6 @@ import com.cloud.tags.dao.ResourceTagDao;
 import com.cloud.user.Account;
 import com.cloud.user.AccountManager;
 import com.cloud.user.DomainManager;
-import com.cloud.user.UserContext;
 import com.cloud.uservm.UserVm;
 import com.cloud.utils.Pair;
 import com.cloud.utils.Ternary;
@@ -189,8 +190,8 @@ public class RulesManagerImpl extends ManagerBase implements RulesManager, Rules
     @ActionEvent(eventType = EventTypes.EVENT_NET_RULE_ADD, eventDescription = "creating forwarding rule", create = true)
     public PortForwardingRule createPortForwardingRule(PortForwardingRule rule, Long vmId, Ip vmIp, boolean openFirewall)
             throws NetworkRuleConflictException {
-        UserContext ctx = UserContext.current();
-        Account caller = ctx.getCaller();
+        CallContext ctx = CallContext.current();
+        Account caller = ctx.getCallingAccount();
 
         Long ipAddrId = rule.getSourceIpAddressId();
 
@@ -317,7 +318,7 @@ public class RulesManagerImpl extends ManagerBase implements RulesManager, Rules
                 if (!_firewallDao.setStateToAdd(newRule)) {
                     throw new CloudRuntimeException("Unable to update the state to add for " + newRule);
                 }
-                UserContext.current().setEventDetails("Rule Id: " + newRule.getId());
+                CallContext.current().setEventDetails("Rule Id: " + newRule.getId());
                 UsageEventUtils.publishUsageEvent(EventTypes.EVENT_NET_RULE_ADD, newRule.getAccountId(),
                         ipAddress.getDataCenterId(), newRule.getId(), null, PortForwardingRule.class.getName(),
                         newRule.getUuid());
@@ -352,7 +353,7 @@ public class RulesManagerImpl extends ManagerBase implements RulesManager, Rules
     @DB
     @ActionEvent(eventType = EventTypes.EVENT_NET_RULE_ADD, eventDescription = "creating static nat rule", create = true)
     public StaticNatRule createStaticNatRule(StaticNatRule rule, boolean openFirewall) throws NetworkRuleConflictException {
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
 
         Long ipAddrId = rule.getSourceIpAddressId();
 
@@ -399,7 +400,7 @@ public class RulesManagerImpl extends ManagerBase implements RulesManager, Rules
             if (!_firewallDao.setStateToAdd(newRule)) {
                 throw new CloudRuntimeException("Unable to update the state to add for " + newRule);
             }
-            UserContext.current().setEventDetails("Rule Id: " + newRule.getId());
+            CallContext.current().setEventDetails("Rule Id: " + newRule.getId());
             UsageEventUtils.publishUsageEvent(EventTypes.EVENT_NET_RULE_ADD, newRule.getAccountId(), 0, newRule.getId(),
                     null, FirewallRule.class.getName(), newRule.getUuid());
 
@@ -433,9 +434,9 @@ public class RulesManagerImpl extends ManagerBase implements RulesManager, Rules
 
     private boolean enableStaticNat(long ipId, long vmId, long networkId, boolean isSystemVm, String vmGuestIp)
             throws NetworkRuleConflictException, ResourceUnavailableException {
-        UserContext ctx = UserContext.current();
-        Account caller = ctx.getCaller();
-        UserContext.current().setEventDetails("Ip Id: " + ipId);
+        CallContext ctx = CallContext.current();
+        Account caller = ctx.getCallingAccount();
+        CallContext.current().setEventDetails("Ip Id: " + ipId);
 
         // Verify input parameters
         IPAddressVO ipAddress = _ipAddressDao.findById(ipId);
@@ -569,7 +570,7 @@ public class RulesManagerImpl extends ManagerBase implements RulesManager, Rules
 
                 // Verify ip address parameter
                 // checking vm id is not sufficient, check for the vm ip
-                isIpReadyForStaticNat(vmId, ipAddress, dstIp, caller, ctx.getCallerUserId());
+                isIpReadyForStaticNat(vmId, ipAddress, dstIp, caller, ctx.getCallingUserId());
             }
 
             ipAddress.setOneToOneNat(true);
@@ -655,8 +656,8 @@ public class RulesManagerImpl extends ManagerBase implements RulesManager, Rules
     @Override
     @ActionEvent(eventType = EventTypes.EVENT_NET_RULE_DELETE, eventDescription = "revoking forwarding rule", async = true)
     public boolean revokePortForwardingRule(long ruleId, boolean apply) {
-        UserContext ctx = UserContext.current();
-        Account caller = ctx.getCaller();
+        CallContext ctx = CallContext.current();
+        Account caller = ctx.getCallingAccount();
 
         PortForwardingRuleVO rule = _portForwardingDao.findById(ruleId);
         if (rule == null) {
@@ -665,7 +666,7 @@ public class RulesManagerImpl extends ManagerBase implements RulesManager, Rules
 
         _accountMgr.checkAccess(caller, null, true, rule);
 
-        if (!revokePortForwardingRuleInternal(ruleId, caller, ctx.getCallerUserId(), apply)) {
+        if (!revokePortForwardingRuleInternal(ruleId, caller, ctx.getCallingUserId(), apply)) {
             throw new CloudRuntimeException("Failed to delete port forwarding rule");
         }
         return true;
@@ -690,8 +691,8 @@ public class RulesManagerImpl extends ManagerBase implements RulesManager, Rules
     @Override
     @ActionEvent(eventType = EventTypes.EVENT_NET_RULE_DELETE, eventDescription = "revoking forwarding rule", async = true)
     public boolean revokeStaticNatRule(long ruleId, boolean apply) {
-        UserContext ctx = UserContext.current();
-        Account caller = ctx.getCaller();
+        CallContext ctx = CallContext.current();
+        Account caller = ctx.getCallingAccount();
 
         FirewallRuleVO rule = _firewallDao.findById(ruleId);
         if (rule == null) {
@@ -700,7 +701,7 @@ public class RulesManagerImpl extends ManagerBase implements RulesManager, Rules
 
         _accountMgr.checkAccess(caller, null, true, rule);
 
-        if (!revokeStaticNatRuleInternal(ruleId, caller, ctx.getCallerUserId(), apply)) {
+        if (!revokeStaticNatRuleInternal(ruleId, caller, ctx.getCallingUserId(), apply)) {
             throw new CloudRuntimeException("Failed to revoke forwarding rule");
         }
         return true;
@@ -764,7 +765,7 @@ public class RulesManagerImpl extends ManagerBase implements RulesManager, Rules
         Long id = cmd.getId();
         Map<String, String> tags = cmd.getTags();
 
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
         List<Long> permittedAccounts = new ArrayList<Long>();
 
         if (ipId != null) {
@@ -977,7 +978,7 @@ public class RulesManagerImpl extends ManagerBase implements RulesManager, Rules
 
     @Override
     public Pair<List<? extends FirewallRule>, Integer> searchStaticNatRules(Long ipId, Long id, Long vmId, Long start, Long size, String accountName, Long domainId, Long projectId, boolean isRecursive, boolean listAll) {
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
         List<Long> permittedAccounts = new ArrayList<Long>();
 
         if (ipId != null) {
@@ -1182,8 +1183,8 @@ public class RulesManagerImpl extends ManagerBase implements RulesManager, Rules
     @Override
     @ActionEvent(eventType = EventTypes.EVENT_DISABLE_STATIC_NAT, eventDescription = "disabling static nat", async=true)
     public boolean disableStaticNat(long ipId) throws ResourceUnavailableException, NetworkRuleConflictException, InsufficientAddressCapacityException {
-        UserContext ctx = UserContext.current();
-        Account caller = ctx.getCaller();
+        CallContext ctx = CallContext.current();
+        Account caller = ctx.getCallingAccount();
         IPAddressVO ipAddress = _ipAddressDao.findById(ipId);
         checkIpAndUserVm(ipAddress, null, caller);
 
@@ -1211,7 +1212,7 @@ public class RulesManagerImpl extends ManagerBase implements RulesManager, Rules
             }
         }
 
-        return disableStaticNat(ipId, caller, ctx.getCallerUserId(), false);
+        return disableStaticNat(ipId, caller, ctx.getCallingUserId(), false);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/server/src/com/cloud/network/security/SecurityGroupManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/security/SecurityGroupManagerImpl.java b/server/src/com/cloud/network/security/SecurityGroupManagerImpl.java
index ce6f8ac..d4460f1 100755
--- a/server/src/com/cloud/network/security/SecurityGroupManagerImpl.java
+++ b/server/src/com/cloud/network/security/SecurityGroupManagerImpl.java
@@ -43,10 +43,12 @@ import org.apache.cloudstack.api.command.user.securitygroup.CreateSecurityGroupC
 import org.apache.cloudstack.api.command.user.securitygroup.DeleteSecurityGroupCmd;
 import org.apache.cloudstack.api.command.user.securitygroup.RevokeSecurityGroupEgressCmd;
 import org.apache.cloudstack.api.command.user.securitygroup.RevokeSecurityGroupIngressCmd;
+
 import org.apache.commons.codec.digest.DigestUtils;
 import org.apache.log4j.Logger;
 
 import com.amazonaws.services.identitymanagement.model.User;
+
 import com.cloud.agent.AgentManager;
 import com.cloud.agent.api.NetworkRulesSystemVmCommand;
 import com.cloud.agent.api.NetworkRulesVmSecondaryIpCommand;
@@ -75,7 +77,6 @@ import com.cloud.tags.dao.ResourceTagDao;
 import com.cloud.user.Account;
 import com.cloud.user.AccountManager;
 import com.cloud.user.DomainManager;
-import com.cloud.user.UserContext;
 import com.cloud.user.dao.AccountDao;
 import com.cloud.uservm.UserVm;
 import com.cloud.utils.NumbersUtil;
@@ -97,8 +98,12 @@ import com.cloud.vm.dao.NicDao;
 import com.cloud.vm.dao.NicSecondaryIpDao;
 import com.cloud.vm.dao.UserVmDao;
 import com.cloud.vm.dao.VMInstanceDao;
+
 import edu.emory.mathcs.backport.java.util.Collections;
+
 import org.apache.cloudstack.api.command.user.securitygroup.*;
+import org.apache.cloudstack.context.CallContext;
+
 import java.util.*;
 
 @Local(value = { SecurityGroupManager.class, SecurityGroupService.class })
@@ -596,7 +601,7 @@ public class SecurityGroupManagerImpl extends ManagerBase implements SecurityGro
             throw new InvalidParameterValueException("At least one cidr or at least one security group needs to be specified");
         }
 
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
         Account owner = _accountMgr.getAccount(securityGroup.getAccountId());
 
         if (owner == null) {
@@ -773,7 +778,7 @@ public class SecurityGroupManagerImpl extends ManagerBase implements SecurityGro
 
     private boolean revokeSecurityGroupRule(Long id, SecurityRuleType type) {
         // input validation
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
 
         SecurityGroupRuleVO rule = _securityGroupRuleDao.findById(id);
         if (rule == null) {
@@ -827,7 +832,7 @@ public class SecurityGroupManagerImpl extends ManagerBase implements SecurityGro
     @ActionEvent(eventType = EventTypes.EVENT_SECURITY_GROUP_CREATE, eventDescription = "creating security group")
     public SecurityGroupVO createSecurityGroup(CreateSecurityGroupCmd cmd) throws PermissionDeniedException, InvalidParameterValueException {
         String name = cmd.getSecurityGroupName();
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
         Account owner = _accountMgr.finalizeOwner(caller, cmd.getAccountName(), cmd.getDomainId(), cmd.getProjectId());
 
         if (_securityGroupDao.isNameInUse(owner.getId(), owner.getDomainId(), cmd.getSecurityGroupName())) {
@@ -1066,7 +1071,7 @@ public class SecurityGroupManagerImpl extends ManagerBase implements SecurityGro
     @ActionEvent(eventType = EventTypes.EVENT_SECURITY_GROUP_DELETE, eventDescription = "deleting security group")
     public boolean deleteSecurityGroup(DeleteSecurityGroupCmd cmd) throws ResourceInUseException {
         Long groupId = cmd.getId();
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
 
         SecurityGroupVO group = _securityGroupDao.findById(groupId);
         if (group == null) {
@@ -1318,7 +1323,7 @@ public class SecurityGroupManagerImpl extends ManagerBase implements SecurityGro
             return true;
         }
 
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
 
         for (SecurityGroupVO securityGroup: vmSgGrps) {
             Account owner = _accountMgr.getAccount(securityGroup.getAccountId());

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/server/src/com/cloud/network/vpc/NetworkACLManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/vpc/NetworkACLManagerImpl.java b/server/src/com/cloud/network/vpc/NetworkACLManagerImpl.java
index 5c45a86..1028d74 100644
--- a/server/src/com/cloud/network/vpc/NetworkACLManagerImpl.java
+++ b/server/src/com/cloud/network/vpc/NetworkACLManagerImpl.java
@@ -35,16 +35,19 @@ import com.cloud.offering.NetworkOffering;
 import com.cloud.tags.dao.ResourceTagDao;
 import com.cloud.user.Account;
 import com.cloud.user.AccountManager;
-import com.cloud.user.UserContext;
 import com.cloud.utils.component.ManagerBase;
 import com.cloud.utils.db.DB;
 import com.cloud.utils.db.Transaction;
 import com.cloud.utils.exception.CloudRuntimeException;
+
 import org.apache.log4j.Logger;
 import org.springframework.stereotype.Component;
 
+import org.apache.cloudstack.context.CallContext;
+
 import javax.ejb.Local;
 import javax.inject.Inject;
+
 import java.util.ArrayList;
 import java.util.List;
 
@@ -232,7 +235,7 @@ public class NetworkACLManagerImpl extends ManagerBase implements NetworkACLMana
         if (!_networkACLItemDao.setStateToAdd(newRule)) {
             throw new CloudRuntimeException("Unable to update the state to add for " + newRule);
         }
-        UserContext.current().setEventDetails("ACL Item Id: " + newRule.getId());
+        CallContext.current().setEventDetails("ACL Item Id: " + newRule.getId());
 
         txn.commit();
 

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/server/src/com/cloud/network/vpc/NetworkACLServiceImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/vpc/NetworkACLServiceImpl.java b/server/src/com/cloud/network/vpc/NetworkACLServiceImpl.java
index 4c97869..274ca44 100644
--- a/server/src/com/cloud/network/vpc/NetworkACLServiceImpl.java
+++ b/server/src/com/cloud/network/vpc/NetworkACLServiceImpl.java
@@ -31,7 +31,6 @@ import com.cloud.tags.ResourceTagVO;
 import com.cloud.tags.dao.ResourceTagDao;
 import com.cloud.user.Account;
 import com.cloud.user.AccountManager;
-import com.cloud.user.UserContext;
 import com.cloud.utils.Pair;
 import com.cloud.utils.Ternary;
 import com.cloud.utils.component.ManagerBase;
@@ -42,16 +41,20 @@ import com.cloud.utils.db.SearchCriteria;
 import com.cloud.utils.db.SearchCriteria.Op;
 import com.cloud.utils.exception.CloudRuntimeException;
 import com.cloud.utils.net.NetUtils;
+
 import org.apache.cloudstack.api.ApiErrorCode;
 import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.command.user.network.CreateNetworkACLCmd;
 import org.apache.cloudstack.api.command.user.network.ListNetworkACLsCmd;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.commons.lang.StringUtils;
 import org.apache.log4j.Logger;
 import org.springframework.stereotype.Component;
 
 import javax.ejb.Local;
 import javax.inject.Inject;
+
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
@@ -85,7 +88,7 @@ public class NetworkACLServiceImpl extends ManagerBase implements NetworkACLServ
 
     @Override
     public NetworkACL createNetworkACL(String name, String description, long vpcId) {
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
         Vpc vpc = _vpcMgr.getVpc(vpcId);
         if(vpc == null){
             throw new InvalidParameterValueException("Unable to find VPC");
@@ -137,7 +140,7 @@ public class NetworkACLServiceImpl extends ManagerBase implements NetworkACLServ
 
     @Override
     public boolean deleteNetworkACL(long id) {
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
         NetworkACL acl = _networkACLDao.findById(id);
         if(acl == null) {
             throw new InvalidParameterValueException("Unable to find specified ACL");
@@ -157,7 +160,7 @@ public class NetworkACLServiceImpl extends ManagerBase implements NetworkACLServ
     }
     @Override
     public boolean replaceNetworkACLonPrivateGw(long aclId, long privateGatewayId) throws ResourceUnavailableException {
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
         VpcGateway gateway = _vpcGatewayDao.findById(privateGatewayId);
         if (gateway == null) {
             throw new InvalidParameterValueException("Unable to find specified private gateway");
@@ -198,7 +201,7 @@ public class NetworkACLServiceImpl extends ManagerBase implements NetworkACLServ
 
     @Override
     public boolean replaceNetworkACL(long aclId, long networkId) throws ResourceUnavailableException {
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
 
         NetworkVO network = _networkDao.findById(networkId);
         if(network == null){
@@ -237,7 +240,7 @@ public class NetworkACLServiceImpl extends ManagerBase implements NetworkACLServ
 
     @Override
     public NetworkACLItem createNetworkACLItem(CreateNetworkACLCmd aclItemCmd){
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
         Long aclId = aclItemCmd.getACLId();
         if(aclId == null){
             //ACL id is not specified. Get the ACL details from network
@@ -415,7 +418,7 @@ public class NetworkACLServiceImpl extends ManagerBase implements NetworkACLServ
         String action = cmd.getAction();
         Map<String, String> tags = cmd.getTags();
 
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
         List<Long> permittedAccounts = new ArrayList<Long>();
 
         Ternary<Long, Boolean, ListProjectResourcesCriteria> domainIdRecursiveListProject =
@@ -518,7 +521,7 @@ public class NetworkACLServiceImpl extends ManagerBase implements NetworkACLServ
 
         Vpc vpc = _vpcMgr.getVpc(acl.getVpcId());
 
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
 
         _accountMgr.checkAccess(caller, null, true, vpc);
 

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/server/src/com/cloud/network/vpc/VpcManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/vpc/VpcManagerImpl.java b/server/src/com/cloud/network/vpc/VpcManagerImpl.java
index 2555ef6..f74e770 100644
--- a/server/src/com/cloud/network/vpc/VpcManagerImpl.java
+++ b/server/src/com/cloud/network/vpc/VpcManagerImpl.java
@@ -81,7 +81,6 @@ import com.cloud.user.Account;
 import com.cloud.user.AccountManager;
 import com.cloud.user.ResourceLimitService;
 import com.cloud.user.User;
-import com.cloud.user.UserContext;
 import com.cloud.utils.NumbersUtil;
 import com.cloud.utils.Pair;
 import com.cloud.utils.Ternary;
@@ -100,15 +99,19 @@ import com.cloud.utils.net.NetUtils;
 import com.cloud.vm.ReservationContext;
 import com.cloud.vm.ReservationContextImpl;
 import com.cloud.vm.dao.DomainRouterDao;
+
 import org.apache.cloudstack.acl.ControlledEntity.ACLType;
 import org.apache.cloudstack.api.command.user.vpc.ListPrivateGatewaysCmd;
 import org.apache.cloudstack.api.command.user.vpc.ListStaticRoutesCmd;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 import org.springframework.stereotype.Component;
 
 import javax.ejb.Local;
 import javax.inject.Inject;
 import javax.naming.ConfigurationException;
+
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.HashMap;
@@ -350,7 +353,7 @@ public class VpcManagerImpl extends ManagerBase implements VpcManager, VpcProvis
         }
 
         VpcOffering offering = createVpcOffering(name, displayText, svcProviderMap, false, null);
-        UserContext.current().setEventDetails(" Id: " + offering.getId() + " Name: " + name);
+        CallContext.current().setEventDetails(" Id: " + offering.getId() + " Name: " + name);
         
         return offering;
     }
@@ -498,7 +501,7 @@ public class VpcManagerImpl extends ManagerBase implements VpcManager, VpcProvis
     @Override
     @ActionEvent(eventType = EventTypes.EVENT_VPC_OFFERING_DELETE, eventDescription = "deleting vpc offering")
     public boolean deleteVpcOffering(long offId) {
-        UserContext.current().setEventDetails(" Id: " + offId);
+        CallContext.current().setEventDetails(" Id: " + offId);
 
         // Verify vpc offering id
         VpcOfferingVO offering = _vpcOffDao.findById(offId);
@@ -528,7 +531,7 @@ public class VpcManagerImpl extends ManagerBase implements VpcManager, VpcProvis
     @Override
     @ActionEvent(eventType = EventTypes.EVENT_VPC_OFFERING_UPDATE, eventDescription = "updating vpc offering")
     public VpcOffering updateVpcOffering(long vpcOffId, String vpcOfferingName, String displayText, String state) {
-        UserContext.current().setEventDetails(" Id: " + vpcOffId);
+        CallContext.current().setEventDetails(" Id: " + vpcOffId);
 
         // Verify input parameters
         VpcOfferingVO offeringToUpdate = _vpcOffDao.findById(vpcOffId);
@@ -571,7 +574,7 @@ public class VpcManagerImpl extends ManagerBase implements VpcManager, VpcProvis
     @ActionEvent(eventType = EventTypes.EVENT_VPC_CREATE, eventDescription = "creating vpc", create=true)
     public Vpc createVpc(long zoneId, long vpcOffId, long vpcOwnerId, String vpcName, String displayText, String cidr, 
             String networkDomain) throws ResourceAllocationException {
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
         Account owner = _accountMgr.getAccount(vpcOwnerId);
         
         //Verify that caller can perform actions in behalf of vpc owner
@@ -697,8 +700,8 @@ public class VpcManagerImpl extends ManagerBase implements VpcManager, VpcProvis
     @Override
     @ActionEvent(eventType = EventTypes.EVENT_VPC_DELETE, eventDescription = "deleting VPC")
     public boolean deleteVpc(long vpcId) throws ConcurrentOperationException, ResourceUnavailableException {
-        UserContext.current().setEventDetails(" Id: " + vpcId);
-        UserContext ctx = UserContext.current();
+        CallContext.current().setEventDetails(" Id: " + vpcId);
+        CallContext ctx = CallContext.current();
 
         // Verify vpc id
         Vpc vpc = getVpc(vpcId);
@@ -707,9 +710,9 @@ public class VpcManagerImpl extends ManagerBase implements VpcManager, VpcProvis
         }
         
         //verify permissions
-        _accountMgr.checkAccess(ctx.getCaller(), null, false, vpc);
+        _accountMgr.checkAccess(ctx.getCallingAccount(), null, false, vpc);
         
-        return destroyVpc(vpc, ctx.getCaller(), ctx.getCallerUserId());
+        return destroyVpc(vpc, ctx.getCallingAccount(), ctx.getCallingUserId());
     }
 
     @Override
@@ -764,8 +767,8 @@ public class VpcManagerImpl extends ManagerBase implements VpcManager, VpcProvis
     @Override
     @ActionEvent(eventType = EventTypes.EVENT_VPC_UPDATE, eventDescription = "updating vpc")
     public Vpc updateVpc(long vpcId, String vpcName, String displayText) {
-        UserContext.current().setEventDetails(" Id: " + vpcId);
-        Account caller = UserContext.current().getCaller();
+        CallContext.current().setEventDetails(" Id: " + vpcId);
+        Account caller = CallContext.current().getCallingAccount();
 
         // Verify input parameters
         VpcVO vpcToUpdate = _vpcDao.findById(vpcId);
@@ -798,7 +801,7 @@ public class VpcManagerImpl extends ManagerBase implements VpcManager, VpcProvis
     public List<? extends Vpc> listVpcs(Long id, String vpcName, String displayText, List<String> supportedServicesStr, 
             String cidr, Long vpcOffId, String state, String accountName, Long domainId, String keyword,
             Long startIndex, Long pageSizeVal, Long zoneId, Boolean isRecursive, Boolean listAll, Boolean restartRequired, Map<String, String> tags, Long projectId) {
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
         List<Long> permittedAccounts = new ArrayList<Long>();
         
         Ternary<Long, Boolean, ListProjectResourcesCriteria> domainIdRecursiveListProject = new Ternary<Long, Boolean, 
@@ -941,9 +944,9 @@ public class VpcManagerImpl extends ManagerBase implements VpcManager, VpcProvis
     @Override
     public boolean startVpc(long vpcId, boolean destroyOnFailure) throws ConcurrentOperationException, ResourceUnavailableException, 
     InsufficientCapacityException {
-        UserContext ctx = UserContext.current();
-        Account caller = ctx.getCaller();
-        User callerUser = _accountMgr.getActiveUser(ctx.getCallerUserId());
+        CallContext ctx = CallContext.current();
+        Account caller = ctx.getCallingAccount();
+        User callerUser = _accountMgr.getActiveUser(ctx.getCallingUserId());
         
         //check if vpc exists
         Vpc vpc = getActiveVpc(vpcId);
@@ -1005,8 +1008,8 @@ public class VpcManagerImpl extends ManagerBase implements VpcManager, VpcProvis
     
     @Override
     public boolean shutdownVpc(long vpcId) throws ConcurrentOperationException, ResourceUnavailableException {
-        UserContext ctx = UserContext.current();
-        Account caller = ctx.getCaller();
+        CallContext ctx = CallContext.current();
+        Account caller = ctx.getCallingAccount();
         
         //check if vpc exists
         Vpc vpc = getVpc(vpcId);
@@ -1023,7 +1026,7 @@ public class VpcManagerImpl extends ManagerBase implements VpcManager, VpcProvis
 
         boolean success = true;
         List<Provider> providersToImplement = getVpcProviders(vpc.getId());
-        ReservationContext context = new ReservationContextImpl(null, null, _accountMgr.getActiveUser(ctx.getCallerUserId()), caller);
+        ReservationContext context = new ReservationContextImpl(null, null, _accountMgr.getActiveUser(ctx.getCallingUserId()), caller);
         for (VpcProvider element: getVpcElements()){
             if(providersToImplement.contains(element.getProvider())){
                 if (element.shutdownVpc(vpc, context)) {
@@ -1281,7 +1284,7 @@ public class VpcManagerImpl extends ManagerBase implements VpcManager, VpcProvis
     @ActionEvent(eventType = EventTypes.EVENT_VPC_RESTART, eventDescription = "restarting vpc")
     public boolean restartVpc(long vpcId) throws ConcurrentOperationException, ResourceUnavailableException, 
                                         InsufficientCapacityException {
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
 
         // Verify input parameters
         Vpc vpc = getActiveVpc(vpcId);
@@ -1521,7 +1524,7 @@ public class VpcManagerImpl extends ManagerBase implements VpcManager, VpcProvis
         }
         
         if (deleteNetwork) {
-            User callerUser = _accountMgr.getActiveUser(UserContext.current().getCallerUserId());
+            User callerUser = _accountMgr.getActiveUser(CallContext.current().getCallingUserId());
             Account owner = _accountMgr.getAccount(Account.ACCOUNT_ID_SYSTEM);
             ReservationContext context = new ReservationContextImpl(null, null, callerUser, owner);
             _ntwkMgr.destroyNetwork(networkId, context);
@@ -1545,7 +1548,7 @@ public class VpcManagerImpl extends ManagerBase implements VpcManager, VpcProvis
         Boolean listAll = cmd.listAll();
         Long domainId = cmd.getDomainId();
         String accountName = cmd.getAccountName();
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
         List<Long> permittedAccounts = new ArrayList<Long>();
         String state = cmd.getState();
         Long projectId = cmd.getProjectId();
@@ -1607,7 +1610,7 @@ public class VpcManagerImpl extends ManagerBase implements VpcManager, VpcProvis
 
     @Override
     public boolean applyStaticRoutes(long vpcId) throws ResourceUnavailableException {
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
         List<? extends StaticRoute> routes = _staticRouteDao.listByVpcId(vpcId);
         return applyStaticRoutes(routes, caller, true);
     }
@@ -1675,7 +1678,7 @@ public class VpcManagerImpl extends ManagerBase implements VpcManager, VpcProvis
     @Override
     @ActionEvent(eventType = EventTypes.EVENT_STATIC_ROUTE_DELETE, eventDescription = "deleting static route")
     public boolean revokeStaticRoute(long routeId) throws ResourceUnavailableException {
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
         
         StaticRouteVO route = _staticRouteDao.findById(routeId);
         if (route == null) {
@@ -1712,7 +1715,7 @@ public class VpcManagerImpl extends ManagerBase implements VpcManager, VpcProvis
     @DB
     @ActionEvent(eventType = EventTypes.EVENT_STATIC_ROUTE_CREATE, eventDescription = "creating static route", create=true)
     public StaticRoute createStaticRoute(long gatewayId, String cidr) throws NetworkRuleConflictException {
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
         
         //parameters validation
         VpcGateway gateway = _vpcGatewayDao.findById(gatewayId);
@@ -1762,7 +1765,7 @@ public class VpcManagerImpl extends ManagerBase implements VpcManager, VpcProvis
         if (!_staticRouteDao.setStateToAdd(newRoute)) {
             throw new CloudRuntimeException("Unable to update the state to add for " + newRoute);
         }
-        UserContext.current().setEventDetails("Static route Id: " + newRoute.getId());
+        CallContext.current().setEventDetails("Static route Id: " + newRoute.getId());
         
         txn.commit();
 
@@ -1795,7 +1798,7 @@ public class VpcManagerImpl extends ManagerBase implements VpcManager, VpcProvis
         Boolean isRecursive = cmd.isRecursive();
         Boolean listAll = cmd.listAll();
         String accountName = cmd.getAccountName();
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
         List<Long> permittedAccounts = new ArrayList<Long>();
         Map<String, String> tags = cmd.getTags();
         Long projectId = cmd.getProjectId();
@@ -1939,7 +1942,7 @@ public class VpcManagerImpl extends ManagerBase implements VpcManager, VpcProvis
     @ActionEvent(eventType = EventTypes.EVENT_NET_IP_ASSIGN, eventDescription = "associating Ip", async = true)
     public IpAddress associateIPToVpc(long ipId, long vpcId) throws ResourceAllocationException, ResourceUnavailableException, 
     InsufficientAddressCapacityException, ConcurrentOperationException {
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
         Account owner = null;
 
         IpAddress ipToAssoc = _ntwkModel.getIp(ipId);

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/server/src/com/cloud/network/vpn/RemoteAccessVpnManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/vpn/RemoteAccessVpnManagerImpl.java b/server/src/com/cloud/network/vpn/RemoteAccessVpnManagerImpl.java
index 9e7bb13..401b9f4 100755
--- a/server/src/com/cloud/network/vpn/RemoteAccessVpnManagerImpl.java
+++ b/server/src/com/cloud/network/vpn/RemoteAccessVpnManagerImpl.java
@@ -27,6 +27,8 @@ import javax.naming.ConfigurationException;
 
 import org.apache.cloudstack.api.command.user.vpn.ListRemoteAccessVpnsCmd;
 import org.apache.cloudstack.api.command.user.vpn.ListVpnUsersCmd;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 import org.springframework.stereotype.Component;
 
@@ -43,10 +45,6 @@ import com.cloud.exception.NetworkRuleConflictException;
 import com.cloud.exception.ResourceUnavailableException;
 import com.cloud.network.Network;
 import com.cloud.network.Network.Service;
-import com.cloud.network.NetworkModel;
-import com.cloud.network.PublicIpAddress;
-import com.cloud.network.RemoteAccessVpn;
-import com.cloud.network.VpnUser;
 import com.cloud.network.*;
 import com.cloud.network.VpnUser.State;
 import com.cloud.network.dao.FirewallRulesDao;
@@ -66,18 +64,12 @@ import com.cloud.server.ConfigurationServer;
 import com.cloud.user.Account;
 import com.cloud.user.AccountManager;
 import com.cloud.user.DomainManager;
-import com.cloud.user.UserContext;
 import com.cloud.user.dao.AccountDao;
 import com.cloud.utils.NumbersUtil;
 import com.cloud.utils.Pair;
 import com.cloud.utils.PasswordGenerator;
 import com.cloud.utils.Ternary;
 import com.cloud.utils.component.ManagerBase;
-import com.cloud.utils.db.DB;
-import com.cloud.utils.db.Filter;
-import com.cloud.utils.db.JoinBuilder;
-import com.cloud.utils.db.SearchBuilder;
-import com.cloud.utils.db.SearchCriteria;
 import com.cloud.utils.db.*;
 import com.cloud.utils.db.SearchCriteria.Op;
 import com.cloud.utils.net.NetUtils;
@@ -113,8 +105,8 @@ public class RemoteAccessVpnManagerImpl extends ManagerBase implements RemoteAcc
     @DB
     public RemoteAccessVpn createRemoteAccessVpn(long publicIpId, String ipRange, boolean openFirewall, long networkId) 
             throws NetworkRuleConflictException {
-        UserContext ctx = UserContext.current();
-        Account caller = ctx.getCaller();
+        CallContext ctx = CallContext.current();
+        Account caller = ctx.getCallingAccount();
 
         // make sure ip address exists
         PublicIpAddress ipAddr = _networkMgr.getPublicIpAddress(publicIpId);
@@ -312,7 +304,7 @@ public class RemoteAccessVpnManagerImpl extends ManagerBase implements RemoteAcc
     @Override
     @DB
     public VpnUser addVpnUser(long vpnOwnerId, String username, String password) {
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
 
         if (!username.matches("^[a-zA-Z0-9][a-zA-Z0-9@._-]{2,63}$")) {
             throw new InvalidParameterValueException(
@@ -366,7 +358,7 @@ public class RemoteAccessVpnManagerImpl extends ManagerBase implements RemoteAcc
 
     @Override
     public List<? extends VpnUser> listVpnUsers(long vpnOwnerId, String userName) {
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
         Account owner = _accountDao.findById(vpnOwnerId);
         _accountMgr.checkAccess(caller, null, true, owner);
         return _vpnUsersDao.listByAccount(vpnOwnerId);
@@ -374,7 +366,7 @@ public class RemoteAccessVpnManagerImpl extends ManagerBase implements RemoteAcc
 
     @Override @DB
     public RemoteAccessVpnVO startRemoteAccessVpn(long ipAddressId, boolean openFirewall) throws ResourceUnavailableException {
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
 
         RemoteAccessVpnVO vpn = _remoteAccessVpnDao.findByPublicIpAddress(ipAddressId);
         if (vpn == null) {
@@ -425,7 +417,7 @@ public class RemoteAccessVpnManagerImpl extends ManagerBase implements RemoteAcc
     @DB
     @Override
     public boolean applyVpnUsers(long vpnOwnerId, String userName) {
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
         Account owner = _accountDao.findById(vpnOwnerId);
         _accountMgr.checkAccess(caller, null, true, owner);
 
@@ -504,7 +496,7 @@ public class RemoteAccessVpnManagerImpl extends ManagerBase implements RemoteAcc
     public Pair<List<? extends VpnUser>, Integer> searchForVpnUsers(ListVpnUsersCmd cmd) {
         String username = cmd.getUsername();
         Long id = cmd.getId();
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
         List<Long> permittedAccounts = new ArrayList<Long>();
 
         Ternary<Long, Boolean, ListProjectResourcesCriteria> domainIdRecursiveListProject = new Ternary<Long, Boolean, ListProjectResourcesCriteria>(cmd.getDomainId(), cmd.isRecursive(), null);
@@ -542,7 +534,7 @@ public class RemoteAccessVpnManagerImpl extends ManagerBase implements RemoteAcc
     @Override
     public Pair<List<? extends RemoteAccessVpn>, Integer> searchForRemoteAccessVpns(ListRemoteAccessVpnsCmd cmd) {
         // do some parameter validation
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
         Long ipAddressId = cmd.getPublicIpId();
         List<Long> permittedAccounts = new ArrayList<Long>();
 


[02/50] [abbrv] git commit: updated refs/heads/ldapplugin to 7bc705e

Posted by ch...@apache.org.
Added missing files


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

Branch: refs/heads/ldapplugin
Commit: aa131525babb5079de50c5b99e24f2dd9b45a4ad
Parents: 11e1e58
Author: ahuang <al...@citrix.com>
Authored: Tue Jul 16 02:41:33 2013 -0700
Committer: ahuang <al...@citrix.com>
Committed: Tue Jul 16 11:24:21 2013 -0700

----------------------------------------------------------------------
 .../cloudstack/context/ServerContexts.java      | 66 ++++++++++++++++++++
 utils/src/com/cloud/utils/UuidUtils.java        | 23 +++++++
 .../com/cloud/utils/exception/ErrorContext.java | 28 +++++++++
 3 files changed, 117 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/aa131525/engine/components-api/src/org/apache/cloudstack/context/ServerContexts.java
----------------------------------------------------------------------
diff --git a/engine/components-api/src/org/apache/cloudstack/context/ServerContexts.java b/engine/components-api/src/org/apache/cloudstack/context/ServerContexts.java
new file mode 100644
index 0000000..006ba2b
--- /dev/null
+++ b/engine/components-api/src/org/apache/cloudstack/context/ServerContexts.java
@@ -0,0 +1,66 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+package org.apache.cloudstack.context;
+
+import com.cloud.async.AsyncJob;
+import com.cloud.utils.db.Transaction;
+
+/**
+ * ServerContextInitializer is responsible for properly setting up the
+ * contexts that all of the CloudStack code expects.  This includes
+ *   - CallContext
+ *   - JobContext
+ *   - TransactionContext
+ */
+public class ServerContexts {
+    public static void registerUserContext(long userId, long accountId) {
+        Transaction txn = Transaction.open(Thread.currentThread().getName());
+        CallContext context = CallContext.register(userId, accountId);
+        context.putContextParameter("Transaction", txn);
+//        AsyncJobExecutionContext.registerPseudoExecutionContext(userId, accountId);
+    }
+
+    public static void unregisterUserContext() {
+        CallContext context = CallContext.unregister();
+        if (context != null) {
+//            AsyncJobExecutionContext.unregister();
+            Transaction txn = (Transaction)context.getContextParameter("Transaction");
+            txn.close(Thread.currentThread().getName());
+        }
+    }
+
+    /**
+     * Use this method to initialize the internal background threads.
+     */
+    public static void registerSystemContext() {
+        Transaction txn = Transaction.open(Thread.currentThread().getName());
+        CallContext context = CallContext.registerSystemCallContextOnceOnly();
+        context.putContextParameter("Transaction", txn);
+//        AsyncJobExecutionContext.registerPseudoExecutionContext(Account.ACCOUNT_ID_SYSTEM, User.UID_SYSTEM);
+    }
+    
+    public static void unregisterSystemContext() {
+        CallContext context = CallContext.unregister();
+//        AsyncJobExecutionContext.unregister();
+        Transaction txn = (Transaction)context.getContextParameter("Transaction");
+        txn.close(Thread.currentThread().getName());
+    }
+
+    public static void registerJobContext(long userId, long accountId, AsyncJob job) {
+        CallContext.register(userId, accountId);
+    }
+}

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/aa131525/utils/src/com/cloud/utils/UuidUtils.java
----------------------------------------------------------------------
diff --git a/utils/src/com/cloud/utils/UuidUtils.java b/utils/src/com/cloud/utils/UuidUtils.java
new file mode 100644
index 0000000..7831bea
--- /dev/null
+++ b/utils/src/com/cloud/utils/UuidUtils.java
@@ -0,0 +1,23 @@
+// 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.utils;
+
+public class UuidUtils {
+    public final static String first(String uuid) {
+        return uuid.substring(0, uuid.indexOf('-'));
+    }
+}

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/aa131525/utils/src/com/cloud/utils/exception/ErrorContext.java
----------------------------------------------------------------------
diff --git a/utils/src/com/cloud/utils/exception/ErrorContext.java b/utils/src/com/cloud/utils/exception/ErrorContext.java
new file mode 100644
index 0000000..7680a88
--- /dev/null
+++ b/utils/src/com/cloud/utils/exception/ErrorContext.java
@@ -0,0 +1,28 @@
+// 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.utils.exception;
+
+import java.util.List;
+
+import com.cloud.utils.Pair;
+
+public interface ErrorContext {
+
+    ErrorContext add(Class<?> entity, String uuid);
+
+    List<Pair<Class<?>, String>> getEntitiesInError();
+}


[05/50] [abbrv] UserContext switched to CallContext. Added generic storage mechanism for other code to carry information throughout a call. Made the calling User and Account a must have. Added an interface to carry entities in error. Fixed up the cod

Posted by ch...@apache.org.
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/server/src/com/cloud/network/vpn/Site2SiteVpnManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/vpn/Site2SiteVpnManagerImpl.java b/server/src/com/cloud/network/vpn/Site2SiteVpnManagerImpl.java
index a24300e..292b73e 100644
--- a/server/src/com/cloud/network/vpn/Site2SiteVpnManagerImpl.java
+++ b/server/src/com/cloud/network/vpn/Site2SiteVpnManagerImpl.java
@@ -35,6 +35,8 @@ import org.apache.cloudstack.api.command.user.vpn.ListVpnCustomerGatewaysCmd;
 import org.apache.cloudstack.api.command.user.vpn.ListVpnGatewaysCmd;
 import org.apache.cloudstack.api.command.user.vpn.ResetVpnConnectionCmd;
 import org.apache.cloudstack.api.command.user.vpn.UpdateVpnCustomerGatewayCmd;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 import org.springframework.stereotype.Component;
 
@@ -64,7 +66,6 @@ import com.cloud.network.vpc.dao.VpcDao;
 import com.cloud.projects.Project.ListProjectResourcesCriteria;
 import com.cloud.user.Account;
 import com.cloud.user.AccountManager;
-import com.cloud.user.UserContext;
 import com.cloud.user.dao.AccountDao;
 import com.cloud.utils.NumbersUtil;
 import com.cloud.utils.Pair;
@@ -112,7 +113,7 @@ public class Site2SiteVpnManagerImpl extends ManagerBase implements Site2SiteVpn
     @Override
     @ActionEvent(eventType = EventTypes.EVENT_S2S_VPN_GATEWAY_CREATE, eventDescription = "creating s2s vpn gateway", create=true)
     public Site2SiteVpnGateway createVpnGateway(CreateVpnGatewayCmd cmd) {
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
         Account owner = _accountMgr.getAccount(cmd.getEntityOwnerId());
 
         //Verify that caller can perform actions in behalf of vpc owner
@@ -157,7 +158,7 @@ public class Site2SiteVpnManagerImpl extends ManagerBase implements Site2SiteVpn
     @Override
     @ActionEvent(eventType = EventTypes.EVENT_S2S_VPN_CUSTOMER_GATEWAY_CREATE, eventDescription = "creating s2s customer gateway", create=true)
     public Site2SiteCustomerGateway createCustomerGateway(CreateVpnCustomerGatewayCmd cmd) {
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
         Account owner = _accountMgr.getAccount(cmd.getEntityOwnerId());
 
         //Verify that caller can perform actions in behalf of vpc owner
@@ -225,7 +226,7 @@ public class Site2SiteVpnManagerImpl extends ManagerBase implements Site2SiteVpn
     @Override
     @ActionEvent(eventType = EventTypes.EVENT_S2S_VPN_CONNECTION_CREATE, eventDescription = "creating s2s vpn connection", create=true)
     public Site2SiteVpnConnection createVpnConnection(CreateVpnConnectionCmd cmd) throws NetworkRuleConflictException {
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
         Account owner = _accountMgr.getAccount(cmd.getEntityOwnerId());
 
         //Verify that caller can perform actions in behalf of vpc owner
@@ -337,8 +338,8 @@ public class Site2SiteVpnManagerImpl extends ManagerBase implements Site2SiteVpn
     @Override
     @ActionEvent(eventType = EventTypes.EVENT_S2S_VPN_CUSTOMER_GATEWAY_DELETE, eventDescription = "deleting s2s vpn customer gateway", create=true)
     public boolean deleteCustomerGateway(DeleteVpnCustomerGatewayCmd cmd) {
-        UserContext.current().setEventDetails(" Id: " + cmd.getId());
-        Account caller = UserContext.current().getCaller();
+        CallContext.current().setEventDetails(" Id: " + cmd.getId());
+        Account caller = CallContext.current().getCallingAccount();
 
         Long id = cmd.getId();
         Site2SiteCustomerGateway customerGateway = _customerGatewayDao.findById(id);
@@ -371,8 +372,8 @@ public class Site2SiteVpnManagerImpl extends ManagerBase implements Site2SiteVpn
     @Override
     @ActionEvent(eventType = EventTypes.EVENT_S2S_VPN_GATEWAY_DELETE, eventDescription = "deleting s2s vpn gateway", create=true)
     public boolean deleteVpnGateway(DeleteVpnGatewayCmd cmd) {
-        UserContext.current().setEventDetails(" Id: " + cmd.getId());
-        Account caller = UserContext.current().getCaller();
+        CallContext.current().setEventDetails(" Id: " + cmd.getId());
+        Account caller = CallContext.current().getCallingAccount();
 
         Long id = cmd.getId();
         Site2SiteVpnGateway vpnGateway = _vpnGatewayDao.findById(id);
@@ -389,8 +390,8 @@ public class Site2SiteVpnManagerImpl extends ManagerBase implements Site2SiteVpn
     @Override
     @ActionEvent(eventType = EventTypes.EVENT_S2S_VPN_CUSTOMER_GATEWAY_UPDATE, eventDescription = "update s2s vpn customer gateway", create=true)
     public Site2SiteCustomerGateway updateCustomerGateway(UpdateVpnCustomerGatewayCmd cmd) {
-        UserContext.current().setEventDetails(" Id: " + cmd.getId());
-        Account caller = UserContext.current().getCaller();
+        CallContext.current().setEventDetails(" Id: " + cmd.getId());
+        Account caller = CallContext.current().getCallingAccount();
 
         Long id = cmd.getId();
         Site2SiteCustomerGatewayVO gw = _customerGatewayDao.findById(id);
@@ -478,8 +479,8 @@ public class Site2SiteVpnManagerImpl extends ManagerBase implements Site2SiteVpn
     @Override
     @ActionEvent(eventType = EventTypes.EVENT_S2S_VPN_CONNECTION_DELETE, eventDescription = "deleting s2s vpn connection", create=true)
     public boolean deleteVpnConnection(DeleteVpnConnectionCmd cmd) throws ResourceUnavailableException {
-        UserContext.current().setEventDetails(" Id: " + cmd.getId());
-        Account caller = UserContext.current().getCaller();
+        CallContext.current().setEventDetails(" Id: " + cmd.getId());
+        Account caller = CallContext.current().getCallingAccount();
 
         Long id = cmd.getId();
         Site2SiteVpnConnectionVO conn = _vpnConnectionDao.findById(id);
@@ -528,8 +529,8 @@ public class Site2SiteVpnManagerImpl extends ManagerBase implements Site2SiteVpn
     @Override
     @ActionEvent(eventType = EventTypes.EVENT_S2S_VPN_CONNECTION_RESET, eventDescription = "reseting s2s vpn connection", create=true)
     public Site2SiteVpnConnection resetVpnConnection(ResetVpnConnectionCmd cmd) throws ResourceUnavailableException {
-        UserContext.current().setEventDetails(" Id: " + cmd.getId());
-        Account caller = UserContext.current().getCaller();
+        CallContext.current().setEventDetails(" Id: " + cmd.getId());
+        Account caller = CallContext.current().getCallingAccount();
 
         Long id = cmd.getId();
         Site2SiteVpnConnectionVO conn = _vpnConnectionDao.findById(id);
@@ -559,7 +560,7 @@ public class Site2SiteVpnManagerImpl extends ManagerBase implements Site2SiteVpn
         long startIndex = cmd.getStartIndex();
         long pageSizeVal = cmd.getPageSizeVal();
 
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
         List<Long> permittedAccounts = new ArrayList<Long>();
 
         Ternary<Long, Boolean, ListProjectResourcesCriteria> domainIdRecursiveListProject = new Ternary<Long, Boolean, 
@@ -598,7 +599,7 @@ public class Site2SiteVpnManagerImpl extends ManagerBase implements Site2SiteVpn
         long startIndex = cmd.getStartIndex();
         long pageSizeVal = cmd.getPageSizeVal();
 
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
         List<Long> permittedAccounts = new ArrayList<Long>();
 
         Ternary<Long, Boolean, ListProjectResourcesCriteria> domainIdRecursiveListProject = new Ternary<Long, Boolean, 
@@ -642,7 +643,7 @@ public class Site2SiteVpnManagerImpl extends ManagerBase implements Site2SiteVpn
         long startIndex = cmd.getStartIndex();
         long pageSizeVal = cmd.getPageSizeVal();
 
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
         List<Long> permittedAccounts = new ArrayList<Long>();
 
         Ternary<Long, Boolean, ListProjectResourcesCriteria> domainIdRecursiveListProject = new Ternary<Long, Boolean, 

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/server/src/com/cloud/projects/ProjectManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/projects/ProjectManagerImpl.java b/server/src/com/cloud/projects/ProjectManagerImpl.java
index 7ab385f..97fa413 100755
--- a/server/src/com/cloud/projects/ProjectManagerImpl.java
+++ b/server/src/com/cloud/projects/ProjectManagerImpl.java
@@ -40,6 +40,8 @@ import javax.mail.internet.InternetAddress;
 import javax.naming.ConfigurationException;
 
 import org.apache.cloudstack.acl.SecurityChecker.AccessType;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 import org.springframework.stereotype.Component;
 
@@ -72,7 +74,6 @@ import com.cloud.user.AccountVO;
 import com.cloud.user.DomainManager;
 import com.cloud.user.ResourceLimitService;
 import com.cloud.user.User;
-import com.cloud.user.UserContext;
 import com.cloud.user.dao.AccountDao;
 import com.cloud.utils.DateUtil;
 import com.cloud.utils.NumbersUtil;
@@ -82,6 +83,7 @@ import com.cloud.utils.concurrency.NamedThreadFactory;
 import com.cloud.utils.db.DB;
 import com.cloud.utils.db.Transaction;
 import com.cloud.utils.exception.CloudRuntimeException;
+
 import com.sun.mail.smtp.SMTPMessage;
 import com.sun.mail.smtp.SMTPSSLTransport;
 import com.sun.mail.smtp.SMTPTransport;
@@ -175,7 +177,7 @@ public class ProjectManagerImpl extends ManagerBase implements ProjectManager {
     @ActionEvent(eventType = EventTypes.EVENT_PROJECT_CREATE, eventDescription = "creating project", create=true)
     @DB
     public Project createProject(String name, String displayText, String accountName, Long domainId) throws ResourceAllocationException{
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
         Account owner = caller;
 
         //check if the user authorized to create the project
@@ -215,7 +217,7 @@ public class ProjectManagerImpl extends ManagerBase implements ProjectManager {
         assignAccountToProject(project, owner.getId(), ProjectAccount.Role.Admin);
 
         if (project != null) {
-            UserContext.current().setEventDetails("Project id=" + project.getId());
+            CallContext.current().setEventDetails("Project id=" + project.getId());
         }
 
         //Increment resource count
@@ -231,7 +233,7 @@ public class ProjectManagerImpl extends ManagerBase implements ProjectManager {
     @ActionEvent(eventType = EventTypes.EVENT_PROJECT_CREATE, eventDescription = "creating project", async=true)
     @DB
     public Project enableProject(long projectId){
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
 
         ProjectVO project= getProject(projectId);
         //verify input parameters
@@ -252,7 +254,7 @@ public class ProjectManagerImpl extends ManagerBase implements ProjectManager {
     @Override
     @ActionEvent(eventType = EventTypes.EVENT_PROJECT_DELETE, eventDescription = "deleting project", async = true) 
     public boolean deleteProject(long projectId) {
-        UserContext ctx = UserContext.current();
+        CallContext ctx = CallContext.current();
 
         ProjectVO project= getProject(projectId);
         //verify input parameters
@@ -260,9 +262,9 @@ public class ProjectManagerImpl extends ManagerBase implements ProjectManager {
             throw new InvalidParameterValueException("Unable to find project by id " + projectId);
         }
 
-        _accountMgr.checkAccess(ctx.getCaller(),AccessType.ModifyProject, true, _accountMgr.getAccount(project.getProjectAccountId()));
+        _accountMgr.checkAccess(ctx.getCallingAccount(),AccessType.ModifyProject, true, _accountMgr.getAccount(project.getProjectAccountId()));
 
-        return deleteProject(ctx.getCaller(), ctx.getCallerUserId(), project);  
+        return deleteProject(ctx.getCallingAccount(), ctx.getCallingUserId(), project);  
     }
 
     @DB
@@ -442,7 +444,7 @@ public class ProjectManagerImpl extends ManagerBase implements ProjectManager {
     @Override @DB
     @ActionEvent(eventType = EventTypes.EVENT_PROJECT_UPDATE, eventDescription = "updating project", async=true)
     public Project updateProject(long projectId, String displayText, String newOwnerName) throws ResourceAllocationException{
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
 
         //check that the project exists
         ProjectVO project = getProject(projectId);
@@ -503,7 +505,7 @@ public class ProjectManagerImpl extends ManagerBase implements ProjectManager {
     @Override
     @ActionEvent(eventType = EventTypes.EVENT_PROJECT_ACCOUNT_ADD, eventDescription = "adding account to project", async=true)
     public boolean addAccountToProject(long projectId, String accountName, String email) {
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
 
         //check that the project exists
         Project project = getProject(projectId);
@@ -589,7 +591,7 @@ public class ProjectManagerImpl extends ManagerBase implements ProjectManager {
     @Override
     @ActionEvent(eventType = EventTypes.EVENT_PROJECT_ACCOUNT_REMOVE, eventDescription = "removing account from project", async=true)
     public boolean deleteAccountFromProject(long projectId, String accountName) {
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
 
         //check that the project exists
         Project project = getProject(projectId);
@@ -710,7 +712,7 @@ public class ProjectManagerImpl extends ManagerBase implements ProjectManager {
     @Override @DB
     @ActionEvent(eventType = EventTypes.EVENT_PROJECT_INVITATION_UPDATE, eventDescription = "updating project invitation", async=true)
     public boolean updateInvitation(long projectId, String accountName, String token, boolean accept) {
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
         Long accountId = null;
         boolean result = true;
 
@@ -794,7 +796,7 @@ public class ProjectManagerImpl extends ManagerBase implements ProjectManager {
     @ActionEvent(eventType = EventTypes.EVENT_PROJECT_ACTIVATE, eventDescription = "activating project")
     @DB
     public Project activateProject(long projectId) {
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
 
         //check that the project exists
         ProjectVO project = getProject(projectId);
@@ -837,7 +839,7 @@ public class ProjectManagerImpl extends ManagerBase implements ProjectManager {
     @Override
     @ActionEvent(eventType = EventTypes.EVENT_PROJECT_SUSPEND, eventDescription = "suspending project", async = true)
     public Project suspendProject (long projectId) throws ConcurrentOperationException, ResourceUnavailableException {
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
 
         ProjectVO project= getProject(projectId);
         //verify input parameters
@@ -979,7 +981,7 @@ public class ProjectManagerImpl extends ManagerBase implements ProjectManager {
     @Override @DB
     @ActionEvent(eventType = EventTypes.EVENT_PROJECT_INVITATION_REMOVE, eventDescription = "removing project invitation", async=true)
     public boolean deleteProjectInvitation(long id) {
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
 
         ProjectInvitation invitation = _projectInvitationDao.findById(id);
         if (invitation == null) {

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/server/src/com/cloud/resource/ResourceManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/resource/ResourceManagerImpl.java b/server/src/com/cloud/resource/ResourceManagerImpl.java
index df40066..d7652f4 100755
--- a/server/src/com/cloud/resource/ResourceManagerImpl.java
+++ b/server/src/com/cloud/resource/ResourceManagerImpl.java
@@ -43,6 +43,7 @@ import org.apache.cloudstack.api.command.admin.host.PrepareForMaintenanceCmd;
 import org.apache.cloudstack.api.command.admin.host.ReconnectHostCmd;
 import org.apache.cloudstack.api.command.admin.host.UpdateHostCmd;
 import org.apache.cloudstack.api.command.admin.host.UpdateHostPasswordCmd;
+import org.apache.cloudstack.context.CallContext;
 import org.apache.cloudstack.region.dao.RegionDao;
 import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao;
 import org.apache.cloudstack.storage.datastore.db.StoragePoolVO;
@@ -134,7 +135,6 @@ import com.cloud.template.VirtualMachineTemplate;
 import com.cloud.user.Account;
 import com.cloud.user.AccountManager;
 import com.cloud.user.User;
-import com.cloud.user.UserContext;
 import com.cloud.utils.Pair;
 import com.cloud.utils.StringUtils;
 import com.cloud.utils.UriUtils;
@@ -378,7 +378,7 @@ public class ResourceManagerImpl extends ManagerBase implements ResourceManager,
             throw ex;
         }
 
-        Account account = UserContext.current().getCaller();
+        Account account = CallContext.current().getCallingAccount();
         if (Grouping.AllocationState.Disabled == zone.getAllocationState() && !_accountMgr.isRootAdmin(account.getType())) {
             PermissionDeniedException ex = new PermissionDeniedException(
                     "Cannot perform this operation, Zone with specified id is currently disabled");
@@ -573,7 +573,7 @@ public class ResourceManagerImpl extends ManagerBase implements ResourceManager,
         String password = cmd.getPassword();
         List<String> hostTags = cmd.getHostTags();
 
-        dcId = _accountMgr.checkAccessAndSpecifyAuthority(UserContext.current().getCaller(), dcId);
+        dcId = _accountMgr.checkAccessAndSpecifyAuthority(CallContext.current().getCallingAccount(), dcId);
 
         // this is for standalone option
         if (clusterName == null && clusterId == null) {
@@ -623,7 +623,7 @@ public class ResourceManagerImpl extends ManagerBase implements ResourceManager,
             throw new InvalidParameterValueException("Can't find zone by id " + dcId);
         }
 
-        Account account = UserContext.current().getCaller();
+        Account account = CallContext.current().getCallingAccount();
         if (Grouping.AllocationState.Disabled == zone.getAllocationState() && !_accountMgr.isRootAdmin(account.getType())) {
             PermissionDeniedException ex = new PermissionDeniedException(
                     "Cannot perform this operation, Zone with specified id is currently disabled");
@@ -818,13 +818,13 @@ public class ResourceManagerImpl extends ManagerBase implements ResourceManager,
 
     @DB
     protected boolean doDeleteHost(long hostId, boolean isForced, boolean isForceDeleteStorage) {
-        User caller = _accountMgr.getActiveUser(UserContext.current().getCallerUserId());
+        User caller = _accountMgr.getActiveUser(CallContext.current().getCallingUserId());
         // Verify that host exists
         HostVO host = _hostDao.findById(hostId);
         if (host == null) {
             throw new InvalidParameterValueException("Host with id " + hostId + " doesn't exist");
         }
-        _accountMgr.checkAccessAndSpecifyAuthority(UserContext.current().getCaller(), host.getDataCenterId());
+        _accountMgr.checkAccessAndSpecifyAuthority(CallContext.current().getCallingAccount(), host.getDataCenterId());
 
         if (!isForced && host.getResourceState() != ResourceState.Maintenance) {
             throw new CloudRuntimeException("Host " + host.getUuid() + " cannot be deleted as it is not in maintenance mode. Either put the host into maintenance or perform a forced deletion.");
@@ -2043,7 +2043,7 @@ public class ResourceManagerImpl extends ManagerBase implements ResourceManager,
             s_logger.debug("Deleting Host: " + host.getId() + " Guid:" + host.getGuid());
         }
 
-        User caller = _accountMgr.getActiveUser(UserContext.current().getCallerUserId());
+        User caller = _accountMgr.getActiveUser(CallContext.current().getCallingUserId());
 
         if (forceDestroyStorage) {
             // put local storage into mainenance mode, will set all the VMs on

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/server/src/com/cloud/resourcelimit/ResourceLimitManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/resourcelimit/ResourceLimitManagerImpl.java b/server/src/com/cloud/resourcelimit/ResourceLimitManagerImpl.java
index b5c060d..9ec27bd 100755
--- a/server/src/com/cloud/resourcelimit/ResourceLimitManagerImpl.java
+++ b/server/src/com/cloud/resourcelimit/ResourceLimitManagerImpl.java
@@ -30,8 +30,10 @@ import javax.inject.Inject;
 import javax.naming.ConfigurationException;
 
 import org.apache.cloudstack.acl.SecurityChecker.AccessType;
+import org.apache.cloudstack.context.CallContext;
 import org.apache.cloudstack.storage.datastore.db.TemplateDataStoreDao;
 import org.apache.cloudstack.storage.datastore.db.TemplateDataStoreVO;
+
 import org.apache.log4j.Logger;
 import org.springframework.stereotype.Component;
 
@@ -78,7 +80,6 @@ import com.cloud.user.Account;
 import com.cloud.user.AccountManager;
 import com.cloud.user.AccountVO;
 import com.cloud.user.ResourceLimitService;
-import com.cloud.user.UserContext;
 import com.cloud.user.dao.AccountDao;
 import com.cloud.utils.NumbersUtil;
 import com.cloud.utils.component.ManagerBase;
@@ -424,7 +425,7 @@ public class ResourceLimitManagerImpl extends ManagerBase implements ResourceLim
 
     @Override
     public List<ResourceLimitVO> searchForLimits(Long id, Long accountId, Long domainId, Integer type, Long startIndex, Long pageSizeVal) {
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
         List<ResourceLimitVO> limits = new ArrayList<ResourceLimitVO>();
         boolean isAccount = true;
 
@@ -568,7 +569,7 @@ public class ResourceLimitManagerImpl extends ManagerBase implements ResourceLim
 
     @Override
     public ResourceLimitVO updateResourceLimit(Long accountId, Long domainId, Integer typeId, Long max) {
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
 
         if (max == null) {
             max = new Long(Resource.RESOURCE_UNLIMITED);
@@ -666,7 +667,7 @@ public class ResourceLimitManagerImpl extends ManagerBase implements ResourceLim
 
     @Override
     public List<ResourceCountVO> recalculateResourceCount(Long accountId, Long domainId, Integer typeId) throws InvalidParameterValueException, CloudRuntimeException, PermissionDeniedException {
-        Account callerAccount = UserContext.current().getCaller();
+        Account callerAccount = CallContext.current().getCallingAccount();
         long count = 0;
         List<ResourceCountVO> counts = new ArrayList<ResourceCountVO>();
         List<ResourceType> resourceTypes = new ArrayList<ResourceType>();

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/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 f7fc834..8d979c7 100755
--- a/server/src/com/cloud/server/ManagementServerImpl.java
+++ b/server/src/com/cloud/server/ManagementServerImpl.java
@@ -41,15 +41,19 @@ import javax.naming.ConfigurationException;
 
 import com.cloud.exception.*;
 import com.cloud.vm.*;
+
 import org.apache.cloudstack.acl.ControlledEntity;
 import org.apache.cloudstack.acl.SecurityChecker.AccessType;
 import org.apache.cloudstack.api.ApiConstants;
 
 import com.cloud.event.ActionEventUtils;
+
 import org.apache.cloudstack.api.BaseUpdateTemplateOrIsoCmd;
 import org.apache.cloudstack.api.command.admin.region.*;
+
 import org.apache.commons.codec.binary.Base64;
 import org.apache.log4j.Logger;
+
 import org.apache.cloudstack.affinity.AffinityGroupProcessor;
 import org.apache.cloudstack.affinity.dao.AffinityGroupVMMapDao;
 import org.apache.cloudstack.api.command.admin.account.CreateAccountCmd;
@@ -513,7 +517,6 @@ import com.cloud.user.AccountService;
 import com.cloud.user.SSHKeyPair;
 import com.cloud.user.SSHKeyPairVO;
 import com.cloud.user.User;
-import com.cloud.user.UserContext;
 import com.cloud.user.UserVO;
 import com.cloud.user.dao.AccountDao;
 import com.cloud.user.dao.SSHKeyPairDao;
@@ -554,6 +557,7 @@ import org.apache.cloudstack.api.command.admin.region.AddRegionCmd;
 import org.apache.cloudstack.api.command.admin.region.RemoveRegionCmd;
 import org.apache.cloudstack.api.command.admin.region.UpdateRegionCmd;
 import org.apache.cloudstack.api.command.admin.config.ListDeploymentPlannersCmd;
+import org.apache.cloudstack.context.CallContext;
 
 
 public class ManagementServerImpl extends ManagerBase implements ManagementServer {
@@ -837,7 +841,7 @@ public class ManagementServerImpl extends ManagerBase implements ManagementServe
 
     @Override
     public boolean archiveEvents(ArchiveEventsCmd cmd) {
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
         List<Long> ids = cmd.getIds();
         boolean result =true;
         List<Long> permittedAccountIds = new ArrayList<Long>();
@@ -852,7 +856,7 @@ public class ManagementServerImpl extends ManagerBase implements ManagementServe
 
         List<EventVO> events = _eventDao.listToArchiveOrDeleteEvents(ids, cmd.getType(), cmd.getStartDate(), cmd.getEndDate(), permittedAccountIds);
         ControlledEntity[] sameOwnerEvents = events.toArray(new ControlledEntity[events.size()]);
-        _accountMgr.checkAccess(UserContext.current().getCaller(), null, true, sameOwnerEvents);
+        _accountMgr.checkAccess(CallContext.current().getCallingAccount(), null, true, sameOwnerEvents);
 
         if (ids != null && events.size() < ids.size()) {
             result = false;
@@ -864,7 +868,7 @@ public class ManagementServerImpl extends ManagerBase implements ManagementServe
 
     @Override
     public boolean deleteEvents(DeleteEventsCmd cmd) {
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
         List<Long> ids = cmd.getIds();
         boolean result =true;
         List<Long> permittedAccountIds = new ArrayList<Long>();
@@ -879,7 +883,7 @@ public class ManagementServerImpl extends ManagerBase implements ManagementServe
 
         List<EventVO> events = _eventDao.listToArchiveOrDeleteEvents(ids, cmd.getType(), cmd.getStartDate(), cmd.getEndDate(), permittedAccountIds);
         ControlledEntity[] sameOwnerEvents = events.toArray(new ControlledEntity[events.size()]);
-        _accountMgr.checkAccess(UserContext.current().getCaller(), null, true, sameOwnerEvents);
+        _accountMgr.checkAccess(CallContext.current().getCallingAccount(), null, true, sameOwnerEvents);
 
         if (ids != null && events.size() < ids.size()) {
             result = false;
@@ -906,7 +910,7 @@ public class ManagementServerImpl extends ManagerBase implements ManagementServe
         Filter searchFilter = new Filter(ClusterVO.class, "id", true, startIndex, pageSizeVal);
         SearchCriteria<ClusterVO> sc = _clusterDao.createSearchCriteria();
 
-        zoneId = _accountMgr.checkAccessAndSpecifyAuthority(UserContext.current().getCaller(), zoneId);
+        zoneId = _accountMgr.checkAccessAndSpecifyAuthority(CallContext.current().getCallingAccount(), zoneId);
 
         sc.addAnd("dataCenterId", SearchCriteria.Op.EQ, zoneId);
         sc.addAnd("hypervisorType", SearchCriteria.Op.EQ, hypervisorType);
@@ -924,7 +928,7 @@ public class ManagementServerImpl extends ManagerBase implements ManagementServe
         Object clusterType = cmd.getClusterType();
         Object allocationState = cmd.getAllocationState();
         String keyword = cmd.getKeyword();
-        zoneId = _accountMgr.checkAccessAndSpecifyAuthority(UserContext.current().getCaller(), zoneId);
+        zoneId = _accountMgr.checkAccessAndSpecifyAuthority(CallContext.current().getCallingAccount(), zoneId);
 
 
     	Filter searchFilter = new Filter(ClusterVO.class, "id", true, cmd.getStartIndex(), cmd.getPageSizeVal());
@@ -981,7 +985,7 @@ public class ManagementServerImpl extends ManagerBase implements ManagementServe
     @Override
     public Pair<List<? extends Host>, Integer> searchForServers(ListHostsCmd cmd) {
 
-        Long zoneId = _accountMgr.checkAccessAndSpecifyAuthority(UserContext.current().getCaller(), cmd.getZoneId());
+        Long zoneId = _accountMgr.checkAccessAndSpecifyAuthority(CallContext.current().getCallingAccount(), cmd.getZoneId());
         Object name = cmd.getHostName();
         Object type = cmd.getType();
         Object state = cmd.getState();
@@ -1001,7 +1005,7 @@ public class ManagementServerImpl extends ManagerBase implements ManagementServe
     public Ternary<Pair<List<? extends Host>, Integer>, List<? extends Host>, Map<Host, Boolean>>
             listHostsForMigrationOfVM(Long vmId, Long startIndex, Long pageSize) {
         // access check - only root admin can migrate VM
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
         if (caller.getType() != Account.ACCOUNT_TYPE_ADMIN) {
             if (s_logger.isDebugEnabled()) {
                 s_logger.debug("Caller is not a root admin, permission denied to migrate the VM");
@@ -1188,7 +1192,7 @@ public class ManagementServerImpl extends ManagerBase implements ManagementServe
     @Override
     public Pair<List<? extends StoragePool>, List<? extends StoragePool>> listStoragePoolsForMigrationOfVolume(Long volumeId) {
         // Access check - only root administrator can migrate volumes.
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
         if (caller.getType() != Account.ACCOUNT_TYPE_ADMIN) {
             if (s_logger.isDebugEnabled()) {
                 s_logger.debug("Caller is not a root admin, permission denied to migrate the volume");
@@ -1387,7 +1391,7 @@ public class ManagementServerImpl extends ManagerBase implements ManagementServe
         Long zoneId = cmd.getZoneId();
         Object keyword = cmd.getKeyword();
         Object allocationState = cmd.getAllocationState();
-        zoneId = _accountMgr.checkAccessAndSpecifyAuthority(UserContext.current().getCaller(), zoneId);
+        zoneId = _accountMgr.checkAccessAndSpecifyAuthority(CallContext.current().getCallingAccount(), zoneId);
 
 
     	Filter searchFilter = new Filter(HostPodVO.class, "dataCenterId", true, cmd.getStartIndex(), cmd.getPageSizeVal());
@@ -1745,7 +1749,7 @@ public class ManagementServerImpl extends ManagerBase implements ManagementServe
         Integer sortKey = cmd.getSortKey();
         Boolean isDynamicallyScalable = cmd.isDynamicallyScalable();
         Boolean isRoutingTemplate = cmd.isRoutingType();
-        Account account = UserContext.current().getCaller();
+        Account account = CallContext.current().getCallingAccount();
 
         // verify that template exists
         VMTemplateVO template = _templateDao.findById(id);
@@ -1865,7 +1869,7 @@ public class ManagementServerImpl extends ManagerBase implements ManagementServe
         List<Long> permittedAccounts = new ArrayList<Long>();
         ListProjectResourcesCriteria listProjectResourcesCriteria = null;
         if (isAllocated) {
-            Account caller = UserContext.current().getCaller();
+            Account caller = CallContext.current().getCallingAccount();
 
             Ternary<Long, Boolean, ListProjectResourcesCriteria> domainIdRecursiveListProject = new Ternary<Long, Boolean, ListProjectResourcesCriteria>(
                     cmd.getDomainId(), cmd.isRecursive(), null);
@@ -2056,9 +2060,9 @@ public class ManagementServerImpl extends ManagerBase implements ManagementServe
     private ConsoleProxyVO stopConsoleProxy(VMInstanceVO systemVm, boolean isForced) throws ResourceUnavailableException, OperationTimedoutException,
     ConcurrentOperationException {
 
-        User caller = _userDao.findById(UserContext.current().getCallerUserId());
+        User caller = _userDao.findById(CallContext.current().getCallingUserId());
 
-        if (_itMgr.advanceStop(systemVm, isForced, caller, UserContext.current().getCaller())) {
+        if (_itMgr.advanceStop(systemVm, isForced, caller, CallContext.current().getCallingAccount())) {
             return _consoleProxyDao.findById(systemVm.getId());
         }
         return null;
@@ -2132,7 +2136,7 @@ public class ManagementServerImpl extends ManagerBase implements ManagementServe
         }
 
         // check permissions
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
         _accountMgr.checkAccess(caller, domain);
 
         // domain name is unique under the parent domain
@@ -2216,7 +2220,7 @@ public class ManagementServerImpl extends ManagerBase implements ManagementServe
         Object type = cmd.getType();
         Object keyword = cmd.getKeyword();
 
-        Long zoneId = _accountMgr.checkAccessAndSpecifyAuthority(UserContext.current().getCaller(), null);
+        Long zoneId = _accountMgr.checkAccessAndSpecifyAuthority(CallContext.current().getCallingAccount(), null);
         if (id != null) {
             sc.addAnd("id", SearchCriteria.Op.EQ, id);
         }
@@ -2242,14 +2246,14 @@ public class ManagementServerImpl extends ManagerBase implements ManagementServe
 
     @Override
     public boolean archiveAlerts(ArchiveAlertsCmd cmd) {
-        Long zoneId = _accountMgr.checkAccessAndSpecifyAuthority(UserContext.current().getCaller(), null);
+        Long zoneId = _accountMgr.checkAccessAndSpecifyAuthority(CallContext.current().getCallingAccount(), null);
         boolean result = _alertDao.archiveAlert(cmd.getIds(), cmd.getType(), cmd.getStartDate(), cmd.getEndDate(), zoneId);
         return result;
     }
 
     @Override
     public boolean deleteAlerts(DeleteAlertsCmd cmd) {
-        Long zoneId = _accountMgr.checkAccessAndSpecifyAuthority(UserContext.current().getCaller(), null);
+        Long zoneId = _accountMgr.checkAccessAndSpecifyAuthority(CallContext.current().getCallingAccount(), null);
         boolean result = _alertDao.deleteAlert(cmd.getIds(), cmd.getType(), cmd.getStartDate(), cmd.getEndDate(), zoneId);
         return result;
     }
@@ -2265,7 +2269,7 @@ public class ManagementServerImpl extends ManagerBase implements ManagementServe
         if (clusterId != null) {
             throw new InvalidParameterValueException("Currently clusterId param is not suppoerted");
         }
-        zoneId = _accountMgr.checkAccessAndSpecifyAuthority(UserContext.current().getCaller(), zoneId);
+        zoneId = _accountMgr.checkAccessAndSpecifyAuthority(CallContext.current().getCallingAccount(), zoneId);
         List<SummedCapacity> summedCapacities = new ArrayList<SummedCapacity>();
 
         if (zoneId == null && podId == null) {// Group by Zone, capacity type
@@ -2374,7 +2378,7 @@ public class ManagementServerImpl extends ManagerBase implements ManagementServe
         Long clusterId = cmd.getClusterId();
         Boolean fetchLatest = cmd.getFetchLatest();
 
-        zoneId = _accountMgr.checkAccessAndSpecifyAuthority(UserContext.current().getCaller(), zoneId);
+        zoneId = _accountMgr.checkAccessAndSpecifyAuthority(CallContext.current().getCallingAccount(), zoneId);
         if (fetchLatest != null && fetchLatest) {
             _alertMgr.recalculateCapacity();
         }
@@ -2945,9 +2949,9 @@ public class ManagementServerImpl extends ManagerBase implements ManagementServe
     private SecondaryStorageVmVO stopSecondaryStorageVm(VMInstanceVO systemVm, boolean isForced) throws ResourceUnavailableException,
     OperationTimedoutException, ConcurrentOperationException {
 
-        User caller = _userDao.findById(UserContext.current().getCallerUserId());
+        User caller = _userDao.findById(CallContext.current().getCallingUserId());
 
-        if (_itMgr.advanceStop(systemVm, isForced, caller, UserContext.current().getCaller())) {
+        if (_itMgr.advanceStop(systemVm, isForced, caller, CallContext.current().getCallingAccount())) {
             return _secStorageVmDao.findById(systemVm.getId());
         }
         return null;
@@ -2971,7 +2975,7 @@ public class ManagementServerImpl extends ManagerBase implements ManagementServe
     @Override
     public Pair<List<? extends VirtualMachine>, Integer> searchForSystemVm(ListSystemVMsCmd cmd) {
         String type = cmd.getSystemVmType();
-        Long zoneId = _accountMgr.checkAccessAndSpecifyAuthority(UserContext.current().getCaller(), cmd.getZoneId());
+        Long zoneId = _accountMgr.checkAccessAndSpecifyAuthority(CallContext.current().getCallingAccount(), cmd.getZoneId());
         Long id = cmd.getId();
         String name = cmd.getSystemVmName();
         String state = cmd.getState();
@@ -3153,7 +3157,7 @@ public class ManagementServerImpl extends ManagerBase implements ManagementServe
 
     @Override
     public ArrayList<String> getCloudIdentifierResponse(long userId) {
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
 
         // verify that user exists
         User user = _accountMgr.getUserIncludingRemoved(userId);
@@ -3241,7 +3245,7 @@ public class ManagementServerImpl extends ManagerBase implements ManagementServe
 
     @Override
     public InstanceGroupVO updateVmGroup(UpdateVMGroupCmd cmd) {
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
         Long groupId = cmd.getId();
         String groupName = cmd.getGroupName();
 
@@ -3439,7 +3443,7 @@ public class ManagementServerImpl extends ManagerBase implements ManagementServe
 
     @Override
     public SSHKeyPair createSSHKeyPair(CreateSSHKeyPairCmd cmd) {
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
         String accountName = cmd.getAccountName();
         Long domainId = cmd.getDomainId();
         Long projectId = cmd.getProjectId();
@@ -3463,7 +3467,7 @@ public class ManagementServerImpl extends ManagerBase implements ManagementServe
 
     @Override
     public boolean deleteSSHKeyPair(DeleteSSHKeyPairCmd cmd) {
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
         String accountName = cmd.getAccountName();
         Long domainId = cmd.getDomainId();
         Long projectId = cmd.getProjectId();
@@ -3491,7 +3495,7 @@ public class ManagementServerImpl extends ManagerBase implements ManagementServe
         String name = cmd.getName();
         String fingerPrint = cmd.getFingerprint();
 
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
         List<Long> permittedAccounts = new ArrayList<Long>();
 
         Ternary<Long, Boolean, ListProjectResourcesCriteria> domainIdRecursiveListProject = new Ternary<Long, Boolean, ListProjectResourcesCriteria>(
@@ -3523,7 +3527,7 @@ public class ManagementServerImpl extends ManagerBase implements ManagementServe
     @Override
     @ActionEvent(eventType = EventTypes.EVENT_REGISTER_SSH_KEYPAIR, eventDescription = "registering ssh keypair", async = true)
     public SSHKeyPair registerSSHKeyPair(RegisterSSHKeyPairCmd cmd) {
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
 
         Account owner = _accountMgr.finalizeOwner(caller, cmd.getAccountName(), cmd.getDomainId(), cmd.getProjectId());
 
@@ -3561,7 +3565,7 @@ public class ManagementServerImpl extends ManagerBase implements ManagementServe
 
     @Override
     public String getVMPassword(GetVMPasswordCmd cmd) {
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
 
         UserVmVO vm = _userVmDao.findById(cmd.getId());
         if (vm == null) {
@@ -3708,7 +3712,7 @@ public class ManagementServerImpl extends ManagerBase implements ManagementServe
 
         if (_hypervisorCapabilitiesDao.update(id, hpvCapabilities)) {
             hpvCapabilities = _hypervisorCapabilitiesDao.findById(id);
-            UserContext.current().setEventDetails("Hypervisor Capabilities id=" + hpvCapabilities.getId());
+            CallContext.current().setEventDetails("Hypervisor Capabilities id=" + hpvCapabilities.getId());
             return hpvCapabilities;
         } else {
             return null;
@@ -3737,7 +3741,7 @@ public class ManagementServerImpl extends ManagerBase implements ManagementServe
     }
 
     private VirtualMachine upgradeStoppedSystemVm(Long systemVmId, Long serviceOfferingId){
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
 
         VMInstanceVO systemVm = _vmInstanceDao.findByIdTypes(systemVmId, VirtualMachine.Type.ConsoleProxy, VirtualMachine.Type.SecondaryStorageVm);
         if (systemVm == null) {

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/server/src/com/cloud/storage/StorageManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/storage/StorageManagerImpl.java b/server/src/com/cloud/storage/StorageManagerImpl.java
index 830fd36..2b57bae 100755
--- a/server/src/com/cloud/storage/StorageManagerImpl.java
+++ b/server/src/com/cloud/storage/StorageManagerImpl.java
@@ -51,6 +51,7 @@ import org.apache.cloudstack.api.command.admin.storage.CreateStoragePoolCmd;
 import org.apache.cloudstack.api.command.admin.storage.DeleteImageStoreCmd;
 import org.apache.cloudstack.api.command.admin.storage.DeletePoolCmd;
 import org.apache.cloudstack.api.command.admin.storage.UpdateStoragePoolCmd;
+import org.apache.cloudstack.context.CallContext;
 import org.apache.cloudstack.engine.subsystem.api.storage.ClusterScope;
 import org.apache.cloudstack.engine.subsystem.api.storage.DataStore;
 import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreLifeCycle;
@@ -148,7 +149,6 @@ import com.cloud.template.TemplateManager;
 import com.cloud.user.Account;
 import com.cloud.user.AccountManager;
 import com.cloud.user.User;
-import com.cloud.user.UserContext;
 import com.cloud.user.dao.UserDao;
 import com.cloud.utils.NumbersUtil;
 import com.cloud.utils.Pair;
@@ -698,7 +698,7 @@ public class StorageManagerImpl extends ManagerBase implements StorageManager, C
             throw new InvalidParameterValueException("unable to find zone by id " + zoneId);
         }
         // Check if zone is disabled
-        Account account = UserContext.current().getCaller();
+        Account account = CallContext.current().getCallingAccount();
         if (Grouping.AllocationState.Disabled == zone.getAllocationState() && !_accountMgr.isRootAdmin(account.getType())) {
             throw new PermissionDeniedException("Cannot perform this operation, Zone is currently disabled: " + zoneId);
         }
@@ -1195,9 +1195,9 @@ public class StorageManagerImpl extends ManagerBase implements StorageManager, C
     @DB
     public PrimaryDataStoreInfo preparePrimaryStorageForMaintenance(Long primaryStorageId) throws ResourceUnavailableException,
             InsufficientCapacityException {
-        Long userId = UserContext.current().getCallerUserId();
+        Long userId = CallContext.current().getCallingUserId();
         User user = _userDao.findById(userId);
-        Account account = UserContext.current().getCaller();
+        Account account = CallContext.current().getCallingAccount();
 
         boolean restart = true;
         StoragePoolVO primaryStorage = null;
@@ -1226,9 +1226,9 @@ public class StorageManagerImpl extends ManagerBase implements StorageManager, C
     @DB
     public PrimaryDataStoreInfo cancelPrimaryStorageForMaintenance(CancelPrimaryStorageMaintenanceCmd cmd) throws ResourceUnavailableException {
         Long primaryStorageId = cmd.getId();
-        Long userId = UserContext.current().getCallerUserId();
+        Long userId = CallContext.current().getCallingUserId();
         User user = _userDao.findById(userId);
-        Account account = UserContext.current().getCaller();
+        Account account = CallContext.current().getCallingAccount();
         StoragePoolVO primaryStorage = null;
 
         primaryStorage = _storagePoolDao.findById(primaryStorageId);
@@ -1679,7 +1679,7 @@ public class StorageManagerImpl extends ManagerBase implements StorageManager, C
                 throw new InvalidParameterValueException("Can't find zone by id " + dcId);
             }
 
-            Account account = UserContext.current().getCaller();
+            Account account = CallContext.current().getCallingAccount();
             if (Grouping.AllocationState.Disabled == zone.getAllocationState() && !_accountMgr.isRootAdmin(account.getType())) {
                 PermissionDeniedException ex = new PermissionDeniedException(
                         "Cannot perform this operation, Zone with specified id is currently disabled");
@@ -1754,13 +1754,13 @@ public class StorageManagerImpl extends ManagerBase implements StorageManager, C
     @Override
     public boolean deleteImageStore(DeleteImageStoreCmd cmd) {
         long storeId = cmd.getId();
-        User caller = _accountMgr.getActiveUser(UserContext.current().getCallerUserId());
+        User caller = _accountMgr.getActiveUser(CallContext.current().getCallingUserId());
         // Verify that image store exists
         ImageStoreVO store = _imageStoreDao.findById(storeId);
         if (store == null) {
             throw new InvalidParameterValueException("Image store with id " + storeId + " doesn't exist");
         }
-        _accountMgr.checkAccessAndSpecifyAuthority(UserContext.current().getCaller(), store.getDataCenterId());
+        _accountMgr.checkAccessAndSpecifyAuthority(CallContext.current().getCallingAccount(), store.getDataCenterId());
 
         // Verify that there are no live snapshot, template, volume on the image
         // store to be deleted
@@ -1833,7 +1833,7 @@ public class StorageManagerImpl extends ManagerBase implements StorageManager, C
             throw new InvalidParameterValueException("Can't find zone by id " + dcId);
         }
 
-        Account account = UserContext.current().getCaller();
+        Account account = CallContext.current().getCallingAccount();
         if (Grouping.AllocationState.Disabled == zone.getAllocationState() && !_accountMgr.isRootAdmin(account.getType())) {
             PermissionDeniedException ex = new PermissionDeniedException(
                     "Cannot perform this operation, Zone with specified id is currently disabled");

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/server/src/com/cloud/storage/StoragePoolAutomationImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/storage/StoragePoolAutomationImpl.java b/server/src/com/cloud/storage/StoragePoolAutomationImpl.java
index f6b39f1..5c97183 100644
--- a/server/src/com/cloud/storage/StoragePoolAutomationImpl.java
+++ b/server/src/com/cloud/storage/StoragePoolAutomationImpl.java
@@ -23,9 +23,11 @@ import java.util.List;
 
 import javax.inject.Inject;
 
+import org.apache.cloudstack.context.CallContext;
 import org.apache.cloudstack.engine.subsystem.api.storage.*;
 import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao;
 import org.apache.cloudstack.storage.datastore.db.StoragePoolVO;
+
 import org.apache.log4j.Logger;
 import org.springframework.stereotype.Component;
 
@@ -44,7 +46,6 @@ import com.cloud.storage.dao.StoragePoolWorkDao;
 import com.cloud.storage.dao.VolumeDao;
 import com.cloud.user.Account;
 import com.cloud.user.User;
-import com.cloud.user.UserContext;
 import com.cloud.user.dao.UserDao;
 import com.cloud.utils.exception.CloudRuntimeException;
 import com.cloud.utils.exception.ExecutionException;
@@ -103,9 +104,9 @@ public class StoragePoolAutomationImpl implements StoragePoolAutomation {
 
     @Override
     public boolean maintain(DataStore store) {
-        Long userId = UserContext.current().getCallerUserId();
+        Long userId = CallContext.current().getCallingUserId();
         User user = _userDao.findById(userId);
-        Account account = UserContext.current().getCaller();
+        Account account = CallContext.current().getCallingAccount();
         StoragePoolVO pool = this.primaryDataStoreDao.findById(store.getId());
         try {
             List<StoragePoolVO> spes = null;
@@ -355,9 +356,9 @@ public class StoragePoolAutomationImpl implements StoragePoolAutomation {
     @Override
     public boolean cancelMaintain(DataStore store) {
         // Change the storage state back to up
-        Long userId = UserContext.current().getCallerUserId();
+        Long userId = CallContext.current().getCallingUserId();
         User user = _userDao.findById(userId);
-        Account account = UserContext.current().getCaller();
+        Account account = CallContext.current().getCallingAccount();
         StoragePoolVO poolVO = this.primaryDataStoreDao
                 .findById(store.getId());
         StoragePool pool = (StoragePool)store;

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/server/src/com/cloud/storage/VolumeManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/storage/VolumeManagerImpl.java b/server/src/com/cloud/storage/VolumeManagerImpl.java
index 72d27bc..a8a3e1a 100644
--- a/server/src/com/cloud/storage/VolumeManagerImpl.java
+++ b/server/src/com/cloud/storage/VolumeManagerImpl.java
@@ -44,6 +44,7 @@ import org.apache.cloudstack.api.command.user.volume.MigrateVolumeCmd;
 import org.apache.cloudstack.api.command.user.volume.ResizeVolumeCmd;
 import org.apache.cloudstack.api.command.user.volume.UpdateVolumeCmd;
 import org.apache.cloudstack.api.command.user.volume.UploadVolumeCmd;
+import org.apache.cloudstack.context.CallContext;
 import org.apache.cloudstack.engine.subsystem.api.storage.ChapInfo;
 import org.apache.cloudstack.engine.subsystem.api.storage.DataStore;
 import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreManager;
@@ -153,7 +154,6 @@ import com.cloud.template.TemplateManager;
 import com.cloud.user.Account;
 import com.cloud.user.AccountManager;
 import com.cloud.user.ResourceLimitService;
-import com.cloud.user.UserContext;
 import com.cloud.user.VmDiskStatisticsVO;
 import com.cloud.user.dao.AccountDao;
 import com.cloud.user.dao.UserDao;
@@ -386,7 +386,7 @@ public class VolumeManagerImpl extends ManagerBase implements VolumeManager {
     @ActionEvent(eventType = EventTypes.EVENT_VOLUME_UPLOAD, eventDescription = "uploading volume", async = true)
     public VolumeVO uploadVolume(UploadVolumeCmd cmd)
             throws ResourceAllocationException {
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
         long ownerId = cmd.getEntityOwnerId();
         Account owner = _accountDao.findById(ownerId);
         Long zoneId = cmd.getZoneId();
@@ -753,7 +753,7 @@ public class VolumeManagerImpl extends ManagerBase implements VolumeManager {
                 .getDomainId());
         volume.setFormat(ImageFormat.valueOf(format));
         volume = _volsDao.persist(volume);
-        UserContext.current().setEventDetails("Volume Id: " + volume.getId());
+        CallContext.current().setEventDetails("Volume Id: " + volume.getId());
 
         // Increment resource count during allocation; if actual creation fails,
         // decrement it
@@ -823,7 +823,7 @@ public class VolumeManagerImpl extends ManagerBase implements VolumeManager {
     public VolumeVO allocVolume(CreateVolumeCmd cmd)
             throws ResourceAllocationException {
         // FIXME: some of the scheduled event stuff might be missing here...
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
 
         long ownerId = cmd.getEntityOwnerId();
         Boolean displayVolumeEnabled = cmd.getDisplayVolume();
@@ -1043,7 +1043,7 @@ public class VolumeManagerImpl extends ManagerBase implements VolumeManager {
             _usageEventDao.persist(usageEvent);
         }
 
-        UserContext.current().setEventDetails("Volume Id: " + volume.getId());
+        CallContext.current().setEventDetails("Volume Id: " + volume.getId());
 
         // Increment resource count during allocation; if actual creation fails,
         // decrement it
@@ -1178,8 +1178,8 @@ public class VolumeManagerImpl extends ManagerBase implements VolumeManager {
             if (newDiskOffering.getDomainId() == null) {
                 // do nothing as offering is public
             } else {
-                _configMgr.checkDiskOfferingAccess(UserContext.current()
-                        .getCaller(), newDiskOffering);
+                _configMgr.checkDiskOfferingAccess(CallContext.current()
+                        .getCallingAccount(), newDiskOffering);
             }
 
             if (newDiskOffering.isCustomized()) {
@@ -1207,7 +1207,7 @@ public class VolumeManagerImpl extends ManagerBase implements VolumeManager {
         }
 
         /* does the caller have the authority to act on this volume? */
-        _accountMgr.checkAccess(UserContext.current().getCaller(), null, true,
+        _accountMgr.checkAccess(CallContext.current().getCallingAccount(), null, true,
                 volume);
 
         UserVmVO userVm = _userVmDao.findById(volume.getInstanceId());
@@ -1702,7 +1702,7 @@ public class VolumeManagerImpl extends ManagerBase implements VolumeManager {
         Long vmId = command.getVirtualMachineId();
         Long volumeId = command.getId();
         Long deviceId = command.getDeviceId();
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
 
         // Check that the volume ID is valid
         VolumeInfo volume = volFactory.getVolume(volumeId);
@@ -1901,7 +1901,7 @@ public class VolumeManagerImpl extends ManagerBase implements VolumeManager {
     @Override
     @ActionEvent(eventType = EventTypes.EVENT_VOLUME_DETACH, eventDescription = "detaching volume", async = true)
     public Volume detachVolumeFromVM(DetachVolumeCmd cmmd) {
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
         if ((cmmd.getId() == null && cmmd.getDeviceId() == null && cmmd
                 .getVirtualMachineId() == null)
                 || (cmmd.getId() != null && (cmmd.getDeviceId() != null || cmmd
@@ -2663,7 +2663,7 @@ public class VolumeManagerImpl extends ManagerBase implements VolumeManager {
 
     @Override
     public Snapshot allocSnapshot(Long volumeId, Long policyId) throws ResourceAllocationException {
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
 
         VolumeInfo volume = volFactory.getVolume(volumeId);
         if (volume == null) {
@@ -2704,7 +2704,7 @@ public class VolumeManagerImpl extends ManagerBase implements VolumeManager {
         Long volumeId = cmd.getId();
         Long zoneId = cmd.getZoneId();
         String mode = cmd.getMode();
-        Account account = UserContext.current().getCaller();
+        Account account = CallContext.current().getCallingAccount();
 
         if (!_accountMgr.isRootAdmin(account.getType()) && ApiDBUtils.isExtractionDisabled()) {
             throw new PermissionDeniedException("Extraction has been disabled by admin");

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/server/src/com/cloud/storage/secondary/SecondaryStorageManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/storage/secondary/SecondaryStorageManagerImpl.java b/server/src/com/cloud/storage/secondary/SecondaryStorageManagerImpl.java
index ec663da..9408d48 100755
--- a/server/src/com/cloud/storage/secondary/SecondaryStorageManagerImpl.java
+++ b/server/src/com/cloud/storage/secondary/SecondaryStorageManagerImpl.java
@@ -31,6 +31,7 @@ import javax.naming.ConfigurationException;
 
 import org.apache.log4j.Logger;
 
+import org.apache.cloudstack.context.CallContext;
 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.ZoneScope;
@@ -107,7 +108,6 @@ import com.cloud.template.TemplateManager;
 import com.cloud.user.Account;
 import com.cloud.user.AccountService;
 import com.cloud.user.User;
-import com.cloud.user.UserContext;
 import com.cloud.utils.DateUtil;
 import com.cloud.utils.NumbersUtil;
 import com.cloud.utils.Pair;
@@ -1208,9 +1208,9 @@ public class SecondaryStorageManagerImpl extends ManagerBase implements Secondar
         //release elastic IP here
         IPAddressVO ip = _ipAddressDao.findByAssociatedVmId(profile.getId());
         if (ip != null && ip.getSystem()) {
-            UserContext ctx = UserContext.current();
+            CallContext ctx = CallContext.current();
             try {
-                _rulesMgr.disableStaticNat(ip.getId(), ctx.getCaller(), ctx.getCallerUserId(), true);
+                _rulesMgr.disableStaticNat(ip.getId(), ctx.getCallingAccount(), ctx.getCallingUserId(), true);
             } catch (Exception ex) {
                 s_logger.warn("Failed to disable static nat and release system ip " + ip + " as a part of vm " + profile.getVirtualMachine() + " stop due to exception ", ex);
             }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/server/src/com/cloud/storage/snapshot/SnapshotManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/storage/snapshot/SnapshotManagerImpl.java b/server/src/com/cloud/storage/snapshot/SnapshotManagerImpl.java
index 2c9ef82..ddba735 100755
--- a/server/src/com/cloud/storage/snapshot/SnapshotManagerImpl.java
+++ b/server/src/com/cloud/storage/snapshot/SnapshotManagerImpl.java
@@ -30,6 +30,7 @@ import org.apache.cloudstack.api.command.user.snapshot.CreateSnapshotPolicyCmd;
 import org.apache.cloudstack.api.command.user.snapshot.DeleteSnapshotPoliciesCmd;
 import org.apache.cloudstack.api.command.user.snapshot.ListSnapshotPoliciesCmd;
 import org.apache.cloudstack.api.command.user.snapshot.ListSnapshotsCmd;
+import org.apache.cloudstack.context.CallContext;
 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.EndPoint;
@@ -44,6 +45,7 @@ import org.apache.cloudstack.engine.subsystem.api.storage.ZoneScope;
 import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao;
 import org.apache.cloudstack.storage.datastore.db.SnapshotDataStoreDao;
 import org.apache.cloudstack.storage.datastore.db.SnapshotDataStoreVO;
+
 import org.apache.log4j.Logger;
 import org.springframework.stereotype.Component;
 
@@ -109,7 +111,6 @@ import com.cloud.user.AccountVO;
 import com.cloud.user.DomainManager;
 import com.cloud.user.ResourceLimitService;
 import com.cloud.user.User;
-import com.cloud.user.UserContext;
 import com.cloud.user.dao.AccountDao;
 import com.cloud.utils.DateUtil;
 import com.cloud.utils.DateUtil.IntervalType;
@@ -280,7 +281,7 @@ public class SnapshotManagerImpl extends ManagerBase implements SnapshotManager,
 
         boolean backedUp = false;
         // does the caller have the authority to act on this volume
-        _accountMgr.checkAccess(UserContext.current().getCaller(), null, true, volume);
+        _accountMgr.checkAccess(CallContext.current().getCallingAccount(), null, true, volume);
 
         SnapshotInfo snapshot = this.snapshotFactory.getSnapshot(snapshotId, DataStoreRole.Primary);
 
@@ -427,7 +428,7 @@ public class SnapshotManagerImpl extends ManagerBase implements SnapshotManager,
     }
 
     private Long getSnapshotUserId() {
-        Long userId = UserContext.current().getCallerUserId();
+        Long userId = CallContext.current().getCallingUserId();
         if (userId == null) {
             return User.UID_SYSTEM;
         }
@@ -476,7 +477,7 @@ public class SnapshotManagerImpl extends ManagerBase implements SnapshotManager,
     @DB
     @ActionEvent(eventType = EventTypes.EVENT_SNAPSHOT_DELETE, eventDescription = "deleting snapshot", async = true)
     public boolean deleteSnapshot(long snapshotId) {
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
 
         // Verify parameters
         SnapshotVO snapshotCheck = this._snapshotDao.findById(snapshotId);
@@ -534,14 +535,14 @@ public class SnapshotManagerImpl extends ManagerBase implements SnapshotManager,
         String intervalTypeStr = cmd.getIntervalType();
         Map<String, String> tags = cmd.getTags();
         Long zoneId = cmd.getZoneId();
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
         List<Long> permittedAccounts = new ArrayList<Long>();
 
         // Verify parameters
         if (volumeId != null) {
             VolumeVO volume = _volsDao.findById(volumeId);
             if (volume != null) {
-                _accountMgr.checkAccess(UserContext.current().getCaller(), null, true, volume);
+                _accountMgr.checkAccess(CallContext.current().getCallingAccount(), null, true, volume);
             }
         }
 
@@ -712,7 +713,7 @@ public class SnapshotManagerImpl extends ManagerBase implements SnapshotManager,
             throw new InvalidParameterValueException("Failed to create snapshot policy, unable to find a volume with id " + volumeId);
         }
 
-        _accountMgr.checkAccess(UserContext.current().getCaller(), null, true, volume);
+        _accountMgr.checkAccess(CallContext.current().getCallingAccount(), null, true, volume);
 
         if (volume.getState() != Volume.State.Ready) {
             throw new InvalidParameterValueException("VolumeId: " + volumeId + " is not in " + Volume.State.Ready + " state but " + volume.getState() + ". Cannot take snapshot.");
@@ -810,7 +811,7 @@ public class SnapshotManagerImpl extends ManagerBase implements SnapshotManager,
         if (volume == null) {
             throw new InvalidParameterValueException("Unable to find a volume with id " + volumeId);
         }
-        _accountMgr.checkAccess(UserContext.current().getCaller(), null, true, volume);
+        _accountMgr.checkAccess(CallContext.current().getCallingAccount(), null, true, volume);
         Pair<List<SnapshotPolicyVO>, Integer> result = _snapshotPolicyDao.listAndCountByVolumeId(volumeId);
         return new Pair<List<? extends SnapshotPolicy>, Integer>(result.first(), result.second());
     }
@@ -847,7 +848,7 @@ public class SnapshotManagerImpl extends ManagerBase implements SnapshotManager,
     public List<SnapshotScheduleVO> findRecurringSnapshotSchedule(ListRecurringSnapshotScheduleCmd cmd) {
         Long volumeId = cmd.getVolumeId();
         Long policyId = cmd.getSnapshotPolicyId();
-        Account account = UserContext.current().getCaller();
+        Account account = CallContext.current().getCallingAccount();
 
         // Verify parameters
         VolumeVO volume = _volsDao.findById(volumeId);
@@ -1070,7 +1071,7 @@ public class SnapshotManagerImpl extends ManagerBase implements SnapshotManager,
                 throw new InvalidParameterValueException("Policy id given: " + policy + " does not belong to a valid volume");
             }
 
-            _accountMgr.checkAccess(UserContext.current().getCaller(), null, true, volume);
+            _accountMgr.checkAccess(CallContext.current().getCallingAccount(), null, true, volume);
         }
 
         boolean success = true;
@@ -1102,7 +1103,7 @@ public class SnapshotManagerImpl extends ManagerBase implements SnapshotManager,
 
     @Override
     public Snapshot allocSnapshot(Long volumeId, Long policyId) throws ResourceAllocationException {
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
         VolumeInfo volume = this.volFactory.getVolume(volumeId);
         supportedByHypervisor(volume);
 

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/server/src/com/cloud/tags/TaggedResourceManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/tags/TaggedResourceManagerImpl.java b/server/src/com/cloud/tags/TaggedResourceManagerImpl.java
index 5f25499..e90481c 100644
--- a/server/src/com/cloud/tags/TaggedResourceManagerImpl.java
+++ b/server/src/com/cloud/tags/TaggedResourceManagerImpl.java
@@ -27,9 +27,12 @@ import javax.naming.ConfigurationException;
 
 import com.cloud.vm.dao.NicDao;
 import com.cloud.network.vpc.NetworkACLItemDao;
+
 import org.apache.log4j.Logger;
 import org.springframework.stereotype.Component;
 
+import org.apache.cloudstack.context.CallContext;
+
 import com.cloud.api.query.dao.ResourceTagJoinDao;
 import com.cloud.domain.Domain;
 import com.cloud.event.ActionEvent;
@@ -56,7 +59,6 @@ import com.cloud.tags.dao.ResourceTagDao;
 import com.cloud.user.Account;
 import com.cloud.user.AccountManager;
 import com.cloud.user.DomainManager;
-import com.cloud.user.UserContext;
 import com.cloud.utils.Pair;
 import com.cloud.utils.component.ManagerBase;
 import com.cloud.utils.db.DB;
@@ -248,7 +250,7 @@ public class TaggedResourceManagerImpl extends ManagerBase implements TaggedReso
     @ActionEvent(eventType = EventTypes.EVENT_TAGS_CREATE, eventDescription = "creating resource tags")
     public List<ResourceTag> createTags(List<String> resourceIds, TaggedResourceType resourceType, 
             Map<String, String> tags, String customer) {
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
         
         List<ResourceTag> resourceTags = new ArrayList<ResourceTag>(tags.size());
         
@@ -332,7 +334,7 @@ public class TaggedResourceManagerImpl extends ManagerBase implements TaggedReso
     @DB
     @ActionEvent(eventType = EventTypes.EVENT_TAGS_DELETE, eventDescription = "deleting resource tags")
     public boolean deleteTags(List<String> resourceIds, TaggedResourceType resourceType, Map<String, String> tags) {
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
         
         SearchBuilder<ResourceTagVO> sb = _resourceTagDao.createSearchBuilder();
         sb.and().op("resourceId", sb.entity().getResourceId(), SearchCriteria.Op.IN);

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/server/src/com/cloud/template/TemplateAdapterBase.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/template/TemplateAdapterBase.java b/server/src/com/cloud/template/TemplateAdapterBase.java
index 4f29fcd..0e03cf4 100755
--- a/server/src/com/cloud/template/TemplateAdapterBase.java
+++ b/server/src/com/cloud/template/TemplateAdapterBase.java
@@ -27,9 +27,11 @@ import org.apache.cloudstack.api.command.user.iso.RegisterIsoCmd;
 import org.apache.cloudstack.api.command.user.template.DeleteTemplateCmd;
 import org.apache.cloudstack.api.command.user.template.ExtractTemplateCmd;
 import org.apache.cloudstack.api.command.user.template.RegisterTemplateCmd;
+import org.apache.cloudstack.context.CallContext;
 import org.apache.cloudstack.engine.subsystem.api.storage.DataStore;
 import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreManager;
 import org.apache.cloudstack.storage.datastore.db.TemplateDataStoreDao;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.api.ApiDBUtils;
@@ -59,7 +61,6 @@ import com.cloud.storage.dao.VMTemplateZoneDao;
 import com.cloud.user.Account;
 import com.cloud.user.AccountManager;
 import com.cloud.user.ResourceLimitService;
-import com.cloud.user.UserContext;
 import com.cloud.user.UserVO;
 import com.cloud.user.dao.AccountDao;
 import com.cloud.user.dao.UserDao;
@@ -201,7 +202,7 @@ public abstract class TemplateAdapterBase extends AdapterBase implements Templat
         	if (zone == null) {
         		throw new IllegalArgumentException("Please specify a valid zone.");
         	}
-    		Account caller = UserContext.current().getCaller();
+    		Account caller = CallContext.current().getCallingAccount();
     		if(Grouping.AllocationState.Disabled == zone.getAllocationState() && !_accountMgr.isRootAdmin(caller.getType())){
     			throw new PermissionDeniedException("Cannot perform this operation, Zone is currently disabled: "+ zoneId );
     		}
@@ -215,7 +216,7 @@ public abstract class TemplateAdapterBase extends AdapterBase implements Templat
         }
 
         Long id = _tmpltDao.getNextInSequence(Long.class, "id");
-        UserContext.current().setEventDetails("Id: " +id+ " name: " + name);
+        CallContext.current().setEventDetails("Id: " +id+ " name: " + name);
         return new TemplateProfile(id, userId, name, displayText, bits, passwordEnabled, requiresHVM, url, isPublic,
                 featured, isExtractable, imgfmt, guestOSId, zoneId, hypervisorType, templateOwner.getAccountName(), templateOwner.getDomainId(),
                 templateOwner.getAccountId(), chksum, bootable, templateTag, details, sshkeyEnabled, null, isDynamicallyScalable, templateType);
@@ -225,13 +226,13 @@ public abstract class TemplateAdapterBase extends AdapterBase implements Templat
 	@Override
 	public TemplateProfile prepare(RegisterTemplateCmd cmd) throws ResourceAllocationException {
 	    //check if the caller can operate with the template owner
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
         Account owner = _accountMgr.getAccount(cmd.getEntityOwnerId());
         _accountMgr.checkAccess(caller, null, true, owner);
 
     boolean isRouting = (cmd.isRoutingType() == null) ? false : cmd.isRoutingType();
 
-    return prepare(false, UserContext.current().getCallerUserId(), cmd.getTemplateName(), cmd.getDisplayText(),
+    return prepare(false, CallContext.current().getCallingUserId(), cmd.getTemplateName(), cmd.getDisplayText(),
                 cmd.getBits(), cmd.isPasswordEnabled(), cmd.getRequiresHvm(), cmd.getUrl(), cmd.isPublic(), cmd.isFeatured(),
                 cmd.isExtractable(), cmd.getFormat(), cmd.getOsTypeId(), cmd.getZoneId(), HypervisorType.getType(cmd.getHypervisor()),
                 cmd.getChecksum(), true, cmd.getTemplateTag(), owner, cmd.getDetails(), cmd.isSshKeyEnabled(), null, cmd.isDynamicallyScalable(),
@@ -242,11 +243,11 @@ public abstract class TemplateAdapterBase extends AdapterBase implements Templat
 	@Override
     public TemplateProfile prepare(RegisterIsoCmd cmd) throws ResourceAllocationException {
 	    //check if the caller can operate with the template owner
-	    Account caller = UserContext.current().getCaller();
+	    Account caller = CallContext.current().getCallingAccount();
 	    Account owner = _accountMgr.getAccount(cmd.getEntityOwnerId());
 	    _accountMgr.checkAccess(caller, null, true, owner);
 
-        return prepare(true, UserContext.current().getCallerUserId(), cmd.getIsoName(), cmd.getDisplayText(), 64, false,
+        return prepare(true, CallContext.current().getCallingUserId(), cmd.getIsoName(), cmd.getDisplayText(), 64, false,
                 true, cmd.getUrl(), cmd.isPublic(), cmd.isFeatured(), cmd.isExtractable(), ImageFormat.ISO.toString(), cmd.getOsTypeId(),
                 cmd.getZoneId(), HypervisorType.None, cmd.getChecksum(), cmd.isBootable(), null, owner, null, false, cmd.getImageStoreUuid(), cmd.isDynamicallyScalable(),
                 TemplateType.USER);
@@ -323,8 +324,8 @@ public abstract class TemplateAdapterBase extends AdapterBase implements Templat
 	@Override
     public TemplateProfile prepareDelete(DeleteTemplateCmd cmd) {
 		Long templateId = cmd.getId();
-		Long userId = UserContext.current().getCallerUserId();
-		Account account = UserContext.current().getCaller();
+		Long userId = CallContext.current().getCallingUserId();
+		Account account = CallContext.current().getCallingAccount();
 		Long zoneId = cmd.getZoneId();
 
 		VMTemplateVO template = _tmpltDao.findById(templateId.longValue());
@@ -348,7 +349,7 @@ public abstract class TemplateAdapterBase extends AdapterBase implements Templat
 
 	public TemplateProfile prepareExtractTemplate(ExtractTemplateCmd cmd) {
 		Long templateId = cmd.getId();
-		Long userId = UserContext.current().getCallerUserId();
+		Long userId = CallContext.current().getCallingUserId();
 	        Long zoneId = cmd.getZoneId();
 
 		VMTemplateVO template = _tmpltDao.findById(templateId.longValue());
@@ -360,8 +361,8 @@ public abstract class TemplateAdapterBase extends AdapterBase implements Templat
 
 	public TemplateProfile prepareDelete(DeleteIsoCmd cmd) {
 		Long templateId = cmd.getId();
-        Long userId = UserContext.current().getCallerUserId();
-        Account account = UserContext.current().getCaller();
+        Long userId = CallContext.current().getCallingUserId();
+        Account account = CallContext.current().getCallingAccount();
         Long zoneId = cmd.getZoneId();
 
         VMTemplateVO template = _tmpltDao.findById(templateId.longValue());

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/server/src/com/cloud/template/TemplateManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/template/TemplateManagerImpl.java b/server/src/com/cloud/template/TemplateManagerImpl.java
index 18a69ca..c7cc818 100755
--- a/server/src/com/cloud/template/TemplateManagerImpl.java
+++ b/server/src/com/cloud/template/TemplateManagerImpl.java
@@ -25,6 +25,7 @@ import java.util.UUID;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
+
 import javax.ejb.Local;
 import javax.inject.Inject;
 import javax.naming.ConfigurationException;
@@ -47,6 +48,7 @@ import org.apache.cloudstack.api.command.user.template.ListTemplatePermissionsCm
 import org.apache.cloudstack.api.command.user.template.RegisterTemplateCmd;
 import org.apache.cloudstack.api.command.user.template.UpdateTemplateCmd;
 import org.apache.cloudstack.api.command.user.template.UpdateTemplatePermissionsCmd;
+import org.apache.cloudstack.context.CallContext;
 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.EndPoint;
@@ -72,6 +74,7 @@ import org.apache.cloudstack.storage.datastore.db.StoragePoolVO;
 import org.apache.cloudstack.storage.datastore.db.TemplateDataStoreDao;
 import org.apache.cloudstack.storage.datastore.db.TemplateDataStoreVO;
 import org.apache.cloudstack.storage.image.datastore.ImageStoreEntity;
+
 import org.apache.log4j.Logger;
 import org.springframework.stereotype.Component;
 
@@ -79,7 +82,6 @@ import com.cloud.agent.AgentManager;
 import com.cloud.agent.api.Answer;
 import com.cloud.agent.api.Command;
 import com.cloud.agent.api.ComputeChecksumCommand;
-
 import com.cloud.agent.api.storage.DestroyCommand;
 import com.cloud.agent.api.to.DataTO;
 import com.cloud.agent.api.to.DiskTO;
@@ -113,7 +115,6 @@ import com.cloud.hypervisor.Hypervisor.HypervisorType;
 import com.cloud.hypervisor.HypervisorGuruManager;
 import com.cloud.projects.Project;
 import com.cloud.projects.ProjectManager;
-
 import com.cloud.resource.ResourceManager;
 import com.cloud.server.ConfigurationServer;
 import com.cloud.storage.GuestOSVO;
@@ -121,7 +122,6 @@ import com.cloud.storage.LaunchPermissionVO;
 import com.cloud.storage.Snapshot;
 import com.cloud.storage.SnapshotVO;
 import com.cloud.storage.Storage;
-
 import com.cloud.storage.Storage.ImageFormat;
 import com.cloud.storage.Storage.TemplateType;
 import com.cloud.storage.DataStoreRole;
@@ -133,7 +133,6 @@ import com.cloud.storage.StoragePoolStatus;
 import com.cloud.storage.TemplateProfile;
 import com.cloud.storage.Upload;
 import com.cloud.storage.VMTemplateZoneVO;
-
 import com.cloud.storage.VMTemplateHostVO;
 import com.cloud.storage.VMTemplateStoragePoolVO;
 import com.cloud.storage.VMTemplateStorageResourceAssoc;
@@ -157,14 +156,12 @@ import com.cloud.storage.download.DownloadMonitor;
 import com.cloud.storage.secondary.SecondaryStorageVmManager;
 import com.cloud.storage.upload.UploadMonitor;
 import com.cloud.template.TemplateAdapter.TemplateAdapterType;
-
 import com.cloud.user.Account;
 import com.cloud.user.AccountManager;
 import com.cloud.user.AccountService;
 import com.cloud.user.AccountVO;
 import com.cloud.user.ResourceLimitService;
 import com.cloud.user.User;
-import com.cloud.user.UserContext;
 import com.cloud.user.dao.AccountDao;
 import com.cloud.user.dao.UserAccountDao;
 import com.cloud.user.dao.UserDao;
@@ -332,7 +329,7 @@ public class TemplateManagerImpl extends ManagerBase implements TemplateManager,
     @Override
     @ActionEvent(eventType = EventTypes.EVENT_TEMPLATE_CREATE, eventDescription = "creating template")
     public VirtualMachineTemplate registerTemplate(RegisterTemplateCmd cmd) throws URISyntaxException, ResourceAllocationException {
-        Account account = UserContext.current().getCaller();
+        Account account = CallContext.current().getCallingAccount();
         if (cmd.getTemplateTag() != null) {
             if (!_accountService.isRootAdmin(account.getType())) {
                 throw new PermissionDeniedException("Parameter templatetag can only be specified by a Root Admin, permission denied");
@@ -374,7 +371,7 @@ public class TemplateManagerImpl extends ManagerBase implements TemplateManager,
     @Override
     @ActionEvent(eventType = EventTypes.EVENT_ISO_EXTRACT, eventDescription = "extracting ISO", async = true)
     public String extract(ExtractIsoCmd cmd) {
-        Account account = UserContext.current().getCaller();
+        Account account = CallContext.current().getCallingAccount();
         Long templateId = cmd.getId();
         Long zoneId = cmd.getZoneId();
         String url = cmd.getUrl();
@@ -387,7 +384,7 @@ public class TemplateManagerImpl extends ManagerBase implements TemplateManager,
     @Override
     @ActionEvent(eventType = EventTypes.EVENT_TEMPLATE_EXTRACT, eventDescription = "extracting template", async = true)
     public String extract(ExtractTemplateCmd cmd) {
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
         Long templateId = cmd.getId();
         Long zoneId = cmd.getZoneId();
         String url = cmd.getUrl();
@@ -412,7 +409,7 @@ public class TemplateManagerImpl extends ManagerBase implements TemplateManager,
             throw new InvalidParameterValueException("Unable to find template id=" + templateId);
         }
 
-        _accountMgr.checkAccess(UserContext.current().getCaller(), AccessType.ModifyEntry, true, vmTemplate);
+        _accountMgr.checkAccess(CallContext.current().getCallingAccount(), AccessType.ModifyEntry, true, vmTemplate);
 
         prepareTemplateInAllStoragePools(vmTemplate, zoneId);
         return vmTemplate;
@@ -677,10 +674,10 @@ public class TemplateManagerImpl extends ManagerBase implements TemplateManager,
     @ActionEvent(eventType = EventTypes.EVENT_TEMPLATE_COPY, eventDescription = "copying template", async = true)
     public VirtualMachineTemplate copyTemplate(CopyTemplateCmd cmd) throws StorageUnavailableException, ResourceAllocationException {
         Long templateId = cmd.getId();
-        Long userId = UserContext.current().getCallerUserId();
+        Long userId = CallContext.current().getCallingUserId();
         Long sourceZoneId = cmd.getSourceZoneId();
         Long destZoneId = cmd.getDestinationZoneId();
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
 
         // Verify parameters
         if (sourceZoneId.equals(destZoneId)) {
@@ -888,8 +885,8 @@ public class TemplateManagerImpl extends ManagerBase implements TemplateManager,
     @Override
     @ActionEvent(eventType = EventTypes.EVENT_ISO_DETACH, eventDescription = "detaching ISO", async = true)
     public boolean detachIso(long vmId) {
-        Account caller = UserContext.current().getCaller();
-        Long userId = UserContext.current().getCallerUserId();
+        Account caller = CallContext.current().getCallingAccount();
+        Long userId = CallContext.current().getCallingUserId();
 
         // Verify input parameters
         UserVmVO vmInstanceCheck = _userVmDao.findById(vmId);
@@ -908,7 +905,7 @@ public class TemplateManagerImpl extends ManagerBase implements TemplateManager,
         if (isoId == null) {
             throw new InvalidParameterValueException("The specified VM has no ISO attached to it.");
         }
-        UserContext.current().setEventDetails("Vm Id: " + vmId + " ISO Id: " + isoId);
+        CallContext.current().setEventDetails("Vm Id: " + vmId + " ISO Id: " + isoId);
 
         State vmState = userVM.getState();
         if (vmState != State.Running && vmState != State.Stopped) {
@@ -927,8 +924,8 @@ public class TemplateManagerImpl extends ManagerBase implements TemplateManager,
     @Override
     @ActionEvent(eventType = EventTypes.EVENT_ISO_ATTACH, eventDescription = "attaching ISO", async = true)
     public boolean attachIso(long isoId, long vmId) {
-        Account caller = UserContext.current().getCaller();
-        Long userId = UserContext.current().getCallerUserId();
+        Account caller = CallContext.current().getCallingAccount();
+        Long userId = CallContext.current().getCallingUserId();
 
         // Verify input parameters
         UserVmVO vm = _userVmDao.findById(vmId);
@@ -1045,7 +1042,7 @@ public class TemplateManagerImpl extends ManagerBase implements TemplateManager,
     @ActionEvent(eventType = EventTypes.EVENT_TEMPLATE_DELETE, eventDescription = "deleting template", async = true)
     public boolean deleteTemplate(DeleteTemplateCmd cmd) {
         Long templateId = cmd.getId();
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
 
         VirtualMachineTemplate template = getTemplate(templateId);
         if (template == null) {
@@ -1067,7 +1064,7 @@ public class TemplateManagerImpl extends ManagerBase implements TemplateManager,
     @ActionEvent(eventType = EventTypes.EVENT_ISO_DELETE, eventDescription = "deleting iso", async = true)
     public boolean deleteIso(DeleteIsoCmd cmd) {
         Long templateId = cmd.getId();
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
         Long zoneId = cmd.getZoneId();
 
         VirtualMachineTemplate template = getTemplate(templateId);
@@ -1112,7 +1109,7 @@ public class TemplateManagerImpl extends ManagerBase implements TemplateManager,
 
     @Override
     public List<String> listTemplatePermissions(BaseListTemplateOrIsoPermissionsCmd cmd) {
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
         Long id = cmd.getId();
 
         if (id.equals(Long.valueOf(1))) {
@@ -1163,7 +1160,7 @@ public class TemplateManagerImpl extends ManagerBase implements TemplateManager,
 
         // Input validation
         Long id = cmd.getId();
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
         List<String> accountNames = cmd.getAccountNames();
         List<Long> projectIds = cmd.getProjectIds();
         Boolean isFeatured = cmd.isFeatured();
@@ -1325,7 +1322,7 @@ public class TemplateManagerImpl extends ManagerBase implements TemplateManager,
     @DB
     @ActionEvent(eventType = EventTypes.EVENT_TEMPLATE_CREATE, eventDescription = "creating template", async = true)
     public VirtualMachineTemplate createPrivateTemplate(CreateTemplateCmd command) throws CloudRuntimeException {
-        Long userId = UserContext.current().getCallerUserId();
+        Long userId = CallContext.current().getCallingUserId();
         if (userId == null) {
             userId = User.UID_SYSTEM;
         }
@@ -1433,9 +1430,9 @@ public class TemplateManagerImpl extends ManagerBase implements TemplateManager,
     @Override
     @ActionEvent(eventType = EventTypes.EVENT_TEMPLATE_CREATE, eventDescription = "creating template", create = true)
     public VMTemplateVO createPrivateTemplateRecord(CreateTemplateCmd cmd, Account templateOwner) throws ResourceAllocationException {
-        Long userId = UserContext.current().getCallerUserId();
+        Long userId = CallContext.current().getCallingUserId();
 
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
         boolean isAdmin = (isAdmin(caller.getType()));
 
         _accountMgr.checkAccess(caller, null, true, templateOwner);
@@ -1687,7 +1684,7 @@ public class TemplateManagerImpl extends ManagerBase implements TemplateManager,
         Boolean isRoutingTemplate = cmd.isRoutingType();
         Boolean bootable = cmd.isBootable();
         Integer sortKey = cmd.getSortKey();
-        Account account = UserContext.current().getCaller();
+        Account account = CallContext.current().getCallingAccount();
 
         // verify that template exists
         VMTemplateVO template = _tmpltDao.findById(id);

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/server/src/com/cloud/usage/UsageServiceImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/usage/UsageServiceImpl.java b/server/src/com/cloud/usage/UsageServiceImpl.java
index ae0a585..e6e6ab9 100755
--- a/server/src/com/cloud/usage/UsageServiceImpl.java
+++ b/server/src/com/cloud/usage/UsageServiceImpl.java
@@ -30,8 +30,10 @@ import javax.naming.ConfigurationException;
 import org.apache.cloudstack.api.command.admin.usage.GenerateUsageRecordsCmd;
 import org.apache.cloudstack.api.command.admin.usage.GetUsageRecordsCmd;
 import org.apache.cloudstack.api.response.UsageTypeResponse;
+import org.apache.cloudstack.context.CallContext;
 import org.apache.cloudstack.usage.UsageService;
 import org.apache.cloudstack.usage.UsageTypes;
+
 import org.apache.log4j.Logger;
 import org.springframework.stereotype.Component;
 
@@ -46,7 +48,6 @@ import com.cloud.usage.dao.UsageDao;
 import com.cloud.usage.dao.UsageJobDao;
 import com.cloud.user.Account;
 import com.cloud.user.AccountVO;
-import com.cloud.user.UserContext;
 import com.cloud.user.dao.AccountDao;
 import com.cloud.utils.component.Manager;
 import com.cloud.utils.component.ManagerBase;
@@ -115,7 +116,7 @@ public class UsageServiceImpl extends ManagerBase implements UsageService, Manag
         Long domainId = cmd.getDomainId();
         String accountName = cmd.getAccountName();
         Account userAccount = null;
-        Account caller = (Account)UserContext.current().getCaller();
+        Account caller = (Account)CallContext.current().getCallingAccount();
         Long usageType = cmd.getUsageType();
         Long projectId = cmd.getProjectId();
         


[40/50] [abbrv] git commit: updated refs/heads/ldapplugin to 7bc705e

Posted by ch...@apache.org.
Cloudstack-2150 DB table entries of phisical network is not proper.Shows Duplicate entries Cloudstack-2980 Adding a VLAN range that overlaps with two existing ranges results in inconsistent DB entries

Signed-off-by: Abhinandan Prateek <ap...@apache.org>


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

Branch: refs/heads/ldapplugin
Commit: f76bf5b053894b400f8c196923fe0e8804b64aec
Parents: 21b1c94
Author: Bharat Kumar <bh...@citrix.com>
Authored: Wed Jul 17 13:05:11 2013 +0530
Committer: Abhinandan Prateek <ap...@apache.org>
Committed: Wed Jul 17 15:22:33 2013 +0530

----------------------------------------------------------------------
 .../src/com/cloud/dc/dao/DataCenterDao.java     |   2 +-
 .../src/com/cloud/dc/dao/DataCenterDaoImpl.java |   4 +-
 .../src/com/cloud/dc/dao/DataCenterVnetDao.java |   4 +-
 .../com/cloud/dc/dao/DataCenterVnetDaoImpl.java |  28 +++-
 .../com/cloud/network/NetworkServiceImpl.java   | 158 +++++++------------
 .../network/UpdatePhysicalNetworkTest.java      |  11 +-
 6 files changed, 87 insertions(+), 120 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/f76bf5b0/engine/schema/src/com/cloud/dc/dao/DataCenterDao.java
----------------------------------------------------------------------
diff --git a/engine/schema/src/com/cloud/dc/dao/DataCenterDao.java b/engine/schema/src/com/cloud/dc/dao/DataCenterDao.java
index ed6e696..e5e2cdd 100755
--- a/engine/schema/src/com/cloud/dc/dao/DataCenterDao.java
+++ b/engine/schema/src/com/cloud/dc/dao/DataCenterDao.java
@@ -70,7 +70,7 @@ public interface DataCenterDao extends GenericDao<DataCenterVO, Long> {
 
 	int countZoneVlans(long dcId, boolean onlyCountAllocated);
     
-    void addVnet(long dcId, long physicalNetworkId, int start, int end);
+    void addVnet(long dcId, long physicalNetworkId, List<String> vnets);
     void deleteVnet(long physicalNetworkId);
     List<DataCenterVnetVO> listAllocatedVnets(long physicalNetworkId);
 

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/f76bf5b0/engine/schema/src/com/cloud/dc/dao/DataCenterDaoImpl.java
----------------------------------------------------------------------
diff --git a/engine/schema/src/com/cloud/dc/dao/DataCenterDaoImpl.java b/engine/schema/src/com/cloud/dc/dao/DataCenterDaoImpl.java
index 503306f..47b5522 100755
--- a/engine/schema/src/com/cloud/dc/dao/DataCenterDaoImpl.java
+++ b/engine/schema/src/com/cloud/dc/dao/DataCenterDaoImpl.java
@@ -268,8 +268,8 @@ public class DataCenterDaoImpl extends GenericDaoBase<DataCenterVO, Long> implem
     }
 
     @Override
-    public void addVnet(long dcId, long physicalNetworkId, int start, int end) {
-        _vnetAllocDao.add(dcId, physicalNetworkId, start, end);
+    public void addVnet(long dcId, long physicalNetworkId, List<String> vnets) {
+        _vnetAllocDao.add(dcId, physicalNetworkId, vnets);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/f76bf5b0/engine/schema/src/com/cloud/dc/dao/DataCenterVnetDao.java
----------------------------------------------------------------------
diff --git a/engine/schema/src/com/cloud/dc/dao/DataCenterVnetDao.java b/engine/schema/src/com/cloud/dc/dao/DataCenterVnetDao.java
index 778498d..e2e6b79 100644
--- a/engine/schema/src/com/cloud/dc/dao/DataCenterVnetDao.java
+++ b/engine/schema/src/com/cloud/dc/dao/DataCenterVnetDao.java
@@ -29,7 +29,7 @@ public interface DataCenterVnetDao extends GenericDao<DataCenterVnetVO, Long> {
     public int countZoneVlans(long dcId, boolean onlyCountAllocated);    
     public List<DataCenterVnetVO> findVnet(long dcId, long physicalNetworkId, String vnet);
     
-    public void add(long dcId, long physicalNetworkId, int start, int end);
+    public void add(long dcId, long physicalNetworkId, List<String> vnets);
     
     public void delete(long physicalNetworkId);
 
@@ -46,4 +46,6 @@ public interface DataCenterVnetDao extends GenericDao<DataCenterVnetVO, Long> {
     public int countVnetsAllocatedToAccount(long dcId, long accountId);
 
     public int countVnetsDedicatedToAccount(long dcId, long accountId);
+
+    List<String> listVnetsByPhysicalNetworkAndDataCenter(long dcId, long physicalNetworkId);
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/f76bf5b0/engine/schema/src/com/cloud/dc/dao/DataCenterVnetDaoImpl.java
----------------------------------------------------------------------
diff --git a/engine/schema/src/com/cloud/dc/dao/DataCenterVnetDaoImpl.java b/engine/schema/src/com/cloud/dc/dao/DataCenterVnetDaoImpl.java
index e97f2c6..ced2982 100755
--- a/engine/schema/src/com/cloud/dc/dao/DataCenterVnetDaoImpl.java
+++ b/engine/schema/src/com/cloud/dc/dao/DataCenterVnetDaoImpl.java
@@ -64,6 +64,7 @@ public class DataCenterVnetDaoImpl extends GenericDaoBase<DataCenterVnetVO, Long
     private final GenericSearchBuilder<DataCenterVnetVO, Integer> countVnetsAllocatedToAccount;
     protected GenericSearchBuilder<DataCenterVnetVO, Integer> countVnetsDedicatedToAccount;
     protected SearchBuilder<AccountGuestVlanMapVO> AccountGuestVlanMapSearch;
+    protected GenericSearchBuilder<DataCenterVnetVO, String> ListAllVnetSearch;
 
     @Inject protected AccountGuestVlanMapDao _accountGuestVlanMapDao;
     
@@ -112,15 +113,15 @@ public class DataCenterVnetDaoImpl extends GenericDaoBase<DataCenterVnetVO, Long
     }    
     
     @DB
-    public void add(long dcId, long physicalNetworkId, int start, int end) {
+    public void add(long dcId, long physicalNetworkId, List<String> vnets) {
         String insertVnet = "INSERT INTO `cloud`.`op_dc_vnet_alloc` (vnet, data_center_id, physical_network_id) VALUES ( ?, ?, ?)";
         
         Transaction txn = Transaction.currentTxn();
         try {
             txn.start();
             PreparedStatement stmt = txn.prepareAutoCloseStatement(insertVnet);
-            for (int i = start; i <= end; i++) {
-                stmt.setString(1, String.valueOf(i));
+            for (int i =0; i <= vnets.size()-1; i++) {
+                stmt.setString(1, vnets.get(i));
                 stmt.setLong(2, dcId);
                 stmt.setLong(3, physicalNetworkId);
                 stmt.addBatch();
@@ -128,11 +129,7 @@ public class DataCenterVnetDaoImpl extends GenericDaoBase<DataCenterVnetVO, Long
             stmt.executeBatch();
             txn.commit();
         } catch (SQLException e) {
-           if (!e.getMessage().contains("Duplicate")){
-               txn.rollback();
-               txn.close();
-               throw new CloudRuntimeException("Exception caught adding vnet ", e);
-           }
+            throw new CloudRuntimeException(e.getMessage());
         }
     }
 
@@ -228,6 +225,14 @@ public class DataCenterVnetDaoImpl extends GenericDaoBase<DataCenterVnetVO, Long
     }
 
     @Override
+    public List<String> listVnetsByPhysicalNetworkAndDataCenter(long dcId, long physicalNetworkId){
+        SearchCriteria<String> sc = ListAllVnetSearch.create();
+        sc.setParameters("dc", dcId );
+        sc.setParameters("physicalNetworkId", physicalNetworkId);
+        return customSearch(sc, null);
+    }
+
+    @Override
     public boolean configure(String name, Map<String, Object> params) throws ConfigurationException {
         boolean result = super.configure(name, params);
 
@@ -314,5 +319,12 @@ public class DataCenterVnetDaoImpl extends GenericDaoBase<DataCenterVnetVO, Long
         countVnetsAllocatedToAccount.and("accountId", countVnetsAllocatedToAccount.entity().getAccountId(), SearchCriteria.Op.EQ);
         countVnetsAllocatedToAccount.select(null, Func.COUNT, countVnetsAllocatedToAccount.entity().getId());
         countVnetsAllocatedToAccount.done();
+
+        ListAllVnetSearch  = createSearchBuilder(String.class);
+        ListAllVnetSearch.select(null, Func.NATIVE, ListAllVnetSearch.entity().getVnet());
+        ListAllVnetSearch.and("dc", ListAllVnetSearch.entity().getDataCenterId(), Op.EQ);
+        ListAllVnetSearch.and("physicalNetworkId", ListAllVnetSearch.entity().getPhysicalNetworkId(), Op.EQ);
+        ListAllVnetSearch.done();
+
     }
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/f76bf5b0/server/src/com/cloud/network/NetworkServiceImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/NetworkServiceImpl.java b/server/src/com/cloud/network/NetworkServiceImpl.java
index ad437e5..f1f71ca 100755
--- a/server/src/com/cloud/network/NetworkServiceImpl.java
+++ b/server/src/com/cloud/network/NetworkServiceImpl.java
@@ -2479,8 +2479,14 @@ public class NetworkServiceImpl extends ManagerBase implements  NetworkService {
             pNetwork = _physicalNetworkDao.persist(pNetwork);
 
             // Add vnet entries for the new zone if zone type is Advanced
+
+            List <String> vnets = new ArrayList<String>();
+            for (Integer i= vnetStart; i<= vnetEnd; i++ ) {
+                vnets.add(i.toString());
+            }
+
             if (vnetRange != null) {
-                _dcDao.addVnet(zone.getId(), pNetwork.getId(), vnetStart, vnetEnd);
+                _dcDao.addVnet(zone.getId(), pNetwork.getId(), vnets);
             }
 
             // add VirtualRouter as the default network service provider
@@ -2530,7 +2536,7 @@ public class NetworkServiceImpl extends ManagerBase implements  NetworkService {
     @Override
     @DB
     @ActionEvent(eventType = EventTypes.EVENT_PHYSICAL_NETWORK_UPDATE, eventDescription = "updating physical network", async = true)
-    public PhysicalNetwork updatePhysicalNetwork(Long id, String networkSpeed, List<String> tags, String newVnetRangeString, String state, String removeVlan) {
+    public PhysicalNetwork updatePhysicalNetwork(Long id, String networkSpeed, List<String> tags, String newVnetRange, String state, String removeVlan) {
 
         // verify input parameters
         PhysicalNetworkVO network = _physicalNetworkDao.findById(id);
@@ -2547,7 +2553,7 @@ public class NetworkServiceImpl extends ManagerBase implements  NetworkService {
             ex.addProxyObject(String.valueOf(network.getDataCenterId()), "dataCenterId");
             throw ex;
         }
-        if (newVnetRangeString != null) {
+        if (newVnetRange!= null) {
             if (zone.getNetworkType() == NetworkType.Basic
                     || (zone.getNetworkType() == NetworkType.Advanced && zone.isSecurityGroupEnabled())) {
                 throw new InvalidParameterValueException("Can't add vnet range to the physical network in the zone that supports " + zone.getNetworkType() + " network, Security Group enabled: "
@@ -2557,7 +2563,7 @@ public class NetworkServiceImpl extends ManagerBase implements  NetworkService {
 
         if (removeVlan != null){
             List<Integer> tokens = processVlanRange(network,removeVlan);
-            boolean result = removeVlanRange(network, tokens.get(0), tokens.get(1));
+            removeVlanRange(network, tokens.get(0), tokens.get(1));
         }
 
         if (tags != null && tags.size() > 1) {
@@ -2589,119 +2595,63 @@ public class NetworkServiceImpl extends ManagerBase implements  NetworkService {
         boolean AddVnet = true;
         List<Pair<Integer, Integer>> vnetsToAdd = new ArrayList<Pair<Integer, Integer>>();
 
-        if (newVnetRangeString != null) {
-            Integer newStartVnet = 0;
-            Integer newEndVnet = 0;
-            List<Integer> tokens = processVlanRange(network, newVnetRangeString);
-            newStartVnet = tokens.get(0);
-            newEndVnet = tokens.get(1);
-            Integer j=0;
-            List <Pair <Integer,Integer>> existingRanges = network.getVnet();
-            if (!existingRanges.isEmpty()) {
-                for (; j < existingRanges.size(); j++){
-                    int existingStartVnet = existingRanges.get(j).first();
-                    int existingEndVnet = existingRanges.get(j).second();
-
-                    // check if vnet is being extended
-                    if (newStartVnet.intValue() >= existingStartVnet & newEndVnet.intValue() <= existingEndVnet) {
-                        throw new InvalidParameterValueException("The vlan range you trying to add already exists.");
-                    }
-
-                    if (newStartVnet < existingStartVnet & newEndVnet+1 >= existingStartVnet & newEndVnet <= existingEndVnet) {
-                        vnetsToAdd.add(new Pair<Integer, Integer>(newStartVnet, existingStartVnet - 1));
-                        existingRanges.get(j).first(newStartVnet);
-                        AddVnet = false;
-                        break;
+        List<Integer> tokens = null;
+        List<String>  add_Vnet = null;
+        if (newVnetRange != null) {
+            tokens = processVlanRange(network, newVnetRange);
+            HashSet<String> vnetsInDb = new HashSet<String>();
+            vnetsInDb.addAll(_datacneter_vnet.listVnetsByPhysicalNetworkAndDataCenter(network.getDataCenterId(), id));
+            HashSet<String> tempVnets = new HashSet<String>();
+            tempVnets.addAll(vnetsInDb);
+            for (Integer i = tokens.get(0); i <= tokens.get(1); i++) {
+                tempVnets.add(i.toString());
+                }
+            tempVnets.removeAll(vnetsInDb);
+            if (tempVnets.isEmpty()) {
+                throw new InvalidParameterValueException("The vlan range you are trying to add already exists.");
+                }
+            vnetsInDb.addAll(tempVnets);
+            add_Vnet = new ArrayList<String>();
+            add_Vnet.addAll(tempVnets);
+            List<String> sortedList = new ArrayList<String>(vnetsInDb);
+            Collections.sort(sortedList, new Comparator<String>() {
+            public int compare(String s1, String s2) {
+                        return Integer.valueOf(s1).compareTo(Integer.valueOf(s2));
                     }
-
-                    else if (newStartVnet > existingStartVnet & newStartVnet-1 <= existingEndVnet & newEndVnet >= existingEndVnet) {
-                        vnetsToAdd.add(new Pair<Integer, Integer>(existingEndVnet + 1, newEndVnet));
-                        existingRanges.get(j).second(newEndVnet);
-                        AddVnet = false;
-                        break;
-                    }
-
-                    else if (newStartVnet< existingStartVnet & newEndVnet > existingEndVnet){
-                        vnetsToAdd.add(new Pair<Integer, Integer>(newStartVnet,existingStartVnet-1));
-                        vnetsToAdd.add(new Pair<Integer, Integer>(existingEndVnet+1,newEndVnet));
-                        existingRanges.get(j).first(newStartVnet);
-                        existingRanges.get(j).second(newEndVnet);
-                        break;
+                });
+            //build the vlan string form the allocated vlan list.
+            String vnetRange = "";
+            String startvnet = sortedList.get(0);
+            String endvnet = "";
+            for ( int i =0; i < sortedList.size()-1; i++ ) {
+                if (Integer.valueOf(sortedList.get(i+1)) - Integer.valueOf(sortedList.get(i)) > 1) {
+                    endvnet = sortedList.get(i);
+                    vnetRange=vnetRange + startvnet+"-"+endvnet+";";
+                    startvnet = sortedList.get(i+1);
                     }
                 }
-
+            endvnet = sortedList.get(sortedList.size()-1);
+            vnetRange=vnetRange + startvnet+"-"+endvnet+";";
+            vnetRange = vnetRange.substring(0,vnetRange.length()-1);
+            network.setVnet(vnetRange);
             }
-            if (AddVnet){
-                    vnetsToAdd.add(new Pair<Integer, Integer>(newStartVnet, newEndVnet));
-                    existingRanges.add(new Pair<Integer, Integer>(newStartVnet,newEndVnet));
-            }
-
-            Map <Integer,Integer> vnetMap = new HashMap<Integer, Integer>(existingRanges.size());
-            Map <Integer, Integer> IndexMap = new HashMap<Integer, Integer>(existingRanges.size());
-            for (int i=0; i< existingRanges.size(); i++){
-                 vnetMap.put(existingRanges.get(i).first(),existingRanges.get(i).second());
-                 IndexMap.put(existingRanges.get(i).first(),i);
-            }
-
-            Integer value;
-            Integer index;
-            String vnetString = "";
-            for (int i=0; i < existingRanges.size(); i++){
-                 value = vnetMap.get((existingRanges.get(i).second()+1));
-                 if (value != null) {
-                     vnetMap.remove((existingRanges.get(i).second()+1));
-                     vnetMap.remove(existingRanges.get(i).first());
-                     vnetMap.put(existingRanges.get(i).first(),value);
-                     existingRanges.add(new Pair<Integer,Integer>(existingRanges.get(i).first(),value));
-                     index = IndexMap.get(existingRanges.get(i).second()+1);
-                     existingRanges.get(index).first(-1);
-                     existingRanges.get(index).second(-1);
-                     existingRanges.get(i).first(-1);
-                     existingRanges.get(i).second(-1);
-                 }
-                value = vnetMap.get((existingRanges.get(i).second()));
-                if (value != null && ( (existingRanges.get(i).second()) != (existingRanges.get(i).first()) )) {
-                    vnetMap.remove((existingRanges.get(i).second()));
-                    vnetMap.remove(existingRanges.get(i).first());
-                    vnetMap.put(existingRanges.get(i).first(),value);
-                    existingRanges.add(new Pair<Integer,Integer>(existingRanges.get(i).first(),value));
-                    index = IndexMap.get(existingRanges.get(i).second());
-                    existingRanges.get(index).first(-1);
-                    existingRanges.get(index).second(-1);
-                    existingRanges.get(i).first(-1);
-                    existingRanges.get(i).second(-1);
-                }
-            }
-
-            if (newVnetRangeString != null) {
-               for (Pair<Integer,Integer> vnetRange : existingRanges ){
-                    value=vnetMap.get(vnetRange.first());
-                    if (value != null){
-                        vnetString = vnetString+vnetRange.first().toString()+"-"+value.toString()+";";
-                    }
-               }
-               if (vnetString.length() > 0 && vnetString.charAt(vnetString.length()-1)==';') {
-                   vnetString = vnetString.substring(0, vnetString.length()-1);
-               }
-               network.setVnet(vnetString);
-            }
-
-            for (Pair<Integer, Integer> vnetToAdd : vnetsToAdd) {
-                s_logger.debug("Adding vnet range " + vnetToAdd.first() + "-" + vnetToAdd.second() + " for the physicalNetwork id= " + id + " and zone id=" + network.getDataCenterId()
+        Transaction txn = Transaction.currentTxn();
+        txn.start();
+        if (add_Vnet != null) {
+            s_logger.debug("Adding vnet range " + tokens.get(0).toString() + "-" + tokens.get(1).toString() + " for the physicalNetwork id= " + id + " and zone id=" + network.getDataCenterId()
                     + " as a part of updatePhysicalNetwork call");
-                _dcDao.addVnet(network.getDataCenterId(), network.getId(), vnetToAdd.first(), vnetToAdd.second());
-            }
+            _dcDao.addVnet(network.getDataCenterId(), network.getId(), add_Vnet);
         }
-
         _physicalNetworkDao.update(id, network);
+        txn.commit();
 
         return network;
     }
 
-    private List<Integer> processVlanRange(PhysicalNetworkVO network, String removeVlan) {
+    private List<Integer> processVlanRange(PhysicalNetworkVO network, String vlan) {
         Integer StartVnet;
         Integer EndVnet;
-        String[] VnetRange = removeVlan.split("-");
+        String[] VnetRange = vlan.split("-");
 
         // Init with [min,max] of VLAN. Actually 0x000 and 0xFFF are reserved by IEEE, shoudn't be used.
         long minVnet = MIN_VLAN_ID;

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/f76bf5b0/server/test/com/cloud/network/UpdatePhysicalNetworkTest.java
----------------------------------------------------------------------
diff --git a/server/test/com/cloud/network/UpdatePhysicalNetworkTest.java b/server/test/com/cloud/network/UpdatePhysicalNetworkTest.java
index 25c023e..e3fc36a 100644
--- a/server/test/com/cloud/network/UpdatePhysicalNetworkTest.java
+++ b/server/test/com/cloud/network/UpdatePhysicalNetworkTest.java
@@ -18,6 +18,7 @@ package com.cloud.network;
 import com.cloud.capacity.CapacityManagerImpl;
 import com.cloud.dc.DataCenterVO;
 import com.cloud.dc.dao.DataCenterDao;
+import com.cloud.dc.dao.DataCenterVnetDao;
 import com.cloud.network.NetworkServiceImpl;
 import com.cloud.network.dao.PhysicalNetworkDao;
 import com.cloud.network.dao.PhysicalNetworkVO;
@@ -40,16 +41,18 @@ import static org.mockito.Mockito.when;
 
 public class UpdatePhysicalNetworkTest {
     private PhysicalNetworkDao _physicalNetworkDao = mock(PhysicalNetworkDao.class);
+    private DataCenterVnetDao _DatacenterVnetDao = mock(DataCenterVnetDao.class);
     private DataCenterDao _datacenterDao = mock(DataCenterDao.class);
     private DataCenterVO datacentervo = mock(DataCenterVO.class);
     private PhysicalNetworkVO physicalNetworkVO = mock(PhysicalNetworkVO.class);
-    List<Pair<Integer,Integer>> existingRange = new ArrayList<Pair<Integer, Integer>>();
+    List<String> existingRange = new ArrayList<String>();
     ArgumentCaptor<String> argumentCaptor =  ArgumentCaptor.forClass(String.class);
 
     public NetworkServiceImpl setUp() {
         NetworkServiceImpl networkService = new NetworkServiceImpl();
         ((NetworkServiceImpl)networkService)._dcDao= _datacenterDao;
         networkService._physicalNetworkDao = _physicalNetworkDao;
+        networkService._datacneter_vnet = _DatacenterVnetDao;
         return networkService;
     }
 
@@ -57,15 +60,15 @@ public class UpdatePhysicalNetworkTest {
     public void updatePhysicalNetworkTest(){
         Transaction txn = Transaction.open("updatePhysicalNetworkTest");
         NetworkServiceImpl networkService = setUp();
-        existingRange.add(new Pair<Integer, Integer>(520, 524));
+        existingRange.add("524");
         when(_physicalNetworkDao.findById(anyLong())).thenReturn(physicalNetworkVO);
         when(_datacenterDao.findById(anyLong())).thenReturn(datacentervo);
         when(_physicalNetworkDao.update(anyLong(), any(physicalNetworkVO.getClass()))).thenReturn(true);
-        when(physicalNetworkVO.getVnet()).thenReturn(existingRange);
+        when(_DatacenterVnetDao.listVnetsByPhysicalNetworkAndDataCenter(anyLong(), anyLong())).thenReturn(existingRange);
         networkService.updatePhysicalNetwork(1l, null, null, "525-530", null, null);
         txn.close("updatePhysicalNetworkTest");
         verify(physicalNetworkVO).setVnet(argumentCaptor.capture());
-        assertEquals("520-530", argumentCaptor.getValue());
+        assertEquals("524-530", argumentCaptor.getValue());
     }
 
 }


[28/50] [abbrv] git commit: updated refs/heads/ldapplugin to 7bc705e

Posted by ch...@apache.org.
edit changes


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

Branch: refs/heads/ldapplugin
Commit: d95d55af6858d2475804c4084c606063cae94161
Parents: bf32776
Author: radhikap <ra...@citrix.com>
Authored: Wed Jul 17 09:51:24 2013 +0530
Committer: radhikap <ra...@citrix.com>
Committed: Wed Jul 17 09:52:16 2013 +0530

----------------------------------------------------------------------
 docs/en-US/added-API-commands-4-1.xml | 1 -
 1 file changed, 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/d95d55af/docs/en-US/added-API-commands-4-1.xml
----------------------------------------------------------------------
diff --git a/docs/en-US/added-API-commands-4-1.xml b/docs/en-US/added-API-commands-4-1.xml
index 0beb104..006c65a 100644
--- a/docs/en-US/added-API-commands-4-1.xml
+++ b/docs/en-US/added-API-commands-4-1.xml
@@ -69,6 +69,5 @@
     <listitem><para>removeRegion (Delete a region)</para></listitem>
     <listitem><para>updateRegion (Modify attributes of a region)</para></listitem>
     <listitem><para>listRegions (List regions)</para></listitem>
-    <listitem><para></para></listitem>
   </itemizedlist>
 </section>


[13/50] [abbrv] git commit: updated refs/heads/ldapplugin to 7bc705e

Posted by ch...@apache.org.
UserContext switched to CallContext.  Added generic storage mechanism for other code to carry information throughout a call.  Made the calling User and Account a must have.  Added an interface to carry entities in error.  Fixed up the code.  Part of the vmsync branch


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

Branch: refs/heads/ldapplugin
Commit: 11e1e585b16562f02f7671d928cb34aafebeab98
Parents: fa9ca72
Author: ahuang <al...@citrix.com>
Authored: Tue Jul 16 02:41:08 2013 -0700
Committer: ahuang <al...@citrix.com>
Committed: Tue Jul 16 11:24:21 2013 -0700

----------------------------------------------------------------------
 api/src/com/cloud/user/UserContext.java         | 163 -------------
 .../com/cloud/user/UserContextInitializer.java  |  40 ----
 .../org/apache/cloudstack/api/BaseAsyncCmd.java |  10 +-
 .../BaseListTemplateOrIsoPermissionsCmd.java    |   5 +-
 .../command/admin/account/CreateAccountCmd.java |   6 +-
 .../command/admin/account/DeleteAccountCmd.java |   7 +-
 .../admin/account/DisableAccountCmd.java        |   5 +-
 .../command/admin/domain/CreateDomainCmd.java   |   5 +-
 .../command/admin/domain/DeleteDomainCmd.java   |   5 +-
 .../command/admin/domain/UpdateDomainCmd.java   |   5 +-
 .../admin/host/CancelMaintenanceCmd.java        |   5 +-
 .../admin/host/PrepareForMaintenanceCmd.java    |   5 +-
 .../command/admin/host/ReconnectHostCmd.java    |   5 +-
 .../admin/host/ReleaseHostReservationCmd.java   |   5 +-
 ...ConfigureInternalLoadBalancerElementCmd.java |   7 +-
 .../CreateInternalLoadBalancerElementCmd.java   |   5 +-
 .../admin/internallb/StartInternalLBVMCmd.java  |   7 +-
 .../admin/internallb/StopInternalLBVMCmd.java   |   7 +-
 .../network/AddNetworkServiceProviderCmd.java   |   5 +-
 .../admin/network/CreatePhysicalNetworkCmd.java |   5 +-
 .../admin/network/DeletePhysicalNetworkCmd.java |   5 +-
 .../ReleaseDedicatedGuestVlanRangeCmd.java      |   6 +-
 .../ConfigureVirtualRouterElementCmd.java       |   5 +-
 .../router/CreateVirtualRouterElementCmd.java   |   5 +-
 .../command/admin/router/DestroyRouterCmd.java  |   7 +-
 .../command/admin/router/RebootRouterCmd.java   |   5 +-
 .../command/admin/router/StartRouterCmd.java    |   5 +-
 .../api/command/admin/router/StopRouterCmd.java |   5 +-
 .../CancelPrimaryStorageMaintenanceCmd.java     |   5 +-
 .../PreparePrimaryStorageForMaintenanceCmd.java |   5 +-
 .../admin/systemvm/DestroySystemVmCmd.java      |   7 +-
 .../admin/systemvm/MigrateSystemVMCmd.java      |   7 +-
 .../admin/systemvm/RebootSystemVmCmd.java       |   7 +-
 .../admin/systemvm/ScaleSystemVMCmd.java        |   8 +-
 .../admin/systemvm/StartSystemVMCmd.java        |   7 +-
 .../command/admin/systemvm/StopSystemVmCmd.java |   7 +-
 .../admin/systemvm/UpgradeSystemVMCmd.java      |   7 +-
 .../command/admin/usage/AddTrafficTypeCmd.java  |   5 +-
 .../api/command/admin/user/CreateUserCmd.java   |   7 +-
 .../api/command/admin/user/DeleteUserCmd.java   |   5 +-
 .../api/command/admin/user/DisableUserCmd.java  |   5 +-
 .../api/command/admin/user/EnableUserCmd.java   |   5 +-
 .../api/command/admin/user/UpdateUserCmd.java   |   5 +-
 .../api/command/admin/vm/MigrateVMCmd.java      |   7 +-
 .../vm/MigrateVirtualMachineWithVolumeCmd.java  |   5 +-
 .../admin/vpc/DeletePrivateGatewayCmd.java      |   5 +-
 .../api/command/admin/zone/CreateZoneCmd.java   |   5 +-
 .../api/command/admin/zone/DeleteZoneCmd.java   |   5 +-
 .../api/command/admin/zone/UpdateZoneCmd.java   |   5 +-
 .../user/account/AddAccountToProjectCmd.java    |   5 +-
 .../account/DeleteAccountFromProjectCmd.java    |   5 +-
 .../user/address/AssociateIPAddrCmd.java        |  11 +-
 .../user/address/DisassociateIPAddrCmd.java     |   5 +-
 .../affinitygroup/CreateAffinityGroupCmd.java   |   5 +-
 .../affinitygroup/DeleteAffinityGroupCmd.java   |   5 +-
 .../affinitygroup/UpdateVMAffinityGroupCmd.java |   5 +-
 .../autoscale/CreateAutoScaleVmProfileCmd.java  |   7 +-
 .../user/autoscale/CreateConditionCmd.java      |   9 +-
 .../autoscale/DeleteAutoScalePolicyCmd.java     |   5 +-
 .../autoscale/DeleteAutoScaleVmGroupCmd.java    |   5 +-
 .../autoscale/DeleteAutoScaleVmProfileCmd.java  |   5 +-
 .../autoscale/UpdateAutoScalePolicyCmd.java     |   5 +-
 .../autoscale/UpdateAutoScaleVmGroupCmd.java    |   5 +-
 .../autoscale/UpdateAutoScaleVmProfileCmd.java  |   5 +-
 .../command/user/event/ArchiveEventsCmd.java    |   5 +-
 .../api/command/user/event/DeleteEventsCmd.java |   5 +-
 .../firewall/CreateEgressFirewallRuleCmd.java   |  11 +-
 .../user/firewall/CreateFirewallRuleCmd.java    |  11 +-
 .../firewall/CreatePortForwardingRuleCmd.java   |  13 +-
 .../firewall/DeleteEgressFirewallRuleCmd.java   |   5 +-
 .../user/firewall/DeleteFirewallRuleCmd.java    |   5 +-
 .../firewall/DeletePortForwardingRuleCmd.java   |   5 +-
 .../api/command/user/iso/AttachIsoCmd.java      |   5 +-
 .../api/command/user/iso/DeleteIsoCmd.java      |   5 +-
 .../api/command/user/iso/ExtractIsoCmd.java     |   5 +-
 .../api/command/user/iso/ListIsosCmd.java       |   5 +-
 .../api/command/user/iso/RegisterIsoCmd.java    |   5 +-
 .../AssignToLoadBalancerRuleCmd.java            |   5 +-
 .../CreateApplicationLoadBalancerCmd.java       |   5 +-
 .../CreateLBHealthCheckPolicyCmd.java           |  10 +-
 .../CreateLBStickinessPolicyCmd.java            |   7 +-
 .../loadbalancer/CreateLoadBalancerRuleCmd.java |  11 +-
 .../DeleteApplicationLoadBalancerCmd.java       |   5 +-
 .../DeleteLBHealthCheckPolicyCmd.java           |   8 +-
 .../DeleteLBStickinessPolicyCmd.java            |   7 +-
 .../loadbalancer/DeleteLoadBalancerRuleCmd.java |   5 +-
 .../ListLBHealthCheckPoliciesCmd.java           |   3 +-
 .../ListLBStickinessPoliciesCmd.java            |   5 +-
 .../RemoveFromLoadBalancerRuleCmd.java          |   5 +-
 .../loadbalancer/UpdateLoadBalancerRuleCmd.java |   5 +-
 .../user/nat/CreateIpForwardingRuleCmd.java     |  11 +-
 .../user/nat/DeleteIpForwardingRuleCmd.java     |   5 +-
 .../user/network/CreateNetworkACLCmd.java       |   8 +-
 .../user/network/CreateNetworkACLListCmd.java   |   4 +-
 .../command/user/network/CreateNetworkCmd.java  |   5 +-
 .../user/network/DeleteNetworkACLCmd.java       |   8 +-
 .../user/network/DeleteNetworkACLListCmd.java   |   8 +-
 .../command/user/network/DeleteNetworkCmd.java  |   5 +-
 .../user/network/ReplaceNetworkACLListCmd.java  |   8 +-
 .../user/network/UpdateNetworkACLItemCmd.java   |   8 +-
 .../command/user/network/UpdateNetworkCmd.java  |   5 +-
 .../user/project/ActivateProjectCmd.java        |   5 +-
 .../command/user/project/CreateProjectCmd.java  |  11 +-
 .../command/user/project/DeleteProjectCmd.java  |   5 +-
 .../project/DeleteProjectInvitationCmd.java     |   5 +-
 .../command/user/project/SuspendProjectCmd.java |   5 +-
 .../command/user/project/UpdateProjectCmd.java  |   5 +-
 .../project/UpdateProjectInvitationCmd.java     |   5 +-
 .../gslb/AssignToGlobalLoadBalancerRuleCmd.java |   7 +-
 .../gslb/CreateGlobalLoadBalancerRuleCmd.java   |  10 +-
 .../gslb/DeleteGlobalLoadBalancerRuleCmd.java   |   6 +-
 .../RemoveFromGlobalLoadBalancerRuleCmd.java    |   7 +-
 .../gslb/UpdateGlobalLoadBalancerRuleCmd.java   |   2 +-
 .../user/resource/UpdateResourceCountCmd.java   |   5 +-
 .../user/resource/UpdateResourceLimitCmd.java   |   5 +-
 .../AuthorizeSecurityGroupEgressCmd.java        |   5 +-
 .../AuthorizeSecurityGroupIngressCmd.java       |   5 +-
 .../securitygroup/CreateSecurityGroupCmd.java   |   5 +-
 .../securitygroup/DeleteSecurityGroupCmd.java   |   5 +-
 .../user/snapshot/CreateSnapshotCmd.java        |   5 +-
 .../user/snapshot/DeleteSnapshotCmd.java        |   5 +-
 .../command/user/ssh/CreateSSHKeyPairCmd.java   |   5 +-
 .../command/user/ssh/DeleteSSHKeyPairCmd.java   |   5 +-
 .../command/user/ssh/RegisterSSHKeyPairCmd.java |   5 +-
 .../command/user/template/CopyTemplateCmd.java  |   5 +-
 .../user/template/CreateTemplateCmd.java        |   6 +-
 .../user/template/DeleteTemplateCmd.java        |   4 +-
 .../user/template/ExtractTemplateCmd.java       |   4 +-
 .../command/user/template/ListTemplatesCmd.java |   5 +-
 .../user/template/RegisterTemplateCmd.java      |   5 +-
 .../api/command/user/vm/AddIpToVmNicCmd.java    |  11 +-
 .../api/command/user/vm/AddNicToVMCmd.java      |   5 +-
 .../api/command/user/vm/DeployVMCmd.java        |  11 +-
 .../api/command/user/vm/DestroyVMCmd.java       |   5 +-
 .../api/command/user/vm/ListNicsCmd.java        |   8 +-
 .../api/command/user/vm/RebootVMCmd.java        |   5 +-
 .../command/user/vm/RemoveIpFromVmNicCmd.java   |  10 +-
 .../api/command/user/vm/RemoveNicFromVMCmd.java |   5 +-
 .../api/command/user/vm/ResetVMPasswordCmd.java |   5 +-
 .../api/command/user/vm/ResetVMSSHKeyCmd.java   |   4 +-
 .../api/command/user/vm/RestoreVMCmd.java       |   5 +-
 .../api/command/user/vm/ScaleVMCmd.java         |   4 +-
 .../api/command/user/vm/StartVMCmd.java         |   5 +-
 .../api/command/user/vm/StopVMCmd.java          |   5 +-
 .../user/vm/UpdateDefaultNicForVMCmd.java       |   5 +-
 .../api/command/user/vm/UpdateVMCmd.java        |   5 +-
 .../api/command/user/vm/UpgradeVMCmd.java       |   5 +-
 .../command/user/vmgroup/CreateVMGroupCmd.java  |   5 +-
 .../user/vmsnapshot/CreateVMSnapshotCmd.java    |   4 +-
 .../user/vmsnapshot/DeleteVMSnapshotCmd.java    |   5 +-
 .../user/vmsnapshot/RevertToVMSnapshotCmd.java  |   4 +-
 .../user/volume/AddResourceDetailCmd.java       |   4 +-
 .../command/user/volume/AttachVolumeCmd.java    |   5 +-
 .../command/user/volume/CreateVolumeCmd.java    |   7 +-
 .../command/user/volume/DeleteVolumeCmd.java    |   7 +-
 .../command/user/volume/DetachVolumeCmd.java    |   5 +-
 .../command/user/volume/ExtractVolumeCmd.java   |   5 +-
 .../user/volume/RemoveResourceDetailCmd.java    |   4 +-
 .../command/user/volume/ResizeVolumeCmd.java    |   5 +-
 .../command/user/volume/UpdateVolumeCmd.java    |   5 +-
 .../command/user/volume/UploadVolumeCmd.java    |   5 +-
 .../command/user/vpc/CreateStaticRouteCmd.java  |   5 +-
 .../api/command/user/vpc/CreateVPCCmd.java      |   5 +-
 .../command/user/vpc/DeleteStaticRouteCmd.java  |   5 +-
 .../api/command/user/vpn/AddVpnUserCmd.java     |   5 +-
 .../user/vpn/CreateVpnCustomerGatewayCmd.java   |   5 +-
 .../user/vpn/DeleteRemoteAccessVpnCmd.java      |   5 +-
 .../api/command/user/vpn/RemoveVpnUserCmd.java  |   7 +-
 .../command/user/vpn/ResetVpnConnectionCmd.java |   5 +-
 .../user/vpn/UpdateVpnCustomerGatewayCmd.java   |   5 +-
 .../apache/cloudstack/context/CallContext.java  | 218 +++++++++++++++++
 client/tomcatconf/applicationContext.xml.in     |   1 -
 .../api/command/user/discovery/ListApisCmd.java |   5 +-
 .../admin/ratelimit/ResetApiLimitCmd.java       |   5 +-
 .../command/user/ratelimit/GetApiLimitCmd.java  |   7 +-
 .../dedicated/DedicatedResourceManagerImpl.java |  12 +-
 .../dedicated/manager/DedicatedApiUnitTest.java |  28 ++-
 .../implicitplanner/ImplicitPlannerTest.java    |  31 ++-
 .../cloudstack/api/AddBaremetalDhcpCmd.java     |   5 +-
 .../cloudstack/api/AddBaremetalPxeCmd.java      |   5 +-
 .../vmware/VmwareDatacenterApiUnitTest.java     |  30 ++-
 .../api/commands/AddBigSwitchVnsDeviceCmd.java  |   4 +-
 .../commands/DeleteBigSwitchVnsDeviceCmd.java   |   4 +-
 .../commands/AddCiscoAsa1000vResourceCmd.java   |   5 +-
 .../api/commands/AddCiscoVnmcResourceCmd.java   |   5 +-
 .../DeleteCiscoAsa1000vResourceCmd.java         |   5 +-
 .../commands/DeleteCiscoVnmcResourceCmd.java    |   5 +-
 .../cloud/network/element/CiscoVnmcElement.java |   7 +-
 .../lb/ElasticLoadBalancerManagerImpl.java      |   8 +-
 .../api/commands/AddF5LoadBalancerCmd.java      |   6 +-
 .../commands/ConfigureF5LoadBalancerCmd.java    |   6 +-
 .../api/commands/DeleteF5LoadBalancerCmd.java   |   6 +-
 .../InternalLBVMServiceTest.java                |  19 +-
 .../cloud/api/commands/AddSrxFirewallCmd.java   |   6 +-
 .../api/commands/ConfigureSrxFirewallCmd.java   |   5 +-
 .../api/commands/DeleteSrxFirewallCmd.java      |   5 +-
 .../commands/AddNetscalerLoadBalancerCmd.java   |   6 +-
 .../ConfigureNetscalerLoadBalancerCmd.java      |   6 +-
 .../DeleteNetscalerLoadBalancerCmd.java         |   5 +-
 .../api/commands/AddNiciraNvpDeviceCmd.java     |   6 +-
 .../api/commands/DeleteNiciraNvpDeviceCmd.java  |   6 +-
 .../cloud/network/guru/OvsGuestNetworkGuru.java |   6 +-
 .../cloudstack/api/commands/AddSspCmd.java      |   5 +-
 .../cloudstack/api/commands/DeleteSspCmd.java   |   5 +-
 .../cloud/agent/manager/AgentManagerImpl.java   |  38 +--
 server/src/com/cloud/api/ApiDispatcher.java     | 136 ++++++-----
 server/src/com/cloud/api/ApiResponseHelper.java |   7 +-
 server/src/com/cloud/api/ApiServer.java         |  85 +++----
 server/src/com/cloud/api/ApiServlet.java        |  27 ++-
 .../com/cloud/api/query/QueryManagerImpl.java   |  49 ++--
 .../com/cloud/api/query/ViewResponseHelper.java |  12 +-
 .../api/query/dao/DataCenterJoinDaoImpl.java    |   7 +-
 .../api/query/dao/TemplateJoinDaoImpl.java      |   7 +-
 .../cloud/api/query/dao/VolumeJoinDaoImpl.java  |   5 +-
 .../com/cloud/async/AsyncJobManagerImpl.java    |  42 ++--
 .../configuration/ConfigurationManagerImpl.java |  70 +++---
 .../consoleproxy/ConsoleProxyManagerImpl.java   |   6 +-
 .../com/cloud/event/ActionEventInterceptor.java |  21 +-
 .../src/com/cloud/event/ActionEventUtils.java   |  37 +--
 .../metadata/ResourceMetaDataManagerImpl.java   |   5 +-
 .../com/cloud/network/NetworkManagerImpl.java   |  31 +--
 .../com/cloud/network/NetworkServiceImpl.java   |  61 ++---
 .../cloud/network/NetworkUsageManagerImpl.java  |   3 +-
 .../cloud/network/as/AutoScaleManagerImpl.java  |  44 ++--
 .../network/firewall/FirewallManagerImpl.java   |  17 +-
 .../network/guru/ExternalGuestNetworkGuru.java  |   6 +-
 .../cloud/network/guru/GuestNetworkGuru.java    |   8 +-
 .../network/lb/LoadBalancingRulesManager.java   |   5 +-
 .../lb/LoadBalancingRulesManagerImpl.java       |  61 ++---
 .../VirtualNetworkApplianceManagerImpl.java     | 238 ++++++++++---------
 .../cloud/network/rules/RulesManagerImpl.java   |  43 ++--
 .../security/SecurityGroupManagerImpl.java      |  17 +-
 .../network/vpc/NetworkACLManagerImpl.java      |   7 +-
 .../network/vpc/NetworkACLServiceImpl.java      |  19 +-
 .../com/cloud/network/vpc/VpcManagerImpl.java   |  57 ++---
 .../network/vpn/RemoteAccessVpnManagerImpl.java |  28 +--
 .../network/vpn/Site2SiteVpnManagerImpl.java    |  35 +--
 .../com/cloud/projects/ProjectManagerImpl.java  |  30 +--
 .../com/cloud/resource/ResourceManagerImpl.java |  14 +-
 .../resourcelimit/ResourceLimitManagerImpl.java |   9 +-
 .../com/cloud/server/ManagementServerImpl.java  |  70 +++---
 .../com/cloud/storage/StorageManagerImpl.java   |  20 +-
 .../storage/StoragePoolAutomationImpl.java      |  11 +-
 .../com/cloud/storage/VolumeManagerImpl.java    |  24 +-
 .../secondary/SecondaryStorageManagerImpl.java  |   6 +-
 .../storage/snapshot/SnapshotManagerImpl.java   |  23 +-
 .../cloud/tags/TaggedResourceManagerImpl.java   |   8 +-
 .../com/cloud/template/TemplateAdapterBase.java |  25 +-
 .../com/cloud/template/TemplateManagerImpl.java |  47 ++--
 .../src/com/cloud/usage/UsageServiceImpl.java   |   5 +-
 .../src/com/cloud/user/AccountManagerImpl.java  |  75 +++---
 .../src/com/cloud/user/DomainManagerImpl.java   |  32 +--
 server/src/com/cloud/vm/UserVmManagerImpl.java  |  85 ++++---
 .../vm/snapshot/VMSnapshotManagerImpl.java      |   7 +-
 .../affinity/AffinityGroupServiceImpl.java      |  12 +-
 .../lb/ApplicationLoadBalancerManagerImpl.java  |   9 +-
 .../GlobalLoadBalancingRulesServiceImpl.java    |  25 +-
 .../configuration/ConfigurationManagerTest.java |  43 ++--
 .../network/DedicateGuestVlanRangesTest.java    |  43 ++--
 server/test/com/cloud/vm/UserVmManagerTest.java | 156 +++++++++---
 .../com/cloud/vpc/NetworkACLManagerTest.java    |  65 +++--
 .../com/cloud/vpc/NetworkACLServiceTest.java    |  61 +++--
 server/test/com/cloud/vpc/VpcTest.java          |  71 +++---
 .../affinity/AffinityApiUnitTest.java           |  34 ++-
 .../lb/ApplicationLoadBalancerTest.java         |  39 +--
 .../networkoffering/ChildTestConfiguration.java |  26 +-
 .../CreateNetworkOfferingTest.java              |  42 ++--
 .../cloudstack/region/RegionManagerTest.java    |   3 +-
 ...GlobalLoadBalancingRulesServiceImplTest.java | 114 +++++----
 .../utils/exception/CloudRuntimeException.java  |  21 +-
 270 files changed, 2352 insertions(+), 1804 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/com/cloud/user/UserContext.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/user/UserContext.java b/api/src/com/cloud/user/UserContext.java
deleted file mode 100644
index fdd19d4..0000000
--- a/api/src/com/cloud/user/UserContext.java
+++ /dev/null
@@ -1,163 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-package com.cloud.user;
-
-import com.cloud.utils.component.ComponentContext;
-import javax.inject.Inject;
-
-public class UserContext {
-    private static ThreadLocal<UserContext> s_currentContext = new ThreadLocal<UserContext>();
-
-    private long userId;
-    private String sessionId;
-    private Account account;
-    private long startEventId = 0;
-    private long accountId;
-    private String eventDetails;
-    private boolean apiServer;
-    private Class entityType;
-    private String entityUUID;
-
-    @Inject private AccountService _accountMgr = null;
-
-    public UserContext() {
-    }
-
-    public UserContext(long userId, Account accountObject, String sessionId, boolean apiServer) {
-        this.userId = userId;
-        this.account = accountObject;
-        this.sessionId = sessionId;
-        this.apiServer = apiServer;
-    }
-
-    public long getCallerUserId() {
-        return userId;
-    }
-
-    public User getCallerUser() {
-        if (_accountMgr == null) {
-            _accountMgr = ComponentContext.getComponent(AccountService.class);
-        }
-        return _accountMgr.getActiveUser(userId);
-    }
-
-    public void setCallerUserId(long userId) {
-        this.userId = userId;
-    }
-
-    public String getSessionId() {
-        return sessionId;
-    }
-
-    public Account getCaller() {
-        return account;
-    }
-
-    public void setCaller(Account accountObject) {
-        this.account = accountObject;
-    }
-
-    public void setSessionKey(String sessionId) {
-        this.sessionId = sessionId;
-    }
-
-    public boolean isApiServer() {
-        return apiServer;
-    }
-
-    public void setApiServer(boolean apiServer) {
-        this.apiServer = apiServer;
-    }
-
-    public static UserContext current() {
-        UserContext context = s_currentContext.get();
-        if (context == null) {
-            //
-            // TODO: we should enforce explicit UserContext setup at major entry-points for security concerns,
-            // however, there are many places that run background jobs assume the system context.
-            //
-            // If there is a security concern, all entry points from user (including the front end that takes HTTP
-            // request in and
-            // the core async-job manager that runs commands from user) have explicitly setup the UserContext.
-            //
-            return UserContextInitializer.getInstance().getAdminContext();
-        }
-        return context;
-    }
-
-    public static void updateContext(long userId, Account accountObject, String sessionId) {
-        UserContext context = current();
-        assert (context != null) : "Context should be already setup before you can call this one";
-
-        context.setCallerUserId(userId);
-        context.setCaller(accountObject);
-        context.setSessionKey(sessionId);
-    }
-
-    public static void registerContext(long userId, Account accountObject, String sessionId, boolean apiServer) {
-        s_currentContext.set(new UserContext(userId, accountObject, sessionId, apiServer));
-    }
-
-    public static void unregisterContext() {
-        s_currentContext.set(null);
-    }
-
-    public void setStartEventId(long startEventId) {
-        this.startEventId = startEventId;
-    }
-
-    public long getStartEventId() {
-        return startEventId;
-    }
-
-    public long getAccountId() {
-        return accountId;
-    }
-
-    public void setAccountId(long accountId) {
-        this.accountId = accountId;
-    }
-
-    public void setEventDetails(String eventDetails) {
-        this.eventDetails = eventDetails;
-    }
-
-    public String getEventDetails() {
-        return eventDetails;
-    }
-
-    public void setEntityDetails(Class entityType, String uuid) {
-        this.entityType = entityType;
-        this.entityUUID = uuid;
-    }
-
-    public String getEntityType() {
-        return (entityType != null) ? entityType.getName() : null;
-    }
-
-    public void setEntityType(Class entityType) {
-        this.entityType = entityType;
-    }
-
-    public String getEntityUUID() {
-        return entityUUID;
-    }
-
-    public void setEntityUUID(String entityUUID) {
-        this.entityUUID = entityUUID;
-    }
-}

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/com/cloud/user/UserContextInitializer.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/user/UserContextInitializer.java b/api/src/com/cloud/user/UserContextInitializer.java
deleted file mode 100644
index a545963..0000000
--- a/api/src/com/cloud/user/UserContextInitializer.java
+++ /dev/null
@@ -1,40 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-package com.cloud.user;
-
-import javax.inject.Inject;
-
-import org.springframework.stereotype.Component;
-
-@Component
-public class UserContextInitializer {
-	@Inject private AccountService _accountMgr;
-
-    private static UserContextInitializer s_instance;
-    
-    public UserContextInitializer() {
-    	s_instance = this;
-    }
-    
-    public static UserContextInitializer getInstance() {
-    	return s_instance;
-    }
-    
-    public UserContext getAdminContext() {
-    	return new UserContext(_accountMgr.getSystemUser().getId(), _accountMgr.getSystemAccount(), null, false);
-    }
-}

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/BaseAsyncCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/BaseAsyncCmd.java b/api/src/org/apache/cloudstack/api/BaseAsyncCmd.java
index 022157a..0e6f95d 100644
--- a/api/src/org/apache/cloudstack/api/BaseAsyncCmd.java
+++ b/api/src/org/apache/cloudstack/api/BaseAsyncCmd.java
@@ -17,10 +17,10 @@
 package org.apache.cloudstack.api;
 
 import org.apache.cloudstack.api.response.AsyncJobResponse;
+import org.apache.cloudstack.context.CallContext;
 
 import com.cloud.async.AsyncJob;
 import com.cloud.user.User;
-import com.cloud.user.UserContext;
 
 /**
  * queryAsyncJobResult API command.
@@ -109,8 +109,8 @@ public abstract class BaseAsyncCmd extends BaseCmd {
     }
 
     protected long saveStartedEvent(String eventType, String description, Long startEventId) {
-        UserContext ctx = UserContext.current();
-        Long userId = ctx.getCallerUserId();
+        CallContext ctx = CallContext.current();
+        Long userId = ctx.getCallingUserId();
         userId = (userId == null) ? User.UID_SYSTEM : userId;
         Long startEvent = startEventId;
         if (startEvent == null) {
@@ -124,8 +124,8 @@ public abstract class BaseAsyncCmd extends BaseCmd {
     }
 
     protected long saveCompletedEvent(String level, String eventType, String description, Long startEventId) {
-        UserContext ctx = UserContext.current();
-        Long userId = ctx.getCallerUserId();
+        CallContext ctx = CallContext.current();
+        Long userId = ctx.getCallingUserId();
         userId = (userId == null) ? User.UID_SYSTEM : userId;
         Long startEvent = startEventId;
         if (startEvent == null) {

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/BaseListTemplateOrIsoPermissionsCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/BaseListTemplateOrIsoPermissionsCmd.java b/api/src/org/apache/cloudstack/api/BaseListTemplateOrIsoPermissionsCmd.java
index 47aa679..88732ae 100644
--- a/api/src/org/apache/cloudstack/api/BaseListTemplateOrIsoPermissionsCmd.java
+++ b/api/src/org/apache/cloudstack/api/BaseListTemplateOrIsoPermissionsCmd.java
@@ -19,11 +19,12 @@ package org.apache.cloudstack.api;
 import java.util.List;
 
 import org.apache.cloudstack.api.response.TemplatePermissionsResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.template.VirtualMachineTemplate;
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
 
 public class BaseListTemplateOrIsoPermissionsCmd extends BaseCmd {
     public Logger s_logger = getLogger();
@@ -79,7 +80,7 @@ public class BaseListTemplateOrIsoPermissionsCmd extends BaseCmd {
     public void execute(){
         List<String> accountNames = _templateService.listTemplatePermissions(this);
 
-        Account account = UserContext.current().getCaller();
+        Account account = CallContext.current().getCallingAccount();
         boolean isAdmin = (isAdmin(account.getType()));
 
         TemplatePermissionsResponse response = _responseGenerator.createTemplatePermissionsResponse(accountNames, id, isAdmin);

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/admin/account/CreateAccountCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/admin/account/CreateAccountCmd.java b/api/src/org/apache/cloudstack/api/command/admin/account/CreateAccountCmd.java
index cc74eb2..94325f6 100644
--- a/api/src/org/apache/cloudstack/api/command/admin/account/CreateAccountCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/admin/account/CreateAccountCmd.java
@@ -18,7 +18,7 @@ package org.apache.cloudstack.api.command.admin.account;
 
 import com.cloud.user.Account;
 import com.cloud.user.UserAccount;
-import com.cloud.user.UserContext;
+
 import org.apache.cloudstack.api.APICommand;
 import org.apache.cloudstack.api.ApiConstants;
 import org.apache.cloudstack.api.ApiErrorCode;
@@ -27,6 +27,8 @@ import org.apache.cloudstack.api.Parameter;
 import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.AccountResponse;
 import org.apache.cloudstack.api.response.DomainResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import java.util.Collection;
@@ -160,7 +162,7 @@ public class CreateAccountCmd extends BaseCmd {
 
     @Override
     public void execute(){
-        UserContext.current().setEventDetails("Account Name: "+getAccountName()+", Domain Id:"+getDomainId());
+        CallContext.current().setEventDetails("Account Name: "+getAccountName()+", Domain Id:"+getDomainId());
         UserAccount userAccount = _accountService.createUserAccount(getUsername(), getPassword(), getFirstName(), getLastName(), getEmail(), getTimeZone(), getAccountName(), getAccountType(),
                 getDomainId(), getNetworkDomain(), getDetails(), getAccountUUID(), getUserUUID());
         if (userAccount != null) {

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/admin/account/DeleteAccountCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/admin/account/DeleteAccountCmd.java b/api/src/org/apache/cloudstack/api/command/admin/account/DeleteAccountCmd.java
index 4a42fde..b46036b 100644
--- a/api/src/org/apache/cloudstack/api/command/admin/account/DeleteAccountCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/admin/account/DeleteAccountCmd.java
@@ -27,13 +27,14 @@ import org.apache.cloudstack.api.Parameter;
 import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.AccountResponse;
 import org.apache.cloudstack.api.response.SuccessResponse;
+import org.apache.cloudstack.context.CallContext;
 import org.apache.cloudstack.region.RegionService;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.event.EventTypes;
 import com.cloud.user.Account;
 import com.cloud.user.User;
-import com.cloud.user.UserContext;
 
 @APICommand(name = "deleteAccount", description="Deletes a account, and all users associated with this account", responseObject=SuccessResponse.class)
 public class DeleteAccountCmd extends BaseAsyncCmd {
@@ -74,7 +75,7 @@ public class DeleteAccountCmd extends BaseAsyncCmd {
 
     @Override
     public long getEntityOwnerId() {
-        Account account = UserContext.current().getCaller();// Let's give the caller here for event logging.
+        Account account = CallContext.current().getCallingAccount();// Let's give the caller here for event logging.
         if (account != null) {
             return account.getAccountId();
         }
@@ -95,7 +96,7 @@ public class DeleteAccountCmd extends BaseAsyncCmd {
 
     @Override
     public void execute(){
-        UserContext.current().setEventDetails("Account Id: "+getId());
+        CallContext.current().setEventDetails("Account Id: "+getId());
 
         boolean	result = _regionService.deleteUserAccount(this);
         if (result) {

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/admin/account/DisableAccountCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/admin/account/DisableAccountCmd.java b/api/src/org/apache/cloudstack/api/command/admin/account/DisableAccountCmd.java
index 6d25fde..806a8a5 100644
--- a/api/src/org/apache/cloudstack/api/command/admin/account/DisableAccountCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/admin/account/DisableAccountCmd.java
@@ -27,14 +27,15 @@ import org.apache.cloudstack.api.Parameter;
 import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.AccountResponse;
 import org.apache.cloudstack.api.response.DomainResponse;
+import org.apache.cloudstack.context.CallContext;
 import org.apache.cloudstack.region.RegionService;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.event.EventTypes;
 import com.cloud.exception.ConcurrentOperationException;
 import com.cloud.exception.ResourceUnavailableException;
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
 
 @APICommand(name = "disableAccount", description="Disables an account", responseObject=AccountResponse.class)
 public class DisableAccountCmd extends BaseAsyncCmd {
@@ -116,7 +117,7 @@ public class DisableAccountCmd extends BaseAsyncCmd {
 
     @Override
     public void execute() throws ConcurrentOperationException, ResourceUnavailableException{
-        UserContext.current().setEventDetails("Account Name: "+getAccountName()+", Domain Id:"+getDomainId());
+        CallContext.current().setEventDetails("Account Name: "+getAccountName()+", Domain Id:"+getDomainId());
         Account result = _regionService.disableAccount(this);
         if (result != null){
             AccountResponse response = _responseGenerator.createAccountResponse(result);

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/admin/domain/CreateDomainCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/admin/domain/CreateDomainCmd.java b/api/src/org/apache/cloudstack/api/command/admin/domain/CreateDomainCmd.java
index 91d61cc..c46318e 100644
--- a/api/src/org/apache/cloudstack/api/command/admin/domain/CreateDomainCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/admin/domain/CreateDomainCmd.java
@@ -23,11 +23,12 @@ import org.apache.cloudstack.api.BaseCmd;
 import org.apache.cloudstack.api.Parameter;
 import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.DomainResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.domain.Domain;
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
 
 @APICommand(name = "createDomain", description="Creates a domain", responseObject=DomainResponse.class)
 public class CreateDomainCmd extends BaseCmd {
@@ -88,7 +89,7 @@ public class CreateDomainCmd extends BaseCmd {
 
     @Override
     public void execute(){
-        UserContext.current().setEventDetails("Domain Name: "+getDomainName()+((getParentDomainId()!=null)?", Parent DomainId :"+getParentDomainId():""));
+        CallContext.current().setEventDetails("Domain Name: "+getDomainName()+((getParentDomainId()!=null)?", Parent DomainId :"+getParentDomainId():""));
         Domain domain = _domainService.createDomain(getDomainName(), getParentDomainId(), getNetworkDomain(), getDomainUUID());
         if (domain != null) {
             DomainResponse response = _responseGenerator.createDomainResponse(domain);

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/admin/domain/DeleteDomainCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/admin/domain/DeleteDomainCmd.java b/api/src/org/apache/cloudstack/api/command/admin/domain/DeleteDomainCmd.java
index 488a758..6302c2e 100644
--- a/api/src/org/apache/cloudstack/api/command/admin/domain/DeleteDomainCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/admin/domain/DeleteDomainCmd.java
@@ -26,13 +26,14 @@ import org.apache.cloudstack.api.Parameter;
 import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.DomainResponse;
 import org.apache.cloudstack.api.response.SuccessResponse;
+import org.apache.cloudstack.context.CallContext;
 import org.apache.cloudstack.region.RegionService;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.domain.Domain;
 import com.cloud.event.EventTypes;
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
 
 @APICommand(name = "deleteDomain", description="Deletes a specified domain", responseObject=SuccessResponse.class)
 public class DeleteDomainCmd extends BaseAsyncCmd {
@@ -95,7 +96,7 @@ public class DeleteDomainCmd extends BaseAsyncCmd {
 
     @Override
     public void execute(){
-        UserContext.current().setEventDetails("Domain Id: "+getId());
+        CallContext.current().setEventDetails("Domain Id: "+getId());
         boolean result = _regionService.deleteDomain(this);
         if (result) {
             SuccessResponse response = new SuccessResponse(getCommandName());

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/admin/domain/UpdateDomainCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/admin/domain/UpdateDomainCmd.java b/api/src/org/apache/cloudstack/api/command/admin/domain/UpdateDomainCmd.java
index e658f49..e4962d6 100644
--- a/api/src/org/apache/cloudstack/api/command/admin/domain/UpdateDomainCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/admin/domain/UpdateDomainCmd.java
@@ -25,13 +25,14 @@ import org.apache.cloudstack.api.BaseCmd;
 import org.apache.cloudstack.api.Parameter;
 import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.DomainResponse;
+import org.apache.cloudstack.context.CallContext;
 import org.apache.cloudstack.region.RegionService;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.domain.Domain;
 import com.cloud.user.Account;
 import com.cloud.user.UserAccount;
-import com.cloud.user.UserContext;
 
 @APICommand(name = "updateDomain", description="Updates a domain with a new name", responseObject=DomainResponse.class)
 public class UpdateDomainCmd extends BaseCmd {
@@ -86,7 +87,7 @@ public class UpdateDomainCmd extends BaseCmd {
 
     @Override
     public void execute(){
-        UserContext.current().setEventDetails("Domain Id: "+getId());
+        CallContext.current().setEventDetails("Domain Id: "+getId());
         Domain domain =  _regionService.updateDomain(this);
 
         if (domain != null) {

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/admin/host/CancelMaintenanceCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/admin/host/CancelMaintenanceCmd.java b/api/src/org/apache/cloudstack/api/command/admin/host/CancelMaintenanceCmd.java
index ea85d12..3179e50 100644
--- a/api/src/org/apache/cloudstack/api/command/admin/host/CancelMaintenanceCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/admin/host/CancelMaintenanceCmd.java
@@ -24,12 +24,13 @@ import org.apache.cloudstack.api.BaseAsyncCmd;
 import org.apache.cloudstack.api.Parameter;
 import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.HostResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.event.EventTypes;
 import com.cloud.host.Host;
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
 
 @APICommand(name = "cancelHostMaintenance", description="Cancels host maintenance.", responseObject=HostResponse.class)
 public class CancelMaintenanceCmd extends BaseAsyncCmd  {
@@ -68,7 +69,7 @@ public class CancelMaintenanceCmd extends BaseAsyncCmd  {
 
     @Override
     public long getEntityOwnerId() {
-        Account account = UserContext.current().getCaller();
+        Account account = CallContext.current().getCallingAccount();
         if (account != null) {
             return account.getId();
         }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/admin/host/PrepareForMaintenanceCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/admin/host/PrepareForMaintenanceCmd.java b/api/src/org/apache/cloudstack/api/command/admin/host/PrepareForMaintenanceCmd.java
index fd3685a..02d29b3 100644
--- a/api/src/org/apache/cloudstack/api/command/admin/host/PrepareForMaintenanceCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/admin/host/PrepareForMaintenanceCmd.java
@@ -24,12 +24,13 @@ import org.apache.cloudstack.api.BaseAsyncCmd;
 import org.apache.cloudstack.api.Parameter;
 import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.HostResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.event.EventTypes;
 import com.cloud.host.Host;
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
 
 @APICommand(name = "prepareHostForMaintenance", description="Prepares a host for maintenance.", responseObject=HostResponse.class)
 public class PrepareForMaintenanceCmd extends BaseAsyncCmd {
@@ -68,7 +69,7 @@ public class PrepareForMaintenanceCmd extends BaseAsyncCmd {
 
     @Override
     public long getEntityOwnerId() {
-        Account account = UserContext.current().getCaller();
+        Account account = CallContext.current().getCallingAccount();
         if (account != null) {
             return account.getId();
         }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/admin/host/ReconnectHostCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/admin/host/ReconnectHostCmd.java b/api/src/org/apache/cloudstack/api/command/admin/host/ReconnectHostCmd.java
index 8a1ef79..ec5f65e 100644
--- a/api/src/org/apache/cloudstack/api/command/admin/host/ReconnectHostCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/admin/host/ReconnectHostCmd.java
@@ -24,12 +24,13 @@ import org.apache.cloudstack.api.BaseAsyncCmd;
 import org.apache.cloudstack.api.Parameter;
 import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.HostResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.event.EventTypes;
 import com.cloud.host.Host;
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
 
 @APICommand(name = "reconnectHost", description="Reconnects a host.", responseObject=HostResponse.class)
 public class ReconnectHostCmd extends BaseAsyncCmd {
@@ -68,7 +69,7 @@ public class ReconnectHostCmd extends BaseAsyncCmd {
 
     @Override
     public long getEntityOwnerId() {
-        Account account = UserContext.current().getCaller();
+        Account account = CallContext.current().getCallingAccount();
         if (account != null) {
             return account.getId();
         }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/admin/host/ReleaseHostReservationCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/admin/host/ReleaseHostReservationCmd.java b/api/src/org/apache/cloudstack/api/command/admin/host/ReleaseHostReservationCmd.java
index b11bcd2..2de452e 100644
--- a/api/src/org/apache/cloudstack/api/command/admin/host/ReleaseHostReservationCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/admin/host/ReleaseHostReservationCmd.java
@@ -25,11 +25,12 @@ 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.SuccessResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.event.EventTypes;
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
 
 @APICommand(name = "releaseHostReservation", description = "Releases host reservation.", responseObject = SuccessResponse.class)
 public class ReleaseHostReservationCmd extends BaseAsyncCmd {
@@ -64,7 +65,7 @@ public class ReleaseHostReservationCmd extends BaseAsyncCmd {
 
     @Override
     public long getEntityOwnerId() {
-        Account account = UserContext.current().getCaller();
+        Account account = CallContext.current().getCallingAccount();
         if (account != null) {
             return account.getId();
         }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/admin/internallb/ConfigureInternalLoadBalancerElementCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/admin/internallb/ConfigureInternalLoadBalancerElementCmd.java b/api/src/org/apache/cloudstack/api/command/admin/internallb/ConfigureInternalLoadBalancerElementCmd.java
index 86f3006..bfbe85e 100644
--- a/api/src/org/apache/cloudstack/api/command/admin/internallb/ConfigureInternalLoadBalancerElementCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/admin/internallb/ConfigureInternalLoadBalancerElementCmd.java
@@ -23,7 +23,7 @@ import com.cloud.exception.InsufficientCapacityException;
 import com.cloud.exception.ResourceUnavailableException;
 import com.cloud.network.VirtualRouterProvider;
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
+
 import org.apache.cloudstack.api.APICommand;
 import org.apache.cloudstack.api.ApiConstants;
 import org.apache.cloudstack.api.ApiErrorCode;
@@ -31,10 +31,13 @@ import org.apache.cloudstack.api.BaseAsyncCmd;
 import org.apache.cloudstack.api.Parameter;
 import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.InternalLoadBalancerElementResponse;
+import org.apache.cloudstack.context.CallContext;
 import org.apache.cloudstack.network.element.InternalLoadBalancerElementService;
+
 import org.apache.log4j.Logger;
 
 import javax.inject.Inject;
+
 import java.util.List;
 
 @APICommand(name = "configureInternalLoadBalancerElement", responseObject=InternalLoadBalancerElementResponse.class,
@@ -96,7 +99,7 @@ public class ConfigureInternalLoadBalancerElementCmd extends BaseAsyncCmd {
 
     @Override
     public void execute() throws ConcurrentOperationException, ResourceUnavailableException, InsufficientCapacityException{
-        UserContext.current().setEventDetails("Internal load balancer element: " + id);
+        CallContext.current().setEventDetails("Internal load balancer element: " + id);
         VirtualRouterProvider result = _service.get(0).configureInternalLoadBalancerElement(getId(), getEnabled());
         if (result != null){
             InternalLoadBalancerElementResponse routerResponse = _responseGenerator.createInternalLbElementResponse(result);

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/admin/internallb/CreateInternalLoadBalancerElementCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/admin/internallb/CreateInternalLoadBalancerElementCmd.java b/api/src/org/apache/cloudstack/api/command/admin/internallb/CreateInternalLoadBalancerElementCmd.java
index 2902f7a..0079949 100644
--- a/api/src/org/apache/cloudstack/api/command/admin/internallb/CreateInternalLoadBalancerElementCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/admin/internallb/CreateInternalLoadBalancerElementCmd.java
@@ -28,14 +28,15 @@ import org.apache.cloudstack.api.Parameter;
 import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.InternalLoadBalancerElementResponse;
 import org.apache.cloudstack.api.response.ProviderResponse;
+import org.apache.cloudstack.context.CallContext;
 import org.apache.cloudstack.network.element.InternalLoadBalancerElementService;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.event.EventTypes;
 import com.cloud.exception.ResourceAllocationException;
 import com.cloud.network.VirtualRouterProvider;
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
 
 @APICommand(name = "createInternalLoadBalancerElement", responseObject=InternalLoadBalancerElementResponse.class, description="Create an Internal Load Balancer element.",since="4.2.0")
 public class CreateInternalLoadBalancerElementCmd extends BaseAsyncCreateCmd {
@@ -82,7 +83,7 @@ public class CreateInternalLoadBalancerElementCmd extends BaseAsyncCreateCmd {
 
     @Override
     public void execute(){
-        UserContext.current().setEventDetails("Virtual router element Id: "+getEntityId());
+        CallContext.current().setEventDetails("Virtual router element Id: "+getEntityId());
         VirtualRouterProvider result = _service.get(0).getInternalLoadBalancerElement(getEntityId());
         if (result != null) {
             InternalLoadBalancerElementResponse response = _responseGenerator.createInternalLbElementResponse(result);

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/admin/internallb/StartInternalLBVMCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/admin/internallb/StartInternalLBVMCmd.java b/api/src/org/apache/cloudstack/api/command/admin/internallb/StartInternalLBVMCmd.java
index 256804f..f70e04c 100644
--- a/api/src/org/apache/cloudstack/api/command/admin/internallb/StartInternalLBVMCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/admin/internallb/StartInternalLBVMCmd.java
@@ -24,6 +24,8 @@ import org.apache.cloudstack.api.BaseAsyncCmd;
 import org.apache.cloudstack.api.Parameter;
 import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.DomainRouterResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.event.EventTypes;
@@ -33,7 +35,6 @@ import com.cloud.exception.InvalidParameterValueException;
 import com.cloud.exception.ResourceUnavailableException;
 import com.cloud.network.router.VirtualRouter;
 import com.cloud.network.router.VirtualRouter.Role;
-import com.cloud.user.UserContext;
 
 @APICommand(name = "startInternalLoadBalancerVM", responseObject=DomainRouterResponse.class, description="Starts an existing internal lb vm.")
 public class StartInternalLBVMCmd extends BaseAsyncCmd {
@@ -100,13 +101,13 @@ public class StartInternalLBVMCmd extends BaseAsyncCmd {
 
     @Override
     public void execute() throws ConcurrentOperationException, ResourceUnavailableException, InsufficientCapacityException{
-        UserContext.current().setEventDetails("Internal Lb Vm Id: "+getId());
+        CallContext.current().setEventDetails("Internal Lb Vm Id: "+getId());
         VirtualRouter result = null;
         VirtualRouter router = _routerService.findRouter(getId());
         if (router == null || router.getRole() != Role.INTERNAL_LB_VM) {
             throw new InvalidParameterValueException("Can't find internal lb vm by id");
         } else {
-            result = _internalLbSvc.startInternalLbVm(getId(), UserContext.current().getCaller(), UserContext.current().getCallerUserId());
+            result = _internalLbSvc.startInternalLbVm(getId(), CallContext.current().getCallingAccount(), CallContext.current().getCallingUserId());
         }
         
         if (result != null){

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/admin/internallb/StopInternalLBVMCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/admin/internallb/StopInternalLBVMCmd.java b/api/src/org/apache/cloudstack/api/command/admin/internallb/StopInternalLBVMCmd.java
index fd6a7dd..d84f3ab 100644
--- a/api/src/org/apache/cloudstack/api/command/admin/internallb/StopInternalLBVMCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/admin/internallb/StopInternalLBVMCmd.java
@@ -24,6 +24,8 @@ import org.apache.cloudstack.api.BaseAsyncCmd;
 import org.apache.cloudstack.api.Parameter;
 import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.DomainRouterResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.event.EventTypes;
@@ -32,7 +34,6 @@ import com.cloud.exception.InvalidParameterValueException;
 import com.cloud.exception.ResourceUnavailableException;
 import com.cloud.network.router.VirtualRouter;
 import com.cloud.network.router.VirtualRouter.Role;
-import com.cloud.user.UserContext;
 
 @APICommand(name = "stopInternalLoadBalancerVM", description = "Stops an Internal LB vm.", responseObject = DomainRouterResponse.class)
 public class StopInternalLBVMCmd extends BaseAsyncCmd {
@@ -103,13 +104,13 @@ public class StopInternalLBVMCmd extends BaseAsyncCmd {
 
     @Override
     public void execute() throws ConcurrentOperationException, ResourceUnavailableException {
-        UserContext.current().setEventDetails("Internal lb vm Id: "+getId());
+        CallContext.current().setEventDetails("Internal lb vm Id: "+getId());
         VirtualRouter result = null;
         VirtualRouter vm = _routerService.findRouter(getId());
         if (vm == null || vm.getRole() != Role.INTERNAL_LB_VM) {
             throw new InvalidParameterValueException("Can't find internal lb vm by id");
         } else {
-            result = _internalLbSvc.stopInternalLbVm(getId(), isForced(), UserContext.current().getCaller(), UserContext.current().getCallerUserId());
+            result = _internalLbSvc.stopInternalLbVm(getId(), isForced(), CallContext.current().getCallingAccount(), CallContext.current().getCallingUserId());
         } 
         
         if (result != null) {

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/admin/network/AddNetworkServiceProviderCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/AddNetworkServiceProviderCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/AddNetworkServiceProviderCmd.java
index 280369a..d56deb8 100644
--- a/api/src/org/apache/cloudstack/api/command/admin/network/AddNetworkServiceProviderCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/admin/network/AddNetworkServiceProviderCmd.java
@@ -27,13 +27,14 @@ import org.apache.cloudstack.api.Parameter;
 import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.PhysicalNetworkResponse;
 import org.apache.cloudstack.api.response.ProviderResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.event.EventTypes;
 import com.cloud.exception.ResourceAllocationException;
 import com.cloud.network.PhysicalNetworkServiceProvider;
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
 
 @APICommand(name = "addNetworkServiceProvider", description="Adds a network serviceProvider to a physical network", responseObject=ProviderResponse.class, since="3.0.0")
 public class AddNetworkServiceProviderCmd extends BaseAsyncCreateCmd {
@@ -96,7 +97,7 @@ public class AddNetworkServiceProviderCmd extends BaseAsyncCreateCmd {
 
     @Override
     public void execute(){
-        UserContext.current().setEventDetails("Network ServiceProvider Id: "+getEntityId());
+        CallContext.current().setEventDetails("Network ServiceProvider Id: "+getEntityId());
         PhysicalNetworkServiceProvider result = _networkService.getCreatedPhysicalNetworkServiceProvider(getEntityId());
         if (result != null) {
             ProviderResponse response = _responseGenerator.createNetworkServiceProviderResponse(result);

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/admin/network/CreatePhysicalNetworkCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/CreatePhysicalNetworkCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/CreatePhysicalNetworkCmd.java
index 6c1100a..3627e55 100644
--- a/api/src/org/apache/cloudstack/api/command/admin/network/CreatePhysicalNetworkCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/admin/network/CreatePhysicalNetworkCmd.java
@@ -28,13 +28,14 @@ import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.DomainResponse;
 import org.apache.cloudstack.api.response.PhysicalNetworkResponse;
 import org.apache.cloudstack.api.response.ZoneResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.event.EventTypes;
 import com.cloud.exception.ResourceAllocationException;
 import com.cloud.network.PhysicalNetwork;
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
 
 @APICommand(name = "createPhysicalNetwork", description="Creates a physical network", responseObject=PhysicalNetworkResponse.class, since="3.0.0")
 public class CreatePhysicalNetworkCmd extends BaseAsyncCreateCmd {
@@ -144,7 +145,7 @@ public class CreatePhysicalNetworkCmd extends BaseAsyncCreateCmd {
 
     @Override
     public void execute(){
-        UserContext.current().setEventDetails("Physical Network Id: "+getEntityId());
+        CallContext.current().setEventDetails("Physical Network Id: "+getEntityId());
         PhysicalNetwork result = _networkService.getCreatedPhysicalNetwork(getEntityId());
         if (result != null) {
             PhysicalNetworkResponse response = _responseGenerator.createPhysicalNetworkResponse(result);

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/admin/network/DeletePhysicalNetworkCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/DeletePhysicalNetworkCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/DeletePhysicalNetworkCmd.java
index b5c015a..1764127 100644
--- a/api/src/org/apache/cloudstack/api/command/admin/network/DeletePhysicalNetworkCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/admin/network/DeletePhysicalNetworkCmd.java
@@ -25,11 +25,12 @@ import org.apache.cloudstack.api.Parameter;
 import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.PhysicalNetworkResponse;
 import org.apache.cloudstack.api.response.SuccessResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.event.EventTypes;
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
 
 @APICommand(name = "deletePhysicalNetwork", description="Deletes a Physical Network.", responseObject=SuccessResponse.class, since="3.0.0")
 public class DeletePhysicalNetworkCmd extends BaseAsyncCmd {
@@ -68,7 +69,7 @@ public class DeletePhysicalNetworkCmd extends BaseAsyncCmd {
 
     @Override
     public void execute(){
-        UserContext.current().setEventDetails("Physical Network Id: " + id);
+        CallContext.current().setEventDetails("Physical Network Id: " + id);
         boolean result = _networkService.deletePhysicalNetwork(getId());
         if (result) {
             SuccessResponse response = new SuccessResponse(getCommandName());

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/admin/network/ReleaseDedicatedGuestVlanRangeCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/ReleaseDedicatedGuestVlanRangeCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/ReleaseDedicatedGuestVlanRangeCmd.java
index f9e96f6..49a3d36 100644
--- a/api/src/org/apache/cloudstack/api/command/admin/network/ReleaseDedicatedGuestVlanRangeCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/admin/network/ReleaseDedicatedGuestVlanRangeCmd.java
@@ -20,11 +20,13 @@ package org.apache.cloudstack.api.command.admin.network;
 import com.cloud.event.EventTypes;
 import com.cloud.exception.ResourceInUseException;
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
+
 import org.apache.cloudstack.api.*;
 import org.apache.cloudstack.api.response.CounterResponse;
 import org.apache.cloudstack.api.response.GuestVlanRangeResponse;
 import org.apache.cloudstack.api.response.SuccessResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 @APICommand(name = "releaseDedicatedGuestVlanRange", description = "Releases a dedicated guest vlan range to the system", responseObject = SuccessResponse.class)
@@ -80,7 +82,7 @@ public class ReleaseDedicatedGuestVlanRangeCmd extends BaseAsyncCmd {
 
     @Override
     public void execute(){
-        UserContext.current().setEventDetails("Dedicated guest vlan range Id: " + id);
+        CallContext.current().setEventDetails("Dedicated guest vlan range Id: " + id);
         boolean result = _networkService.releaseDedicatedGuestVlanRange(getId());
         if (result) {
             SuccessResponse response = new SuccessResponse(getCommandName());

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/admin/router/ConfigureVirtualRouterElementCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/admin/router/ConfigureVirtualRouterElementCmd.java b/api/src/org/apache/cloudstack/api/command/admin/router/ConfigureVirtualRouterElementCmd.java
index e28e916..625abf0 100644
--- a/api/src/org/apache/cloudstack/api/command/admin/router/ConfigureVirtualRouterElementCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/admin/router/ConfigureVirtualRouterElementCmd.java
@@ -28,6 +28,8 @@ import org.apache.cloudstack.api.BaseAsyncCmd;
 import org.apache.cloudstack.api.Parameter;
 import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.VirtualRouterProviderResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.event.EventTypes;
@@ -37,7 +39,6 @@ import com.cloud.exception.ResourceUnavailableException;
 import com.cloud.network.VirtualRouterProvider;
 import com.cloud.network.element.VirtualRouterElementService;
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
 
 @APICommand(name = "configureVirtualRouterElement", responseObject=VirtualRouterProviderResponse.class, description="Configures a virtual router element.")
 public class ConfigureVirtualRouterElementCmd extends BaseAsyncCmd {
@@ -116,7 +117,7 @@ public class ConfigureVirtualRouterElementCmd extends BaseAsyncCmd {
 
     @Override
     public void execute() throws ConcurrentOperationException, ResourceUnavailableException, InsufficientCapacityException{
-        UserContext.current().setEventDetails("Virtual router element: " + id);
+        CallContext.current().setEventDetails("Virtual router element: " + id);
         VirtualRouterProvider result = _service.get(0).configure(this);
         if (result != null){
             VirtualRouterProviderResponse routerResponse = _responseGenerator.createVirtualRouterProviderResponse(result);

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/admin/router/CreateVirtualRouterElementCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/admin/router/CreateVirtualRouterElementCmd.java b/api/src/org/apache/cloudstack/api/command/admin/router/CreateVirtualRouterElementCmd.java
index b3fca5a..66c8ae5 100644
--- a/api/src/org/apache/cloudstack/api/command/admin/router/CreateVirtualRouterElementCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/admin/router/CreateVirtualRouterElementCmd.java
@@ -28,6 +28,8 @@ import org.apache.cloudstack.api.Parameter;
 import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.ProviderResponse;
 import org.apache.cloudstack.api.response.VirtualRouterProviderResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.event.EventTypes;
@@ -37,7 +39,6 @@ import com.cloud.network.VirtualRouterProvider;
 import com.cloud.network.VirtualRouterProvider.VirtualRouterProviderType;
 import com.cloud.network.element.VirtualRouterElementService;
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
 
 @APICommand(name = "createVirtualRouterElement", responseObject=VirtualRouterProviderResponse.class, description="Create a virtual router element.")
 public class CreateVirtualRouterElementCmd extends BaseAsyncCreateCmd {
@@ -98,7 +99,7 @@ public class CreateVirtualRouterElementCmd extends BaseAsyncCreateCmd {
 
     @Override
     public void execute(){
-        UserContext.current().setEventDetails("Virtual router element Id: "+getEntityId());
+        CallContext.current().setEventDetails("Virtual router element Id: "+getEntityId());
         VirtualRouterProvider result = _service.get(0).getCreatedElement(getEntityId());
         if (result != null) {
             VirtualRouterProviderResponse response = _responseGenerator.createVirtualRouterProviderResponse(result);

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/admin/router/DestroyRouterCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/admin/router/DestroyRouterCmd.java b/api/src/org/apache/cloudstack/api/command/admin/router/DestroyRouterCmd.java
index d0dda29..44ca56b 100644
--- a/api/src/org/apache/cloudstack/api/command/admin/router/DestroyRouterCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/admin/router/DestroyRouterCmd.java
@@ -24,6 +24,8 @@ import org.apache.cloudstack.api.BaseAsyncCmd;
 import org.apache.cloudstack.api.Parameter;
 import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.DomainRouterResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.event.EventTypes;
@@ -31,7 +33,6 @@ import com.cloud.exception.ConcurrentOperationException;
 import com.cloud.exception.ResourceUnavailableException;
 import com.cloud.network.router.VirtualRouter;
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
 
 @APICommand(name = "destroyRouter", description = "Destroys a router.", responseObject = DomainRouterResponse.class)
 public class DestroyRouterCmd extends BaseAsyncCmd {
@@ -95,10 +96,10 @@ public class DestroyRouterCmd extends BaseAsyncCmd {
 
     @Override
     public void execute() throws ConcurrentOperationException, ResourceUnavailableException {
-        UserContext ctx = UserContext.current();
+        CallContext ctx = CallContext.current();
         ctx.setEventDetails("Router Id: "+getId());
 
-        VirtualRouter result = _routerService.destroyRouter(getId(), ctx.getCaller(), ctx.getCallerUserId());
+        VirtualRouter result = _routerService.destroyRouter(getId(), ctx.getCallingAccount(), ctx.getCallingUserId());
         if (result != null) {
             DomainRouterResponse response = _responseGenerator.createDomainRouterResponse(result);
             response.setResponseName(getCommandName());

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/admin/router/RebootRouterCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/admin/router/RebootRouterCmd.java b/api/src/org/apache/cloudstack/api/command/admin/router/RebootRouterCmd.java
index 504b715..0c2cbc3 100644
--- a/api/src/org/apache/cloudstack/api/command/admin/router/RebootRouterCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/admin/router/RebootRouterCmd.java
@@ -24,6 +24,8 @@ import org.apache.cloudstack.api.BaseAsyncCmd;
 import org.apache.cloudstack.api.Parameter;
 import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.DomainRouterResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.event.EventTypes;
@@ -32,7 +34,6 @@ import com.cloud.exception.InsufficientCapacityException;
 import com.cloud.exception.ResourceUnavailableException;
 import com.cloud.network.router.VirtualRouter;
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
 
 @APICommand(name = "rebootRouter", description="Starts a router.", responseObject=DomainRouterResponse.class)
 public class RebootRouterCmd extends BaseAsyncCmd {
@@ -95,7 +96,7 @@ public class RebootRouterCmd extends BaseAsyncCmd {
 
     @Override
     public void execute() throws ConcurrentOperationException, ResourceUnavailableException, InsufficientCapacityException{
-        UserContext.current().setEventDetails("Router Id: "+getId());
+        CallContext.current().setEventDetails("Router Id: "+getId());
         VirtualRouter result = _routerService.rebootRouter(this.getId(), true);
         if (result != null){
             DomainRouterResponse response = _responseGenerator.createDomainRouterResponse(result);

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/admin/router/StartRouterCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/admin/router/StartRouterCmd.java b/api/src/org/apache/cloudstack/api/command/admin/router/StartRouterCmd.java
index b575bf5..6981907 100644
--- a/api/src/org/apache/cloudstack/api/command/admin/router/StartRouterCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/admin/router/StartRouterCmd.java
@@ -24,6 +24,8 @@ import org.apache.cloudstack.api.BaseAsyncCmd;
 import org.apache.cloudstack.api.Parameter;
 import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.DomainRouterResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.event.EventTypes;
@@ -34,7 +36,6 @@ import com.cloud.exception.ResourceUnavailableException;
 import com.cloud.network.router.VirtualRouter;
 import com.cloud.network.router.VirtualRouter.Role;
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
 
 @APICommand(name = "startRouter", responseObject=DomainRouterResponse.class, description="Starts a router.")
 public class StartRouterCmd extends BaseAsyncCmd {
@@ -101,7 +102,7 @@ public class StartRouterCmd extends BaseAsyncCmd {
 
     @Override
     public void execute() throws ConcurrentOperationException, ResourceUnavailableException, InsufficientCapacityException{
-        UserContext.current().setEventDetails("Router Id: "+getId());
+        CallContext.current().setEventDetails("Router Id: "+getId());
         VirtualRouter result = null;
         VirtualRouter router = _routerService.findRouter(getId());
         if (router == null || router.getRole() != Role.VIRTUAL_ROUTER) {

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/admin/router/StopRouterCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/admin/router/StopRouterCmd.java b/api/src/org/apache/cloudstack/api/command/admin/router/StopRouterCmd.java
index 10aebc0..ab631e8 100644
--- a/api/src/org/apache/cloudstack/api/command/admin/router/StopRouterCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/admin/router/StopRouterCmd.java
@@ -24,6 +24,8 @@ import org.apache.cloudstack.api.BaseAsyncCmd;
 import org.apache.cloudstack.api.Parameter;
 import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.DomainRouterResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.event.EventTypes;
@@ -33,7 +35,6 @@ import com.cloud.exception.ResourceUnavailableException;
 import com.cloud.network.router.VirtualRouter;
 import com.cloud.network.router.VirtualRouter.Role;
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
 
 @APICommand(name = "stopRouter", description = "Stops a router.", responseObject = DomainRouterResponse.class)
 public class StopRouterCmd extends BaseAsyncCmd {
@@ -104,7 +105,7 @@ public class StopRouterCmd extends BaseAsyncCmd {
 
     @Override
     public void execute() throws ConcurrentOperationException, ResourceUnavailableException {
-        UserContext.current().setEventDetails("Router Id: "+getId());
+        CallContext.current().setEventDetails("Router Id: "+getId());
         VirtualRouter result = null;
         VirtualRouter router = _routerService.findRouter(getId());
         if (router == null || router.getRole() != Role.VIRTUAL_ROUTER) {

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/admin/storage/CancelPrimaryStorageMaintenanceCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/admin/storage/CancelPrimaryStorageMaintenanceCmd.java b/api/src/org/apache/cloudstack/api/command/admin/storage/CancelPrimaryStorageMaintenanceCmd.java
index 525e923..0a5efda 100644
--- a/api/src/org/apache/cloudstack/api/command/admin/storage/CancelPrimaryStorageMaintenanceCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/admin/storage/CancelPrimaryStorageMaintenanceCmd.java
@@ -24,13 +24,14 @@ import org.apache.cloudstack.api.BaseAsyncCmd;
 import org.apache.cloudstack.api.Parameter;
 import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.StoragePoolResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.event.EventTypes;
 import com.cloud.exception.ResourceUnavailableException;
 import com.cloud.storage.StoragePool;
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
 
 @APICommand(name = "cancelStorageMaintenance", description="Cancels maintenance for primary storage", responseObject=StoragePoolResponse.class)
 public class CancelPrimaryStorageMaintenanceCmd extends BaseAsyncCmd {
@@ -81,7 +82,7 @@ public class CancelPrimaryStorageMaintenanceCmd extends BaseAsyncCmd {
 
     @Override
     public long getEntityOwnerId() {
-        Account account = UserContext.current().getCaller();
+        Account account = CallContext.current().getCallingAccount();
         if (account != null) {
             return account.getId();
         }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/admin/storage/PreparePrimaryStorageForMaintenanceCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/admin/storage/PreparePrimaryStorageForMaintenanceCmd.java b/api/src/org/apache/cloudstack/api/command/admin/storage/PreparePrimaryStorageForMaintenanceCmd.java
index 565ed07..9a784ee 100644
--- a/api/src/org/apache/cloudstack/api/command/admin/storage/PreparePrimaryStorageForMaintenanceCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/admin/storage/PreparePrimaryStorageForMaintenanceCmd.java
@@ -24,6 +24,8 @@ import org.apache.cloudstack.api.BaseAsyncCmd;
 import org.apache.cloudstack.api.Parameter;
 import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.StoragePoolResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.event.EventTypes;
@@ -31,7 +33,6 @@ import com.cloud.exception.InsufficientCapacityException;
 import com.cloud.exception.ResourceUnavailableException;
 import com.cloud.storage.StoragePool;
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
 
 @APICommand(name = "enableStorageMaintenance", description="Puts storage pool into maintenance state", responseObject=StoragePoolResponse.class)
 public class PreparePrimaryStorageForMaintenanceCmd extends BaseAsyncCmd {
@@ -79,7 +80,7 @@ public class PreparePrimaryStorageForMaintenanceCmd extends BaseAsyncCmd {
 
     @Override
     public long getEntityOwnerId() {
-        Account account = UserContext.current().getCaller();
+        Account account = CallContext.current().getCallingAccount();
         if (account != null) {
             return account.getId();
         }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/admin/systemvm/DestroySystemVmCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/admin/systemvm/DestroySystemVmCmd.java b/api/src/org/apache/cloudstack/api/command/admin/systemvm/DestroySystemVmCmd.java
index 87c6696..b539df1 100644
--- a/api/src/org/apache/cloudstack/api/command/admin/systemvm/DestroySystemVmCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/admin/systemvm/DestroySystemVmCmd.java
@@ -24,11 +24,12 @@ import org.apache.cloudstack.api.BaseAsyncCmd;
 import org.apache.cloudstack.api.Parameter;
 import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.SystemVmResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.event.EventTypes;
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
 import com.cloud.vm.VirtualMachine;
 
 @APICommand(name = "destroySystemVm", responseObject=SystemVmResponse.class, description="Destroyes a system virtual machine.")
@@ -56,7 +57,7 @@ public class DestroySystemVmCmd extends BaseAsyncCmd {
 
     @Override
     public long getEntityOwnerId() {
-        Account account = UserContext.current().getCaller();
+        Account account = CallContext.current().getCallingAccount();
         if (account != null) {
             return account.getId();
         }
@@ -92,7 +93,7 @@ public class DestroySystemVmCmd extends BaseAsyncCmd {
 
     @Override
     public void execute(){
-        UserContext.current().setEventDetails("Vm Id: "+getId());
+        CallContext.current().setEventDetails("Vm Id: "+getId());
         VirtualMachine instance = _mgr.destroySystemVM(this);
         if (instance != null) {
             SystemVmResponse response = _responseGenerator.createSystemVmResponse(instance);

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/admin/systemvm/MigrateSystemVMCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/admin/systemvm/MigrateSystemVMCmd.java b/api/src/org/apache/cloudstack/api/command/admin/systemvm/MigrateSystemVMCmd.java
index 31871b9..7b3436d 100644
--- a/api/src/org/apache/cloudstack/api/command/admin/systemvm/MigrateSystemVMCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/admin/systemvm/MigrateSystemVMCmd.java
@@ -25,6 +25,8 @@ import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.HostResponse;
 import org.apache.cloudstack.api.response.SystemVmInstanceResponse;
 import org.apache.cloudstack.api.response.SystemVmResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.event.EventTypes;
@@ -35,7 +37,6 @@ import com.cloud.exception.ResourceUnavailableException;
 import com.cloud.exception.VirtualMachineMigrationException;
 import com.cloud.host.Host;
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
 import com.cloud.vm.VirtualMachine;
 
 @APICommand(name = "migrateSystemVm", description="Attempts Migration of a system virtual machine to the host specified.", responseObject=SystemVmInstanceResponse.class)
@@ -81,7 +82,7 @@ public class MigrateSystemVMCmd extends BaseAsyncCmd {
 
     @Override
     public long getEntityOwnerId() {
-        Account account = UserContext.current().getCaller();
+        Account account = CallContext.current().getCallingAccount();
         if (account != null) {
             return account.getId();
         }
@@ -107,7 +108,7 @@ public class MigrateSystemVMCmd extends BaseAsyncCmd {
             throw new InvalidParameterValueException("Unable to find the host to migrate the VM, host id=" + getHostId());
         }
         try{
-            UserContext.current().setEventDetails("VM Id: " + getVirtualMachineId() + " to host Id: "+ getHostId());
+            CallContext.current().setEventDetails("VM Id: " + getVirtualMachineId() + " to host Id: "+ getHostId());
             //FIXME : Should not be calling UserVmService to migrate all types of VMs - need a generic VM layer
             VirtualMachine migratedVm = _userVmService.migrateVirtualMachine(getVirtualMachineId(), destinationHost);
             if (migratedVm != null) {

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/admin/systemvm/RebootSystemVmCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/admin/systemvm/RebootSystemVmCmd.java b/api/src/org/apache/cloudstack/api/command/admin/systemvm/RebootSystemVmCmd.java
index 8cb0718..904faab 100644
--- a/api/src/org/apache/cloudstack/api/command/admin/systemvm/RebootSystemVmCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/admin/systemvm/RebootSystemVmCmd.java
@@ -24,11 +24,12 @@ import org.apache.cloudstack.api.BaseAsyncCmd;
 import org.apache.cloudstack.api.Parameter;
 import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.SystemVmResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.event.EventTypes;
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
 import com.cloud.vm.VirtualMachine;
 
 @APICommand(name = "rebootSystemVm", description="Reboots a system VM.", responseObject=SystemVmResponse.class)
@@ -64,7 +65,7 @@ public class RebootSystemVmCmd extends BaseAsyncCmd {
 
     @Override
     public long getEntityOwnerId() {
-        Account account = UserContext.current().getCaller();
+        Account account = CallContext.current().getCallingAccount();
         if (account != null) {
             return account.getId();
         }
@@ -98,7 +99,7 @@ public class RebootSystemVmCmd extends BaseAsyncCmd {
 
     @Override
     public void execute(){
-        UserContext.current().setEventDetails("Vm Id: "+getId());
+        CallContext.current().setEventDetails("Vm Id: "+getId());
         VirtualMachine result = _mgr.rebootSystemVM(this);
         if (result != null) {
             SystemVmResponse response = _responseGenerator.createSystemVmResponse(result);

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/admin/systemvm/ScaleSystemVMCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/admin/systemvm/ScaleSystemVMCmd.java b/api/src/org/apache/cloudstack/api/command/admin/systemvm/ScaleSystemVMCmd.java
index a077e24..61b457f 100644
--- a/api/src/org/apache/cloudstack/api/command/admin/systemvm/ScaleSystemVMCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/admin/systemvm/ScaleSystemVMCmd.java
@@ -18,15 +18,17 @@ package org.apache.cloudstack.api.command.admin.systemvm;
 
 import com.cloud.event.EventTypes;
 import com.cloud.exception.*;
+
 import org.apache.cloudstack.api.*;
 import org.apache.cloudstack.api.command.user.vm.UpgradeVMCmd;
 import org.apache.cloudstack.api.response.ServiceOfferingResponse;
 import org.apache.cloudstack.api.response.SystemVmResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.offering.ServiceOffering;
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
 import com.cloud.vm.VirtualMachine;
 
 @APICommand(name = "scaleSystemVm", responseObject=SystemVmResponse.class, description="Scale the service offering for a system vm (console proxy or secondary storage). " +
@@ -71,7 +73,7 @@ public class ScaleSystemVMCmd extends BaseAsyncCmd {
 
     @Override
     public long getEntityOwnerId() {
-        Account account = UserContext.current().getCaller();
+        Account account = CallContext.current().getCallingAccount();
         if (account != null) {
             return account.getId();
         }
@@ -81,7 +83,7 @@ public class ScaleSystemVMCmd extends BaseAsyncCmd {
 
     @Override
     public void execute(){
-        UserContext.current().setEventDetails("SystemVm Id: "+getId());
+        CallContext.current().setEventDetails("SystemVm Id: "+getId());
 
         ServiceOffering serviceOffering = _configService.getServiceOffering(serviceOfferingId);
         if (serviceOffering == null) {

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/admin/systemvm/StartSystemVMCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/admin/systemvm/StartSystemVMCmd.java b/api/src/org/apache/cloudstack/api/command/admin/systemvm/StartSystemVMCmd.java
index 1283d98..1062ae4 100644
--- a/api/src/org/apache/cloudstack/api/command/admin/systemvm/StartSystemVMCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/admin/systemvm/StartSystemVMCmd.java
@@ -24,11 +24,12 @@ import org.apache.cloudstack.api.BaseAsyncCmd;
 import org.apache.cloudstack.api.Parameter;
 import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.SystemVmResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.event.EventTypes;
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
 import com.cloud.vm.VirtualMachine;
 
 @APICommand(name = "startSystemVm", responseObject=SystemVmResponse.class, description="Starts a system virtual machine.")
@@ -68,7 +69,7 @@ public class StartSystemVMCmd extends BaseAsyncCmd {
 
     @Override
     public long getEntityOwnerId() {
-        Account account = UserContext.current().getCaller();
+        Account account = CallContext.current().getCallingAccount();
         if (account != null) {
             return account.getId();
         }
@@ -102,7 +103,7 @@ public class StartSystemVMCmd extends BaseAsyncCmd {
 
     @Override
     public void execute(){
-        UserContext.current().setEventDetails("Vm Id: "+getId());
+        CallContext.current().setEventDetails("Vm Id: "+getId());
         VirtualMachine instance = _mgr.startSystemVM(getId());
         if (instance != null) {
             SystemVmResponse response = _responseGenerator.createSystemVmResponse(instance);

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/admin/systemvm/StopSystemVmCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/admin/systemvm/StopSystemVmCmd.java b/api/src/org/apache/cloudstack/api/command/admin/systemvm/StopSystemVmCmd.java
index 9954330..c147540 100644
--- a/api/src/org/apache/cloudstack/api/command/admin/systemvm/StopSystemVmCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/admin/systemvm/StopSystemVmCmd.java
@@ -24,13 +24,14 @@ import org.apache.cloudstack.api.BaseAsyncCmd;
 import org.apache.cloudstack.api.Parameter;
 import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.SystemVmResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.event.EventTypes;
 import com.cloud.exception.ConcurrentOperationException;
 import com.cloud.exception.ResourceUnavailableException;
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
 import com.cloud.vm.VirtualMachine;
 
 @APICommand(name = "stopSystemVm", description="Stops a system VM.", responseObject=SystemVmResponse.class)
@@ -69,7 +70,7 @@ public class StopSystemVmCmd extends BaseAsyncCmd {
 
     @Override
     public long getEntityOwnerId() {
-        Account account = UserContext.current().getCaller();
+        Account account = CallContext.current().getCallingAccount();
         if (account != null) {
             return account.getId();
         }
@@ -109,7 +110,7 @@ public class StopSystemVmCmd extends BaseAsyncCmd {
 
     @Override
     public void execute() throws ResourceUnavailableException, ConcurrentOperationException {
-        UserContext.current().setEventDetails("Vm Id: "+getId());
+        CallContext.current().setEventDetails("Vm Id: "+getId());
         VirtualMachine result = _mgr.stopSystemVM(this);
         if (result != null) {
             SystemVmResponse response = _responseGenerator.createSystemVmResponse(result);


[24/50] [abbrv] be able to upload template into swift

Posted by ch...@apache.org.
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/bf32776f/server/test/com/cloud/upgrade/Usage217To224UpgradeTest.java
----------------------------------------------------------------------
diff --git a/server/test/com/cloud/upgrade/Usage217To224UpgradeTest.java b/server/test/com/cloud/upgrade/Usage217To224UpgradeTest.java
deleted file mode 100644
index 741af5a..0000000
--- a/server/test/com/cloud/upgrade/Usage217To224UpgradeTest.java
+++ /dev/null
@@ -1,94 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-package com.cloud.upgrade;
-
-
-import java.sql.Connection;
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-
-import javax.inject.Inject;
-
-import junit.framework.TestCase;
-
-import org.apache.log4j.Logger;
-import org.junit.After;
-import org.junit.Before;
-
-import com.cloud.upgrade.dao.VersionDaoImpl;
-
-import com.cloud.utils.db.DbTestUtils;
-import com.cloud.utils.db.Transaction;
-
-public class Usage217To224UpgradeTest extends TestCase {
-    private static final Logger s_logger = Logger.getLogger(Usage217To224UpgradeTest.class);
-
-    @Inject VersionDaoImpl dao;
-    @Inject PremiumDatabaseUpgradeChecker checker;
-    
-    @Override
-    @Before
-    public void setUp() throws Exception {
-        DbTestUtils.executeScript("cleanup.sql", false, true);
-        DbTestUtils.executeUsageScript("cleanup.sql", false, true);
-    }
-    
-    @Override
-    @After
-    public void tearDown() throws Exception {
-    }
-    
-    public void test21to22Upgrade() throws SQLException {
-        s_logger.debug("Finding sample data from 2.1.7");
-        DbTestUtils.executeScript("fake.sql", false, true);
-        DbTestUtils.executeUsageScript("fake.sql", false, true);
-        
-        Connection conn;
-        PreparedStatement pstmt;
-        
-        
-        String version = dao.getCurrentVersion();
-        assert version.equals("2.1.7") : "Version returned is not 2.1.7 but " + version;
-        
-        checker.upgrade("2.1.7", "2.2.4");
-        
-        conn = Transaction.getStandaloneConnection();
-        try {
-            pstmt = conn.prepareStatement("SELECT version FROM version ORDER BY id DESC LIMIT 1");
-            ResultSet rs = pstmt.executeQuery();
-            assert rs.next() : "No version selected";
-            assert rs.getString(1).equals("2.2.4") : "VERSION stored is not 2.2.4: " + rs.getString(1);
-            rs.close();
-            pstmt.close();
-            
-            pstmt = conn.prepareStatement("SELECT COUNT(*) FROM usage_event");
-            rs = pstmt.executeQuery();
-            assert rs.next() : "Unable to get the count of usage events";
-            assert (rs.getInt(1) == 182) : "Didn't find 182 usage events but found " + rs.getInt(1);
-            rs.close();
-            pstmt.close();
-            
-        } finally {
-            try {
-                conn.close();
-            } catch (SQLException e) {
-            }
-        }
-    }
-    
-}

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/bf32776f/server/test/com/cloud/upgrade/UsageEvents218To224UpgradeTest.java
----------------------------------------------------------------------
diff --git a/server/test/com/cloud/upgrade/UsageEvents218To224UpgradeTest.java b/server/test/com/cloud/upgrade/UsageEvents218To224UpgradeTest.java
deleted file mode 100644
index cde114b..0000000
--- a/server/test/com/cloud/upgrade/UsageEvents218To224UpgradeTest.java
+++ /dev/null
@@ -1,91 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-package com.cloud.upgrade;
-
-
-import java.sql.Connection;
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-
-import javax.inject.Inject;
-
-import junit.framework.TestCase;
-
-import org.apache.log4j.Logger;
-import org.junit.After;
-import org.junit.Before;
-
-import com.cloud.upgrade.dao.VersionDaoImpl;
-
-import com.cloud.utils.db.DbTestUtils;
-import com.cloud.utils.db.Transaction;
-
-public class UsageEvents218To224UpgradeTest extends TestCase {
-    private static final Logger s_logger = Logger.getLogger(UsageEvents218To224UpgradeTest.class);
-
-    @Inject VersionDaoImpl dao;
-    @Inject DatabaseUpgradeChecker checker;
-    
-    @Override
-    @Before
-    public void setUp() throws Exception {
-        DbTestUtils.executeScript("cleanup.sql", false, true);
-    }
-    
-    @Override
-    @After
-    public void tearDown() throws Exception {
-    }
-    
-    public void test21to22Upgrade() throws SQLException {
-        s_logger.debug("Finding sample data from 2.1.8");
-        DbTestUtils.executeScript("fake.sql", false, true);
-        
-        Connection conn;
-        PreparedStatement pstmt;
-        
-        String version = dao.getCurrentVersion();
-        assert version.equals("2.1.8") : "Version returned is not 2.1.8 but " + version;
-        
-        checker.upgrade("2.1.8", "2.2.4");
-        
-        conn = Transaction.getStandaloneConnection();
-        try {
-            pstmt = conn.prepareStatement("SELECT version FROM version ORDER BY id DESC LIMIT 1");
-            ResultSet rs = pstmt.executeQuery();
-            assert rs.next() : "No version selected";
-            assert rs.getString(1).equals("2.2.4") : "VERSION stored is not 2.2.4: " + rs.getString(1);
-            rs.close();
-            pstmt.close();
-            
-            pstmt = conn.prepareStatement("SELECT COUNT(*) FROM usage_event");
-            rs = pstmt.executeQuery();
-            assert rs.next() : "Unable to get the count of usage events";
-            assert (rs.getInt(1) == 37) : "Didn't find 37 usage events but found " + rs.getInt(1);
-            rs.close();
-            pstmt.close();
-            
-        } finally {
-            try {
-                conn.close();
-            } catch (SQLException e) {
-            }
-        }
-    }
-    
-}

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/bf32776f/services/secondary-storage/pom.xml
----------------------------------------------------------------------
diff --git a/services/secondary-storage/pom.xml b/services/secondary-storage/pom.xml
index 124fa5e..7d2089b 100644
--- a/services/secondary-storage/pom.xml
+++ b/services/secondary-storage/pom.xml
@@ -66,6 +66,14 @@
     <testSourceDirectory>test</testSourceDirectory>
     <plugins>
       <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-surefire-plugin</artifactId>
+        <version>2.14</version>
+        <configuration>
+         <skipTests>true</skipTests>
+        </configuration>
+      </plugin>
+      <plugin>
         <groupId>org.codehaus.mojo</groupId>
         <artifactId>exec-maven-plugin</artifactId>
         <version>1.2.1</version>

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/bf32776f/services/secondary-storage/src/org/apache/cloudstack/storage/resource/LocalNfsSecondaryStorageResource.java
----------------------------------------------------------------------
diff --git a/services/secondary-storage/src/org/apache/cloudstack/storage/resource/LocalNfsSecondaryStorageResource.java b/services/secondary-storage/src/org/apache/cloudstack/storage/resource/LocalNfsSecondaryStorageResource.java
index 1a6dcf8..fd6e296 100644
--- a/services/secondary-storage/src/org/apache/cloudstack/storage/resource/LocalNfsSecondaryStorageResource.java
+++ b/services/secondary-storage/src/org/apache/cloudstack/storage/resource/LocalNfsSecondaryStorageResource.java
@@ -65,13 +65,10 @@ public class LocalNfsSecondaryStorageResource extends NfsSecondaryStorageResourc
         ((DownloadManagerImpl) _dlMgr).setThreadPool(Executors.newFixedThreadPool(10));
         _storage = new JavaStorageLayer();
         this._inSystemVM = false;
-        // get mount parent folder configured in global setting, if set, this will overwrite _parent in NfsSecondaryStorageResource to work
-        // around permission issue for default /mnt folder
-        ConfigurationDaoImpl configDao = new ConfigurationDaoImpl();
-        String mountParent = configDao.getValue(Config.MountParent.key());
-        if (mountParent != null) {
-            _parent = mountParent + File.separator + "secStorage";
-        }
+    }
+
+    public void setParentPath(String path) {
+        this._parent = path;
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/bf32776f/services/secondary-storage/src/org/apache/cloudstack/storage/resource/NfsSecondaryStorageResource.java
----------------------------------------------------------------------
diff --git a/services/secondary-storage/src/org/apache/cloudstack/storage/resource/NfsSecondaryStorageResource.java b/services/secondary-storage/src/org/apache/cloudstack/storage/resource/NfsSecondaryStorageResource.java
index 88e3784..054edd9 100755
--- a/services/secondary-storage/src/org/apache/cloudstack/storage/resource/NfsSecondaryStorageResource.java
+++ b/services/secondary-storage/src/org/apache/cloudstack/storage/resource/NfsSecondaryStorageResource.java
@@ -536,7 +536,7 @@ public class NfsSecondaryStorageResource extends ServerResourceBase implements S
         }
     }
 
-    protected File downloadFromUrlToNfs(String url, NfsTO nfs, String path) {
+    protected File downloadFromUrlToNfs(String url, NfsTO nfs, String path, String name) {
         HttpClient client = new DefaultHttpClient();
         HttpGet get = new HttpGet(url);
         try {
@@ -548,10 +548,19 @@ public class NfsSecondaryStorageResource extends ServerResourceBase implements S
             }
 
             String nfsMountPath = getRootDir(nfs.getUrl());
+
             String filePath = nfsMountPath + File.separator + path;
-            FileOutputStream outputStream = new FileOutputStream(filePath);
+            File directory = new File(filePath);
+            if (!directory.exists()) {
+                _storage.mkdirs(filePath);
+            }
+            File destFile = new File(filePath + File.separator + name);
+            if (!destFile.exists()) {
+                destFile.createNewFile();
+            }
+            FileOutputStream outputStream = new FileOutputStream(destFile);
             entity.writeTo(outputStream);
-            return new File(filePath);
+            return new File(destFile.getAbsolutePath());
         } catch (IOException e) {
             s_logger.debug("Faild to get url:"+ url + ", due to " + e.toString());
             throw new CloudRuntimeException(e);
@@ -565,9 +574,11 @@ public class NfsSecondaryStorageResource extends ServerResourceBase implements S
             return new DownloadAnswer("cache store can't be null", VMTemplateStorageResourceAssoc.Status.DOWNLOAD_ERROR);
         }
 
+        File file = null;
         try {
             NfsTO nfsCacheStore = (NfsTO)cacheStore;
-            File file = downloadFromUrlToNfs(cmd.getUrl(), nfsCacheStore, path);
+            String fileName = UUID.randomUUID().toString() + "." + cmd.getFormat().getFileExtension();
+            file = downloadFromUrlToNfs(cmd.getUrl(), nfsCacheStore, path, fileName);
             String swiftPath = SwiftUtil.putObject(swiftTO, file, "T-" + cmd.getId());
             String md5sum = null;
             try {
@@ -576,14 +587,17 @@ public class NfsSecondaryStorageResource extends ServerResourceBase implements S
                 s_logger.debug("Failed to get md5sum: " + file.getAbsoluteFile());
             }
 
-            file.delete();
-
-            return new DownloadAnswer(null, 100, null, VMTemplateStorageResourceAssoc.Status.DOWNLOADED,
+            DownloadAnswer answer = new DownloadAnswer(null, 100, null, VMTemplateStorageResourceAssoc.Status.DOWNLOADED,
                     swiftPath, swiftPath, file.length(), file.length(), md5sum
             );
+            return answer;
         } catch (Exception e) {
              s_logger.debug("Failed to register template into swift", e);
             return new DownloadAnswer(e.toString(), VMTemplateStorageResourceAssoc.Status.DOWNLOAD_ERROR);
+        } finally {
+            if (file != null) {
+                file.delete();
+            }
         }
     }
 

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/bf32776f/services/secondary-storage/test/org/apache/cloudstack/storage/resource/LocalNfsSecondaryStorageResourceTest.java
----------------------------------------------------------------------
diff --git a/services/secondary-storage/test/org/apache/cloudstack/storage/resource/LocalNfsSecondaryStorageResourceTest.java b/services/secondary-storage/test/org/apache/cloudstack/storage/resource/LocalNfsSecondaryStorageResourceTest.java
new file mode 100644
index 0000000..7723321
--- /dev/null
+++ b/services/secondary-storage/test/org/apache/cloudstack/storage/resource/LocalNfsSecondaryStorageResourceTest.java
@@ -0,0 +1,90 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.cloudstack.storage.resource;
+
+import com.cloud.agent.api.Answer;
+import com.cloud.agent.api.storage.DownloadAnswer;
+import com.cloud.agent.api.to.DataObjectType;
+import com.cloud.agent.api.to.NfsTO;
+import com.cloud.agent.api.to.SwiftTO;
+import com.cloud.storage.DataStoreRole;
+import com.cloud.storage.Storage;
+import com.cloud.utils.SwiftUtil;
+import junit.framework.Assert;
+import junit.framework.TestCase;
+import org.apache.cloudstack.storage.command.CopyCmdAnswer;
+import org.apache.cloudstack.storage.command.CopyCommand;
+import org.apache.cloudstack.storage.command.DownloadCommand;
+import org.apache.cloudstack.storage.to.TemplateObjectTO;
+import org.junit.Before;
+import org.junit.Test;
+import org.mockito.Mockito;
+
+
+import javax.naming.ConfigurationException;
+import java.util.HashMap;
+
+public class LocalNfsSecondaryStorageResourceTest extends TestCase {
+    LocalNfsSecondaryStorageResource resource;
+    @Before
+    @Override
+    public void setUp() throws ConfigurationException {
+        resource = new LocalNfsSecondaryStorageResource();
+        resource.setParentPath("/mnt");
+        System.setProperty("paths.script", "/Users/edison/develop/asf-master/script");
+        //resource.configure("test", new HashMap<String, Object>());
+    }
+    @Test
+    public void testExecuteRequest() throws Exception {
+        TemplateObjectTO template = Mockito.mock(TemplateObjectTO.class);
+        NfsTO cacheStore = Mockito.mock(NfsTO.class);
+        Mockito.when(cacheStore.getUrl()).thenReturn("nfs://nfs2.lab.vmops.com/export/home/edison/");
+        SwiftTO swift = Mockito.mock(SwiftTO.class);
+        Mockito.when(swift.getEndPoint()).thenReturn("https://objects.dreamhost.com/auth");
+        Mockito.when(swift.getAccount()).thenReturn("cloudstack");
+        Mockito.when(swift.getUserName()).thenReturn("images");
+        //Mockito.when(swift.getKey()).thenReturn("something");
+
+        Mockito.when(template.getDataStore()).thenReturn(swift);
+        Mockito.when(template.getPath()).thenReturn("template/1/1/");
+        Mockito.when(template.isRequiresHvm()).thenReturn(true);
+        Mockito.when(template.getId()).thenReturn(1L);
+        Mockito.when(template.getFormat()).thenReturn(Storage.ImageFormat.VHD);
+        Mockito.when(template.getOrigUrl()).thenReturn("http://nfs1.lab.vmops.com/templates/ttylinux_pv.vhd");
+        Mockito.when(template.getObjectType()).thenReturn(DataObjectType.TEMPLATE);
+
+        DownloadCommand cmd = new DownloadCommand(template, 100000L);
+        cmd.setCacheStore(cacheStore);
+        DownloadAnswer answer = (DownloadAnswer)resource.executeRequest(cmd);
+        Assert.assertTrue(answer.getResult());
+
+        Mockito.when(template.getPath()).thenReturn(answer.getInstallPath());
+        Mockito.when(template.getDataStore()).thenReturn(swift);
+        //download swift:
+        Mockito.when(cacheStore.getRole()).thenReturn(DataStoreRole.ImageCache);
+        TemplateObjectTO destTemplate = Mockito.mock(TemplateObjectTO.class);
+        Mockito.when(destTemplate.getPath()).thenReturn("template/1/2");
+        Mockito.when(destTemplate.getDataStore()).thenReturn(cacheStore);
+        Mockito.when(destTemplate.getObjectType()).thenReturn(DataObjectType.TEMPLATE);
+        CopyCommand cpyCmd = new CopyCommand(template, destTemplate, 10000, true);
+        CopyCmdAnswer copyCmdAnswer = (CopyCmdAnswer)resource.executeRequest(cpyCmd);
+        Assert.assertTrue(copyCmdAnswer.getResult());
+
+    }
+}

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/bf32776f/tools/marvin/marvin/deployDataCenter.py
----------------------------------------------------------------------
diff --git a/tools/marvin/marvin/deployDataCenter.py b/tools/marvin/marvin/deployDataCenter.py
index 20908ca..100f442 100644
--- a/tools/marvin/marvin/deployDataCenter.py
+++ b/tools/marvin/marvin/deployDataCenter.py
@@ -159,7 +159,7 @@ specify a valid config file" % cfgFile)
             secondarycmd.provider = secondary.provider
             secondarycmd.details = []
 
-            if secondarycmd.provider == 'S3':
+            if secondarycmd.provider == 'S3' or secondarycmd.provider == "Swift":
                 for key, value in vars(secondary.details).iteritems():
                     secondarycmd.details.append({
                                                 'key': key,

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/bf32776f/utils/src/com/cloud/utils/SwiftUtil.java
----------------------------------------------------------------------
diff --git a/utils/src/com/cloud/utils/SwiftUtil.java b/utils/src/com/cloud/utils/SwiftUtil.java
index b95249b..c01de86 100644
--- a/utils/src/com/cloud/utils/SwiftUtil.java
+++ b/utils/src/com/cloud/utils/SwiftUtil.java
@@ -50,6 +50,7 @@ public class SwiftUtil {
         String srcDirectory = srcFile.getParent();
         Script command = new Script("/bin/bash", logger);
         long size = srcFile.length();
+        command.add("-c");
         if (size <= SWIFT_MAX_SIZE) {
             command.add("cd " + srcDirectory
                     + ";/usr/bin/python " + swiftCli + " -A "


[49/50] [abbrv] git commit: updated refs/heads/ldapplugin to 7bc705e

Posted by ch...@apache.org.
fix NPE in localhostendpoint


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

Branch: refs/heads/ldapplugin
Commit: 4bbaac2d28644100ab92a0825089c6f19ccbcc1a
Parents: 53e6a1c
Author: Edison Su <su...@gmail.com>
Authored: Wed Jul 17 10:15:38 2013 -0700
Committer: Edison Su <su...@gmail.com>
Committed: Wed Jul 17 10:16:58 2013 -0700

----------------------------------------------------------------------
 .../src/org/apache/cloudstack/storage/LocalHostEndpoint.java   | 6 ++++++
 .../cloudstack/storage/endpoint/DefaultEndPointSelector.java   | 2 +-
 2 files changed, 7 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/4bbaac2d/engine/storage/src/org/apache/cloudstack/storage/LocalHostEndpoint.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/LocalHostEndpoint.java b/engine/storage/src/org/apache/cloudstack/storage/LocalHostEndpoint.java
index 932a07f..060ad6a 100644
--- a/engine/storage/src/org/apache/cloudstack/storage/LocalHostEndpoint.java
+++ b/engine/storage/src/org/apache/cloudstack/storage/LocalHostEndpoint.java
@@ -24,6 +24,7 @@ import java.util.concurrent.TimeUnit;
 import com.cloud.configuration.Config;
 import com.cloud.configuration.dao.ConfigurationDao;
 import com.cloud.configuration.dao.ConfigurationDaoImpl;
+import com.cloud.utils.component.ComponentContext;
 import org.apache.cloudstack.engine.subsystem.api.storage.EndPoint;
 import org.apache.cloudstack.framework.async.AsyncCompletionCallback;
 import org.apache.cloudstack.storage.command.CopyCommand;
@@ -56,6 +57,11 @@ public class LocalHostEndpoint implements EndPoint {
         executor = Executors.newScheduledThreadPool(10);
     }
 
+    public static EndPoint getEndpoint() {
+        LocalHostEndpoint endpoint = ComponentContext.inject(LocalHostEndpoint.class);
+        return endpoint;
+    }
+
     @Override
     public long getId() {
         // TODO Auto-generated method stub

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/4bbaac2d/engine/storage/src/org/apache/cloudstack/storage/endpoint/DefaultEndPointSelector.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/endpoint/DefaultEndPointSelector.java b/engine/storage/src/org/apache/cloudstack/storage/endpoint/DefaultEndPointSelector.java
index a44bbec..bbd6b6e 100644
--- a/engine/storage/src/org/apache/cloudstack/storage/endpoint/DefaultEndPointSelector.java
+++ b/engine/storage/src/org/apache/cloudstack/storage/endpoint/DefaultEndPointSelector.java
@@ -191,7 +191,7 @@ public class DefaultEndPointSelector implements EndPointSelector {
         // we can arbitrarily pick one ssvm to do that task
         List<HostVO> ssAHosts = listUpAndConnectingSecondaryStorageVmHost(dcId);
         if (ssAHosts == null || ssAHosts.isEmpty()) {
-            return new LocalHostEndpoint(); // use local host as endpoint in
+            return LocalHostEndpoint.getEndpoint(); // use local host as endpoint in
                                             // case of no ssvm existing
         }
         Collections.shuffle(ssAHosts);


[37/50] [abbrv] git commit: updated refs/heads/ldapplugin to 7bc705e

Posted by ch...@apache.org.
change all instances of account.account to acccount.

Signed-off-by: Prasanna Santhanam <ts...@apache.org>


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

Branch: refs/heads/ldapplugin
Commit: 3a60e5652908cfea7566c8a329ec41a0cbbaf751
Parents: 2910f90
Author: SrikanteswaraRao Talluri <sr...@citrix.com>
Authored: Tue Jul 16 13:53:45 2013 +0530
Committer: Prasanna Santhanam <ts...@apache.org>
Committed: Wed Jul 17 12:36:27 2013 +0530

----------------------------------------------------------------------
 .../component/test_netscaler_configs.py         | 180 +++++++++----------
 .../component/test_netscaler_lb_algo.py         |   2 +-
 .../component/test_netscaler_lb_sticky.py       |   2 +-
 .../component/test_netscaler_nw_off.py          | 108 +++++------
 .../component/test_resource_limits.py           |   2 +-
 5 files changed, 147 insertions(+), 147 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3a60e565/test/integration/component/test_netscaler_configs.py
----------------------------------------------------------------------
diff --git a/test/integration/component/test_netscaler_configs.py b/test/integration/component/test_netscaler_configs.py
index d26da47..60075e0 100644
--- a/test/integration/component/test_netscaler_configs.py
+++ b/test/integration/component/test_netscaler_configs.py
@@ -62,24 +62,24 @@ class Services:
                                     "protocol": 'TCP',
                                 },
                          "netscaler": {
-                                "ipaddress": '192.168.100.213',
+                                "ipaddress": '10.147.60.26',
                                 "username": 'nsroot',
                                 "password": 'nsroot',
                                 "networkdevicetype": 'NetscalerVPXLoadBalancer',
-                                "publicinterface": '1/1',
-                                "privateinterface": '1/1',
+                                "publicinterface": '1/3',
+                                "privateinterface": '1/2',
                                 "numretries": 2,
                                 "lbdevicededicated": False,
                                 "lbdevicecapacity": 50,
                                 "port": 22,
                          },
                          "netscaler_dedicated": {
-                                "ipaddress": '192.168.100.213',
+                                "ipaddress": '10.147.60.27',
                                 "username": 'nsroot',
                                 "password": 'nsroot',
                                 "networkdevicetype": 'NetscalerVPXLoadBalancer',
-                                "publicinterface": '1/1',
-                                "privateinterface": '1/1',
+                                "publicinterface": '1/3',
+                                "privateinterface": '1/2',
                                 "numretries": 2,
                                 "lbdevicededicated": True,
                                 "port": 22,
@@ -676,21 +676,21 @@ class TestNetScalerDedicated(cloudstackTestCase):
         self.network = Network.create(
                                     self.apiclient,
                                     self.services["network"],
-                                    accountid=self.account_1.account.name,
-                                    domainid=self.account_1.account.domainid,
+                                    accountid=self.account_1.name,
+                                    domainid=self.account_1.domainid,
                                     networkofferingid=self.network_offering.id,
                                     zoneid=self.zone.id
                                     )
         self.debug("Created network with ID: %s" % self.network.id)
 
-        self.debug("Deploying VM in account: %s" % self.account_1.account.name)
+        self.debug("Deploying VM in account: %s" % self.account_1.name)
 
         # Spawn an instance in that network
         virtual_machine = VirtualMachine.create(
                                   self.apiclient,
                                   self.services["virtual_machine"],
-                                  accountid=self.account_1.account.name,
-                                  domainid=self.account_1.account.domainid,
+                                  accountid=self.account_1.name,
+                                  domainid=self.account_1.domainid,
                                   serviceofferingid=self.service_offering.id,
                                   networkids=[str(self.network.id)]
                                   )
@@ -725,18 +725,18 @@ class TestNetScalerDedicated(cloudstackTestCase):
         Network.create(
                             self.apiclient,
                             self.services["network"],
-                            accountid=self.account_2.account.name,
-                            domainid=self.account_2.account.domainid,
+                            accountid=self.account_2.name,
+                            domainid=self.account_2.domainid,
                             networkofferingid=self.network_offering.id,
                             zoneid=self.zone.id
                         )
-        self.debug("Deploying an instance in account: %s" % self.account_2.account.name)
+        self.debug("Deploying an instance in account: %s" % self.account_2.name)
         with self.assertRaises(Exception):
             VirtualMachine.create(
                                   self.apiclient,
                                   self.services["virtual_machine"],
-                                  accountid=self.account_2.account.name,
-                                  domainid=self.account_2.account.domainid,
+                                  accountid=self.account_2.name,
+                                  domainid=self.account_2.domainid,
                                   serviceofferingid=self.service_offering.id,
                                   networkids=[str(self.network.id)]
                                   )
@@ -895,21 +895,21 @@ class TestNetScalerShared(cloudstackTestCase):
         self.network_1 = Network.create(
                                     self.apiclient,
                                     self.services["network"],
-                                    accountid=self.account_1.account.name,
-                                    domainid=self.account_1.account.domainid,
+                                    accountid=self.account_1.name,
+                                    domainid=self.account_1.domainid,
                                     networkofferingid=self.network_offering.id,
                                     zoneid=self.zone.id
                                     )
         self.debug("Created network with ID: %s" % self.network_1.id)
 
-        self.debug("Deploying VM in account: %s" % self.account_1.account.name)
+        self.debug("Deploying VM in account: %s" % self.account_1.name)
 
         # Spawn an instance in that network
         virtual_machine_1 = VirtualMachine.create(
                                   self.apiclient,
                                   self.services["virtual_machine"],
-                                  accountid=self.account_1.account.name,
-                                  domainid=self.account_1.account.domainid,
+                                  accountid=self.account_1.name,
+                                  domainid=self.account_1.domainid,
                                   serviceofferingid=self.service_offering.id,
                                   networkids=[str(self.network_1.id)]
                                   )
@@ -943,21 +943,21 @@ class TestNetScalerShared(cloudstackTestCase):
         self.network_2 = Network.create(
                                 self.apiclient,
                                 self.services["network"],
-                                accountid=self.account_2.account.name,
-                                domainid=self.account_2.account.domainid,
+                                accountid=self.account_2.name,
+                                domainid=self.account_2.domainid,
                                 networkofferingid=self.network_offering.id,
                                 zoneid=self.zone.id
                                 )
         self.debug("Created network with ID: %s" % self.network_1.id)
 
-        self.debug("Deploying VM in account: %s" % self.account_2.account.name)
+        self.debug("Deploying VM in account: %s" % self.account_2.name)
 
         # Spawn an instance in that network
         virtual_machine_2 = VirtualMachine.create(
                                   self.apiclient,
                                   self.services["virtual_machine"],
-                                  accountid=self.account_2.account.name,
-                                  domainid=self.account_2.account.domainid,
+                                  accountid=self.account_2.name,
+                                  domainid=self.account_2.domainid,
                                   serviceofferingid=self.service_offering.id,
                                   networkids=[str(self.network_2.id)]
                                   )
@@ -1107,7 +1107,7 @@ class TestNetScalerCustomCapacity(cloudstackTestCase):
             raise Exception("Warning: Exception during cleanup : %s" % e)
         return
 
-    @attr(tags = ["advancedns"])
+    @attr(tags = ["advancedns","test"])
     def test_netscaler_custom_capacity(self):
         """Test netscaler device with custom capacity
         """
@@ -1144,21 +1144,21 @@ class TestNetScalerCustomCapacity(cloudstackTestCase):
         self.network_1 = Network.create(
                                     self.apiclient,
                                     self.services["network"],
-                                    accountid=self.account_1.account.name,
-                                    domainid=self.account_1.account.domainid,
+                                    accountid=self.account_1.name,
+                                    domainid=self.account_1.domainid,
                                     networkofferingid=self.network_offering.id,
                                     zoneid=self.zone.id
                                     )
         self.debug("Created network with ID: %s" % self.network_1.id)
 
-        self.debug("Deploying VM in account: %s" % self.account_1.account.name)
+        self.debug("Deploying VM in account: %s" % self.account_1.name)
 
         # Spawn an instance in that network
         virtual_machine_1 = VirtualMachine.create(
                                   self.apiclient,
                                   self.services["virtual_machine"],
-                                  accountid=self.account_1.account.name,
-                                  domainid=self.account_1.account.domainid,
+                                  accountid=self.account_1.name,
+                                  domainid=self.account_1.domainid,
                                   serviceofferingid=self.service_offering.id,
                                   networkids=[str(self.network_1.id)]
                                   )
@@ -1192,21 +1192,21 @@ class TestNetScalerCustomCapacity(cloudstackTestCase):
         self.network_2 = Network.create(
                                 self.apiclient,
                                 self.services["network"],
-                                accountid=self.account_2.account.name,
-                                domainid=self.account_2.account.domainid,
+                                accountid=self.account_2.name,
+                                domainid=self.account_2.domainid,
                                 networkofferingid=self.network_offering.id,
                                 zoneid=self.zone.id
                                 )
         self.debug("Created network with ID: %s" % self.network_2.id)
 
-        self.debug("Deploying VM in account: %s" % self.account_2.account.name)
+        self.debug("Deploying VM in account: %s" % self.account_2.name)
 
         # Spawn an instance in that network
         virtual_machine_2 = VirtualMachine.create(
                                   self.apiclient,
                                   self.services["virtual_machine"],
-                                  accountid=self.account_2.account.name,
-                                  domainid=self.account_2.account.domainid,
+                                  accountid=self.account_2.name,
+                                  domainid=self.account_2.domainid,
                                   serviceofferingid=self.service_offering.id,
                                   networkids=[str(self.network_2.id)]
                                   )
@@ -1380,7 +1380,7 @@ class TestNetScalerNoCapacity(cloudstackTestCase):
             raise Exception("Warning: Exception during cleanup : %s" % e)
         return
 
-    @attr(tags = ["advancedns"])
+    @attr(tags = ["advancedns","test"])
     def test_netscaler_no_capacity(self):
         """Test netscaler device with no capacity remaining
         """
@@ -1418,21 +1418,21 @@ class TestNetScalerNoCapacity(cloudstackTestCase):
         self.network_1 = Network.create(
                                     self.apiclient,
                                     self.services["network"],
-                                    accountid=self.account_1.account.name,
-                                    domainid=self.account_1.account.domainid,
+                                    accountid=self.account_1.name,
+                                    domainid=self.account_1.domainid,
                                     networkofferingid=self.network_offering.id,
                                     zoneid=self.zone.id
                                     )
         self.debug("Created network with ID: %s" % self.network_1.id)
 
-        self.debug("Deploying VM in account: %s" % self.account_1.account.name)
+        self.debug("Deploying VM in account: %s" % self.account_1.name)
 
         # Spawn an instance in that network
         virtual_machine_1 = VirtualMachine.create(
                                   self.apiclient,
                                   self.services["virtual_machine"],
-                                  accountid=self.account_1.account.name,
-                                  domainid=self.account_1.account.domainid,
+                                  accountid=self.account_1.name,
+                                  domainid=self.account_1.domainid,
                                   serviceofferingid=self.service_offering.id,
                                   networkids=[str(self.network_1.id)]
                                   )
@@ -1466,21 +1466,21 @@ class TestNetScalerNoCapacity(cloudstackTestCase):
         self.network_2 = Network.create(
                                 self.apiclient,
                                 self.services["network"],
-                                accountid=self.account_2.account.name,
-                                domainid=self.account_2.account.domainid,
+                                accountid=self.account_2.name,
+                                domainid=self.account_2.domainid,
                                 networkofferingid=self.network_offering.id,
                                 zoneid=self.zone.id
                                 )
         self.debug("Created network with ID: %s" % self.network_2.id)
 
-        self.debug("Deploying VM in account: %s" % self.account_2.account.name)
+        self.debug("Deploying VM in account: %s" % self.account_2.name)
 
         # Spawn an instance in that network
         virtual_machine_2 = VirtualMachine.create(
                                   self.apiclient,
                                   self.services["virtual_machine"],
-                                  accountid=self.account_2.account.name,
-                                  domainid=self.account_2.account.domainid,
+                                  accountid=self.account_2.name,
+                                  domainid=self.account_2.domainid,
                                   serviceofferingid=self.service_offering.id,
                                   networkids=[str(self.network_2.id)]
                                   )
@@ -1648,7 +1648,7 @@ class TestGuestNetworkWithNetScaler(cloudstackTestCase):
             raise Exception("Warning: Exception during cleanup : %s" % e)
         return
 
-    @attr(tags = ["advancedns"])
+    @attr(tags = ["advancedns","test"])
     def test_01_guest_network(self):
         """Implementing Guest Network when first VM gets deployed using the network having Netscaler as LB
         """
@@ -1694,21 +1694,21 @@ class TestGuestNetworkWithNetScaler(cloudstackTestCase):
         self.network_1 = Network.create(
                                     self.apiclient,
                                     self.services["network"],
-                                    accountid=self.account_1.account.name,
-                                    domainid=self.account_1.account.domainid,
+                                    accountid=self.account_1.name,
+                                    domainid=self.account_1.domainid,
                                     networkofferingid=self.network_offering.id,
                                     zoneid=self.zone.id
                                     )
         self.debug("Created network with ID: %s" % self.network_1.id)
 
-        self.debug("Deploying VM in account: %s" % self.account_1.account.name)
+        self.debug("Deploying VM in account: %s" % self.account_1.name)
 
         # Spawn an instance in that network
         virtual_machine_1 = VirtualMachine.create(
                                   self.apiclient,
                                   self.services["virtual_machine"],
-                                  accountid=self.account_1.account.name,
-                                  domainid=self.account_1.account.domainid,
+                                  accountid=self.account_1.name,
+                                  domainid=self.account_1.domainid,
                                   serviceofferingid=self.service_offering.id,
                                   networkids=[str(self.network_1.id)]
                                   )
@@ -1768,7 +1768,7 @@ class TestGuestNetworkWithNetScaler(cloudstackTestCase):
                       (self.services["netscaler"]["ipaddress"], e))
         return
 
-    @attr(tags = ["advancedns"])
+    @attr(tags = ["advancedns","test"])
     def test_02_guest_network_multiple(self):
         """Implementing Guest Network when multiple VMs gets deployed using the network having Netscaler as LB
         """
@@ -1793,21 +1793,21 @@ class TestGuestNetworkWithNetScaler(cloudstackTestCase):
         self.network_1 = Network.create(
                                     self.apiclient,
                                     self.services["network"],
-                                    accountid=self.account_1.account.name,
-                                    domainid=self.account_1.account.domainid,
+                                    accountid=self.account_1.name,
+                                    domainid=self.account_1.domainid,
                                     networkofferingid=self.network_offering.id,
                                     zoneid=self.zone.id
                                     )
         self.debug("Created network with ID: %s" % self.network_1.id)
 
-        self.debug("Deploying VM in account: %s" % self.account_1.account.name)
+        self.debug("Deploying VM in account: %s" % self.account_1.name)
 
         # Spawn an instance in that network
         virtual_machine_1 = VirtualMachine.create(
                                   self.apiclient,
                                   self.services["virtual_machine"],
-                                  accountid=self.account_1.account.name,
-                                  domainid=self.account_1.account.domainid,
+                                  accountid=self.account_1.name,
+                                  domainid=self.account_1.domainid,
                                   serviceofferingid=self.service_offering.id,
                                   networkids=[str(self.network_1.id)]
                                   )
@@ -1840,21 +1840,21 @@ class TestGuestNetworkWithNetScaler(cloudstackTestCase):
         self.network_2 = Network.create(
                                     self.apiclient,
                                     self.services["network"],
-                                    accountid=self.account_2.account.name,
-                                    domainid=self.account_2.account.domainid,
+                                    accountid=self.account_2.name,
+                                    domainid=self.account_2.domainid,
                                     networkofferingid=self.network_offering.id,
                                     zoneid=self.zone.id
                                     )
         self.debug("Created network with ID: %s" % self.network_2.id)
 
-        self.debug("Deploying VM in account: %s" % self.account_2.account.name)
+        self.debug("Deploying VM in account: %s" % self.account_2.name)
 
         # Spawn an instance in that network
         virtual_machine_2 = VirtualMachine.create(
                                   self.apiclient,
                                   self.services["virtual_machine"],
-                                  accountid=self.account_2.account.name,
-                                  domainid=self.account_2.account.domainid,
+                                  accountid=self.account_2.name,
+                                  domainid=self.account_2.domainid,
                                   serviceofferingid=self.service_offering.id,
                                   networkids=[str(self.network_2.id)]
                                   )
@@ -1934,7 +1934,7 @@ class TestGuestNetworkWithNetScaler(cloudstackTestCase):
                       (self.services["netscaler"]["ipaddress"], e))
         return
 
-    @attr(tags = ["advancedns"])
+    @attr(tags = ["advancedns","test"])
     def test_03_delete_account(self):
         """Delete an account that has LB rules
         """
@@ -1957,21 +1957,21 @@ class TestGuestNetworkWithNetScaler(cloudstackTestCase):
         self.network = Network.create(
                                     self.apiclient,
                                     self.services["network"],
-                                    accountid=self.account_1.account.name,
-                                    domainid=self.account_1.account.domainid,
+                                    accountid=self.account_1.name,
+                                    domainid=self.account_1.domainid,
                                     networkofferingid=self.network_offering.id,
                                     zoneid=self.zone.id
                                     )
         self.debug("Created network with ID: %s" % self.network.id)
 
-        self.debug("Deploying VM in account: %s" % self.account_1.account.name)
+        self.debug("Deploying VM in account: %s" % self.account_1.name)
 
         # Spawn an instance in that network
         virtual_machine = VirtualMachine.create(
                                   self.apiclient,
                                   self.services["virtual_machine"],
-                                  accountid=self.account_1.account.name,
-                                  domainid=self.account_1.account.domainid,
+                                  accountid=self.account_1.name,
+                                  domainid=self.account_1.domainid,
                                   serviceofferingid=self.service_offering.id,
                                   networkids=[str(self.network.id)]
                                   )
@@ -1999,12 +1999,12 @@ class TestGuestNetworkWithNetScaler(cloudstackTestCase):
                             "VM state should be running after deployment"
                         )
         self.debug("Assigning public IP for the account: %s" %
-                                                self.account_1.account.name)
+                                                self.account_1.name)
         public_ip = PublicIPAddress.create(
                                 self.apiclient,
-                                accountid=self.account_1.account.name,
+                                accountid=self.account_1.name,
                                 zoneid=self.zone.id,
-                                domainid=self.account_1.account.domainid,
+                                domainid=self.account_1.domainid,
                                 networkid=self.network.id
                                 )
         self.debug(
@@ -2015,7 +2015,7 @@ class TestGuestNetworkWithNetScaler(cloudstackTestCase):
                                     self.apiclient,
                                     self.services["lbrule"],
                                     ipaddressid=public_ip.ipaddress.id,
-                                    accountid=self.account_1.account.name,
+                                    accountid=self.account_1.name,
                                     networkid=self.network.id
                                 )
         self.debug("Created the load balancing rule for public IP: %s" %
@@ -2031,10 +2031,10 @@ class TestGuestNetworkWithNetScaler(cloudstackTestCase):
                                     )
         nw = network_list[0]
 
-        self.debug("Deleting account: %s" % self.account_1.account.name)
+        self.debug("Deleting account: %s" % self.account_1.name)
         # This is a hack. Delete first account from cleanup list
         self.cleanup.pop(0).delete(self.apiclient)
-        self.debug("Account: %s is deleted!" % self.account_1.account.name)
+        self.debug("Account: %s is deleted!" % self.account_1.name)
 
         self.debug("Waiting for network.gc.interval & network.gc.wait..")
         interval = list_configurations(
@@ -2214,7 +2214,7 @@ class TestGuestNetworkShutDown(cloudstackTestCase):
             raise Exception("Warning: Exception during cleanup : %s" % e)
         return
 
-    @attr(tags = ["advancedns"])
+    @attr(tags = ["advancedns","test"])
     def test_01_stop_all_vms(self):
         """Test Stopping all the Vms for any account that has LB rules.
         """
@@ -2295,7 +2295,7 @@ class TestGuestNetworkShutDown(cloudstackTestCase):
                       (self.services["netscaler"]["ipaddress"], e))
         return
 
-    @attr(tags = ["advancedns"])
+    @attr(tags = ["advancedns","test"])
     def test_02_start_one_vm(self):
         """Test LB rules on Netscaler after starting one Vm in account
         """
@@ -2380,7 +2380,7 @@ class TestGuestNetworkShutDown(cloudstackTestCase):
                       (self.services["netscaler"]["ipaddress"], e))
         return
 
-    @attr(tags = ["advancedns"])
+    @attr(tags = ["advancedns","test"])
     def test_03_network_restart_without_cleanup(self):
         """Test LB rules on Netscaler after network restart without cleanup
         """
@@ -2442,7 +2442,7 @@ class TestGuestNetworkShutDown(cloudstackTestCase):
                       (self.services["netscaler"]["ipaddress"], e))
         return
 
-    @attr(tags = ["advancedns"])
+    @attr(tags = ["advancedns","test"])
     def test_04_network_restart_with_cleanup(self):
         """Test LB rules on Netscaler after network restart with cleanup
         """
@@ -2618,7 +2618,7 @@ class TestServiceProvider(cloudstackTestCase):
             raise Exception("Warning: Exception during cleanup : %s" % e)
         return
 
-    @attr(tags = ["advancedns"])
+    @attr(tags = ["advancedns","test"])
     def test_01_create_nw_off_disabled(self):
         """Test create network with network offering disabled
         """
@@ -2664,7 +2664,7 @@ class TestServiceProvider(cloudstackTestCase):
                             )
         return
 
-    @attr(tags = ["advancedns"])
+    @attr(tags = ["advancedns","test"])
     def test_02_create_nw_sp_disabled(self):
         """Test create network when service provider is disabled
         """
@@ -2697,7 +2697,7 @@ class TestServiceProvider(cloudstackTestCase):
                             )
         return
 
-    @attr(tags = ["advancedns"])
+    @attr(tags = ["advancedns","test"])
     def test_03_create_lb_sp_disabled(self):
         """Test create LB rules when service provider is disabled
         """
@@ -2934,7 +2934,7 @@ class TestDeleteNetscaler(cloudstackTestCase):
             raise Exception("Warning: Exception during cleanup : %s" % e)
         return
 
-    @attr(tags = ["advancedns"])
+    @attr(tags = ["advancedns","test"])
     def test_delete_netscaler_with_lb(self):
         """Test delete Netscaler when active LB rules are present
         """
@@ -2976,21 +2976,21 @@ class TestDeleteNetscaler(cloudstackTestCase):
         self.network_1 = Network.create(
                                     self.apiclient,
                                     self.services["network"],
-                                    accountid=self.account_1.account.name,
-                                    domainid=self.account_1.account.domainid,
+                                    accountid=self.account_1.name,
+                                    domainid=self.account_1.domainid,
                                     networkofferingid=self.network_offering.id,
                                     zoneid=self.zone.id
                                     )
         self.debug("Created network with ID: %s" % self.network_1.id)
 
-        self.debug("Deploying VM in account: %s" % self.account_1.account.name)
+        self.debug("Deploying VM in account: %s" % self.account_1.name)
 
         # Spawn an instance in that network
         virtual_machine_1 = VirtualMachine.create(
                                   self.apiclient,
                                   self.services["virtual_machine"],
-                                  accountid=self.account_1.account.name,
-                                  domainid=self.account_1.account.domainid,
+                                  accountid=self.account_1.name,
+                                  domainid=self.account_1.domainid,
                                   serviceofferingid=self.service_offering.id,
                                   networkids=[str(self.network_1.id)]
                                   )

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3a60e565/test/integration/component/test_netscaler_lb_algo.py
----------------------------------------------------------------------
diff --git a/test/integration/component/test_netscaler_lb_algo.py b/test/integration/component/test_netscaler_lb_algo.py
index 99a537d..477bd69 100644
--- a/test/integration/component/test_netscaler_lb_algo.py
+++ b/test/integration/component/test_netscaler_lb_algo.py
@@ -62,7 +62,7 @@ class Services:
                                     "protocol": 'TCP',
                                 },
                          "netscaler": {
-                                "ipaddress": '192.168.100.213',
+                                "ipaddress": '10.147.60.27',
                                 "username": 'nsroot',
                                 "password": 'nsroot',
                                 "networkdevicetype": 'NetscalerVPXLoadBalancer',

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3a60e565/test/integration/component/test_netscaler_lb_sticky.py
----------------------------------------------------------------------
diff --git a/test/integration/component/test_netscaler_lb_sticky.py b/test/integration/component/test_netscaler_lb_sticky.py
index 5c95fb8..1edfd7b 100644
--- a/test/integration/component/test_netscaler_lb_sticky.py
+++ b/test/integration/component/test_netscaler_lb_sticky.py
@@ -62,7 +62,7 @@ class Services:
                                     "protocol": 'TCP',
                                 },
                          "netscaler": {
-                                "ipaddress": '192.168.100.213',
+                                "ipaddress": '10.147.60.27',
                                 "username": 'nsroot',
                                 "password": 'nsroot',
                                 "networkdevicetype": 'NetscalerVPXLoadBalancer',

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3a60e565/test/integration/component/test_netscaler_nw_off.py
----------------------------------------------------------------------
diff --git a/test/integration/component/test_netscaler_nw_off.py b/test/integration/component/test_netscaler_nw_off.py
index 9539d1b..6a51666 100644
--- a/test/integration/component/test_netscaler_nw_off.py
+++ b/test/integration/component/test_netscaler_nw_off.py
@@ -62,7 +62,7 @@ class Services:
                                     "protocol": 'TCP',
                                 },
                          "netscaler_1": {
-                                "ipaddress": '192.168.100.213',
+                                "ipaddress": '10.147.60.27',
                                 "username": 'nsroot',
                                 "password": 'nsroot',
                                 "networkdevicetype": 'NetscalerVPXLoadBalancer',
@@ -688,21 +688,21 @@ class TestNetScalerSharedMode(cloudstackTestCase):
         self.network_1 = Network.create(
                                     self.apiclient,
                                     self.services["network"],
-                                    accountid=self.account_1.account.name,
-                                    domainid=self.account_1.account.domainid,
+                                    accountid=self.account_1.name,
+                                    domainid=self.account_1.domainid,
                                     networkofferingid=self.network_offering.id,
                                     zoneid=self.zone.id
                                     )
         self.debug("Created network with ID: %s" % self.network_1.id)
 
-        self.debug("Deploying VM in account: %s" % self.account_1.account.name)
+        self.debug("Deploying VM in account: %s" % self.account_1.name)
 
         # Spawn an instance in that network
         virtual_machine_1 = VirtualMachine.create(
                                   self.apiclient,
                                   self.services["virtual_machine"],
-                                  accountid=self.account_1.account.name,
-                                  domainid=self.account_1.account.domainid,
+                                  accountid=self.account_1.name,
+                                  domainid=self.account_1.domainid,
                                   serviceofferingid=self.service_offering.id,
                                   networkids=[str(self.network_1.id)]
                                   )
@@ -736,21 +736,21 @@ class TestNetScalerSharedMode(cloudstackTestCase):
         self.network_2 = Network.create(
                                 self.apiclient,
                                 self.services["network"],
-                                accountid=self.account_2.account.name,
-                                domainid=self.account_2.account.domainid,
+                                accountid=self.account_2.name,
+                                domainid=self.account_2.domainid,
                                 networkofferingid=self.network_offering.id,
                                 zoneid=self.zone.id
                                 )
         self.debug("Created network with ID: %s" % self.network_2.id)
 
-        self.debug("Deploying VM in account: %s" % self.account_2.account.name)
+        self.debug("Deploying VM in account: %s" % self.account_2.name)
 
         # Spawn an instance in that network
         virtual_machine_2 = VirtualMachine.create(
                                   self.apiclient,
                                   self.services["virtual_machine"],
-                                  accountid=self.account_2.account.name,
-                                  domainid=self.account_2.account.domainid,
+                                  accountid=self.account_2.name,
+                                  domainid=self.account_2.domainid,
                                   serviceofferingid=self.service_offering.id,
                                   networkids=[str(self.network_2.id)]
                                   )
@@ -1218,8 +1218,8 @@ class TestNwOffDedicatedNetscaler(cloudstackTestCase):
         self.network_1 = Network.create(
                                     self.apiclient,
                                     self.services["network"],
-                                    accountid=self.account_1.account.name,
-                                    domainid=self.account_1.account.domainid,
+                                    accountid=self.account_1.name,
+                                    domainid=self.account_1.domainid,
                                     networkofferingid=self.network_offering.id,
                                     zoneid=self.zone.id
                                     )
@@ -1229,8 +1229,8 @@ class TestNwOffDedicatedNetscaler(cloudstackTestCase):
             VirtualMachine.create(
                                   self.apiclient,
                                   self.services["virtual_machine"],
-                                  accountid=self.account_1.account.name,
-                                  domainid=self.account_1.account.domainid,
+                                  accountid=self.account_1.name,
+                                  domainid=self.account_1.domainid,
                                   serviceofferingid=self.service_offering.id,
                                   networkids=[str(self.network_1.id)]
                                   )
@@ -1411,17 +1411,17 @@ class TestNwOffNetscaler(cloudstackTestCase):
         self.network = Network.create(
                                     self.apiclient,
                                     self.services["network"],
-                                    accountid=self.account_1.account.name,
-                                    domainid=self.account_1.account.domainid,
+                                    accountid=self.account_1.name,
+                                    domainid=self.account_1.domainid,
                                     networkofferingid=self.network_offering.id,
                                     zoneid=self.zone.id
                                     )
-        self.debug("Deploying VM in account: %s" % self.account_1.account.name)
+        self.debug("Deploying VM in account: %s" % self.account_1.name)
         virtual_machine = VirtualMachine.create(
                                   self.apiclient,
                                   self.services["virtual_machine"],
-                                  accountid=self.account_1.account.name,
-                                  domainid=self.account_1.account.domainid,
+                                  accountid=self.account_1.name,
+                                  domainid=self.account_1.domainid,
                                   serviceofferingid=self.service_offering.id,
                                   networkids=[str(self.network.id)]
                                   )
@@ -1432,8 +1432,8 @@ class TestNwOffNetscaler(cloudstackTestCase):
         self.network_2 = Network.create(
                                 self.apiclient,
                                 self.services["network"],
-                                accountid=self.account_2.account.name,
-                                domainid=self.account_2.account.domainid,
+                                accountid=self.account_2.name,
+                                domainid=self.account_2.domainid,
                                 networkofferingid=self.network_offering.id,
                                 zoneid=self.zone.id
                                )
@@ -1442,16 +1442,16 @@ class TestNwOffNetscaler(cloudstackTestCase):
             VirtualMachine.create(
                                   self.apiclient,
                                   self.services["virtual_machine"],
-                                  accountid=self.account_2.account.name,
-                                  domainid=self.account_2.account.domainid,
+                                  accountid=self.account_2.name,
+                                  domainid=self.account_2.domainid,
                                   serviceofferingid=self.service_offering.id,
                                   networkids=[str(self.network_2.id)]
                                   )
         self.debug(
             "Attempt to create second network with dedicated network offering failed!")
-        self.debug("Deleting account: %s" % self.account_1.account.name)
+        self.debug("Deleting account: %s" % self.account_1.name)
         self.account_1.delete(self.apiclient)
-        self.debug("Account: %s deleted!" % self.account_1.account.name)
+        self.debug("Account: %s deleted!" % self.account_1.name)
         interval = list_configurations(
                                     self.apiclient,
                                     name='network.gc.interval'
@@ -1464,14 +1464,14 @@ class TestNwOffNetscaler(cloudstackTestCase):
         # Sleep to ensure that all resources are deleted
         time.sleep(int(interval[0].value) + int(wait[0].value))
 
-        self.debug("Deploying VM in account: %s" % self.account_2.account.name)
+        self.debug("Deploying VM in account: %s" % self.account_2.name)
 
         # Spawn an instance in that network
         virtual_machine_2 = VirtualMachine.create(
                                   self.apiclient,
                                   self.services["virtual_machine"],
-                                  accountid=self.account_2.account.name,
-                                  domainid=self.account_2.account.domainid,
+                                  accountid=self.account_2.name,
+                                  domainid=self.account_2.domainid,
                                   serviceofferingid=self.service_offering.id,
                                   networkids=[str(self.network_2.id)]
                                   )
@@ -1708,21 +1708,21 @@ class TestNwOffSToDUpgrade(cloudstackTestCase):
         self.network_1 = Network.create(
                             self.apiclient,
                             self.services["network"],
-                            accountid=self.account_1.account.name,
-                            domainid=self.account_1.account.domainid,
+                            accountid=self.account_1.name,
+                            domainid=self.account_1.domainid,
                             networkofferingid=self.network_offering_shared.id,
                             zoneid=self.zone.id
                             )
         self.debug("Created network with ID: %s" % self.network_1.id)
 
-        self.debug("Deploying VM in account: %s" % self.account_1.account.name)
+        self.debug("Deploying VM in account: %s" % self.account_1.name)
 
         # Spawn an instance in that network
         virtual_machine_1 = VirtualMachine.create(
                                   self.apiclient,
                                   self.services["virtual_machine"],
-                                  accountid=self.account_1.account.name,
-                                  domainid=self.account_1.account.domainid,
+                                  accountid=self.account_1.name,
+                                  domainid=self.account_1.domainid,
                                   serviceofferingid=self.service_offering.id,
                                   networkids=[str(self.network_1.id)]
                                   )
@@ -1756,21 +1756,21 @@ class TestNwOffSToDUpgrade(cloudstackTestCase):
         self.network_2 = Network.create(
                             self.apiclient,
                             self.services["network"],
-                            accountid=self.account_2.account.name,
-                            domainid=self.account_2.account.domainid,
+                            accountid=self.account_2.name,
+                            domainid=self.account_2.domainid,
                             networkofferingid=self.network_offering_shared.id,
                             zoneid=self.zone.id
                             )
         self.debug("Created network with ID: %s" % self.network_2.id)
 
-        self.debug("Deploying VM in account: %s" % self.account_2.account.name)
+        self.debug("Deploying VM in account: %s" % self.account_2.name)
 
         # Spawn an instance in that network
         virtual_machine_2 = VirtualMachine.create(
                                   self.apiclient,
                                   self.services["virtual_machine"],
-                                  accountid=self.account_2.account.name,
-                                  domainid=self.account_2.account.domainid,
+                                  accountid=self.account_2.name,
+                                  domainid=self.account_2.domainid,
                                   serviceofferingid=self.service_offering.id,
                                   networkids=[str(self.network_2.id)]
                                   )
@@ -1854,7 +1854,7 @@ class TestNwOffSToDUpgrade(cloudstackTestCase):
                                   )
 
         self.debug("Stopping All VMs before upgrading network for account: %s" %
-                            self.account_1.account.name)
+                            self.account_1.name)
         virtual_machine_1.stop(self.apiclient)
 
         list_vm_response = VirtualMachine.list(
@@ -1909,7 +1909,7 @@ class TestNwOffSToDUpgrade(cloudstackTestCase):
                         )
 
         self.debug("Starting All VMs after upgrading network for account: %s" %
-                            self.account_1.account.name)
+                            self.account_1.name)
         virtual_machine_1.start(self.apiclient)
 
         list_vm_response = VirtualMachine.list(
@@ -1942,9 +1942,9 @@ class TestNwOffSToDUpgrade(cloudstackTestCase):
 
             public_ip = PublicIPAddress.create(
                                 self.apiclient,
-                                accountid=self.account_1.account.name,
+                                accountid=self.account_1.name,
                                 zoneid=self.zone.id,
-                                domainid=self.account_1.account.domainid,
+                                domainid=self.account_1.domainid,
                                 networkid=self.network_1.id
                                 )
             self.debug(
@@ -1955,7 +1955,7 @@ class TestNwOffSToDUpgrade(cloudstackTestCase):
                                     self.apiclient,
                                     self.services["lbrule"],
                                     ipaddressid=public_ip.ipaddress.id,
-                                    accountid=self.account_1.account.name,
+                                    accountid=self.account_1.name,
                                     networkid=self.network_1.id
                                 )
             self.debug("Created the load balancing rule for public IP: %s" %
@@ -2125,21 +2125,21 @@ class TestNwOffDToSUpgrade(cloudstackTestCase):
         self.network_1 = Network.create(
                             self.apiclient,
                             self.services["network"],
-                            accountid=self.account_1.account.name,
-                            domainid=self.account_1.account.domainid,
+                            accountid=self.account_1.name,
+                            domainid=self.account_1.domainid,
                             networkofferingid=self.network_offering_shared.id,
                             zoneid=self.zone.id
                             )
         self.debug("Created network with ID: %s" % self.network_1.id)
 
-        self.debug("Deploying VM in account: %s" % self.account_1.account.name)
+        self.debug("Deploying VM in account: %s" % self.account_1.name)
 
         # Spawn an instance in that network
         virtual_machine_1 = VirtualMachine.create(
                                   self.apiclient,
                                   self.services["virtual_machine"],
-                                  accountid=self.account_1.account.name,
-                                  domainid=self.account_1.account.domainid,
+                                  accountid=self.account_1.name,
+                                  domainid=self.account_1.domainid,
                                   serviceofferingid=self.service_offering.id,
                                   networkids=[str(self.network_1.id)]
                                   )
@@ -2173,21 +2173,21 @@ class TestNwOffDToSUpgrade(cloudstackTestCase):
         self.network_2 = Network.create(
                             self.apiclient,
                             self.services["network"],
-                            accountid=self.account_2.account.name,
-                            domainid=self.account_2.account.domainid,
+                            accountid=self.account_2.name,
+                            domainid=self.account_2.domainid,
                             networkofferingid=self.network_offering_shared.id,
                             zoneid=self.zone.id
                             )
         self.debug("Created network with ID: %s" % self.network_2.id)
 
-        self.debug("Deploying VM in account: %s" % self.account_2.account.name)
+        self.debug("Deploying VM in account: %s" % self.account_2.name)
 
         # Spawn an instance in that network
         virtual_machine_2 = VirtualMachine.create(
                                   self.apiclient,
                                   self.services["virtual_machine"],
-                                  accountid=self.account_2.account.name,
-                                  domainid=self.account_2.account.domainid,
+                                  accountid=self.account_2.name,
+                                  domainid=self.account_2.domainid,
                                   serviceofferingid=self.service_offering.id,
                                   networkids=[str(self.network_2.id)]
                                   )

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3a60e565/test/integration/component/test_resource_limits.py
----------------------------------------------------------------------
diff --git a/test/integration/component/test_resource_limits.py b/test/integration/component/test_resource_limits.py
index ea79c07..833723c 100644
--- a/test/integration/component/test_resource_limits.py
+++ b/test/integration/component/test_resource_limits.py
@@ -1004,7 +1004,7 @@ class TestResourceLimitsDomain(cloudstackTestCase):
                                 self.apiclient,
                                 self.services["server"],
                                 templateid=self.template.id,
-                                accountid=self.account_1.account.name,
+                                accountid=self.account_1.name,
                                 domainid=self.account.domainid,
                                 serviceofferingid=self.service_offering.id
                                 )


[18/50] [abbrv] git commit: updated refs/heads/ldapplugin to 7bc705e

Posted by ch...@apache.org.
CLOUDSTACK-2497: Object_Store_Refactor - Snapshots - Not able to delete
snapshots.


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

Branch: refs/heads/ldapplugin
Commit: 9f019ec7c3c6a8c9cf9ed4c8eab37e366db0a047
Parents: 1b4900a
Author: Min Chen <mi...@citrix.com>
Authored: Tue Jul 16 14:30:12 2013 -0700
Committer: Min Chen <mi...@citrix.com>
Committed: Tue Jul 16 14:42:29 2013 -0700

----------------------------------------------------------------------
 .../resource/NfsSecondaryStorageResource.java   | 35 +++++++++++---------
 1 file changed, 20 insertions(+), 15 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/9f019ec7/services/secondary-storage/src/org/apache/cloudstack/storage/resource/NfsSecondaryStorageResource.java
----------------------------------------------------------------------
diff --git a/services/secondary-storage/src/org/apache/cloudstack/storage/resource/NfsSecondaryStorageResource.java b/services/secondary-storage/src/org/apache/cloudstack/storage/resource/NfsSecondaryStorageResource.java
index 77c019e..88e3784 100755
--- a/services/secondary-storage/src/org/apache/cloudstack/storage/resource/NfsSecondaryStorageResource.java
+++ b/services/secondary-storage/src/org/apache/cloudstack/storage/resource/NfsSecondaryStorageResource.java
@@ -1269,30 +1269,35 @@ public class NfsSecondaryStorageResource extends ServerResourceBase implements S
         DataStoreTO dstore = obj.getDataStore();
         if (dstore instanceof NfsTO) {
             NfsTO nfs = (NfsTO) dstore;
-            String relativeSnapshotPath = obj.getPath();
-            String parent = getRootDir(nfs.getUrl());
-
-            if (relativeSnapshotPath.startsWith(File.separator)) {
-                relativeSnapshotPath = relativeSnapshotPath.substring(1);
+            String snapshotPath = obj.getPath();
+            if (snapshotPath.startsWith(File.separator)) {
+                snapshotPath = snapshotPath.substring(1);
             }
+            int index = snapshotPath.lastIndexOf("/");
+            String snapshotName = snapshotPath.substring(index + 1);
+            snapshotPath = snapshotPath.substring(0, index);
 
+            String parent = getRootDir(nfs.getUrl());
             if (!parent.endsWith(File.separator)) {
                 parent += File.separator;
             }
-            String absoluteSnapshotPath = parent + relativeSnapshotPath;
-            File snapshot = new File(absoluteSnapshotPath);
+            String absoluteSnapshotPath = parent + snapshotPath;
+            // check if directory exists
+            File snapshotDir = new File(absoluteSnapshotPath);
             String details = null;
-            if (!snapshot.exists()) {
-                details = "snapshot file " + snapshot.getName() + " doesn't exist";
+            if (!snapshotDir.exists()) {
+                details = "snapshot directory " + snapshotDir.getName() + " doesn't exist";
                 s_logger.debug(details);
-                return new Answer(cmd, true, details);
+                return new Answer(cmd, false, details);
             }
-
-            if (!snapshot.delete()) {
-                return new Answer(cmd, false, "Unable to delete file " + snapshot.getName() + " under install path "
-                        + relativeSnapshotPath);
+            // delete snapshot in the directory if exists
+            String lPath = absoluteSnapshotPath + "/*" + snapshotName + "*";
+            String result = deleteLocalFile(lPath);
+            if (result != null) {
+                details = "failed to delete snapshot " + lPath + " , err=" + result;
+                s_logger.warn(details);
+                return new Answer(cmd, false, details);
             }
-
             return new Answer(cmd, true, null);
         } else if (dstore instanceof S3TO) {
             final S3TO s3 = (S3TO) dstore;


[12/50] [abbrv] UserContext switched to CallContext. Added generic storage mechanism for other code to carry information throughout a call. Made the calling User and Account a must have. Added an interface to carry entities in error. Fixed up the cod

Posted by ch...@apache.org.
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/admin/systemvm/UpgradeSystemVMCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/admin/systemvm/UpgradeSystemVMCmd.java b/api/src/org/apache/cloudstack/api/command/admin/systemvm/UpgradeSystemVMCmd.java
index e91d005..efb1a2f 100644
--- a/api/src/org/apache/cloudstack/api/command/admin/systemvm/UpgradeSystemVMCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/admin/systemvm/UpgradeSystemVMCmd.java
@@ -25,12 +25,13 @@ import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.command.user.vm.UpgradeVMCmd;
 import org.apache.cloudstack.api.response.ServiceOfferingResponse;
 import org.apache.cloudstack.api.response.SystemVmResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.exception.InvalidParameterValueException;
 import com.cloud.offering.ServiceOffering;
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
 import com.cloud.vm.VirtualMachine;
 
 @APICommand(name = "changeServiceForSystemVm", responseObject=SystemVmResponse.class, description="Changes the service offering for a system vm (console proxy or secondary storage). " +
@@ -75,7 +76,7 @@ public class UpgradeSystemVMCmd extends BaseCmd {
 
     @Override
     public long getEntityOwnerId() {
-        Account account = UserContext.current().getCaller();
+        Account account = CallContext.current().getCallingAccount();
         if (account != null) {
             return account.getId();
         }
@@ -85,7 +86,7 @@ public class UpgradeSystemVMCmd extends BaseCmd {
 
     @Override
     public void execute(){
-        UserContext.current().setEventDetails("Vm Id: "+getId());
+        CallContext.current().setEventDetails("Vm Id: "+getId());
 
         ServiceOffering serviceOffering = _configService.getServiceOffering(serviceOfferingId);
         if (serviceOffering == null) {

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/admin/usage/AddTrafficTypeCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/admin/usage/AddTrafficTypeCmd.java b/api/src/org/apache/cloudstack/api/command/admin/usage/AddTrafficTypeCmd.java
index f9f2b03..3957e69 100644
--- a/api/src/org/apache/cloudstack/api/command/admin/usage/AddTrafficTypeCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/admin/usage/AddTrafficTypeCmd.java
@@ -25,13 +25,14 @@ import org.apache.cloudstack.api.Parameter;
 import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.PhysicalNetworkResponse;
 import org.apache.cloudstack.api.response.TrafficTypeResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.event.EventTypes;
 import com.cloud.exception.ResourceAllocationException;
 import com.cloud.network.PhysicalNetworkTrafficType;
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
 
 @APICommand(name = "addTrafficType", description="Adds traffic type to a physical network", responseObject=TrafficTypeResponse.class, since="3.0.0")
 public class AddTrafficTypeCmd extends BaseAsyncCreateCmd {
@@ -116,7 +117,7 @@ public class AddTrafficTypeCmd extends BaseAsyncCreateCmd {
 
     @Override
     public void execute(){
-        UserContext.current().setEventDetails("TrafficType Id: "+getEntityId());
+        CallContext.current().setEventDetails("TrafficType Id: "+getEntityId());
         PhysicalNetworkTrafficType result = _networkService.getPhysicalNetworkTrafficType(getEntityId());
         if (result != null) {
             TrafficTypeResponse response = _responseGenerator.createTrafficTypeResponse(result);

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/admin/user/CreateUserCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/admin/user/CreateUserCmd.java b/api/src/org/apache/cloudstack/api/command/admin/user/CreateUserCmd.java
index 7b3f230..378d636 100644
--- a/api/src/org/apache/cloudstack/api/command/admin/user/CreateUserCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/admin/user/CreateUserCmd.java
@@ -24,11 +24,12 @@ import org.apache.cloudstack.api.Parameter;
 import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.DomainResponse;
 import org.apache.cloudstack.api.response.UserResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.user.Account;
 import com.cloud.user.User;
-import com.cloud.user.UserContext;
 
 @APICommand(name = "createUser", description="Creates a user for an account that already exists", responseObject=UserResponse.class)
 public class CreateUserCmd extends BaseCmd {
@@ -119,7 +120,7 @@ public class CreateUserCmd extends BaseCmd {
 
     @Override
     public long getEntityOwnerId() {
-        Account account = UserContext.current().getCaller();
+        Account account = CallContext.current().getCallingAccount();
         if ((account == null) || isAdmin(account.getType())) {
             if ((domainId != null) && (accountName != null)) {
                 Account userAccount = _responseGenerator.findAccountByNameDomain(accountName, domainId);
@@ -138,7 +139,7 @@ public class CreateUserCmd extends BaseCmd {
 
     @Override
     public void execute(){
-        UserContext.current().setEventDetails("UserName: "+getUserName()+", FirstName :"+getFirstName()+", LastName: "+getLastName());
+        CallContext.current().setEventDetails("UserName: "+getUserName()+", FirstName :"+getFirstName()+", LastName: "+getLastName());
         User user = _accountService.createUser(getUserName(), getPassword(), getFirstName(), getLastName(), getEmail(), getTimezone(), getAccountName(), getDomainId(), getUserUUID());
         if (user != null) {
             UserResponse response = _responseGenerator.createUserResponse(user);

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/admin/user/DeleteUserCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/admin/user/DeleteUserCmd.java b/api/src/org/apache/cloudstack/api/command/admin/user/DeleteUserCmd.java
index 5683d58..edf84a1 100644
--- a/api/src/org/apache/cloudstack/api/command/admin/user/DeleteUserCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/admin/user/DeleteUserCmd.java
@@ -26,12 +26,13 @@ import org.apache.cloudstack.api.Parameter;
 import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.SuccessResponse;
 import org.apache.cloudstack.api.response.UserResponse;
+import org.apache.cloudstack.context.CallContext;
 import org.apache.cloudstack.region.RegionService;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.user.Account;
 import com.cloud.user.User;
-import com.cloud.user.UserContext;
 
 @APICommand(name = "deleteUser", description="Deletes a user for an account", responseObject=SuccessResponse.class)
 public class DeleteUserCmd extends BaseCmd {
@@ -76,7 +77,7 @@ public class DeleteUserCmd extends BaseCmd {
 
     @Override
     public void execute(){
-        UserContext.current().setEventDetails("UserId: "+getId());
+        CallContext.current().setEventDetails("UserId: "+getId());
         boolean result = _regionService.deleteUser(this);
         if (result) {
             SuccessResponse response = new SuccessResponse(getCommandName());

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/admin/user/DisableUserCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/admin/user/DisableUserCmd.java b/api/src/org/apache/cloudstack/api/command/admin/user/DisableUserCmd.java
index a487556..329c070 100644
--- a/api/src/org/apache/cloudstack/api/command/admin/user/DisableUserCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/admin/user/DisableUserCmd.java
@@ -27,14 +27,15 @@ import org.apache.cloudstack.api.APICommand;
 import org.apache.cloudstack.api.Parameter;
 import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.UserResponse;
+import org.apache.cloudstack.context.CallContext;
 import org.apache.cloudstack.region.RegionService;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.event.EventTypes;
 import com.cloud.user.Account;
 import com.cloud.user.User;
 import com.cloud.user.UserAccount;
-import com.cloud.user.UserContext;
 
 @APICommand(name = "disableUser", description="Disables a user account", responseObject=UserResponse.class)
 public class DisableUserCmd extends BaseAsyncCmd {
@@ -91,7 +92,7 @@ public class DisableUserCmd extends BaseAsyncCmd {
 
     @Override
     public void execute(){
-        UserContext.current().setEventDetails("UserId: "+getId());
+        CallContext.current().setEventDetails("UserId: "+getId());
         UserAccount user = _regionService.disableUser(this);
 
         if (user != null){

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/admin/user/EnableUserCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/admin/user/EnableUserCmd.java b/api/src/org/apache/cloudstack/api/command/admin/user/EnableUserCmd.java
index 382f67c..0a242e9 100644
--- a/api/src/org/apache/cloudstack/api/command/admin/user/EnableUserCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/admin/user/EnableUserCmd.java
@@ -25,13 +25,14 @@ import org.apache.cloudstack.api.BaseCmd;
 import org.apache.cloudstack.api.Parameter;
 import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.UserResponse;
+import org.apache.cloudstack.context.CallContext;
 import org.apache.cloudstack.region.RegionService;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.user.Account;
 import com.cloud.user.User;
 import com.cloud.user.UserAccount;
-import com.cloud.user.UserContext;
 
 @APICommand(name = "enableUser", description="Enables a user account", responseObject=UserResponse.class)
 public class EnableUserCmd extends BaseCmd {
@@ -77,7 +78,7 @@ public class EnableUserCmd extends BaseCmd {
 
     @Override
     public void execute(){
-        UserContext.current().setEventDetails("UserId: "+getId());
+        CallContext.current().setEventDetails("UserId: "+getId());
         UserAccount user = _regionService.enableUser(this);
 
         if (user != null){

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/admin/user/UpdateUserCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/admin/user/UpdateUserCmd.java b/api/src/org/apache/cloudstack/api/command/admin/user/UpdateUserCmd.java
index 5ea2dbd..52ec2ab 100644
--- a/api/src/org/apache/cloudstack/api/command/admin/user/UpdateUserCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/admin/user/UpdateUserCmd.java
@@ -25,13 +25,14 @@ import org.apache.cloudstack.api.BaseCmd;
 import org.apache.cloudstack.api.Parameter;
 import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.UserResponse;
+import org.apache.cloudstack.context.CallContext;
 import org.apache.cloudstack.region.RegionService;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.user.Account;
 import com.cloud.user.User;
 import com.cloud.user.UserAccount;
-import com.cloud.user.UserContext;
 
 @APICommand(name = "updateUser", description="Updates a user account", responseObject=UserResponse.class)
 public class UpdateUserCmd extends BaseCmd {
@@ -134,7 +135,7 @@ public class UpdateUserCmd extends BaseCmd {
 
     @Override
     public void execute(){
-        UserContext.current().setEventDetails("UserId: "+getId());
+        CallContext.current().setEventDetails("UserId: "+getId());
         UserAccount user = _regionService.updateUser(this);
 
         if (user != null){

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/admin/vm/MigrateVMCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/admin/vm/MigrateVMCmd.java b/api/src/org/apache/cloudstack/api/command/admin/vm/MigrateVMCmd.java
index e9779ce..852f6b7 100644
--- a/api/src/org/apache/cloudstack/api/command/admin/vm/MigrateVMCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/admin/vm/MigrateVMCmd.java
@@ -25,6 +25,8 @@ import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.HostResponse;
 import org.apache.cloudstack.api.response.StoragePoolResponse;
 import org.apache.cloudstack.api.response.UserVmResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.event.EventTypes;
@@ -36,7 +38,6 @@ import com.cloud.exception.VirtualMachineMigrationException;
 import com.cloud.host.Host;
 import com.cloud.storage.StoragePool;
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
 import com.cloud.uservm.UserVm;
 import com.cloud.vm.VirtualMachine;
 
@@ -129,7 +130,7 @@ public class MigrateVMCmd extends BaseAsyncCmd {
             if (destinationHost == null) {
                 throw new InvalidParameterValueException("Unable to find the host to migrate the VM, host id=" + getHostId());
             }
-            UserContext.current().setEventDetails("VM Id: " + getVirtualMachineId() + " to host Id: "+ getHostId());
+            CallContext.current().setEventDetails("VM Id: " + getVirtualMachineId() + " to host Id: "+ getHostId());
         }
 
         StoragePool destStoragePool = null;
@@ -138,7 +139,7 @@ public class MigrateVMCmd extends BaseAsyncCmd {
             if (destStoragePool == null) {
                 throw new InvalidParameterValueException("Unable to find the storage pool to migrate the VM");
             }
-            UserContext.current().setEventDetails("VM Id: " + getVirtualMachineId() + " to storage pool Id: "+ getStoragePoolId());
+            CallContext.current().setEventDetails("VM Id: " + getVirtualMachineId() + " to storage pool Id: "+ getStoragePoolId());
         }
 
         try{

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/admin/vm/MigrateVirtualMachineWithVolumeCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/admin/vm/MigrateVirtualMachineWithVolumeCmd.java b/api/src/org/apache/cloudstack/api/command/admin/vm/MigrateVirtualMachineWithVolumeCmd.java
index b1eaf11..ab0dcd5 100644
--- a/api/src/org/apache/cloudstack/api/command/admin/vm/MigrateVirtualMachineWithVolumeCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/admin/vm/MigrateVirtualMachineWithVolumeCmd.java
@@ -22,14 +22,16 @@ import java.util.Iterator;
 import java.util.Map;
 
 import org.apache.cloudstack.api.*;
+
 import org.apache.log4j.Logger;
 
 import org.apache.cloudstack.api.APICommand;
-
 import org.apache.cloudstack.api.BaseCmd.CommandType;
 import org.apache.cloudstack.api.response.HostResponse;
 import org.apache.cloudstack.api.response.StoragePoolResponse;
 import org.apache.cloudstack.api.response.UserVmResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import com.cloud.event.EventTypes;
 import com.cloud.exception.ConcurrentOperationException;
 import com.cloud.exception.InvalidParameterValueException;
@@ -39,7 +41,6 @@ import com.cloud.exception.VirtualMachineMigrationException;
 import com.cloud.host.Host;
 import com.cloud.storage.StoragePool;
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
 import com.cloud.uservm.UserVm;
 import com.cloud.vm.VirtualMachine;
 

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/admin/vpc/DeletePrivateGatewayCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/admin/vpc/DeletePrivateGatewayCmd.java b/api/src/org/apache/cloudstack/api/command/admin/vpc/DeletePrivateGatewayCmd.java
index 71dfba8..0a06146 100644
--- a/api/src/org/apache/cloudstack/api/command/admin/vpc/DeletePrivateGatewayCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/admin/vpc/DeletePrivateGatewayCmd.java
@@ -25,6 +25,8 @@ import org.apache.cloudstack.api.Parameter;
 import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.PrivateGatewayResponse;
 import org.apache.cloudstack.api.response.SuccessResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.event.EventTypes;
@@ -33,7 +35,6 @@ import com.cloud.exception.InvalidParameterValueException;
 import com.cloud.exception.ResourceUnavailableException;
 import com.cloud.network.vpc.VpcGateway;
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
 
 @APICommand(name = "deletePrivateGateway", description="Deletes a Private gateway", responseObject=SuccessResponse.class)
 public class DeletePrivateGatewayCmd extends BaseAsyncCmd {
@@ -81,7 +82,7 @@ public class DeletePrivateGatewayCmd extends BaseAsyncCmd {
 
     @Override
     public void execute() throws ResourceUnavailableException, ConcurrentOperationException {
-        UserContext.current().setEventDetails("Network ACL Id: " + id);
+        CallContext.current().setEventDetails("Network ACL Id: " + id);
         boolean result = _vpcService.deleteVpcPrivateGateway(id);
         if (result) {
             SuccessResponse response = new SuccessResponse(getCommandName());

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/admin/zone/CreateZoneCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/admin/zone/CreateZoneCmd.java b/api/src/org/apache/cloudstack/api/command/admin/zone/CreateZoneCmd.java
index 5cc9052..5799da1 100644
--- a/api/src/org/apache/cloudstack/api/command/admin/zone/CreateZoneCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/admin/zone/CreateZoneCmd.java
@@ -24,11 +24,12 @@ import org.apache.cloudstack.api.Parameter;
 import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.DomainResponse;
 import org.apache.cloudstack.api.response.ZoneResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.dc.DataCenter;
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
 
 @APICommand(name = "createZone", description="Creates a Zone.", responseObject=ZoneResponse.class)
 public class CreateZoneCmd extends BaseCmd {
@@ -163,7 +164,7 @@ public class CreateZoneCmd extends BaseCmd {
 
     @Override
     public void execute(){
-        UserContext.current().setEventDetails("Zone Name: "+getZoneName());
+        CallContext.current().setEventDetails("Zone Name: "+getZoneName());
         DataCenter result = _configService.createZone(this);
         if (result != null){
             ZoneResponse response = _responseGenerator.createZoneResponse(result,false);

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/admin/zone/DeleteZoneCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/admin/zone/DeleteZoneCmd.java b/api/src/org/apache/cloudstack/api/command/admin/zone/DeleteZoneCmd.java
index e3d14f7..98c8b4a 100644
--- a/api/src/org/apache/cloudstack/api/command/admin/zone/DeleteZoneCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/admin/zone/DeleteZoneCmd.java
@@ -24,10 +24,11 @@ import org.apache.cloudstack.api.Parameter;
 import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.SuccessResponse;
 import org.apache.cloudstack.api.response.ZoneResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
 
 @APICommand(name = "deleteZone", description="Deletes a Zone.", responseObject=SuccessResponse.class)
 public class DeleteZoneCmd extends BaseCmd {
@@ -69,7 +70,7 @@ public class DeleteZoneCmd extends BaseCmd {
 
     @Override
     public void execute(){
-        UserContext.current().setEventDetails("Zone Id: "+getId());
+        CallContext.current().setEventDetails("Zone Id: "+getId());
         boolean result = _configService.deleteZone(this);
         if (result) {
             SuccessResponse response = new SuccessResponse(getCommandName());

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/admin/zone/UpdateZoneCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/admin/zone/UpdateZoneCmd.java b/api/src/org/apache/cloudstack/api/command/admin/zone/UpdateZoneCmd.java
index 16c334e..c888995 100644
--- a/api/src/org/apache/cloudstack/api/command/admin/zone/UpdateZoneCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/admin/zone/UpdateZoneCmd.java
@@ -26,11 +26,12 @@ import org.apache.cloudstack.api.BaseCmd;
 import org.apache.cloudstack.api.Parameter;
 import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.ZoneResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.dc.DataCenter;
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
 
 @APICommand(name = "updateZone", description="Updates a Zone.", responseObject=ZoneResponse.class)
 public class UpdateZoneCmd extends BaseCmd {
@@ -175,7 +176,7 @@ public class UpdateZoneCmd extends BaseCmd {
 
     @Override
     public void execute(){
-        UserContext.current().setEventDetails("Zone Id: "+getId());
+        CallContext.current().setEventDetails("Zone Id: "+getId());
         DataCenter result = _configService.editZone(this);
         if (result != null) {
             ZoneResponse response = _responseGenerator.createZoneResponse(result, false);

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/user/account/AddAccountToProjectCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/account/AddAccountToProjectCmd.java b/api/src/org/apache/cloudstack/api/command/user/account/AddAccountToProjectCmd.java
index 58735f2..6a86254 100644
--- a/api/src/org/apache/cloudstack/api/command/user/account/AddAccountToProjectCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/account/AddAccountToProjectCmd.java
@@ -24,12 +24,13 @@ import org.apache.cloudstack.api.Parameter;
 import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.ProjectResponse;
 import org.apache.cloudstack.api.response.SuccessResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.event.EventTypes;
 import com.cloud.exception.InvalidParameterValueException;
 import com.cloud.projects.Project;
-import com.cloud.user.UserContext;
 
 
 @APICommand(name = "addAccountToProject", description="Adds acoount to a project", responseObject=SuccessResponse.class, since="3.0.0")
@@ -85,7 +86,7 @@ public class AddAccountToProjectCmd extends BaseAsyncCmd {
             throw new InvalidParameterValueException("Either accountName or email is required");
         }
 
-        UserContext.current().setEventDetails("Project id: "+ projectId + "; accountName " + accountName);
+        CallContext.current().setEventDetails("Project id: "+ projectId + "; accountName " + accountName);
         boolean result = _projectService.addAccountToProject(getProjectId(), getAccountName(), getEmail());
         if (result) {
             SuccessResponse response = new SuccessResponse(getCommandName());

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/user/account/DeleteAccountFromProjectCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/account/DeleteAccountFromProjectCmd.java b/api/src/org/apache/cloudstack/api/command/user/account/DeleteAccountFromProjectCmd.java
index df6deae..fcb0574 100644
--- a/api/src/org/apache/cloudstack/api/command/user/account/DeleteAccountFromProjectCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/account/DeleteAccountFromProjectCmd.java
@@ -25,12 +25,13 @@ import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.command.user.project.DeleteProjectCmd;
 import org.apache.cloudstack.api.response.ProjectResponse;
 import org.apache.cloudstack.api.response.SuccessResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.event.EventTypes;
 import com.cloud.exception.InvalidParameterValueException;
 import com.cloud.projects.Project;
-import com.cloud.user.UserContext;
 
 @APICommand(name = "deleteAccountFromProject", description="Deletes account from the project", responseObject=SuccessResponse.class, since="3.0.0")
 public class DeleteAccountFromProjectCmd extends BaseAsyncCmd {
@@ -74,7 +75,7 @@ public class DeleteAccountFromProjectCmd extends BaseAsyncCmd {
 
     @Override
     public void execute(){
-        UserContext.current().setEventDetails("Project id: "+ projectId + "; accountName " + accountName);
+        CallContext.current().setEventDetails("Project id: "+ projectId + "; accountName " + accountName);
         boolean result = _projectService.deleteAccountFromProject(projectId, accountName);
         if (result) {
             SuccessResponse response = new SuccessResponse(getCommandName());

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/user/address/AssociateIPAddrCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/address/AssociateIPAddrCmd.java b/api/src/org/apache/cloudstack/api/command/user/address/AssociateIPAddrCmd.java
index 6d7ec6a..d45d132 100644
--- a/api/src/org/apache/cloudstack/api/command/user/address/AssociateIPAddrCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/address/AssociateIPAddrCmd.java
@@ -34,6 +34,8 @@ import org.apache.cloudstack.api.response.ProjectResponse;
 import org.apache.cloudstack.api.response.RegionResponse;
 import org.apache.cloudstack.api.response.VpcResponse;
 import org.apache.cloudstack.api.response.ZoneResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.dc.DataCenter;
@@ -51,7 +53,6 @@ import com.cloud.network.Network;
 import com.cloud.network.vpc.Vpc;
 import com.cloud.projects.Project;
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
 
 @APICommand(name = "associateIpAddress", description="Acquires and associates a public IP to an account.", responseObject=IPAddressResponse.class)
 public class AssociateIPAddrCmd extends BaseAsyncCreateCmd {
@@ -104,14 +105,14 @@ public class AssociateIPAddrCmd extends BaseAsyncCreateCmd {
         if (accountName != null) {
             return accountName;
         }
-        return UserContext.current().getCaller().getAccountName();
+        return CallContext.current().getCallingAccount().getAccountName();
     }
 
     public long getDomainId() {
         if (domainId != null) {
             return domainId;
         }
-        return UserContext.current().getCaller().getDomainId();
+        return CallContext.current().getCallingAccount().getDomainId();
     }
 
     private long getZoneId() {
@@ -192,7 +193,7 @@ public class AssociateIPAddrCmd extends BaseAsyncCreateCmd {
 
     @Override
     public long getEntityOwnerId() {
-        Account caller = UserContext.current().getCaller();
+        Account caller = CallContext.current().getCallingAccount();
         if (accountName != null && domainId != null) {
             Account account = _accountService.finalizeOwner(caller, accountName, domainId, projectId);
             return account.getId();
@@ -280,7 +281,7 @@ public class AssociateIPAddrCmd extends BaseAsyncCreateCmd {
     @Override
     public void execute() throws ResourceUnavailableException, ResourceAllocationException,
                                     ConcurrentOperationException, InsufficientCapacityException {
-        UserContext.current().setEventDetails("Ip Id: " + getEntityId());
+        CallContext.current().setEventDetails("Ip Id: " + getEntityId());
 
         IpAddress result = null;
 

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/user/address/DisassociateIPAddrCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/address/DisassociateIPAddrCmd.java b/api/src/org/apache/cloudstack/api/command/user/address/DisassociateIPAddrCmd.java
index cbd802b..4798823 100644
--- a/api/src/org/apache/cloudstack/api/command/user/address/DisassociateIPAddrCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/address/DisassociateIPAddrCmd.java
@@ -26,6 +26,8 @@ import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.AccountResponse;
 import org.apache.cloudstack.api.response.IPAddressResponse;
 import org.apache.cloudstack.api.response.SuccessResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.event.EventTypes;
@@ -33,7 +35,6 @@ import com.cloud.exception.InsufficientAddressCapacityException;
 import com.cloud.exception.InvalidParameterValueException;
 import com.cloud.network.IpAddress;
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
 
 @APICommand(name = "disassociateIpAddress", description="Disassociates an ip address from the account.", responseObject=SuccessResponse.class)
 public class DisassociateIPAddrCmd extends BaseAsyncCmd {
@@ -73,7 +74,7 @@ public class DisassociateIPAddrCmd extends BaseAsyncCmd {
 
     @Override
     public void execute() throws InsufficientAddressCapacityException{
-        UserContext.current().setEventDetails("Ip Id: " + getIpAddressId());
+        CallContext.current().setEventDetails("Ip Id: " + getIpAddressId());
         boolean result = false;
         if (!isPortable(id)) {
             result = _networkService.releaseIpAddress(getIpAddressId());

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/user/affinitygroup/CreateAffinityGroupCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/affinitygroup/CreateAffinityGroupCmd.java b/api/src/org/apache/cloudstack/api/command/user/affinitygroup/CreateAffinityGroupCmd.java
index bc16310..59b9f17 100644
--- a/api/src/org/apache/cloudstack/api/command/user/affinitygroup/CreateAffinityGroupCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/affinitygroup/CreateAffinityGroupCmd.java
@@ -26,12 +26,13 @@ import org.apache.cloudstack.api.BaseAsyncCreateCmd;
 import org.apache.cloudstack.api.Parameter;
 import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.DomainResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.event.EventTypes;
 import com.cloud.exception.ResourceAllocationException;
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
 
 @APICommand(name = "createAffinityGroup", responseObject = AffinityGroupResponse.class, description = "Creates an affinity/anti-affinity group")
 public class CreateAffinityGroupCmd extends BaseAsyncCreateCmd {
@@ -94,7 +95,7 @@ public class CreateAffinityGroupCmd extends BaseAsyncCreateCmd {
 
     @Override
     public long getEntityOwnerId() {
-        Account account = UserContext.current().getCaller();
+        Account account = CallContext.current().getCallingAccount();
         if ((account == null) || isAdmin(account.getType())) {
             if ((domainId != null) && (accountName != null)) {
                 Account userAccount = _responseGenerator.findAccountByNameDomain(accountName, domainId);

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/user/affinitygroup/DeleteAffinityGroupCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/affinitygroup/DeleteAffinityGroupCmd.java b/api/src/org/apache/cloudstack/api/command/user/affinitygroup/DeleteAffinityGroupCmd.java
index a237cba..0fa8b2b 100644
--- a/api/src/org/apache/cloudstack/api/command/user/affinitygroup/DeleteAffinityGroupCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/affinitygroup/DeleteAffinityGroupCmd.java
@@ -26,12 +26,13 @@ import org.apache.cloudstack.api.Parameter;
 import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.DomainResponse;
 import org.apache.cloudstack.api.response.SuccessResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.event.EventTypes;
 import com.cloud.exception.InvalidParameterValueException;
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
 
 @APICommand(name = "deleteAffinityGroup", description = "Deletes affinity group", responseObject = SuccessResponse.class)
 public class DeleteAffinityGroupCmd extends BaseAsyncCmd {
@@ -100,7 +101,7 @@ public class DeleteAffinityGroupCmd extends BaseAsyncCmd {
 
     @Override
     public long getEntityOwnerId() {
-        Account account = UserContext.current().getCaller();
+        Account account = CallContext.current().getCallingAccount();
         if ((account == null) || isAdmin(account.getType())) {
             if ((domainId != null) && (accountName != null)) {
                 Account userAccount = _responseGenerator.findAccountByNameDomain(accountName, domainId);

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/user/affinitygroup/UpdateVMAffinityGroupCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/affinitygroup/UpdateVMAffinityGroupCmd.java b/api/src/org/apache/cloudstack/api/command/user/affinitygroup/UpdateVMAffinityGroupCmd.java
index 8b0188c..11099a4 100644
--- a/api/src/org/apache/cloudstack/api/command/user/affinitygroup/UpdateVMAffinityGroupCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/affinitygroup/UpdateVMAffinityGroupCmd.java
@@ -31,6 +31,8 @@ import org.apache.cloudstack.api.Parameter;
 import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.ApiConstants.VMDetails;
 import org.apache.cloudstack.api.response.UserVmResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.event.EventTypes;
@@ -38,7 +40,6 @@ import com.cloud.exception.InsufficientCapacityException;
 import com.cloud.exception.InvalidParameterValueException;
 import com.cloud.exception.ResourceUnavailableException;
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
 import com.cloud.uservm.UserVm;
 
 
@@ -131,7 +132,7 @@ public class UpdateVMAffinityGroupCmd extends BaseAsyncCmd {
     @Override
     public void execute() throws ResourceUnavailableException,
             InsufficientCapacityException, ServerApiException {
-        UserContext.current().setEventDetails("Vm Id: "+getId());
+        CallContext.current().setEventDetails("Vm Id: "+getId());
         UserVm result = _affinityGroupService.updateVMAffinityGroups(getId(), getAffinityGroupIdList());
         ArrayList<VMDetails> dc = new ArrayList<VMDetails>();
         dc.add(VMDetails.valueOf("affgrp"));

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateAutoScaleVmProfileCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateAutoScaleVmProfileCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateAutoScaleVmProfileCmd.java
index f7ee2f5..3b5567d 100644
--- a/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateAutoScaleVmProfileCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateAutoScaleVmProfileCmd.java
@@ -31,6 +31,8 @@ import org.apache.cloudstack.api.response.ServiceOfferingResponse;
 import org.apache.cloudstack.api.response.TemplateResponse;
 import org.apache.cloudstack.api.response.UserResponse;
 import org.apache.cloudstack.api.response.ZoneResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.event.EventTypes;
@@ -39,7 +41,6 @@ import com.cloud.exception.ResourceAllocationException;
 import com.cloud.network.as.AutoScaleVmProfile;
 import com.cloud.user.Account;
 import com.cloud.user.User;
-import com.cloud.user.UserContext;
 
 @APICommand(name = "createAutoScaleVmProfile", description = "Creates a profile that contains information about the virtual machine which will be provisioned automatically by autoscale feature.", responseObject = AutoScaleVmProfileResponse.class)
 @SuppressWarnings("rawtypes")
@@ -119,7 +120,7 @@ public class CreateAutoScaleVmProfileCmd extends BaseAsyncCreateCmd {
         if (autoscaleUserId != null) {
             return autoscaleUserId;
         } else {
-            return UserContext.current().getCaller().getId();
+            return CallContext.current().getCallingAccount().getId();
         }
     }
 
@@ -136,7 +137,7 @@ public class CreateAutoScaleVmProfileCmd extends BaseAsyncCreateCmd {
             User user = _entityMgr.findById(User.class, autoscaleUserId);
             account = _entityMgr.findById(Account.class, user.getAccountId());
         } else {
-            account = UserContext.current().getCaller();
+            account = CallContext.current().getCallingAccount();
         }
         accountId = account.getAccountId();
         domainId = account.getDomainId();

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateConditionCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateConditionCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateConditionCmd.java
index 44f1c86..dc0d244 100644
--- a/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateConditionCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateConditionCmd.java
@@ -27,12 +27,13 @@ import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.ConditionResponse;
 import org.apache.cloudstack.api.response.CounterResponse;
 import org.apache.cloudstack.api.response.DomainResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.event.EventTypes;
 import com.cloud.exception.ResourceAllocationException;
 import com.cloud.network.as.Condition;
-import com.cloud.user.UserContext;
 
 @APICommand(name = "createCondition", description = "Creates a condition", responseObject = ConditionResponse.class)
 public class CreateConditionCmd extends BaseAsyncCreateCmd {
@@ -105,7 +106,7 @@ public class CreateConditionCmd extends BaseAsyncCreateCmd {
 
     public String getAccountName() {
         if (accountName == null) {
-            return UserContext.current().getCaller().getAccountName();
+            return CallContext.current().getCallingAccount().getAccountName();
         }
 
         return accountName;
@@ -113,7 +114,7 @@ public class CreateConditionCmd extends BaseAsyncCreateCmd {
 
     public Long getDomainId() {
         if (domainId == null) {
-            return UserContext.current().getCaller().getDomainId();
+            return CallContext.current().getCallingAccount().getDomainId();
         }
         return domainId;
     }
@@ -141,7 +142,7 @@ public class CreateConditionCmd extends BaseAsyncCreateCmd {
     public long getEntityOwnerId() {
         Long accountId = finalyzeAccountId(accountName, domainId, null, true);
         if (accountId == null) {
-            return UserContext.current().getCaller().getId();
+            return CallContext.current().getCallingAccount().getId();
         }
 
         return accountId;

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteAutoScalePolicyCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteAutoScalePolicyCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteAutoScalePolicyCmd.java
index abf0ec0..579656c 100644
--- a/api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteAutoScalePolicyCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteAutoScalePolicyCmd.java
@@ -25,12 +25,13 @@ import org.apache.cloudstack.api.Parameter;
 import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.AutoScalePolicyResponse;
 import org.apache.cloudstack.api.response.SuccessResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.event.EventTypes;
 import com.cloud.network.as.AutoScalePolicy;
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
 
 @APICommand(name = "deleteAutoScalePolicy", description = "Deletes a autoscale policy.", responseObject = SuccessResponse.class)
 public class DeleteAutoScalePolicyCmd extends BaseAsyncCmd {
@@ -84,7 +85,7 @@ public class DeleteAutoScalePolicyCmd extends BaseAsyncCmd {
 
     @Override
     public void execute() {
-        UserContext.current().setEventDetails("AutoScale Policy Id: " + getId());
+        CallContext.current().setEventDetails("AutoScale Policy Id: " + getId());
         boolean result = _autoScaleService.deleteAutoScalePolicy(id);
 
         if (result) {

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteAutoScaleVmGroupCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteAutoScaleVmGroupCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteAutoScaleVmGroupCmd.java
index e9de4cb..2d72836 100644
--- a/api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteAutoScaleVmGroupCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteAutoScaleVmGroupCmd.java
@@ -25,12 +25,13 @@ import org.apache.cloudstack.api.Parameter;
 import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.AutoScaleVmGroupResponse;
 import org.apache.cloudstack.api.response.SuccessResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.event.EventTypes;
 import com.cloud.network.as.AutoScaleVmGroup;
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
 
 @APICommand(name = "deleteAutoScaleVmGroup", description = "Deletes a autoscale vm group.", responseObject = SuccessResponse.class)
 public class DeleteAutoScaleVmGroupCmd extends BaseAsyncCmd {
@@ -84,7 +85,7 @@ public class DeleteAutoScaleVmGroupCmd extends BaseAsyncCmd {
 
     @Override
     public void execute() {
-        UserContext.current().setEventDetails("AutoScale Vm Group Id: " + getId());
+        CallContext.current().setEventDetails("AutoScale Vm Group Id: " + getId());
         boolean result = _autoScaleService.deleteAutoScaleVmGroup(id);
 
         if (result) {

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteAutoScaleVmProfileCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteAutoScaleVmProfileCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteAutoScaleVmProfileCmd.java
index 0353c95..d0061f8 100644
--- a/api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteAutoScaleVmProfileCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteAutoScaleVmProfileCmd.java
@@ -25,12 +25,13 @@ import org.apache.cloudstack.api.Parameter;
 import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.AutoScaleVmProfileResponse;
 import org.apache.cloudstack.api.response.SuccessResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.event.EventTypes;
 import com.cloud.network.as.AutoScaleVmProfile;
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
 
 @APICommand(name = "deleteAutoScaleVmProfile", description = "Deletes a autoscale vm profile.", responseObject = SuccessResponse.class)
 public class DeleteAutoScaleVmProfileCmd extends BaseAsyncCmd {
@@ -84,7 +85,7 @@ public class DeleteAutoScaleVmProfileCmd extends BaseAsyncCmd {
 
     @Override
     public void execute() {
-        UserContext.current().setEventDetails("AutoScale VM Profile Id: " + getId());
+        CallContext.current().setEventDetails("AutoScale VM Profile Id: " + getId());
         boolean result = _autoScaleService.deleteAutoScaleVmProfile(id);
         if (result) {
             SuccessResponse response = new SuccessResponse(getCommandName());

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/user/autoscale/UpdateAutoScalePolicyCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/UpdateAutoScalePolicyCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/UpdateAutoScalePolicyCmd.java
index dcd4aa6..1f59188 100644
--- a/api/src/org/apache/cloudstack/api/command/user/autoscale/UpdateAutoScalePolicyCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/UpdateAutoScalePolicyCmd.java
@@ -28,12 +28,13 @@ import org.apache.cloudstack.api.Parameter;
 import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.AutoScalePolicyResponse;
 import org.apache.cloudstack.api.response.ConditionResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.event.EventTypes;
 import com.cloud.network.as.AutoScalePolicy;
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
 
 @APICommand(name = "updateAutoScalePolicy", description = "Updates an existing autoscale policy.", responseObject = AutoScalePolicyResponse.class)
 public class UpdateAutoScalePolicyCmd extends BaseAsyncCmd {
@@ -61,7 +62,7 @@ public class UpdateAutoScalePolicyCmd extends BaseAsyncCmd {
 
     @Override
     public void execute() {
-        UserContext.current().setEventDetails("AutoScale Policy Id: " + getId());
+        CallContext.current().setEventDetails("AutoScale Policy Id: " + getId());
         AutoScalePolicy result = _autoScaleService.updateAutoScalePolicy(this);
         if (result != null) {
             AutoScalePolicyResponse response = _responseGenerator.createAutoScalePolicyResponse(result);

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/user/autoscale/UpdateAutoScaleVmGroupCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/UpdateAutoScaleVmGroupCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/UpdateAutoScaleVmGroupCmd.java
index 460803e..cad41e9 100644
--- a/api/src/org/apache/cloudstack/api/command/user/autoscale/UpdateAutoScaleVmGroupCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/UpdateAutoScaleVmGroupCmd.java
@@ -28,12 +28,13 @@ import org.apache.cloudstack.api.Parameter;
 import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.AutoScalePolicyResponse;
 import org.apache.cloudstack.api.response.AutoScaleVmGroupResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.event.EventTypes;
 import com.cloud.network.as.AutoScaleVmGroup;
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
 
 @APICommand(name = "updateAutoScaleVmGroup", description = "Updates an existing autoscale vm group.", responseObject = AutoScaleVmGroupResponse.class)
 public class UpdateAutoScaleVmGroupCmd extends BaseAsyncCmd {
@@ -72,7 +73,7 @@ public class UpdateAutoScaleVmGroupCmd extends BaseAsyncCmd {
 
     @Override
     public void execute() {
-        UserContext.current().setEventDetails("AutoScale Vm Group Id: " + getId());
+        CallContext.current().setEventDetails("AutoScale Vm Group Id: " + getId());
         AutoScaleVmGroup result = _autoScaleService.updateAutoScaleVmGroup(this);
         if (result != null) {
             AutoScaleVmGroupResponse response = _responseGenerator.createAutoScaleVmGroupResponse(result);

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/user/autoscale/UpdateAutoScaleVmProfileCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/UpdateAutoScaleVmProfileCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/UpdateAutoScaleVmProfileCmd.java
index d2fd213..2eb4438 100644
--- a/api/src/org/apache/cloudstack/api/command/user/autoscale/UpdateAutoScaleVmProfileCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/UpdateAutoScaleVmProfileCmd.java
@@ -29,12 +29,13 @@ import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.AutoScaleVmProfileResponse;
 import org.apache.cloudstack.api.response.TemplateResponse;
 import org.apache.cloudstack.api.response.UserResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.event.EventTypes;
 import com.cloud.network.as.AutoScaleVmProfile;
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
 
 @APICommand(name = "updateAutoScaleVmProfile", description = "Updates an existing autoscale vm profile.", responseObject = AutoScaleVmProfileResponse.class)
 public class UpdateAutoScaleVmProfileCmd extends BaseAsyncCmd {
@@ -70,7 +71,7 @@ public class UpdateAutoScaleVmProfileCmd extends BaseAsyncCmd {
 
     @Override
     public void execute() {
-        UserContext.current().setEventDetails("AutoScale Policy Id: " + getId());
+        CallContext.current().setEventDetails("AutoScale Policy Id: " + getId());
         AutoScaleVmProfile result = _autoScaleService.updateAutoScaleVmProfile(this);
         if (result != null) {
             AutoScaleVmProfileResponse response = _responseGenerator.createAutoScaleVmProfileResponse(result);

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/user/event/ArchiveEventsCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/event/ArchiveEventsCmd.java b/api/src/org/apache/cloudstack/api/command/user/event/ArchiveEventsCmd.java
index c5594e2..51c78e5 100644
--- a/api/src/org/apache/cloudstack/api/command/user/event/ArchiveEventsCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/event/ArchiveEventsCmd.java
@@ -27,11 +27,12 @@ import org.apache.cloudstack.api.Parameter;
 import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.EventResponse;
 import org.apache.cloudstack.api.response.SuccessResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.exception.InvalidParameterValueException;
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
 
 @APICommand(name = "archiveEvents", description = "Archive one or more events.", responseObject = SuccessResponse.class)
 public class ArchiveEventsCmd extends BaseCmd {
@@ -90,7 +91,7 @@ public class ArchiveEventsCmd extends BaseCmd {
 
     @Override
     public long getEntityOwnerId() {
-        Account account = UserContext.current().getCaller();
+        Account account = CallContext.current().getCallingAccount();
         if (account != null) {
             return account.getId();
         }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/user/event/DeleteEventsCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/event/DeleteEventsCmd.java b/api/src/org/apache/cloudstack/api/command/user/event/DeleteEventsCmd.java
index 548c2f3..964cee3 100644
--- a/api/src/org/apache/cloudstack/api/command/user/event/DeleteEventsCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/event/DeleteEventsCmd.java
@@ -27,11 +27,12 @@ import org.apache.cloudstack.api.Parameter;
 import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.EventResponse;
 import org.apache.cloudstack.api.response.SuccessResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.exception.InvalidParameterValueException;
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
 
 @APICommand(name = "deleteEvents", description = "Delete one or more events.", responseObject = SuccessResponse.class)
 public class DeleteEventsCmd extends BaseCmd {
@@ -90,7 +91,7 @@ public class DeleteEventsCmd extends BaseCmd {
 
     @Override
     public long getEntityOwnerId() {
-        Account account = UserContext.current().getCaller();
+        Account account = CallContext.current().getCallingAccount();
         if (account != null) {
             return account.getId();
         }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/user/firewall/CreateEgressFirewallRuleCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/firewall/CreateEgressFirewallRuleCmd.java b/api/src/org/apache/cloudstack/api/command/user/firewall/CreateEgressFirewallRuleCmd.java
index 3714c06..05a2c5d 100644
--- a/api/src/org/apache/cloudstack/api/command/user/firewall/CreateEgressFirewallRuleCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/firewall/CreateEgressFirewallRuleCmd.java
@@ -19,6 +19,7 @@ package org.apache.cloudstack.api.command.user.firewall;
 
 import java.util.ArrayList;
 import java.util.List;
+
 import org.apache.log4j.Logger;
 
 import org.apache.cloudstack.api.APICommand;
@@ -32,6 +33,7 @@ import org.apache.cloudstack.api.Parameter;
 import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.FirewallResponse;
 import org.apache.cloudstack.api.response.NetworkResponse;
+import org.apache.cloudstack.context.CallContext;
 
 import com.cloud.event.EventTypes;
 import com.cloud.exception.InvalidParameterValueException;
@@ -40,7 +42,6 @@ import com.cloud.exception.ResourceUnavailableException;
 import com.cloud.network.Network;
 import com.cloud.network.rules.FirewallRule;
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
 import com.cloud.utils.net.NetUtils;
 
 @APICommand(name = "createEgressFirewallRule", description = "Creates a egress firewall rule for a given network ", responseObject = FirewallResponse.class)
@@ -128,12 +129,12 @@ public class CreateEgressFirewallRuleCmd extends BaseAsyncCreateCmd implements F
 
     @Override
     public void execute() throws ResourceUnavailableException {
-        UserContext callerContext = UserContext.current();
+        CallContext callerContext = CallContext.current();
         boolean success = false;
         FirewallRule rule = _entityMgr.findById(FirewallRule.class, getEntityId());
         try {
-            UserContext.current().setEventDetails("Rule Id: " + getEntityId());
-             success = _firewallService.applyEgressFirewallRules (rule, callerContext.getCaller());
+            CallContext.current().setEventDetails("Rule Id: " + getEntityId());
+             success = _firewallService.applyEgressFirewallRules (rule, callerContext.getCallingAccount());
             // State is different after the rule is applied, so get new object here
             rule = _entityMgr.findById(FirewallRule.class, getEntityId());
             FirewallResponse fwResponse = new FirewallResponse();
@@ -204,7 +205,7 @@ public class CreateEgressFirewallRuleCmd extends BaseAsyncCreateCmd implements F
 
     @Override
     public long getEntityOwnerId() {
-        Account account = UserContext.current().getCaller();
+        Account account = CallContext.current().getCallingAccount();
 
         if (account != null) {
             return account.getId();

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/user/firewall/CreateFirewallRuleCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/firewall/CreateFirewallRuleCmd.java b/api/src/org/apache/cloudstack/api/command/user/firewall/CreateFirewallRuleCmd.java
index b94ea17..ff8e283 100644
--- a/api/src/org/apache/cloudstack/api/command/user/firewall/CreateFirewallRuleCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/firewall/CreateFirewallRuleCmd.java
@@ -29,6 +29,8 @@ import org.apache.cloudstack.api.Parameter;
 import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.FirewallResponse;
 import org.apache.cloudstack.api.response.IPAddressResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.event.EventTypes;
@@ -38,7 +40,6 @@ import com.cloud.exception.ResourceUnavailableException;
 import com.cloud.network.IpAddress;
 import com.cloud.network.rules.FirewallRule;
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
 import com.cloud.utils.net.NetUtils;
 
 @APICommand(name = "createFirewallRule", description = "Creates a firewall rule for a given ip address", responseObject = FirewallResponse.class)
@@ -116,12 +117,12 @@ public class CreateFirewallRuleCmd extends BaseAsyncCreateCmd implements Firewal
 
     @Override
     public void execute() throws ResourceUnavailableException {
-        UserContext callerContext = UserContext.current();
+        CallContext callerContext = CallContext.current();
         boolean success = false;
         FirewallRule rule = _entityMgr.findById(FirewallRule.class, getEntityId());
         try {
-            UserContext.current().setEventDetails("Rule Id: " + getEntityId());
-            success = _firewallService.applyIngressFirewallRules(rule.getSourceIpAddressId(), callerContext.getCaller());
+            CallContext.current().setEventDetails("Rule Id: " + getEntityId());
+            success = _firewallService.applyIngressFirewallRules(rule.getSourceIpAddressId(), callerContext.getCallingAccount());
 
             // State is different after the rule is applied, so get new object here
             rule = _entityMgr.findById(FirewallRule.class, getEntityId());
@@ -211,7 +212,7 @@ public class CreateFirewallRuleCmd extends BaseAsyncCreateCmd implements Firewal
 
     @Override
     public long getEntityOwnerId() {
-        Account account = UserContext.current().getCaller();
+        Account account = CallContext.current().getCallingAccount();
 
         if (account != null) {
             return account.getId();

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/user/firewall/CreatePortForwardingRuleCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/firewall/CreatePortForwardingRuleCmd.java b/api/src/org/apache/cloudstack/api/command/user/firewall/CreatePortForwardingRuleCmd.java
index 372e00f..ff63d08 100644
--- a/api/src/org/apache/cloudstack/api/command/user/firewall/CreatePortForwardingRuleCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/firewall/CreatePortForwardingRuleCmd.java
@@ -30,6 +30,8 @@ import org.apache.cloudstack.api.response.FirewallRuleResponse;
 import org.apache.cloudstack.api.response.IPAddressResponse;
 import org.apache.cloudstack.api.response.NetworkResponse;
 import org.apache.cloudstack.api.response.UserVmResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.event.EventTypes;
@@ -39,7 +41,6 @@ import com.cloud.exception.ResourceUnavailableException;
 import com.cloud.network.IpAddress;
 import com.cloud.network.rules.PortForwardingRule;
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
 import com.cloud.utils.net.Ip;
 
 @APICommand(name = "createPortForwardingRule", description = "Creates a port forwarding rule", responseObject = FirewallRuleResponse.class)
@@ -171,17 +172,17 @@ public class CreatePortForwardingRuleCmd extends BaseAsyncCreateCmd implements P
 
     @Override
     public void execute() throws ResourceUnavailableException {
-        UserContext callerContext = UserContext.current();
+        CallContext callerContext = CallContext.current();
         boolean success = true;
         PortForwardingRule rule = null;
         try {
-            UserContext.current().setEventDetails("Rule Id: " + getEntityId());
+            CallContext.current().setEventDetails("Rule Id: " + getEntityId());
 
             if (getOpenFirewall()) {
-                success = success && _firewallService.applyIngressFirewallRules(ipAddressId, callerContext.getCaller());
+                success = success && _firewallService.applyIngressFirewallRules(ipAddressId, callerContext.getCallingAccount());
             }
 
-            success = success && _rulesService.applyPortForwardingRules(ipAddressId, callerContext.getCaller());
+            success = success && _rulesService.applyPortForwardingRules(ipAddressId, callerContext.getCallingAccount());
 
             // State is different after the rule is applied, so get new object here
             rule = _entityMgr.findById(PortForwardingRule.class, getEntityId());
@@ -271,7 +272,7 @@ public class CreatePortForwardingRuleCmd extends BaseAsyncCreateCmd implements P
 
     @Override
     public long getEntityOwnerId() {
-        Account account = UserContext.current().getCaller();
+        Account account = CallContext.current().getCallingAccount();
 
         if (account != null) {
             return account.getId();

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/user/firewall/DeleteEgressFirewallRuleCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/firewall/DeleteEgressFirewallRuleCmd.java b/api/src/org/apache/cloudstack/api/command/user/firewall/DeleteEgressFirewallRuleCmd.java
index ec824b7..c3f1a94 100644
--- a/api/src/org/apache/cloudstack/api/command/user/firewall/DeleteEgressFirewallRuleCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/firewall/DeleteEgressFirewallRuleCmd.java
@@ -18,6 +18,7 @@
 package org.apache.cloudstack.api.command.user.firewall;
 
 import org.apache.cloudstack.api.APICommand;
+
 import org.apache.log4j.Logger;
 
 import org.apache.cloudstack.api.ApiCommandJobType;
@@ -30,12 +31,12 @@ import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.AccountResponse;
 import org.apache.cloudstack.api.response.FirewallRuleResponse;
 import org.apache.cloudstack.api.response.SuccessResponse;
+import org.apache.cloudstack.context.CallContext;
 
 import com.cloud.event.EventTypes;
 import com.cloud.exception.InvalidParameterValueException;
 import com.cloud.exception.ResourceUnavailableException;
 import com.cloud.network.rules.FirewallRule;
-import com.cloud.user.UserContext;
 
 @APICommand(name = "deleteEgressFirewallRule", description="Deletes an ggress firewall rule", responseObject=SuccessResponse.class)
 public class DeleteEgressFirewallRuleCmd extends BaseAsyncCmd {
@@ -94,7 +95,7 @@ public class DeleteEgressFirewallRuleCmd extends BaseAsyncCmd {
 
     @Override
     public void execute() throws ResourceUnavailableException {
-        UserContext.current().setEventDetails("Rule Id: " + id);
+        CallContext.current().setEventDetails("Rule Id: " + id);
         boolean result = _firewallService.revokeFirewallRule(id, true);
 
         if (result) {

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/user/firewall/DeleteFirewallRuleCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/firewall/DeleteFirewallRuleCmd.java b/api/src/org/apache/cloudstack/api/command/user/firewall/DeleteFirewallRuleCmd.java
index 3aeb7e2..c04cae7 100644
--- a/api/src/org/apache/cloudstack/api/command/user/firewall/DeleteFirewallRuleCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/firewall/DeleteFirewallRuleCmd.java
@@ -26,13 +26,14 @@ import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.AccountResponse;
 import org.apache.cloudstack.api.response.FirewallRuleResponse;
 import org.apache.cloudstack.api.response.SuccessResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.event.EventTypes;
 import com.cloud.exception.InvalidParameterValueException;
 import com.cloud.exception.ResourceUnavailableException;
 import com.cloud.network.rules.FirewallRule;
-import com.cloud.user.UserContext;
 
 @APICommand(name = "deleteFirewallRule", description="Deletes a firewall rule", responseObject=SuccessResponse.class)
 public class DeleteFirewallRuleCmd extends BaseAsyncCmd {
@@ -92,7 +93,7 @@ public class DeleteFirewallRuleCmd extends BaseAsyncCmd {
 
     @Override
     public void execute() throws ResourceUnavailableException {
-        UserContext.current().setEventDetails("Rule Id: " + id);
+        CallContext.current().setEventDetails("Rule Id: " + id);
         boolean result = _firewallService.revokeFirewallRule(id, true);
 
         if (result) {

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/user/firewall/DeletePortForwardingRuleCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/firewall/DeletePortForwardingRuleCmd.java b/api/src/org/apache/cloudstack/api/command/user/firewall/DeletePortForwardingRuleCmd.java
index e9caa05..47c9ee0 100644
--- a/api/src/org/apache/cloudstack/api/command/user/firewall/DeletePortForwardingRuleCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/firewall/DeletePortForwardingRuleCmd.java
@@ -26,12 +26,13 @@ import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.AccountResponse;
 import org.apache.cloudstack.api.response.FirewallRuleResponse;
 import org.apache.cloudstack.api.response.SuccessResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.event.EventTypes;
 import com.cloud.exception.InvalidParameterValueException;
 import com.cloud.network.rules.PortForwardingRule;
-import com.cloud.user.UserContext;
 
 @APICommand(name = "deletePortForwardingRule", description="Deletes a port forwarding rule", responseObject=SuccessResponse.class)
 public class DeletePortForwardingRuleCmd extends BaseAsyncCmd {
@@ -92,7 +93,7 @@ public class DeletePortForwardingRuleCmd extends BaseAsyncCmd {
 
     @Override
     public void execute(){
-        UserContext.current().setEventDetails("Rule Id: "+id);
+        CallContext.current().setEventDetails("Rule Id: "+id);
         //revoke corresponding firewall rule first
         boolean result  = _firewallService.revokeRelatedFirewallRule(id, true);
         result = result &&  _rulesService.revokePortForwardingRule(id, true);

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/user/iso/AttachIsoCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/iso/AttachIsoCmd.java b/api/src/org/apache/cloudstack/api/command/user/iso/AttachIsoCmd.java
index 933ee8b..11e4270 100644
--- a/api/src/org/apache/cloudstack/api/command/user/iso/AttachIsoCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/iso/AttachIsoCmd.java
@@ -25,11 +25,12 @@ import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.command.user.vm.DeployVMCmd;
 import org.apache.cloudstack.api.response.TemplateResponse;
 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.InvalidParameterValueException;
-import com.cloud.user.UserContext;
 import com.cloud.uservm.UserVm;
 
 @APICommand(name = "attachIso", description="Attaches an ISO to a virtual machine.", responseObject=UserVmResponse.class)
@@ -95,7 +96,7 @@ public class AttachIsoCmd extends BaseAsyncCmd {
 
     @Override
     public void execute(){
-        UserContext.current().setEventDetails("Vm Id: " +getVirtualMachineId()+ " ISO Id: "+getId());
+        CallContext.current().setEventDetails("Vm Id: " +getVirtualMachineId()+ " ISO Id: "+getId());
         boolean result = _templateService.attachIso(id, virtualMachineId);
         if (result) {
             UserVm userVm = _responseGenerator.findUserVmById(virtualMachineId);

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/user/iso/DeleteIsoCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/iso/DeleteIsoCmd.java b/api/src/org/apache/cloudstack/api/command/user/iso/DeleteIsoCmd.java
index ef15418..a7ec9f6 100644
--- a/api/src/org/apache/cloudstack/api/command/user/iso/DeleteIsoCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/iso/DeleteIsoCmd.java
@@ -26,12 +26,13 @@ import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.SuccessResponse;
 import org.apache.cloudstack.api.response.TemplateResponse;
 import org.apache.cloudstack.api.response.ZoneResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.event.EventTypes;
 import com.cloud.template.VirtualMachineTemplate;
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
 
 @APICommand(name = "deleteIso", description="Deletes an ISO file.", responseObject=SuccessResponse.class)
 public class DeleteIsoCmd extends BaseAsyncCmd {
@@ -106,7 +107,7 @@ public class DeleteIsoCmd extends BaseAsyncCmd {
 
     @Override
     public void execute(){
-        UserContext.current().setEventDetails("ISO Id: "+getId());
+        CallContext.current().setEventDetails("ISO Id: "+getId());
         boolean result = _templateService.deleteIso(this);
         if (result) {
             SuccessResponse response = new SuccessResponse(getCommandName());

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/user/iso/ExtractIsoCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/iso/ExtractIsoCmd.java b/api/src/org/apache/cloudstack/api/command/user/iso/ExtractIsoCmd.java
index 4e6ff57..5378ceb 100644
--- a/api/src/org/apache/cloudstack/api/command/user/iso/ExtractIsoCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/iso/ExtractIsoCmd.java
@@ -26,13 +26,14 @@ import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.ExtractResponse;
 import org.apache.cloudstack.api.response.TemplateResponse;
 import org.apache.cloudstack.api.response.ZoneResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.event.EventTypes;
 import com.cloud.exception.InternalErrorException;
 import com.cloud.template.VirtualMachineTemplate;
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
 import com.cloud.utils.Pair;
 
 @APICommand(name = "extractIso", description="Extracts an ISO", responseObject=ExtractResponse.class)
@@ -123,7 +124,7 @@ public class ExtractIsoCmd extends BaseAsyncCmd {
     @Override
     public void execute(){
         try {
-            UserContext.current().setEventDetails(getEventDescription());
+            CallContext.current().setEventDetails(getEventDescription());
             String uploadUrl = _templateService.extract(this);
             if (uploadUrl != null) {
                 ExtractResponse response = _responseGenerator.createExtractResponse(id, zoneId, getEntityOwnerId(), mode, uploadUrl);

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/user/iso/ListIsosCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/iso/ListIsosCmd.java b/api/src/org/apache/cloudstack/api/command/user/iso/ListIsosCmd.java
index 09e2c1c..c3f558b 100644
--- a/api/src/org/apache/cloudstack/api/command/user/iso/ListIsosCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/iso/ListIsosCmd.java
@@ -28,11 +28,12 @@ import org.apache.cloudstack.api.Parameter;
 import org.apache.cloudstack.api.response.ListResponse;
 import org.apache.cloudstack.api.response.TemplateResponse;
 import org.apache.cloudstack.api.response.ZoneResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.template.VirtualMachineTemplate.TemplateFilter;
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
 import com.cloud.utils.Pair;
 
 @APICommand(name = "listIsos", description="Lists all available ISO files.", responseObject=TemplateResponse.class)
@@ -116,7 +117,7 @@ public class ListIsosCmd extends BaseListTaggedResourcesCmd {
     }
 
     public boolean listInReadyState() {
-        Account account = UserContext.current().getCaller();
+        Account account = CallContext.current().getCallingAccount();
         // It is account specific if account is admin type and domainId and accountName are not null
         boolean isAccountSpecific = (account == null || isAdmin(account.getType())) && (getAccountName() != null) && (getDomainId() != null);
         // Show only those that are downloaded.

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/user/iso/RegisterIsoCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/iso/RegisterIsoCmd.java b/api/src/org/apache/cloudstack/api/command/user/iso/RegisterIsoCmd.java
index 943cbe9..84f6980 100644
--- a/api/src/org/apache/cloudstack/api/command/user/iso/RegisterIsoCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/iso/RegisterIsoCmd.java
@@ -30,11 +30,12 @@ import org.apache.cloudstack.api.response.ListResponse;
 import org.apache.cloudstack.api.response.ProjectResponse;
 import org.apache.cloudstack.api.response.TemplateResponse;
 import org.apache.cloudstack.api.response.ZoneResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.exception.ResourceAllocationException;
 import com.cloud.template.VirtualMachineTemplate;
-import com.cloud.user.UserContext;
 
 @APICommand(name = "registerIso", responseObject=TemplateResponse.class, description="Registers an existing ISO into the CloudStack Cloud.")
 public class RegisterIsoCmd extends BaseCmd {
@@ -169,7 +170,7 @@ public class RegisterIsoCmd extends BaseCmd {
     public long getEntityOwnerId() {
         Long accountId = finalyzeAccountId(accountName, domainId, projectId, true);
         if (accountId == null) {
-            return UserContext.current().getCaller().getId();
+            return CallContext.current().getCallingAccount().getId();
         }
 
         return accountId;

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/user/loadbalancer/AssignToLoadBalancerRuleCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/AssignToLoadBalancerRuleCmd.java b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/AssignToLoadBalancerRuleCmd.java
index e0f9bcd..b94777e 100644
--- a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/AssignToLoadBalancerRuleCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/AssignToLoadBalancerRuleCmd.java
@@ -27,13 +27,14 @@ import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.FirewallRuleResponse;
 import org.apache.cloudstack.api.response.SuccessResponse;
 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.InvalidParameterValueException;
 import com.cloud.network.rules.LoadBalancer;
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
 import com.cloud.utils.StringUtils;
 
 @APICommand(name = "assignToLoadBalancerRule", description="Assigns virtual machine or a list of virtual machines to a load balancer rule.", responseObject=SuccessResponse.class)
@@ -96,7 +97,7 @@ public class AssignToLoadBalancerRuleCmd extends BaseAsyncCmd {
 
     @Override
     public void execute(){
-        UserContext.current().setEventDetails("Load balancer Id: "+getLoadBalancerId()+" VmIds: "+StringUtils.join(getVirtualMachineIds(), ","));
+        CallContext.current().setEventDetails("Load balancer Id: "+getLoadBalancerId()+" VmIds: "+StringUtils.join(getVirtualMachineIds(), ","));
         boolean result = _lbService.assignToLoadBalancer(getLoadBalancerId(), virtualMachineIds);
         if (result) {
             SuccessResponse response = new SuccessResponse(getCommandName());

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/user/loadbalancer/CreateApplicationLoadBalancerCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/CreateApplicationLoadBalancerCmd.java b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/CreateApplicationLoadBalancerCmd.java
index f085f5a..4fb6f40 100644
--- a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/CreateApplicationLoadBalancerCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/CreateApplicationLoadBalancerCmd.java
@@ -25,7 +25,9 @@ import org.apache.cloudstack.api.Parameter;
 import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.ApplicationLoadBalancerResponse;
 import org.apache.cloudstack.api.response.NetworkResponse;
+import org.apache.cloudstack.context.CallContext;
 import org.apache.cloudstack.network.lb.ApplicationLoadBalancerRule;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.event.EventTypes;
@@ -37,7 +39,6 @@ import com.cloud.exception.ResourceAllocationException;
 import com.cloud.exception.ResourceUnavailableException;
 import com.cloud.network.Network;
 import com.cloud.network.rules.LoadBalancerContainer.Scheme;
-import com.cloud.user.UserContext;
 import com.cloud.utils.net.NetUtils;
 
 @APICommand(name = "createLoadBalancer", description="Creates a Load Balancer", responseObject=ApplicationLoadBalancerResponse.class, since="4.2.0")
@@ -180,7 +181,7 @@ public class CreateApplicationLoadBalancerCmd extends BaseAsyncCreateCmd {
     public void execute() throws ResourceAllocationException, ResourceUnavailableException {
         ApplicationLoadBalancerRule rule = null;
         try {
-            UserContext.current().setEventDetails("Load Balancer Id: " + getEntityId());
+            CallContext.current().setEventDetails("Load Balancer Id: " + getEntityId());
             // State might be different after the rule is applied, so get new object here
             rule = _entityMgr.findById(ApplicationLoadBalancerRule.class, getEntityId());
             ApplicationLoadBalancerResponse lbResponse = _responseGenerator.createLoadBalancerContainerReponse(rule, _lbService.getLbInstances(getEntityId()));

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/user/loadbalancer/CreateLBHealthCheckPolicyCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/CreateLBHealthCheckPolicyCmd.java b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/CreateLBHealthCheckPolicyCmd.java
index ac0ec3a..d274dd7 100644
--- a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/CreateLBHealthCheckPolicyCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/CreateLBHealthCheckPolicyCmd.java
@@ -18,6 +18,7 @@ package org.apache.cloudstack.api.command.user.loadbalancer;
 
 
 import org.apache.cloudstack.api.response.FirewallRuleResponse;
+
 import org.apache.log4j.Logger;
 
 import org.apache.cloudstack.api.ApiConstants;
@@ -26,15 +27,18 @@ import org.apache.cloudstack.api.BaseAsyncCreateCmd;
 import org.apache.cloudstack.api.APICommand;
 import org.apache.cloudstack.api.Parameter;
 import org.apache.cloudstack.api.ServerApiException;
+
 import com.cloud.event.EventTypes;
 import com.cloud.exception.InvalidParameterValueException;
 import com.cloud.exception.ResourceAllocationException;
 import com.cloud.exception.ResourceUnavailableException;
 import com.cloud.network.rules.HealthCheckPolicy;
+
 import org.apache.cloudstack.api.response.LBHealthCheckResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import com.cloud.network.rules.LoadBalancer;
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
 
 
 @APICommand(name = "createLBHealthCheckPolicy", description = "Creates a Load Balancer healthcheck policy ", responseObject = LBHealthCheckResponse.class, since="4.2.0")
@@ -97,7 +101,7 @@ public class CreateLBHealthCheckPolicyCmd extends BaseAsyncCreateCmd {
 
     @Override
     public long getEntityOwnerId() {
-        Account account = UserContext.current().getCaller();
+        Account account = CallContext.current().getCallingAccount();
         if (account != null) {
             return account.getId();
         }
@@ -127,7 +131,7 @@ public class CreateLBHealthCheckPolicyCmd extends BaseAsyncCreateCmd {
         boolean success = false;
 
         try {
-            UserContext.current().setEventDetails("Load balancer healthcheck policy Id : " + getEntityId());
+            CallContext.current().setEventDetails("Load balancer healthcheck policy Id : " + getEntityId());
             success = _lbService.applyLBHealthCheckPolicy(this);
             if (success) {
                 // State might be different after the rule is applied, so get new object here

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11e1e585/api/src/org/apache/cloudstack/api/command/user/loadbalancer/CreateLBStickinessPolicyCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/CreateLBStickinessPolicyCmd.java b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/CreateLBStickinessPolicyCmd.java
index 02b253a..1684430 100644
--- a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/CreateLBStickinessPolicyCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/CreateLBStickinessPolicyCmd.java
@@ -27,6 +27,8 @@ import org.apache.cloudstack.api.Parameter;
 import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.response.FirewallRuleResponse;
 import org.apache.cloudstack.api.response.LBStickinessResponse;
+import org.apache.cloudstack.context.CallContext;
+
 import org.apache.log4j.Logger;
 
 import com.cloud.event.EventTypes;
@@ -36,7 +38,6 @@ import com.cloud.exception.ResourceUnavailableException;
 import com.cloud.network.rules.LoadBalancer;
 import com.cloud.network.rules.StickinessPolicy;
 import com.cloud.user.Account;
-import com.cloud.user.UserContext;
 
 
 @APICommand(name = "createLBStickinessPolicy", description = "Creates a Load Balancer stickiness policy ", responseObject = LBStickinessResponse.class, since="3.0.0")
@@ -103,7 +104,7 @@ public class CreateLBStickinessPolicyCmd extends BaseAsyncCreateCmd {
 
     @Override
     public long getEntityOwnerId() {
-        Account account = UserContext.current().getCaller();
+        Account account = CallContext.current().getCallingAccount();
         if (account != null) {
             return account.getId();
         }
@@ -117,7 +118,7 @@ public class CreateLBStickinessPolicyCmd extends BaseAsyncCreateCmd {
         boolean success = false;
 
         try {
-            UserContext.current().setEventDetails("Rule Id: " + getEntityId());
+            CallContext.current().setEventDetails("Rule Id: " + getEntityId());
             success = _lbService.applyLBStickinessPolicy(this);
             if (success) {
                 // State might be different after the rule is applied, so get new object here


[34/50] [abbrv] git commit: updated refs/heads/ldapplugin to 7bc705e

Posted by ch...@apache.org.
CLOUDSTACK-809 minor changes to the UI strings


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

Branch: refs/heads/ldapplugin
Commit: 4ac6ebb2dbf7218af4d0bfcdc5a05b953e4d02ed
Parents: 51b7f5d
Author: radhikap <ra...@citrix.com>
Authored: Wed Jul 17 12:21:47 2013 +0530
Committer: radhikap <ra...@citrix.com>
Committed: Wed Jul 17 12:22:11 2013 +0530

----------------------------------------------------------------------
 docs/en-US/multiple-ip-nic.xml | 73 ++++++++++++++++++++-----------------
 1 file changed, 39 insertions(+), 34 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/4ac6ebb2/docs/en-US/multiple-ip-nic.xml
----------------------------------------------------------------------
diff --git a/docs/en-US/multiple-ip-nic.xml b/docs/en-US/multiple-ip-nic.xml
index 926235c..790befc 100644
--- a/docs/en-US/multiple-ip-nic.xml
+++ b/docs/en-US/multiple-ip-nic.xml
@@ -21,37 +21,40 @@
 -->
 <section id="multiple-ip-nic">
   <title>Configuring Multiple IP Addresses on a Single NIC</title>
-  <para>&PRODUCT; now provides you the ability to associate multiple private IP addresses per guest
-    VM NIC. This feature is supported on all the network configurations&mdash;Basic, Advanced, and
-    VPC. Security Groups, Static NAT and Port forwarding services are supported on these additional
-    IPs. In addition to the primary IP, you can assign additional IPs to the guest VM NIC.</para>
+  <para>&PRODUCT; provides you the ability to associate multiple private IP addresses per guest VM
+    NIC. In addition to the primary IP, you can assign additional IPs to the guest VM NIC. This
+    feature is supported on all the network configurations&mdash;Basic, Advanced, and VPC. Security
+    Groups, Static NAT and Port forwarding services are supported on these additional IPs. </para>
   <para>As always, you can specify an IP from the guest subnet; if not specified, an IP is
     automatically picked up from the guest VM subnet. You can view the IPs associated with for each
-    guest VM NICs on the UI. You can apply NAT on these additional guest IPs by using firewall
-    configuration in the &PRODUCT; UI. You must specify the NIC to which the IP should be
+    guest VM NICs on the UI. You can apply NAT on these additional guest IPs by using network
+    configuration option in the &PRODUCT; UI. You must specify the NIC to which the IP should be
     associated.</para>
-  <para>This feature is supported on XenServer, KVM, and VMware hypervisors.</para>
-  <note>
-    <para>You need to configure the secondary IP address on the guest VM. &PRODUCT; will
-      not configure the acquired IP address on the VM. Ensure that you assign IPs to NIC each
-      time the VM reboots.</para>
-  </note>
-  <para>Some of the use cases are described below:</para>
-  <itemizedlist>
-    <listitem>
-      <para>Building network appliances: Network appliances, such as firewalls and load balancers,
-        generally work best when they have access to multiple IP addresses on the network
-        interface.</para>
-    </listitem>
-    <listitem>
-      <para>Moving private IP addresses between interfaces or instances. Applications that are bound
-        to specific IP addresses can be moved between instances. </para>
-    </listitem>
-    <listitem>
-      <para>Hosting multiple SSL Websites on a single instance. You can install multiple SSL
-        certificates on a single instance, each associated with a distinct IP address.</para>
-    </listitem>
-  </itemizedlist>
+  <para>This feature is supported on XenServer, KVM, and VMware hypervisors. Note that Basic zone
+    security groups are not supported on VMware.</para>
+  <section id="usecases-mip">
+    <title>Use Cases</title>
+    <para>Some of the use cases are described below:</para>
+    <itemizedlist>
+      <listitem>
+        <para>Network devices, such as firewalls and load balancers, generally work best when they
+          have access to multiple IP addresses on the network interface.</para>
+      </listitem>
+      <listitem>
+        <para>Moving private IP addresses between interfaces or instances. Applications that are
+          bound to specific IP addresses can be moved between instances. </para>
+      </listitem>
+      <listitem>
+        <para>Hosting multiple SSL Websites on a single instance. You can install multiple SSL
+          certificates on a single instance, each associated with a distinct IP address.</para>
+      </listitem>
+    </itemizedlist>
+  </section>
+  <section id="guideline-nic">
+    <title>Guidelines</title>
+    <para>To prevent IP conflict, configure different subnets when multiple networks are connected
+      to the same VM.</para>
+  </section>
   <section id="workflow-rn">
     <title>Assigning Additional IPs to a VM</title>
     <orderedlist>
@@ -68,17 +71,19 @@
         <para>In the Details tab, click NICs.</para>
       </listitem>
       <listitem>
-        <para>Click View All.</para>
+        <para>Click View Secondary IPs.</para>
       </listitem>
       <listitem>
-        <para>Click Acquire New IP, and click Yes in the confirmation dialog.</para>
-        <para>You are prompted for confirmation because, typically, IP addresses are a limited
-          resource. Within a few moments, the new IP address should appear with the state Allocated.
-          You can now use the IP address in Port Forwarding or StaticNAT rules.</para>
+        <para>Click Acquire New Secondary IP, and click Yes in the confirmation dialog.</para>
+        <para>You need to specify the secondary IP address on the guest VM. &PRODUCT; will not
+          automatically configure the acquired IP address on the VM. Ensure that you assign IPs to
+          NIC each time the VM reboots.</para>
+        <para>Within a few moments, the new IP address should appear with the state Allocated. You
+          can now use the IP address in Port Forwarding or StaticNAT rules.</para>
       </listitem>
     </orderedlist>
   </section>
-   <section id="caveats">
+  <section id="caveats">
     <title>Port Forwarding and StaticNAT Services Changes</title>
     <para>Because multiple IPs can be associated per NIC, you are allowed to select a desired IP for
       the Port Forwarding and StaticNAT services. The default is the primary IP. To enable this