You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by bf...@apache.org on 2013/10/24 20:30:50 UTC

[12/50] [abbrv] git commit: updated refs/heads/ui-restyle to 500c798

Merge remote-tracking branch 'origin/txn-refactor'

Conflicts:
	engine/orchestration/src/org/apache/cloudstack/engine/orchestration/NetworkOrchestrator.java
	server/src/com/cloud/configuration/ConfigurationManagerImpl.java
	server/src/com/cloud/metadata/ResourceMetaDataManagerImpl.java
	server/src/com/cloud/vm/UserVmManagerImpl.java


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

Branch: refs/heads/ui-restyle
Commit: 205a77a5bbd82cc95c2c635286c1ab5f353c8fb7
Parents: 1f0dd7c edeaf98
Author: Darren Shepherd <da...@gmail.com>
Authored: Wed Oct 23 10:40:44 2013 -0700
Committer: Darren Shepherd <da...@gmail.com>
Committed: Wed Oct 23 10:40:44 2013 -0700

----------------------------------------------------------------------
 .../exception/ConcurrentOperationException.java |    3 +-
 .../bridge/persist/dao/BucketPolicyDaoImpl.java |    6 +-
 .../persist/dao/CloudStackAccountDaoImpl.java   |    3 +-
 .../dao/CloudStackConfigurationDaoImpl.java     |    3 +-
 .../dao/CloudStackSvcOfferingDaoImpl.java       |    5 +-
 .../persist/dao/CloudStackUserDaoImpl.java      |    3 +-
 .../cloud/bridge/persist/dao/MHostDaoImpl.java  |    5 +-
 .../bridge/persist/dao/MHostMountDaoImpl.java   |    3 +-
 .../persist/dao/MultiPartPartsDaoImpl.java      |    9 +-
 .../persist/dao/MultiPartUploadsDaoImpl.java    |   15 +-
 .../bridge/persist/dao/MultipartLoadDao.java    |    9 +-
 .../persist/dao/MultipartMetaDaoImpl.java       |    3 +-
 .../bridge/persist/dao/OfferingDaoImpl.java     |   11 +-
 .../cloud/bridge/persist/dao/SAclDaoImpl.java   |    7 +-
 .../bridge/persist/dao/SBucketDaoImpl.java      |    5 +-
 .../cloud/bridge/persist/dao/SHostDaoImpl.java  |    5 +-
 .../cloud/bridge/persist/dao/SMetaDaoImpl.java  |    5 +-
 .../bridge/persist/dao/SObjectDaoImpl.java      |    7 +-
 .../bridge/persist/dao/SObjectItemDaoImpl.java  |    5 +-
 .../persist/dao/UserCredentialsDaoImpl.java     |    5 +-
 .../cloud/bridge/service/EC2RestServlet.java    |   13 +-
 .../com/cloud/bridge/service/S3RestServlet.java |    5 +-
 .../service/controller/s3/S3BucketAction.java   |    3 +-
 .../service/controller/s3/ServiceProvider.java  |    7 +-
 .../cloud/bridge/service/core/s3/S3Engine.java  |   23 +-
 .../cloud/agent/manager/AgentManagerImpl.java   |    5 +-
 .../manager/ClusteredAgentManagerImpl.java      |    4 +-
 .../com/cloud/vm/VirtualMachineManagerImpl.java |  120 +-
 .../entity/api/db/dao/DcDetailsDaoImpl.java     |    4 +-
 .../entity/api/db/dao/EngineClusterDaoImpl.java |    6 +-
 .../api/db/dao/EngineDataCenterDaoImpl.java     |    6 +-
 .../entity/api/db/dao/EngineHostDaoImpl.java    |   14 +-
 .../entity/api/db/dao/EngineHostPodDaoImpl.java |    6 +-
 .../entity/api/db/dao/HostDetailsDaoImpl.java   |    4 +-
 .../entity/api/db/dao/HostTagsDaoImpl.java      |    4 +-
 .../orchestration/NetworkOrchestrator.java      |  896 ++++++-------
 .../orchestration/VolumeOrchestrator.java       |   88 +-
 .../src/com/cloud/alert/dao/AlertDaoImpl.java   |    4 +-
 .../com/cloud/capacity/dao/CapacityDaoImpl.java |   26 +-
 .../configuration/dao/ResourceCountDaoImpl.java |    4 +-
 .../src/com/cloud/dc/ClusterDetailsDaoImpl.java |    6 +-
 .../src/com/cloud/dc/dao/ClusterDaoImpl.java    |    6 +-
 .../com/cloud/dc/dao/ClusterVSMMapDaoImpl.java  |    4 +-
 .../src/com/cloud/dc/dao/DataCenterDaoImpl.java |    6 +-
 .../dc/dao/DataCenterIpAddressDaoImpl.java      |    8 +-
 .../DataCenterLinkLocalIpAddressDaoImpl.java    |    6 +-
 .../src/com/cloud/dc/dao/DataCenterVnetDao.java |    3 +-
 .../com/cloud/dc/dao/DataCenterVnetDaoImpl.java |    8 +-
 .../src/com/cloud/dc/dao/DcDetailsDaoImpl.java  |    4 +-
 .../src/com/cloud/dc/dao/HostPodDaoImpl.java    |    6 +-
 .../src/com/cloud/dc/dao/PodVlanDaoImpl.java    |    8 +-
 .../dc/dao/StorageNetworkIpAddressDaoImpl.java  |    6 +-
 .../src/com/cloud/dc/dao/VlanDaoImpl.java       |    4 +-
 .../src/com/cloud/domain/dao/DomainDaoImpl.java |    6 +-
 .../src/com/cloud/event/dao/EventDaoImpl.java   |    4 +-
 .../com/cloud/event/dao/UsageEventDaoImpl.java  |   10 +-
 .../src/com/cloud/host/dao/HostDaoImpl.java     |   14 +-
 .../com/cloud/host/dao/HostDetailsDaoImpl.java  |    4 +-
 .../src/com/cloud/host/dao/HostTagsDaoImpl.java |    4 +-
 .../src/com/cloud/keystore/KeystoreDaoImpl.java |    4 +-
 .../network/dao/FirewallRulesCidrsDaoImpl.java  |    4 +-
 .../cloud/network/dao/FirewallRulesDaoImpl.java |    6 +-
 .../com/cloud/network/dao/IPAddressDaoImpl.java |    6 +-
 .../com/cloud/network/dao/NetworkDaoImpl.java   |   10 +-
 .../cloud/network/dao/PortProfileDaoImpl.java   |    4 +-
 .../security/dao/SecurityGroupDaoImpl.java      |    6 +-
 .../security/dao/SecurityGroupWorkDaoImpl.java  |    8 +-
 .../security/dao/VmRulesetLogDaoImpl.java       |    8 +-
 .../cloud/network/vpc/dao/PrivateIpDaoImpl.java |    4 +-
 .../network/vpc/dao/StaticRouteDaoImpl.java     |    4 +-
 .../com/cloud/network/vpc/dao/VpcDaoImpl.java   |    8 +-
 .../network/vpc/dao/VpcOfferingDaoImpl.java     |    4 +-
 .../offerings/dao/NetworkOfferingDaoImpl.java   |    6 +-
 .../com/cloud/projects/dao/ProjectDaoImpl.java  |    4 +-
 .../dao/ServiceOfferingDetailsDaoImpl.java      |    4 +-
 .../storage/dao/LaunchPermissionDaoImpl.java    |    6 +-
 .../com/cloud/storage/dao/SnapshotDaoImpl.java  |   14 +-
 .../storage/dao/StoragePoolDetailsDaoImpl.java  |    4 +-
 .../storage/dao/StoragePoolHostDaoImpl.java     |   10 +-
 .../storage/dao/StoragePoolWorkDaoImpl.java     |    4 +-
 .../cloud/storage/dao/VMTemplateDaoImpl.java    |   14 +-
 .../storage/dao/VMTemplateDetailsDaoImpl.java   |    4 +-
 .../storage/dao/VMTemplateHostDaoImpl.java      |    8 +-
 .../storage/dao/VMTemplatePoolDaoImpl.java      |    8 +-
 .../storage/dao/VMTemplateZoneDaoImpl.java      |    4 +-
 .../com/cloud/storage/dao/VolumeDaoImpl.java    |   12 +-
 .../cloud/storage/dao/VolumeDetailsDaoImpl.java |    4 +-
 .../src/com/cloud/upgrade/DatabaseCreator.java  |    8 +-
 .../cloud/upgrade/DatabaseIntegrityChecker.java |    7 +-
 .../cloud/upgrade/DatabaseUpgradeChecker.java   |    6 +-
 .../com/cloud/upgrade/dao/Upgrade307to410.java  |    1 -
 .../com/cloud/upgrade/dao/VersionDaoImpl.java   |    4 +-
 .../src/com/cloud/usage/dao/UsageDaoImpl.java   |   26 +-
 .../cloud/usage/dao/UsageIPAddressDaoImpl.java  |    6 +-
 .../com/cloud/usage/dao/UsageJobDaoImpl.java    |    8 +-
 .../dao/UsageLoadBalancerPolicyDaoImpl.java     |    8 +-
 .../cloud/usage/dao/UsageNetworkDaoImpl.java    |    8 +-
 .../usage/dao/UsageNetworkOfferingDaoImpl.java  |    6 +-
 .../dao/UsagePortForwardingRuleDaoImpl.java     |    8 +-
 .../usage/dao/UsageSecurityGroupDaoImpl.java    |    6 +-
 .../cloud/usage/dao/UsageStorageDaoImpl.java    |    8 +-
 .../cloud/usage/dao/UsageVMInstanceDaoImpl.java |    8 +-
 .../cloud/usage/dao/UsageVMSnapshotDaoImpl.java |    8 +-
 .../cloud/usage/dao/UsageVPNUserDaoImpl.java    |    6 +-
 .../com/cloud/usage/dao/UsageVmDiskDaoImpl.java |    8 +-
 .../com/cloud/usage/dao/UsageVolumeDaoImpl.java |    8 +-
 .../com/cloud/user/AccountDetailsDaoImpl.java   |    4 +-
 .../src/com/cloud/user/dao/AccountDaoImpl.java  |    4 +-
 .../cloud/user/dao/UserStatisticsDaoImpl.java   |    6 +-
 .../cloud/user/dao/VmDiskStatisticsDaoImpl.java |    6 +-
 .../com/cloud/vm/dao/ConsoleProxyDaoImpl.java   |   16 +-
 .../com/cloud/vm/dao/DomainRouterDaoImpl.java   |    8 +-
 .../src/com/cloud/vm/dao/NicDetailDaoImpl.java  |    4 +-
 .../cloud/vm/dao/SecondaryStorageVmDaoImpl.java |    8 +-
 .../src/com/cloud/vm/dao/UserVmDaoImpl.java     |    8 +-
 .../com/cloud/vm/dao/UserVmDetailsDaoImpl.java  |    4 +-
 .../src/com/cloud/vm/dao/VMInstanceDaoImpl.java |   12 +-
 .../affinity/dao/AffinityGroupVMMapDaoImpl.java |    4 +-
 .../entity/api/db/dao/VMComputeTagDaoImpl.java  |    4 +-
 .../entity/api/db/dao/VMEntityDaoImpl.java      |    4 +-
 .../entity/api/db/dao/VMNetworkMapDaoImpl.java  |    4 +-
 .../entity/api/db/dao/VMReservationDaoImpl.java |    4 +-
 .../entity/api/db/dao/VMRootDiskTagDaoImpl.java |    4 +-
 .../datastore/db/PrimaryDataStoreDaoImpl.java   |   10 +-
 .../endpoint/DefaultEndPointSelector.java       |    3 +-
 .../image/db/ImageStoreDetailsDaoImpl.java      |    4 +-
 .../image/db/SnapshotDataStoreDaoImpl.java      |    6 +-
 .../image/db/TemplateDataStoreDaoImpl.java      |    6 +-
 .../image/db/VolumeDataStoreDaoImpl.java        |    4 +-
 .../datastore/PrimaryDataStoreHelper.java       |    4 +-
 .../db/PrimaryDataStoreDetailsDaoImpl.java      |    4 +-
 .../com/cloud/cluster/ClusterManagerImpl.java   |  102 +-
 .../dao/ManagementServerHostDaoImpl.java        |   16 +-
 .../dao/ManagementServerHostPeerDaoImpl.java    |    4 +-
 .../config/dao/ConfigurationDaoImpl.java        |    6 +-
 .../utils/crypt/EncryptionSecretKeyChanger.java |    3 +-
 .../com/cloud/utils/db/ConnectionConcierge.java |    2 +-
 framework/db/src/com/cloud/utils/db/DbUtil.java |    2 +-
 .../src/com/cloud/utils/db/GenericDaoBase.java  |   36 +-
 .../db/src/com/cloud/utils/db/Merovingian2.java |    2 +-
 .../src/com/cloud/utils/db/SequenceFetcher.java |    2 +-
 .../db/src/com/cloud/utils/db/Transaction.java  | 1165 +----------------
 .../com/cloud/utils/db/TransactionCallback.java |    7 +
 .../utils/db/TransactionCallbackNoReturn.java   |   13 +
 .../db/TransactionCallbackWithException.java    |    7 +
 ...ransactionCallbackWithExceptionNoReturn.java |   32 +
 .../utils/db/TransactionContextBuilder.java     |    6 +-
 .../com/cloud/utils/db/TransactionLegacy.java   | 1192 ++++++++++++++++++
 .../cloud/utils/db/TransactionMBeanImpl.java    |   18 +-
 .../com/cloud/utils/db/TransactionStatus.java   |    7 +
 .../db/test/com/cloud/utils/db/DbTestDao.java   |    4 +-
 .../db/test/com/cloud/utils/db/DbTestUtils.java |    4 +-
 .../com/cloud/utils/db/TestTransaction.java     |  154 +++
 .../com/cloud/utils/db/TransactionTest.java     |   26 +-
 framework/db/test/db.properties                 |   18 +
 .../framework/jobs/dao/AsyncJobDaoImpl.java     |    4 +-
 .../jobs/dao/AsyncJobJoinMapDaoImpl.java        |   10 +-
 .../framework/jobs/dao/SyncQueueDaoImpl.java    |    4 +-
 .../jobs/dao/SyncQueueItemDaoImpl.java          |    4 +-
 .../jobs/impl/AsyncJobManagerImpl.java          |  286 ++---
 .../jobs/impl/SyncQueueManagerImpl.java         |  271 ++--
 .../affinity/ExplicitDedicationProcessor.java   |   32 +-
 .../dedicated/DedicatedResourceManagerImpl.java |  273 ++--
 .../src/com/cloud/netapp/NetappManagerImpl.java |   10 +-
 .../BareMetalPingServiceImpl.java               |    3 -
 .../networkservice/BaremetaNetworkGuru.java     |   21 +-
 .../networkservice/BaremetalDhcpElement.java    |    4 -
 .../BaremetalDhcpManagerImpl.java               |    4 -
 .../BaremetalKickStartServiceImpl.java          |    7 +-
 .../networkservice/BaremetalPxeElement.java     |    4 -
 .../agent/manager/MockAgentManagerImpl.java     |   27 +-
 .../agent/manager/MockStorageManagerImpl.java   |  170 +--
 .../cloud/agent/manager/MockVmManagerImpl.java  |   46 +-
 .../agent/manager/SimulatorManagerImpl.java     |   10 +-
 .../simulator/dao/MockConfigurationDaoImpl.java |    4 +-
 .../com/cloud/ucs/manager/UcsManagerImpl.java   |    3 -
 .../vmware/manager/VmwareManagerImpl.java       |   53 +-
 .../network/CiscoNexusVSMDeviceManagerImpl.java |   68 +-
 .../network/element/CiscoNexusVSMElement.java   |   50 +-
 .../network/element/BigSwitchVnsElement.java    |   45 +-
 .../cloud/network/element/CiscoVnmcElement.java |  263 ++--
 .../lb/ElasticLoadBalancerManagerImpl.java      |   32 +-
 .../network/guru/MidoNetPublicNetworkGuru.java  |   19 +-
 .../cloud/network/element/NetscalerElement.java |   52 +-
 .../cloud/network/element/NiciraNvpElement.java |   45 +-
 .../cloudstack/storage/test/AopTestAdvice.java  |    4 +-
 server/src/com/cloud/api/ApiServer.java         |   66 +-
 .../com/cloud/capacity/CapacityManagerImpl.java |  321 ++---
 .../configuration/ConfigurationManagerImpl.java |  882 +++++++------
 .../consoleproxy/ConsoleProxyManagerImpl.java   |   34 +-
 .../cloud/dc/dao/DedicatedResourceDaoImpl.java  |    3 +-
 .../deploy/DeploymentPlanningManagerImpl.java   |  157 +--
 .../ha/HighAvailabilityManagerExtImpl.java      |    7 +-
 .../cloud/ha/dao/HighAvailabilityDaoImpl.java   |    3 +-
 .../metadata/ResourceMetaDataManagerImpl.java   |   86 +-
 .../network/ExternalDeviceUsageManagerImpl.java |  155 +--
 .../ExternalFirewallDeviceManagerImpl.java      |   46 +-
 .../ExternalLoadBalancerDeviceManagerImpl.java  |  171 ++-
 .../com/cloud/network/IpAddressManagerImpl.java |  988 ++++++++-------
 .../com/cloud/network/NetworkServiceImpl.java   |  605 ++++-----
 .../cloud/network/NetworkUsageManagerImpl.java  |   50 +-
 .../cloud/network/PortProfileManagerImpl.java   |   39 +-
 .../network/StorageNetworkManagerImpl.java      |  169 +--
 .../cloud/network/as/AutoScaleManagerImpl.java  |  191 +--
 .../network/firewall/FirewallManagerImpl.java   |   93 +-
 .../cloud/network/guru/DirectNetworkGuru.java   |  121 +-
 .../network/guru/DirectPodBasedNetworkGuru.java |  113 +-
 .../cloud/network/guru/GuestNetworkGuru.java    |   17 +-
 .../cloud/network/guru/PublicNetworkGuru.java   |   20 +-
 .../lb/LoadBalancingRulesManagerImpl.java       |  395 +++---
 .../VirtualNetworkApplianceManagerImpl.java     |  347 +++--
 .../cloud/network/rules/RulesManagerImpl.java   |  227 ++--
 .../security/SecurityGroupManagerImpl.java      |  526 ++++----
 .../network/vpc/NetworkACLManagerImpl.java      |   40 +-
 .../com/cloud/network/vpc/VpcManagerImpl.java   |  634 +++++-----
 .../network/vpn/RemoteAccessVpnManagerImpl.java |  224 ++--
 .../com/cloud/projects/ProjectManagerImpl.java  |  365 +++---
 .../com/cloud/resource/ResourceManagerImpl.java |  297 +++--
 .../resourcelimit/ResourceLimitManagerImpl.java |  333 ++---
 .../cloud/server/ConfigurationServerImpl.java   |  557 ++++----
 .../com/cloud/server/ManagementServerImpl.java  |  101 +-
 server/src/com/cloud/server/StatsCollector.java |  247 ++--
 .../com/cloud/servlet/CloudStartupServlet.java  |    3 +-
 .../com/cloud/servlet/ConsoleProxyServlet.java  |    3 +-
 .../com/cloud/storage/StorageManagerImpl.java   |   62 +-
 .../com/cloud/storage/VolumeApiServiceImpl.java |  144 ++-
 .../cloud/tags/TaggedResourceManagerImpl.java   |  110 +-
 .../com/cloud/template/TemplateManagerImpl.java |  100 +-
 server/src/com/cloud/test/DatabaseConfig.java   |   67 +-
 server/src/com/cloud/test/IPRangeConfig.java    |   15 +-
 server/src/com/cloud/test/PodZoneConfig.java    |    7 +-
 .../src/com/cloud/usage/UsageServiceImpl.java   |   10 +-
 .../src/com/cloud/user/AccountManagerImpl.java  |  190 +--
 .../src/com/cloud/user/DomainManagerImpl.java   |   70 +-
 .../cloud/uuididentity/dao/IdentityDaoImpl.java |   13 +-
 server/src/com/cloud/vm/UserVmManagerImpl.java  |  690 +++++-----
 .../vm/snapshot/VMSnapshotManagerImpl.java      |   45 +-
 .../affinity/AffinityGroupServiceImpl.java      |  107 +-
 .../lb/ApplicationLoadBalancerManagerImpl.java  |   52 +-
 .../GlobalLoadBalancingRulesServiceImpl.java    |  219 ++--
 .../configuration/ConfigurationManagerTest.java |   20 +-
 .../cloud/network/CreatePrivateNetworkTest.java |    6 +-
 .../network/DedicateGuestVlanRangesTest.java    |   18 +-
 .../network/UpdatePhysicalNetworkTest.java      |    5 +-
 ...GlobalLoadBalancingRulesServiceImplTest.java |   28 +-
 usage/src/com/cloud/usage/UsageManagerImpl.java |   16 +-
 .../src/com/cloud/usage/UsageSanityChecker.java |    4 +-
 .../cloud/utils/exception/ExceptionUtil.java    |   12 +
 .../utils/exception/ExceptionUtilTest.java      |   48 +
 249 files changed, 9041 insertions(+), 8260 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/205a77a5/engine/orchestration/src/com/cloud/vm/VirtualMachineManagerImpl.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/205a77a5/engine/orchestration/src/org/apache/cloudstack/engine/orchestration/NetworkOrchestrator.java
----------------------------------------------------------------------
diff --cc engine/orchestration/src/org/apache/cloudstack/engine/orchestration/NetworkOrchestrator.java
index 8ba3fdf,dbc0714..5636e07
--- a/engine/orchestration/src/org/apache/cloudstack/engine/orchestration/NetworkOrchestrator.java
+++ b/engine/orchestration/src/org/apache/cloudstack/engine/orchestration/NetworkOrchestrator.java
@@@ -401,133 -405,134 +405,134 @@@ public class NetworkOrchestrator extend
          defaultVPCOffProviders.put(Service.PortForwarding, defaultProviders);
          defaultVPCOffProviders.put(Service.Vpn, defaultProviders);
  
-         Transaction txn = Transaction.currentTxn();
-         txn.start();
- 
-         NetworkOfferingVO offering = null;
-         //#1 - quick cloud network offering
-         if (_networkOfferingDao.findByUniqueName(NetworkOffering.QuickCloudNoServices) == null) {
-             offering = _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,
+         Transaction.execute(new TransactionCallbackNoReturn() {
+             @Override
+             public void doInTransactionWithoutResult(TransactionStatus status) {
+                 NetworkOfferingVO offering = null;
+                 //#1 - quick cloud network offering
+                 if (_networkOfferingDao.findByUniqueName(NetworkOffering.QuickCloudNoServices) == null) {
+                     offering = _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, null);
 +                false, null, true);
-             offering.setState(NetworkOffering.State.Enabled);
-             _networkOfferingDao.update(offering.getId(), offering);
-         }
- 
-         //#2 - SG enabled network offering
-         if (_networkOfferingDao.findByUniqueName(NetworkOffering.DefaultSharedNetworkOfferingWithSGService) == null) {
-             offering = _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,
+                     offering.setState(NetworkOffering.State.Enabled);
+                     _networkOfferingDao.update(offering.getId(), offering);
+                 }
+         
+                 //#2 - SG enabled network offering
+                 if (_networkOfferingDao.findByUniqueName(NetworkOffering.DefaultSharedNetworkOfferingWithSGService) == null) {
+                     offering = _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, null);
 +                false, null, false, null, true);
-             offering.setState(NetworkOffering.State.Enabled);
-             _networkOfferingDao.update(offering.getId(), offering);
-         }
- 
-         //#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,
+                     offering.setState(NetworkOffering.State.Enabled);
+                     _networkOfferingDao.update(offering.getId(), offering);
+                 }
+         
+                 //#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, null);
 +                Availability.Optional, null, defaultSharedNetworkOfferingProviders, true, Network.GuestType.Shared, false, null, true, null, true, false, null, false, null, true);
-             offering.setState(NetworkOffering.State.Enabled);
-             _networkOfferingDao.update(offering.getId(), offering);
-         }
- 
-         //#4 - default isolated offering with Source nat service
-         if (_networkOfferingDao.findByUniqueName(NetworkOffering.DefaultIsolatedNetworkOfferingWithSourceNatService) == null) {
-             offering = _configMgr.createNetworkOffering(NetworkOffering.DefaultIsolatedNetworkOfferingWithSourceNatService,
-                 "Offering for Isolated networks with Source Nat service enabled", TrafficType.Guest, null, false, Availability.Required, null,
+                     offering.setState(NetworkOffering.State.Enabled);
+                     _networkOfferingDao.update(offering.getId(), offering);
+                 }
+         
+                 //#4 - default isolated offering with Source nat service
+                 if (_networkOfferingDao.findByUniqueName(NetworkOffering.DefaultIsolatedNetworkOfferingWithSourceNatService) == null) {
+                     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, null);
 +                defaultIsolatedSourceNatEnabledNetworkOfferingProviders, true, Network.GuestType.Isolated, false, null, true, null, false, false, null, false, null, true);
- 
-             offering.setState(NetworkOffering.State.Enabled);
-             _networkOfferingDao.update(offering.getId(), offering);
-         }
- 
-         //#5 - default vpc offering with LB service
-         if (_networkOfferingDao.findByUniqueName(NetworkOffering.DefaultIsolatedNetworkOfferingForVpcNetworks) == null) {
-             offering = _configMgr.createNetworkOffering(NetworkOffering.DefaultIsolatedNetworkOfferingForVpcNetworks,
-                 "Offering for Isolated VPC networks with Source Nat service enabled", TrafficType.Guest, null, false, Availability.Optional, null, defaultVPCOffProviders, true,
+         
+                     offering.setState(NetworkOffering.State.Enabled);
+                     _networkOfferingDao.update(offering.getId(), offering);
+                 }
+         
+                 //#5 - default vpc offering with LB service
+                 if (_networkOfferingDao.findByUniqueName(NetworkOffering.DefaultIsolatedNetworkOfferingForVpcNetworks) == null) {
+                     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, null);
 +                Network.GuestType.Isolated, false, null, false, null, false, false, null, false, null, true);
-             offering.setState(NetworkOffering.State.Enabled);
-             _networkOfferingDao.update(offering.getId(), offering);
-         }
- 
-         //#6 - default vpc offering with no LB service
-         if (_networkOfferingDao.findByUniqueName(NetworkOffering.DefaultIsolatedNetworkOfferingForVpcNetworksNoLB) == null) {
-             //remove LB service
-             defaultVPCOffProviders.remove(Service.Lb);
-             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,
+                     offering.setState(NetworkOffering.State.Enabled);
+                     _networkOfferingDao.update(offering.getId(), offering);
+                 }
+         
+                 //#6 - default vpc offering with no LB service
+                 if (_networkOfferingDao.findByUniqueName(NetworkOffering.DefaultIsolatedNetworkOfferingForVpcNetworksNoLB) == null) {
+                     //remove LB service
+                     defaultVPCOffProviders.remove(Service.Lb);
+                     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, null);
 +                defaultVPCOffProviders, true, Network.GuestType.Isolated, false, null, false, null, false, false, null, false, null, true);
-             offering.setState(NetworkOffering.State.Enabled);
-             _networkOfferingDao.update(offering.getId(), offering);
-         }
- 
-         //#7 - isolated offering with source nat disabled
-         if (_networkOfferingDao.findByUniqueName(NetworkOffering.DefaultIsolatedNetworkOffering) == null) {
-             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,
+                     offering.setState(NetworkOffering.State.Enabled);
+                     _networkOfferingDao.update(offering.getId(), offering);
+                 }
+         
+                 //#7 - isolated offering with source nat disabled
+                 if (_networkOfferingDao.findByUniqueName(NetworkOffering.DefaultIsolatedNetworkOffering) == null) {
+                     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, null);
 +                true, false, null, false, null, true);
-             offering.setState(NetworkOffering.State.Enabled);
-             _networkOfferingDao.update(offering.getId(), offering);
-         }
- 
-         //#8 - network offering with internal lb service
-         Map<Network.Service, Set<Network.Provider>> internalLbOffProviders = new HashMap<Network.Service, Set<Network.Provider>>();
-         Set<Network.Provider> defaultVpcProvider = new HashSet<Network.Provider>();
-         defaultVpcProvider.add(Network.Provider.VPCVirtualRouter);
- 
-         Set<Network.Provider> defaultInternalLbProvider = new HashSet<Network.Provider>();
-         defaultInternalLbProvider.add(Network.Provider.InternalLbVm);
- 
-         internalLbOffProviders.put(Service.Dhcp, defaultVpcProvider);
-         internalLbOffProviders.put(Service.Dns, defaultVpcProvider);
-         internalLbOffProviders.put(Service.UserData, defaultVpcProvider);
-         internalLbOffProviders.put(Service.NetworkACL, defaultVpcProvider);
-         internalLbOffProviders.put(Service.Gateway, defaultVpcProvider);
-         internalLbOffProviders.put(Service.Lb, defaultInternalLbProvider);
-         internalLbOffProviders.put(Service.SourceNat, defaultVpcProvider);
- 
-         if (_networkOfferingDao.findByUniqueName(NetworkOffering.DefaultIsolatedNetworkOfferingForVpcNetworksWithInternalLB) == null) {
-             offering = _configMgr.createNetworkOffering(NetworkOffering.DefaultIsolatedNetworkOfferingForVpcNetworksWithInternalLB,
-                 "Offering for Isolated VPC networks with Internal Lb support", TrafficType.Guest, null, false, Availability.Optional, null, internalLbOffProviders, true,
+                     offering.setState(NetworkOffering.State.Enabled);
+                     _networkOfferingDao.update(offering.getId(), offering);
+                 }
+         
+                 //#8 - network offering with internal lb service
+                 Map<Network.Service, Set<Network.Provider>> internalLbOffProviders = new HashMap<Network.Service, Set<Network.Provider>>();
+                 Set<Network.Provider> defaultVpcProvider = new HashSet<Network.Provider>();
+                 defaultVpcProvider.add(Network.Provider.VPCVirtualRouter);
+         
+                 Set<Network.Provider> defaultInternalLbProvider = new HashSet<Network.Provider>();
+                 defaultInternalLbProvider.add(Network.Provider.InternalLbVm);
+         
+                 internalLbOffProviders.put(Service.Dhcp, defaultVpcProvider);
+                 internalLbOffProviders.put(Service.Dns, defaultVpcProvider);
+                 internalLbOffProviders.put(Service.UserData, defaultVpcProvider);
+                 internalLbOffProviders.put(Service.NetworkACL, defaultVpcProvider);
+                 internalLbOffProviders.put(Service.Gateway, defaultVpcProvider);
+                 internalLbOffProviders.put(Service.Lb, defaultInternalLbProvider);
+                 internalLbOffProviders.put(Service.SourceNat, defaultVpcProvider);
+         
+                 if (_networkOfferingDao.findByUniqueName(NetworkOffering.DefaultIsolatedNetworkOfferingForVpcNetworksWithInternalLB) == null) {
+                     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, null);
 +                Network.GuestType.Isolated, false, null, false, null, false, false, null, false, null, true);
-             offering.setState(NetworkOffering.State.Enabled);
-             offering.setInternalLb(true);
-             offering.setPublicLb(false);
-             _networkOfferingDao.update(offering.getId(), offering);
-         }
- 
-         Map<Network.Service, Set<Network.Provider>> netscalerServiceProviders = new HashMap<Network.Service, Set<Network.Provider>>();
-         Set<Network.Provider> vrProvider = new HashSet<Network.Provider>();
-         vrProvider.add(Provider.VirtualRouter);
-         Set<Network.Provider> sgProvider = new HashSet<Network.Provider>();
-         sgProvider.add(Provider.SecurityGroupProvider);
-         Set<Network.Provider> nsProvider = new HashSet<Network.Provider>();
-         nsProvider.add(Provider.Netscaler);
-         netscalerServiceProviders.put(Service.Dhcp, vrProvider);
-         netscalerServiceProviders.put(Service.Dns, vrProvider);
-         netscalerServiceProviders.put(Service.UserData, vrProvider);
-         netscalerServiceProviders.put(Service.SecurityGroup, sgProvider);
-         netscalerServiceProviders.put(Service.StaticNat, nsProvider);
-         netscalerServiceProviders.put(Service.Lb, nsProvider);
- 
-         Map<Service, Map<Capability, String>> serviceCapabilityMap = new HashMap<Service, Map<Capability, String>>();
-         Map<Capability, String> elb = new HashMap<Capability, String>();
-         elb.put(Capability.ElasticLb, "true");
-         Map<Capability, String> eip = new HashMap<Capability, String>();
-         eip.put(Capability.ElasticIp, "true");
-         serviceCapabilityMap.put(Service.Lb, elb);
-         serviceCapabilityMap.put(Service.StaticNat, eip);
- 
-         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,
+                     offering.setState(NetworkOffering.State.Enabled);
+                     offering.setInternalLb(true);
+                     offering.setPublicLb(false);
+                     _networkOfferingDao.update(offering.getId(), offering);
+                 }
+         
+                 Map<Network.Service, Set<Network.Provider>> netscalerServiceProviders = new HashMap<Network.Service, Set<Network.Provider>>();
+                 Set<Network.Provider> vrProvider = new HashSet<Network.Provider>();
+                 vrProvider.add(Provider.VirtualRouter);
+                 Set<Network.Provider> sgProvider = new HashSet<Network.Provider>();
+                 sgProvider.add(Provider.SecurityGroupProvider);
+                 Set<Network.Provider> nsProvider = new HashSet<Network.Provider>();
+                 nsProvider.add(Provider.Netscaler);
+                 netscalerServiceProviders.put(Service.Dhcp, vrProvider);
+                 netscalerServiceProviders.put(Service.Dns, vrProvider);
+                 netscalerServiceProviders.put(Service.UserData, vrProvider);
+                 netscalerServiceProviders.put(Service.SecurityGroup, sgProvider);
+                 netscalerServiceProviders.put(Service.StaticNat, nsProvider);
+                 netscalerServiceProviders.put(Service.Lb, nsProvider);
+         
+                 Map<Service, Map<Capability, String>> serviceCapabilityMap = new HashMap<Service, Map<Capability, String>>();
+                 Map<Capability, String> elb = new HashMap<Capability, String>();
+                 elb.put(Capability.ElasticLb, "true");
+                 Map<Capability, String> eip = new HashMap<Capability, String>();
+                 eip.put(Capability.ElasticIp, "true");
+                 serviceCapabilityMap.put(Service.Lb, elb);
+                 serviceCapabilityMap.put(Service.StaticNat, eip);
+         
+                 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, null);
 +                true, Network.GuestType.Shared, false, null, true, serviceCapabilityMap, true, false, null, false, null, true);
-             offering.setState(NetworkOffering.State.Enabled);
-             offering.setDedicatedLB(false);
-             _networkOfferingDao.update(offering.getId(), offering);
-         }
+                     offering.setState(NetworkOffering.State.Enabled);
+                     offering.setDedicatedLB(false);
+                     _networkOfferingDao.update(offering.getId(), offering);
+                 }
+             }
+         });
  
-         txn.commit();
  
          AssignIpAddressSearch = _ipAddressDao.createSearchBuilder();
          AssignIpAddressSearch.and("dc", AssignIpAddressSearch.entity().getDataCenterId(), Op.EQ);

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/205a77a5/engine/schema/src/com/cloud/capacity/dao/CapacityDaoImpl.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/205a77a5/engine/schema/src/com/cloud/domain/dao/DomainDaoImpl.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/205a77a5/engine/schema/src/com/cloud/storage/dao/VMTemplateDaoImpl.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/205a77a5/engine/schema/src/com/cloud/storage/dao/VMTemplateDetailsDaoImpl.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/205a77a5/engine/schema/src/com/cloud/vm/dao/UserVmDetailsDaoImpl.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/205a77a5/framework/config/src/org/apache/cloudstack/framework/config/dao/ConfigurationDaoImpl.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/205a77a5/plugins/hypervisors/simulator/src/com/cloud/agent/manager/MockVmManagerImpl.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/205a77a5/plugins/network-elements/elastic-loadbalancer/src/com/cloud/network/lb/ElasticLoadBalancerManagerImpl.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/205a77a5/server/src/com/cloud/configuration/ConfigurationManagerImpl.java
----------------------------------------------------------------------
diff --cc server/src/com/cloud/configuration/ConfigurationManagerImpl.java
index 6460276,9131fa6..32459bc
--- a/server/src/com/cloud/configuration/ConfigurationManagerImpl.java
+++ b/server/src/com/cloud/configuration/ConfigurationManagerImpl.java
@@@ -3988,10 -3993,10 +4024,10 @@@ public class ConfigurationManagerImpl e
      @DB
      public 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,
+             final 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, Integer maxconn, boolean enableKeepAlive) {
 -            final Map<NetworkOffering.Detail, String> details, boolean egressDefaultPolicy, final Integer maxconn) {
++            final Map<NetworkOffering.Detail, String> details, boolean egressDefaultPolicy, final Integer maxconn, final boolean enableKeepAlive) {
  
          String multicastRateStr = _configDao.getValue("multicast.throttling.rate");
          int multicastRate = ((multicastRateStr == null) ? 10 : Integer.parseInt(multicastRateStr));
@@@ -4145,47 -4150,49 +4181,50 @@@
              validateNtwkOffDetails(details, serviceProviderMap);
          }
  
-         Transaction txn = Transaction.currentTxn();
-         txn.start();
-         // 1) create network offering object
-         s_logger.debug("Adding network offering " + offering);
-         offering.setConcurrentConnections(maxconn);
-         offering.setKeepAliveEnabled(enableKeepAlive);
-         offering = _networkOfferingDao.persist(offering, details);
-         // 2) populate services and providers
-         if (serviceProviderMap != null) {
-             for (Network.Service service : serviceProviderMap.keySet()) {
-                 Set<Provider> providers = serviceProviderMap.get(service);
-                 if (providers != null && !providers.isEmpty()) {
-                     boolean vpcOff = false;
-                     for (Network.Provider provider : providers) {
-                         if (provider == Provider.VPCVirtualRouter) {
-                             vpcOff = true;
+         return Transaction.execute(new TransactionCallback<NetworkOfferingVO>() {
+             @Override
+             public NetworkOfferingVO doInTransaction(TransactionStatus status) {
+                 NetworkOfferingVO offering = offeringFinal;
+ 
+                 // 1) create network offering object
+                 s_logger.debug("Adding network offering " + offering);
+                 offering.setConcurrentConnections(maxconn);
++                offering.setKeepAliveEnabled(enableKeepAlive);
+                 offering = _networkOfferingDao.persist(offering, details);
+                 // 2) populate services and providers
+                 if (serviceProviderMap != null) {
+                     for (Network.Service service : serviceProviderMap.keySet()) {
+                         Set<Provider> providers = serviceProviderMap.get(service);
+                         if (providers != null && !providers.isEmpty()) {
+                             boolean vpcOff = false;
+                             for (Network.Provider provider : providers) {
+                                 if (provider == Provider.VPCVirtualRouter) {
+                                     vpcOff = true;
+                                 }
+                                 NetworkOfferingServiceMapVO offService = new NetworkOfferingServiceMapVO(offering.getId(),
+                                         service, provider);
+                                 _ntwkOffServiceMapDao.persist(offService);
+                                 s_logger.trace("Added service for the network offering: " + offService + " with provider "
+                                         + provider.getName());
+                             }
+ 
+                             if (vpcOff) {
+                                 List<Service> supportedSvcs = new ArrayList<Service>();
+                                 supportedSvcs.addAll(serviceProviderMap.keySet());
+                                 _vpcMgr.validateNtwkOffForVpc(offering, supportedSvcs);
+                             }
+                         } else {
+                             NetworkOfferingServiceMapVO offService = new NetworkOfferingServiceMapVO(offering.getId(), service,
+                                     null);
+                             _ntwkOffServiceMapDao.persist(offService);
+                             s_logger.trace("Added service for the network offering: " + offService + " with null provider");
                          }
-                         NetworkOfferingServiceMapVO offService = new NetworkOfferingServiceMapVO(offering.getId(),
-                                 service, provider);
-                         _ntwkOffServiceMapDao.persist(offService);
-                         s_logger.trace("Added service for the network offering: " + offService + " with provider "
-                                 + provider.getName());
-                     }
- 
-                     if (vpcOff) {
-                         List<Service> supportedSvcs = new ArrayList<Service>();
-                         supportedSvcs.addAll(serviceProviderMap.keySet());
-                         _vpcMgr.validateNtwkOffForVpc(offering, supportedSvcs);
                      }
-                 } else {
-                     NetworkOfferingServiceMapVO offService = new NetworkOfferingServiceMapVO(offering.getId(), service,
-                             null);
-                     _ntwkOffServiceMapDao.persist(offService);
-                     s_logger.trace("Added service for the network offering: " + offService + " with null provider");
                  }
-             }
-         }
- 
-         txn.commit();
  
-         return offering;
+                 return offering;
+             }
+         });
      }
  
      protected void validateNtwkOffDetails(Map<Detail, String> details, Map<Service, Set<Provider>> serviceProviderMap) {

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/205a77a5/server/src/com/cloud/deploy/DeploymentPlanningManagerImpl.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/205a77a5/server/src/com/cloud/metadata/ResourceMetaDataManagerImpl.java
----------------------------------------------------------------------
diff --cc server/src/com/cloud/metadata/ResourceMetaDataManagerImpl.java
index 444650b,6f43c96..875bfac
--- a/server/src/com/cloud/metadata/ResourceMetaDataManagerImpl.java
+++ b/server/src/com/cloud/metadata/ResourceMetaDataManagerImpl.java
@@@ -62,12 -67,10 +62,14 @@@ import com.cloud.utils.component.Manage
  import com.cloud.utils.db.DB;
  import com.cloud.utils.db.GenericDao;
  import com.cloud.utils.db.Transaction;
+ import com.cloud.utils.db.TransactionCallback;
+ import com.cloud.utils.db.TransactionStatus;
  import com.cloud.uuididentity.dao.IdentityDao;
 +import com.cloud.vm.NicDetailVO;
 +import com.cloud.vm.dao.NicDao;
 +import com.cloud.vm.dao.NicDetailDao;
  import com.cloud.vm.dao.UserVmDao;
 +import com.cloud.vm.dao.UserVmDetailsDao;
  import com.cloud.vm.snapshot.dao.VMSnapshotDao;
  
  
@@@ -192,51 -193,50 +194,51 @@@ public class ResourceMetaDataManagerImp
      @Override
      @DB
      @ActionEvent(eventType = EventTypes.EVENT_RESOURCE_DETAILS_CREATE, eventDescription = "creating resource meta data")
-     public boolean addResourceMetaData(String resourceId, TaggedResourceType resourceType, Map<String, String> details){
+     public boolean addResourceMetaData(final String resourceId, final TaggedResourceType resourceType, final Map<String, String> details){
+         return Transaction.execute(new TransactionCallback<Boolean>() {
+             @Override
+             public Boolean doInTransaction(TransactionStatus status) {
+                 for (String key : details.keySet()) {
+                         Long id = _taggedResourceMgr.getResourceId(resourceId, resourceType);
+ 
+                         //check if object exists
+                         if (_daoMap.get(resourceType).findById(id) == null) {
+                             throw new InvalidParameterValueException("Unable to find resource by id " + resourceId +
+                                     " and type " + resourceType);
+                         }
+ 
+                         String value = details.get(key);
+ 
+                         if (value == null || value.isEmpty()) {
+                             throw new InvalidParameterValueException("Value for the key " + key + " is either null or empty");
+                         }
+ 
+                         // TODO - Have a better design here.
+                         if(resourceType == TaggedResourceType.Volume){
+                             VolumeDetailVO v = new VolumeDetailVO(id, key, value);
+                             _volumeDetailDao.persist(v);
+                         } else if (resourceType == TaggedResourceType.Nic){
+                             NicDetailVO n = new NicDetailVO(id, key, value);
+                             _nicDetailDao.persist(n);
 -                        }else if (resourceType == TaggedResourceType.UserVm){
 -                            UserVmDetailVO userVmDetail = new UserVmDetailVO(id, key, value);
 -                            _userVmDetailDao.persist(userVmDetail);
+                         } else if (resourceType == TaggedResourceType.Zone){
+                              DcDetailVO dataCenterDetail = new DcDetailVO(id, key, value);
+                              _dcDetailsDao.persist(dataCenterDetail);
+                         } else if (resourceType == TaggedResourceType.Network){
+                             NetworkDetailVO networkDetail = new NetworkDetailVO(id, key, value);
+                             _networkDetailsDao.persist(networkDetail);
 -                        } else {
++                        } else if (resourceType == TaggedResourceType.UserVm) {
++                            _userVmDetailsDao.addVmDetail(id, key, value);
++                        } else if (resourceType == TaggedResourceType.Template) {
++                            _templateDetailsDao.addTemplateDetail(id, key, value);
++                        } else{
+                             throw new InvalidParameterValueException("The resource type " + resourceType + " is not supported by the API yet");
+                         }
  
-         Transaction txn = Transaction.currentTxn();
-         txn.start();
- 
-         for (String key : details.keySet()) {
-                 Long id = _taggedResourceMgr.getResourceId(resourceId, resourceType);
- 
-                 //check if object exists
-                 if (_daoMap.get(resourceType).findById(id) == null) {
-                     throw new InvalidParameterValueException("Unable to find resource by id " + resourceId +
-                             " and type " + resourceType);
-                 }
- 
-                 String value = details.get(key);
- 
-                 if (value == null || value.isEmpty()) {
-                     throw new InvalidParameterValueException("Value for the key " + key + " is either null or empty");
                  }
  
-                 // TODO - Have a better design here.
-                 if (resourceType == TaggedResourceType.Volume){
-                     VolumeDetailVO v = new VolumeDetailVO(id, key, value);
-                     _volumeDetailDao.persist(v);
-                 } else if (resourceType == TaggedResourceType.Nic){
-                     NicDetailVO n = new NicDetailVO(id, key, value);
-                     _nicDetailDao.persist(n);
-                 } else if (resourceType == TaggedResourceType.Zone){
-                      DcDetailVO dataCenterDetail = new DcDetailVO(id, key, value);
-                      _dcDetailsDao.persist(dataCenterDetail);
-                 } else if (resourceType == TaggedResourceType.Network){
-                     NetworkDetailVO networkDetail = new NetworkDetailVO(id, key, value);
-                     _networkDetailsDao.persist(networkDetail);
-                 } else if (resourceType == TaggedResourceType.UserVm) {
-                     _userVmDetailsDao.addVmDetail(id, key, value);
-                 } else if (resourceType == TaggedResourceType.Template) {
-                     _templateDetailsDao.addTemplateDetail(id, key, value);
-                 } else{
-                     throw new InvalidParameterValueException("The resource type " + resourceType + " is not supported by the API yet");
-                 }
-         }
- 
-         txn.commit();
- 
-         return true;
+                 return true;
+             }
+         });
      }
  
  

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/205a77a5/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/205a77a5/server/src/com/cloud/network/vpn/RemoteAccessVpnManagerImpl.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/205a77a5/server/src/com/cloud/server/ConfigurationServerImpl.java
----------------------------------------------------------------------
diff --cc server/src/com/cloud/server/ConfigurationServerImpl.java
index af1847a,f8141ee..51f99d6
--- a/server/src/com/cloud/server/ConfigurationServerImpl.java
+++ b/server/src/com/cloud/server/ConfigurationServerImpl.java
@@@ -42,14 -42,13 +42,13 @@@ import javax.crypto.SecretKey
  import javax.inject.Inject;
  import javax.naming.ConfigurationException;
  
--import org.apache.commons.codec.binary.Base64;
--import org.apache.commons.io.FileUtils;
--import org.apache.log4j.Logger;
- 
  import org.apache.cloudstack.framework.config.ConfigDepot;
  import org.apache.cloudstack.framework.config.ConfigDepotAdmin;
  import org.apache.cloudstack.framework.config.dao.ConfigurationDao;
  import org.apache.cloudstack.framework.config.impl.ConfigurationVO;
++import org.apache.commons.codec.binary.Base64;
++import org.apache.commons.io.FileUtils;
++import org.apache.log4j.Logger;
  
  import com.cloud.cluster.ClusterManager;
  import com.cloud.configuration.Config;
@@@ -107,6 -106,12 +106,10 @@@ import com.cloud.utils.component.Manage
  import com.cloud.utils.crypt.DBEncryptionUtil;
  import com.cloud.utils.db.DB;
  import com.cloud.utils.db.Transaction;
 -import com.cloud.utils.db.TransactionCallback;
+ import com.cloud.utils.db.TransactionCallbackNoReturn;
 -import com.cloud.utils.db.TransactionCallbackWithException;
+ import com.cloud.utils.db.TransactionCallbackWithExceptionNoReturn;
+ import com.cloud.utils.db.TransactionLegacy;
+ import com.cloud.utils.db.TransactionStatus;
  import com.cloud.utils.exception.CloudRuntimeException;
  import com.cloud.utils.net.NetUtils;
  import com.cloud.utils.script.Script;

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

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/205a77a5/server/src/com/cloud/storage/VolumeApiServiceImpl.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/205a77a5/server/src/com/cloud/usage/UsageServiceImpl.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/205a77a5/server/src/com/cloud/user/AccountManagerImpl.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/205a77a5/server/src/com/cloud/vm/UserVmManagerImpl.java
----------------------------------------------------------------------
diff --cc server/src/com/cloud/vm/UserVmManagerImpl.java
index 2ec033a,86f9855..8de494c
--- a/server/src/com/cloud/vm/UserVmManagerImpl.java
+++ b/server/src/com/cloud/vm/UserVmManagerImpl.java
@@@ -2884,6 -2778,108 +2801,113 @@@ public class UserVmManagerImpl extends 
          return vm;
      }
  
+     private UserVmVO commitUserVm(final DataCenter zone, final VirtualMachineTemplate template, final String hostName,
+             final String displayName, final Account owner, final Long diskOfferingId, final Long diskSize, final String userData,
+             final HypervisorType hypervisor, final Account caller, final Boolean isDisplayVmEnabled, final String keyboard, final long accountId,
+             final ServiceOfferingVO offering, final boolean isIso, final String sshPublicKey,
+             final LinkedHashMap<String, NicProfile> networkNicMap, final long id, final String instanceName, final String uuidName,
+             final HypervisorType hypervisorType) throws InsufficientCapacityException {
+         return Transaction.execute(new TransactionCallbackWithException<UserVmVO,InsufficientCapacityException>() {
+             @Override
+             public UserVmVO doInTransaction(TransactionStatus status) throws InsufficientCapacityException {
+                 UserVmVO vm = new UserVmVO(id, instanceName, displayName,
+                         template.getId(), hypervisorType, template.getGuestOSId(),
+                         offering.getOfferHA(), offering.getLimitCpuUse(),
+                         owner.getDomainId(), owner.getId(), offering.getId(), userData,
+                         hostName, diskOfferingId);
+                 vm.setUuid(uuidName);
+                 vm.setDynamicallyScalable(template.isDynamicallyScalable());
+                 if (sshPublicKey != null) {
+                     vm.setDetail("SSH.PublicKey", sshPublicKey);
+                 }
+         
+                 if (keyboard != null && !keyboard.isEmpty())
+                     vm.setDetail(VmDetailConstants.KEYBOARD, keyboard);
+         
+                 if (isIso) {
+                     vm.setIsoId(template.getId());
+                 }
+         
+                 if(isDisplayVmEnabled != null){
+                     if(!_accountMgr.isRootAdmin(caller.getType())){
+                         throw new PermissionDeniedException( "Cannot update parameter displayvm, only admin permitted ");
+                     }
+                     vm.setDisplayVm(isDisplayVmEnabled);
+                 }else {
+                     vm.setDisplayVm(true);
+                 }
+         
+                 // If hypervisor is vSphere, check for clone type setting.
+                 if (hypervisorType.equals(HypervisorType.VMware)) {
+                     // retrieve clone flag.
+                     UserVmCloneType cloneType = UserVmCloneType.linked;
+                     String value = _configDao.getValue(Config.VmwareCreateFullClone.key());
+                     if (value != null) {
+                         if (Boolean.parseBoolean(value) == true)
+                             cloneType = UserVmCloneType.full;
+                     }
+                     UserVmCloneSettingVO vmCloneSettingVO = new UserVmCloneSettingVO(id, cloneType.toString());
+                     _vmCloneSettingDao.persist(vmCloneSettingVO);
+                 }
+         
+                 long guestOSId = template.getGuestOSId();
+                 GuestOSVO guestOS = _guestOSDao.findById(guestOSId);
+                 long guestOSCategoryId = guestOS.getCategoryId();
+                 GuestOSCategoryVO guestOSCategory = _guestOSCategoryDao.findById(guestOSCategoryId);
+         
+         
+                 // If hypervisor is vSphere and OS is OS X, set special settings.
+                 if (hypervisorType.equals(HypervisorType.VMware)) {
+                     if (guestOS.getDisplayName().toLowerCase().contains("apple mac os")){
+                         vm.setDetail("smc.present", "TRUE");
+                         vm.setDetail(VmDetailConstants.ROOK_DISK_CONTROLLER, "scsi");
+                         vm.setDetail("firmware", "efi");
+                         s_logger.info("guestOS is OSX : overwrite root disk controller to scsi, use smc and efi");
+                     }
+                }
+         
++                Map<String, String> details = template.getDetails();
++                if ( details != null && !details.isEmpty() ) {
++                    vm.details.putAll(details);
++                }
++
+                 _vmDao.persist(vm);
+                 _vmDao.saveDetails(vm);
+         
+                 s_logger.debug("Allocating in the DB for vm");
+                 DataCenterDeployment plan = new DataCenterDeployment(zone.getId());
+         
+                 List<String> computeTags = new ArrayList<String>();
+                 computeTags.add(offering.getHostTag());
+         
+                 List<String> rootDiskTags =	new ArrayList<String>();
+                 rootDiskTags.add(offering.getTags());
+         
+                 if(isIso){
+                     VirtualMachineEntity vmEntity = _orchSrvc.createVirtualMachineFromScratch(vm.getUuid(), Long.toString(owner.getAccountId()), vm.getIsoId().toString(), hostName, displayName, hypervisor.name(), guestOSCategory.getName(), offering.getCpu(), offering.getSpeed(), offering.getRamSize(), diskSize,  computeTags, rootDiskTags, networkNicMap, plan);
+                 }else {
+                     VirtualMachineEntity vmEntity = _orchSrvc.createVirtualMachine(vm.getUuid(), Long.toString(owner.getAccountId()), Long.toString(template.getId()), hostName, displayName, hypervisor.name(), offering.getCpu(),  offering.getSpeed(), offering.getRamSize(), diskSize, computeTags, rootDiskTags, networkNicMap, plan);
+                 }
+         
+         
+         
+                 if (s_logger.isDebugEnabled()) {
+                     s_logger.debug("Successfully allocated DB entry for " + vm);
+                 }
+                 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(),
+                         VirtualMachine.class.getName(), vm.getUuid());
+         
+                 //Update Resource Count for the given account
+                 resourceCountIncrement(accountId, new Long(offering.getCpu()),
+                         new Long(offering.getRamSize()));
+                 return vm;
+             }
+         });
+     }
+ 
      private void validateUserData(String userData, HTTPMethod httpmethod) {
          byte[] decodedUserData = null;
          if (userData != null) {