You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by mc...@apache.org on 2014/03/14 00:55:24 UTC
[31/50] [abbrv] Merge branch 'master' into rbac.
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/48e08fe6/server/src/com/cloud/network/as/AutoScaleManagerImpl.java
----------------------------------------------------------------------
diff --cc server/src/com/cloud/network/as/AutoScaleManagerImpl.java
index c8cc5b3,208b4a4..e07e502
--- a/server/src/com/cloud/network/as/AutoScaleManagerImpl.java
+++ b/server/src/com/cloud/network/as/AutoScaleManagerImpl.java
@@@ -447,9 -454,9 +456,10 @@@ public class AutoScaleManagerImpl<Type
String otherDeployParams = cmd.getOtherDeployParams();
Long serviceOffId = cmd.getServiceOfferingId();
Long zoneId = cmd.getZoneId();
+ Boolean display = cmd.getDisplay();
- SearchWrapper<AutoScaleVmProfileVO> searchWrapper = new SearchWrapper<AutoScaleVmProfileVO>(_autoScaleVmProfileDao, AutoScaleVmProfileVO.class, cmd, cmd.getId());
+ SearchWrapper<AutoScaleVmProfileVO> searchWrapper = new SearchWrapper<AutoScaleVmProfileVO>(_autoScaleVmProfileDao, AutoScaleVmProfileVO.class, cmd, cmd.getId(),
+ "listAutoScaleVmProfiles");
SearchBuilder<AutoScaleVmProfileVO> sb = searchWrapper.getSearchBuilder();
sb.and("id", sb.entity().getId(), SearchCriteria.Op.EQ);
@@@ -859,9 -870,9 +879,10 @@@
Long loadBalancerId = cmd.getLoadBalancerId();
Long profileId = cmd.getProfileId();
Long zoneId = cmd.getZoneId();
+ Boolean forDisplay = cmd.getDisplay();
- SearchWrapper<AutoScaleVmGroupVO> searchWrapper = new SearchWrapper<AutoScaleVmGroupVO>(_autoScaleVmGroupDao, AutoScaleVmGroupVO.class, cmd, cmd.getId());
+ SearchWrapper<AutoScaleVmGroupVO> searchWrapper = new SearchWrapper<AutoScaleVmGroupVO>(_autoScaleVmGroupDao, AutoScaleVmGroupVO.class, cmd, cmd.getId(),
+ "listAutoScaleVmGroups");
SearchBuilder<AutoScaleVmGroupVO> sb = searchWrapper.getSearchBuilder();
sb.and("id", sb.entity().getId(), SearchCriteria.Op.EQ);
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/48e08fe6/server/src/com/cloud/network/firewall/FirewallManagerImpl.java
----------------------------------------------------------------------
diff --cc server/src/com/cloud/network/firewall/FirewallManagerImpl.java
index b5374e7d,ca474d6..c312d3d
--- a/server/src/com/cloud/network/firewall/FirewallManagerImpl.java
+++ b/server/src/com/cloud/network/firewall/FirewallManagerImpl.java
@@@ -232,19 -233,22 +233,22 @@@ public class FirewallManagerImpl extend
FirewallRuleVO newRule =
new FirewallRuleVO(xId, ipAddrId, portStart, portEnd, protocol.toLowerCase(), networkId, accountIdFinal, domainIdFinal, Purpose.Firewall,
sourceCidrList, icmpCode, icmpType, relatedRuleId, trafficType);
- newRule.setType(type);
+ newRule.setType(type);
+ if (forDisplay != null) {
+ newRule.setDisplay(forDisplay);
+ }
- newRule = _firewallDao.persist(newRule);
+ newRule = _firewallDao.persist(newRule);
- if (type == FirewallRuleType.User)
- detectRulesConflict(newRule);
+ if (type == FirewallRuleType.User)
+ detectRulesConflict(newRule);
- if (!_firewallDao.setStateToAdd(newRule)) {
- throw new CloudRuntimeException("Unable to update the state to add for " + newRule);
- }
- CallContext.current().setEventDetails("Rule Id: " + newRule.getId());
+ if (!_firewallDao.setStateToAdd(newRule)) {
+ throw new CloudRuntimeException("Unable to update the state to add for " + newRule);
+ }
+ CallContext.current().setEventDetails("Rule Id: " + newRule.getId());
- return newRule;
- }
+ return newRule;
+ }
});
}
@@@ -255,11 -259,10 +259,12 @@@
Long networkId = cmd.getNetworkId();
Map<String, String> tags = cmd.getTags();
FirewallRule.TrafficType trafficType = cmd.getTrafficType();
+ Boolean display = cmd.getDisplay();
Account caller = CallContext.current().getCallingAccount();
+ List<Long> permittedDomains = new ArrayList<Long>();
List<Long> permittedAccounts = new ArrayList<Long>();
+ List<Long> permittedResources = new ArrayList<Long>();
if (ipId != null) {
IPAddressVO ipAddressVO = _ipAddressDao.findById(ipId);
@@@ -280,9 -285,10 +285,10 @@@
sb.and("id", sb.entity().getId(), Op.EQ);
sb.and("trafficType", sb.entity().getTrafficType(), Op.EQ);
- sb.and("networkId", sb.entity().getNetworkId(), Op.EQ);
+ sb.and("networkId", sb.entity().getNetworkId(), Op.EQ);
sb.and("ip", sb.entity().getSourceIpAddressId(), Op.EQ);
sb.and("purpose", sb.entity().getPurpose(), Op.EQ);
+ sb.and("display", sb.entity().isDisplay(), Op.EQ);
if (tags != null && !tags.isEmpty()) {
SearchBuilder<ResourceTagVO> tagSearch = _resourceTagDao.createSearchBuilder();
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/48e08fe6/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java
----------------------------------------------------------------------
diff --cc server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java
index e08b76c,6f0c1e9..9f280ef
--- a/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java
+++ b/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java
@@@ -1498,8 -1497,9 +1497,9 @@@ public class LoadBalancingRulesManagerI
@DB
@Override
public LoadBalancer createPublicLoadBalancer(final String xId, final String name, final String description, final int srcPort, final int destPort,
- final long sourceIpId, final String protocol, final String algorithm, final boolean openFirewall, final CallContext caller, final String lbProtocol)
+ final long sourceIpId,
+ final String protocol, final String algorithm, final boolean openFirewall, final CallContext caller, final String lbProtocol, final Boolean forDisplay)
- throws NetworkRuleConflictException {
+ throws NetworkRuleConflictException {
if (!NetUtils.isValidPort(destPort)) {
throw new InvalidParameterValueException("privatePort is an invalid value: " + destPort);
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/48e08fe6/server/src/com/cloud/network/rules/RulesManagerImpl.java
----------------------------------------------------------------------
diff --cc server/src/com/cloud/network/rules/RulesManagerImpl.java
index 4a75d40,ad977a2..9a76219
--- a/server/src/com/cloud/network/rules/RulesManagerImpl.java
+++ b/server/src/com/cloud/network/rules/RulesManagerImpl.java
@@@ -201,8 -201,8 +201,8 @@@ public class RulesManagerImpl extends M
@Override
@DB
@ActionEvent(eventType = EventTypes.EVENT_NET_RULE_ADD, eventDescription = "creating forwarding rule", create = true)
- public PortForwardingRule createPortForwardingRule(final PortForwardingRule rule, final Long vmId, Ip vmIp, final boolean openFirewall)
+ public PortForwardingRule createPortForwardingRule(final PortForwardingRule rule, final Long vmId, Ip vmIp, final boolean openFirewall, final Boolean forDisplay)
- throws NetworkRuleConflictException {
+ throws NetworkRuleConflictException {
CallContext ctx = CallContext.current();
final Account caller = ctx.getCallingAccount();
@@@ -775,11 -779,10 +779,12 @@@
Long id = cmd.getId();
Map<String, String> tags = cmd.getTags();
Long networkId = cmd.getNetworkId();
+ Boolean display = cmd.getDisplay();
Account caller = CallContext.current().getCallingAccount();
+ List<Long> permittedDomains = new ArrayList<Long>();
List<Long> permittedAccounts = new ArrayList<Long>();
+ List<Long> permittedResources = new ArrayList<Long>();
if (ipId != null) {
IPAddressVO ipAddressVO = _ipAddressDao.findById(ipId);
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/48e08fe6/server/src/com/cloud/network/vpc/NetworkACLServiceImpl.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/48e08fe6/server/src/com/cloud/network/vpc/VpcManagerImpl.java
----------------------------------------------------------------------
diff --cc server/src/com/cloud/network/vpc/VpcManagerImpl.java
index 39fb19e,403b95e..08381e2
--- a/server/src/com/cloud/network/vpc/VpcManagerImpl.java
+++ b/server/src/com/cloud/network/vpc/VpcManagerImpl.java
@@@ -658,13 -658,16 +658,16 @@@ public class VpcManagerImpl extends Man
@Override
public VpcVO doInTransaction(TransactionStatus status) {
VpcVO vpc = new VpcVO(zoneId, vpcName, displayText, vpcOwner.getId(), vpcOwner.getDomainId(), vpcOffId, cidr, networkDomain);
+ if (displayVpc != null) {
+ vpc.setDisplay(displayVpc);
+ }
- vpc = _vpcDao.persist(vpc, finalizeServicesAndProvidersForVpc(zoneId, vpcOffId));
- _resourceLimitMgr.incrementResourceCount(vpcOwner.getId(), ResourceType.vpc);
+ vpc = _vpcDao.persist(vpc, finalizeServicesAndProvidersForVpc(zoneId, vpcOffId));
+ _resourceLimitMgr.incrementResourceCount(vpcOwner.getId(), ResourceType.vpc);
- s_logger.debug("Created VPC " + vpc);
+ s_logger.debug("Created VPC " + vpc);
- return vpc;
- }
+ return vpc;
+ }
});
}
@@@ -806,16 -813,14 +813,16 @@@
@Override
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) {
+ Map<String, String> tags, Long projectId, Boolean display) {
Account caller = CallContext.current().getCallingAccount();
+ List<Long> permittedDomains = new ArrayList<Long>();
List<Long> permittedAccounts = new ArrayList<Long>();
+ List<Long> permittedResources = new ArrayList<Long>();
- Ternary<Long, Boolean, ListProjectResourcesCriteria> domainIdRecursiveListProject =
- new Ternary<Long, Boolean, ListProjectResourcesCriteria>(domainId, isRecursive, null);
- _accountMgr.buildACLSearchParameters(caller, id, accountName, projectId, permittedAccounts, domainIdRecursiveListProject, listAll, false);
- domainId = domainIdRecursiveListProject.first();
+ Ternary<Long, Boolean, ListProjectResourcesCriteria> domainIdRecursiveListProject = new Ternary<Long, Boolean,
+ ListProjectResourcesCriteria>(domainId, isRecursive, null);
+ _accountMgr.buildACLSearchParameters(caller, id, accountName, projectId, permittedDomains, permittedAccounts, permittedResources, domainIdRecursiveListProject, listAll,
+ false, "listVPCs");
isRecursive = domainIdRecursiveListProject.second();
ListProjectResourcesCriteria listProjectResourcesCriteria = domainIdRecursiveListProject.third();
Filter searchFilter = new Filter(VpcVO.class, "created", false, startIndex, pageSizeVal);
@@@ -871,8 -877,12 +879,12 @@@
sc.setJoinParameters("tagSearch", "value" + String.valueOf(count), tags.get(key));
count++;
}
- }
+ }
+ if (display != null) {
+ sc.setParameters("display", display);
+ }
+
if (id != null) {
sc.addAnd("id", SearchCriteria.Op.EQ, id);
}
@@@ -1401,37 -1411,38 +1413,38 @@@
s_logger.info("found and using existing network for vpc " + vpc + ": " + broadcastUri);
DataCenterVO dc = _dcDao.lockRow(physNetFinal.getDataCenterId(), true);
- //add entry to private_ip_address table
- PrivateIpVO privateIp = _privateIpDao.findByIpAndSourceNetworkId(privateNtwk.getId(), ipAddress);
- if (privateIp != null) {
+ //add entry to private_ip_address table
+ PrivateIpVO privateIp = _privateIpDao.findByIpAndSourceNetworkId(privateNtwk.getId(), ipAddress);
+ if (privateIp != null) {
throw new InvalidParameterValueException("Private ip address " + ipAddress + " already used for private gateway" + " in zone " +
_entityMgr.findById(DataCenter.class, dcId).getName());
- }
+ }
- Long mac = dc.getMacAddress();
- Long nextMac = mac + 1;
- dc.setMacAddress(nextMac);
+ Long mac = dc.getMacAddress();
+ Long nextMac = mac + 1;
+ dc.setMacAddress(nextMac);
- privateIp = new PrivateIpVO(ipAddress, privateNtwk.getId(), nextMac, vpcId, true);
+ s_logger.info("creating private ip adress for vpc (" + ipAddress + ", " + privateNtwk.getId() + ", " + nextMac + ", " + vpcId + ", " + isSourceNat + ")");
+ privateIp = new PrivateIpVO(ipAddress, privateNtwk.getId(), nextMac, vpcId, isSourceNat);
- _privateIpDao.persist(privateIp);
+ _privateIpDao.persist(privateIp);
- _dcDao.update(dc.getId(), dc);
- }
+ _dcDao.update(dc.getId(), dc);
+ }
- long networkAclId = NetworkACL.DEFAULT_DENY;
- if (aclId != null) {
- NetworkACLVO aclVO = _networkAclDao.findById(aclId);
+ long networkAclId = NetworkACL.DEFAULT_DENY;
+ if (aclId != null) {
+ NetworkACLVO aclVO = _networkAclDao.findById(aclId);
if (aclVO == null) {
- throw new InvalidParameterValueException("Invalid network acl id passed ");
- }
- if ((aclVO.getVpcId() != vpcId) && !(aclId == NetworkACL.DEFAULT_DENY || aclId == NetworkACL.DEFAULT_ALLOW)) {
- throw new InvalidParameterValueException("Private gateway and network acl are not in the same vpc");
- }
+ throw new InvalidParameterValueException("Invalid network acl id passed ");
+ }
+ if ((aclVO.getVpcId() != vpcId) && !(aclId == NetworkACL.DEFAULT_DENY || aclId == NetworkACL.DEFAULT_ALLOW)) {
+ throw new InvalidParameterValueException("Private gateway and network acl are not in the same vpc");
+ }
- networkAclId = aclId;
- }
+ networkAclId = aclId;
+ }
- //2) create gateway entry
+ //2) create gateway entry
VpcGatewayVO gatewayVO =
new VpcGatewayVO(ipAddress, VpcGateway.Type.Private, vpcId, privateNtwk.getDataCenterId(), privateNtwk.getId(), broadcastUri, gateway, netmask,
vpc.getAccountId(), vpc.getDomainId(), isSourceNat, networkAclId);
@@@ -2022,14 -2028,15 +2035,15 @@@
Transaction.execute(new TransactionCallbackNoReturn() {
@Override
public void doInTransactionWithoutResult(TransactionStatus status) {
- IPAddressVO ip = _ipAddressDao.findById(ipId);
- //update ip address with networkId
- ip.setVpcId(vpcId);
+ IPAddressVO ip = _ipAddressDao.findById(ipId);
+ //update ip address with networkId
+ ip.setVpcId(vpcId);
ip.setSourceNat(isSourceNatFinal);
+
- _ipAddressDao.update(ipId, ip);
+ _ipAddressDao.update(ipId, ip);
- //mark ip as allocated
- _ipAddrMgr.markPublicIpAsAllocated(ip);
+ //mark ip as allocated
+ _ipAddrMgr.markPublicIpAsAllocated(ip);
}
});
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/48e08fe6/server/src/com/cloud/network/vpn/RemoteAccessVpnManagerImpl.java
----------------------------------------------------------------------
diff --cc server/src/com/cloud/network/vpn/RemoteAccessVpnManagerImpl.java
index a8505a7,0306fad..531adad
--- a/server/src/com/cloud/network/vpn/RemoteAccessVpnManagerImpl.java
+++ b/server/src/com/cloud/network/vpn/RemoteAccessVpnManagerImpl.java
@@@ -650,9 -649,10 +654,10 @@@ public class RemoteAccessVpnManagerImp
sb.and("id", sb.entity().getId(), Op.EQ);
sb.and("networkId", sb.entity().getNetworkId(), Op.EQ);
sb.and("state", sb.entity().getState(), Op.EQ);
+ sb.and("display", sb.entity().isDisplay(), Op.EQ);
SearchCriteria<RemoteAccessVpnVO> sc = sb.create();
- _accountMgr.buildACLSearchCriteria(sc, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria);
+ _accountMgr.buildACLSearchCriteria(sc, isRecursive, permittedDomains, permittedAccounts, permittedResources, listProjectResourcesCriteria);
sc.setParameters("state", RemoteAccessVpn.State.Running);
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/48e08fe6/server/src/com/cloud/network/vpn/Site2SiteVpnManagerImpl.java
----------------------------------------------------------------------
diff --cc server/src/com/cloud/network/vpn/Site2SiteVpnManagerImpl.java
index 03a13c3,66a2b58..fdb5bbf
--- a/server/src/com/cloud/network/vpn/Site2SiteVpnManagerImpl.java
+++ b/server/src/com/cloud/network/vpn/Site2SiteVpnManagerImpl.java
@@@ -632,9 -636,10 +642,10 @@@ public class Site2SiteVpnManagerImpl ex
sb.and("id", sb.entity().getId(), SearchCriteria.Op.EQ);
sb.and("vpcId", sb.entity().getVpcId(), SearchCriteria.Op.EQ);
+ sb.and("display", sb.entity().isDisplay(), SearchCriteria.Op.EQ);
SearchCriteria<Site2SiteVpnGatewayVO> sc = sb.create();
- _accountMgr.buildACLSearchCriteria(sc, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria);
+ _accountMgr.buildACLSearchCriteria(sc, isRecursive, permittedDomains, permittedAccounts, permittedResources, listProjectResourcesCriteria);
if (id != null) {
sc.addAnd("id", SearchCriteria.Op.EQ, id);
@@@ -675,9 -682,10 +691,10 @@@
Filter searchFilter = new Filter(Site2SiteVpnConnectionVO.class, "id", false, startIndex, pageSizeVal);
SearchBuilder<Site2SiteVpnConnectionVO> sb = _vpnConnectionDao.createSearchBuilder();
- _accountMgr.buildACLSearchBuilder(sb, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria);
+ _accountMgr.buildACLSearchBuilder(sb, isRecursive, permittedDomains, permittedAccounts, permittedResources, listProjectResourcesCriteria);
sb.and("id", sb.entity().getId(), SearchCriteria.Op.EQ);
+ sb.and("display", sb.entity().isDisplay(), SearchCriteria.Op.EQ);
if (vpcId != null) {
SearchBuilder<Site2SiteVpnGatewayVO> gwSearch = _vpnGatewayDao.createSearchBuilder();
@@@ -686,8 -694,11 +703,11 @@@
}
SearchCriteria<Site2SiteVpnConnectionVO> sc = sb.create();
- _accountMgr.buildACLSearchCriteria(sc, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria);
+ _accountMgr.buildACLSearchCriteria(sc, isRecursive, permittedDomains, permittedAccounts, permittedResources, listProjectResourcesCriteria);
+ if (display != null) {
+ sc.setParameters("display", display);
+ }
if (id != null) {
sc.addAnd("id", SearchCriteria.Op.EQ, id);
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/48e08fe6/server/src/com/cloud/resource/ResourceManagerImpl.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/48e08fe6/server/src/com/cloud/server/ManagementServerImpl.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/48e08fe6/server/src/com/cloud/storage/VolumeApiServiceImpl.java
----------------------------------------------------------------------
diff --cc server/src/com/cloud/storage/VolumeApiServiceImpl.java
index ad8a4ba,50aa87e..3ef8e13
--- a/server/src/com/cloud/storage/VolumeApiServiceImpl.java
+++ b/server/src/com/cloud/storage/VolumeApiServiceImpl.java
@@@ -563,43 -564,43 +564,43 @@@ public class VolumeApiServiceImpl exten
return Transaction.execute(new TransactionCallback<VolumeVO>() {
@Override
public VolumeVO doInTransaction(TransactionStatus status) {
- VolumeVO volume = new VolumeVO(userSpecifiedName, -1, -1, -1, -1, new Long(-1), null, null, 0, Volume.Type.DATADISK);
- volume.setPoolId(null);
+ VolumeVO volume = new VolumeVO(userSpecifiedName, -1, -1, -1, -1, new Long(-1), null, null, 0, Volume.Type.DATADISK);
+ volume.setPoolId(null);
volume.setUuid(uuid);
- volume.setDataCenterId(zoneId);
- volume.setPodId(null);
- volume.setAccountId(ownerId);
- volume.setDomainId(((caller == null) ? Domain.ROOT_DOMAIN : caller.getDomainId()));
- volume.setDiskOfferingId(diskOfferingId);
- volume.setSize(size);
- volume.setMinIops(minIops);
- volume.setMaxIops(maxIops);
- volume.setInstanceId(null);
- volume.setUpdated(new Date());
- volume.setDomainId((caller == null) ? Domain.ROOT_DOMAIN : caller.getDomainId());
+ volume.setDataCenterId(zoneId);
+ volume.setPodId(null);
+ volume.setAccountId(ownerId);
+ volume.setDomainId(((caller == null) ? Domain.ROOT_DOMAIN : caller.getDomainId()));
+ volume.setDiskOfferingId(diskOfferingId);
+ volume.setSize(size);
+ volume.setMinIops(minIops);
+ volume.setMaxIops(maxIops);
+ volume.setInstanceId(null);
+ volume.setUpdated(new Date());
+ volume.setDomainId((caller == null) ? Domain.ROOT_DOMAIN : caller.getDomainId());
- volume.setDisplayVolume(displayVolumeEnabled);
+ volume.setDisplayVolume(displayVolume);
- if (parentVolume != null) {
- volume.setTemplateId(parentVolume.getTemplateId());
- volume.setFormat(parentVolume.getFormat());
- } else {
- volume.setTemplateId(null);
- }
+ if (parentVolume != null) {
+ volume.setTemplateId(parentVolume.getTemplateId());
+ volume.setFormat(parentVolume.getFormat());
+ } else {
+ volume.setTemplateId(null);
+ }
- volume = _volsDao.persist(volume);
- if (cmd.getSnapshotId() == null) {
- // for volume created from snapshot, create usage event after volume creation
+ volume = _volsDao.persist(volume);
+ if (cmd.getSnapshotId() == null) {
+ // for volume created from snapshot, create usage event after volume creation
UsageEventUtils.publishUsageEvent(EventTypes.EVENT_VOLUME_CREATE, volume.getAccountId(), volume.getDataCenterId(), volume.getId(), volume.getName(),
diskOfferingId, null, size, Volume.class.getName(), volume.getUuid());
- }
+ }
- CallContext.current().setEventDetails("Volume Id: " + volume.getId());
+ CallContext.current().setEventDetails("Volume Id: " + volume.getId());
- // Increment resource count during allocation; if actual creation fails,
- // decrement it
+ // Increment resource count during allocation; if actual creation fails,
+ // decrement it
- _resourceLimitMgr.incrementResourceCount(volume.getAccountId(), ResourceType.volume, displayVolumeEnabled);
- _resourceLimitMgr.incrementResourceCount(volume.getAccountId(), ResourceType.primary_storage, displayVolumeEnabled, new Long(volume.getSize()));
+ _resourceLimitMgr.incrementResourceCount(volume.getAccountId(), ResourceType.volume, displayVolume);
+ _resourceLimitMgr.incrementResourceCount(volume.getAccountId(), ResourceType.primary_storage, displayVolume, new Long(volume.getSize()));
- return volume;
- }
+ return volume;
+ }
});
}
@@@ -2124,30 -2138,34 +2138,34 @@@
public Object[] doInTransaction(TransactionStatus status) {
VmWorkJobVO workJob = null;
- _vmInstanceDao.lockRow(vm.getId(), true);
+ _vmInstanceDao.lockInLockTable(String.valueOf(vm.getId()), Integer.MAX_VALUE);
+ try {
- workJob = new VmWorkJobVO(context.getContextId());
+ workJob = new VmWorkJobVO(context.getContextId());
- workJob.setDispatcher(VmWorkConstants.VM_WORK_JOB_DISPATCHER);
- workJob.setCmd(VmWorkAttachVolume.class.getName());
+ workJob.setDispatcher(VmWorkConstants.VM_WORK_JOB_DISPATCHER);
+ workJob.setCmd(VmWorkAttachVolume.class.getName());
- workJob.setAccountId(callingAccount.getId());
- workJob.setUserId(callingUser.getId());
- workJob.setStep(VmWorkJobVO.Step.Starting);
- workJob.setVmType(VirtualMachine.Type.Instance);
- workJob.setVmInstanceId(vm.getId());
+ workJob.setAccountId(callingAccount.getId());
+ workJob.setUserId(callingUser.getId());
+ workJob.setStep(VmWorkJobVO.Step.Starting);
+ workJob.setVmType(VirtualMachine.Type.Instance);
+ workJob.setVmInstanceId(vm.getId());
- workJob.setRelated(AsyncJobExecutionContext.getOriginJobContextId());
+ workJob.setRelated(AsyncJobExecutionContext.getOriginJobId());
- // save work context info (there are some duplications)
+ // save work context info (there are some duplications)
- VmWorkAttachVolume workInfo = new VmWorkAttachVolume(callingUser.getId(), callingAccount.getId(), vm.getId(), VolumeApiServiceImpl.VM_WORK_JOB_HANDLER, volumeId,
- deviceId);
+ VmWorkAttachVolume workInfo = new VmWorkAttachVolume(callingUser.getId(), callingAccount.getId(), vm.getId(),
+ VolumeApiServiceImpl.VM_WORK_JOB_HANDLER, volumeId, deviceId);
- workJob.setCmdInfo(VmWorkSerializer.serialize(workInfo));
+ workJob.setCmdInfo(VmWorkSerializer.serialize(workInfo));
- _jobMgr.submitAsyncJob(workJob, VmWorkConstants.VM_WORK_QUEUE, vm.getId());
+ _jobMgr.submitAsyncJob(workJob, VmWorkConstants.VM_WORK_QUEUE, vm.getId());
- AsyncJobVO jobVo = _jobMgr.getAsyncJob(workJob.getId());
- s_logger.debug("New job " + workJob.getId() + ", result field: " + jobVo.getResult());
+ AsyncJobVO jobVo = _jobMgr.getAsyncJob(workJob.getId());
+ s_logger.debug("New job " + workJob.getId() + ", result field: " + jobVo.getResult());
- return new Object[] {workJob, new Long(workJob.getId())};
+ return new Object[] {workJob, new Long(workJob.getId())};
+ } finally {
+ _vmInstanceDao.unlockFromLockTable(String.valueOf(vm.getId()));
+ }
}
});
@@@ -2171,26 -2189,31 +2189,31 @@@
public Object[] doInTransaction(TransactionStatus status) {
VmWorkJobVO workJob = null;
- _vmInstanceDao.lockRow(vm.getId(), true);
+ _vmInstanceDao.lockInLockTable(String.valueOf(vm.getId()), Integer.MAX_VALUE);
+ try {
- workJob = new VmWorkJobVO(context.getContextId());
+ workJob = new VmWorkJobVO(context.getContextId());
- workJob.setDispatcher(VmWorkConstants.VM_WORK_JOB_DISPATCHER);
- workJob.setCmd(VmWorkDetachVolume.class.getName());
+ workJob.setDispatcher(VmWorkConstants.VM_WORK_JOB_DISPATCHER);
+ workJob.setCmd(VmWorkDetachVolume.class.getName());
- workJob.setAccountId(callingAccount.getId());
- workJob.setUserId(callingUser.getId());
- workJob.setStep(VmWorkJobVO.Step.Starting);
- workJob.setVmType(VirtualMachine.Type.Instance);
- workJob.setVmInstanceId(vm.getId());
+ workJob.setAccountId(callingAccount.getId());
+ workJob.setUserId(callingUser.getId());
+ workJob.setStep(VmWorkJobVO.Step.Starting);
+ workJob.setVmType(VirtualMachine.Type.Instance);
+ workJob.setVmInstanceId(vm.getId());
- workJob.setRelated(AsyncJobExecutionContext.getOriginJobContextId());
+ workJob.setRelated(AsyncJobExecutionContext.getOriginJobId());
- // save work context info (there are some duplications)
+ // save work context info (there are some duplications)
- VmWorkDetachVolume workInfo = new VmWorkDetachVolume(callingUser.getId(), callingAccount.getId(), vm.getId(), VolumeApiServiceImpl.VM_WORK_JOB_HANDLER, volumeId);
+ VmWorkDetachVolume workInfo = new VmWorkDetachVolume(callingUser.getId(), callingAccount.getId(), vm.getId(),
+ VolumeApiServiceImpl.VM_WORK_JOB_HANDLER, volumeId);
- workJob.setCmdInfo(VmWorkSerializer.serialize(workInfo));
+ workJob.setCmdInfo(VmWorkSerializer.serialize(workInfo));
- _jobMgr.submitAsyncJob(workJob, VmWorkConstants.VM_WORK_QUEUE, vm.getId());
+ _jobMgr.submitAsyncJob(workJob, VmWorkConstants.VM_WORK_QUEUE, vm.getId());
- return new Object[] {workJob, new Long(workJob.getId())};
+ return new Object[] {workJob, new Long(workJob.getId())};
+ } finally {
+ _vmInstanceDao.unlockFromLockTable(String.valueOf(vm.getId()));
+ }
}
});
@@@ -2215,27 -2238,32 +2238,32 @@@
public Object[] doInTransaction(TransactionStatus status) {
VmWorkJobVO workJob = null;
- _vmInstanceDao.lockRow(vm.getId(), true);
+ _vmInstanceDao.lockInLockTable(String.valueOf(vm.getId()), Integer.MAX_VALUE);
+
+ try {
- workJob = new VmWorkJobVO(context.getContextId());
+ workJob = new VmWorkJobVO(context.getContextId());
- workJob.setDispatcher(VmWorkConstants.VM_WORK_JOB_DISPATCHER);
- workJob.setCmd(VmWorkResizeVolume.class.getName());
+ workJob.setDispatcher(VmWorkConstants.VM_WORK_JOB_DISPATCHER);
+ workJob.setCmd(VmWorkResizeVolume.class.getName());
- workJob.setAccountId(callingAccount.getId());
- workJob.setUserId(callingUser.getId());
- workJob.setStep(VmWorkJobVO.Step.Starting);
- workJob.setVmType(VirtualMachine.Type.Instance);
- workJob.setVmInstanceId(vm.getId());
+ workJob.setAccountId(callingAccount.getId());
+ workJob.setUserId(callingUser.getId());
+ workJob.setStep(VmWorkJobVO.Step.Starting);
+ workJob.setVmType(VirtualMachine.Type.Instance);
+ workJob.setVmInstanceId(vm.getId());
- workJob.setRelated(AsyncJobExecutionContext.getOriginJobContextId());
+ workJob.setRelated(AsyncJobExecutionContext.getOriginJobId());
- // save work context info (there are some duplications)
- VmWorkResizeVolume workInfo = new VmWorkResizeVolume(callingUser.getId(), callingAccount.getId(), vm.getId(),
- VolumeApiServiceImpl.VM_WORK_JOB_HANDLER, volumeId, currentSize, newSize, newServiceOfferingId, shrinkOk);
- workJob.setCmdInfo(VmWorkSerializer.serialize(workInfo));
+ // save work context info (there are some duplications)
+ VmWorkResizeVolume workInfo = new VmWorkResizeVolume(callingUser.getId(), callingAccount.getId(), vm.getId(),
+ VolumeApiServiceImpl.VM_WORK_JOB_HANDLER, volumeId, currentSize, newSize, newServiceOfferingId, shrinkOk);
+ workJob.setCmdInfo(VmWorkSerializer.serialize(workInfo));
- _jobMgr.submitAsyncJob(workJob, VmWorkConstants.VM_WORK_QUEUE, vm.getId());
+ _jobMgr.submitAsyncJob(workJob, VmWorkConstants.VM_WORK_QUEUE, vm.getId());
- return new Object[] {workJob, new Long(workJob.getId())};
+ return new Object[] {workJob, new Long(workJob.getId())};
+ } finally {
+ _vmInstanceDao.unlockFromLockTable(String.valueOf(vm.getId()));
+ }
}
});
@@@ -2260,27 -2288,31 +2288,31 @@@
public Object[] doInTransaction(TransactionStatus status) {
VmWorkJobVO workJob = null;
- _vmInstanceDao.lockRow(vm.getId(), true);
+ _vmInstanceDao.lockInLockTable(String.valueOf(vm.getId()), Integer.MAX_VALUE);
+ try {
- workJob = new VmWorkJobVO(context.getContextId());
+ workJob = new VmWorkJobVO(context.getContextId());
- workJob.setDispatcher(VmWorkConstants.VM_WORK_JOB_DISPATCHER);
- workJob.setCmd(VmWorkMigrateVolume.class.getName());
+ workJob.setDispatcher(VmWorkConstants.VM_WORK_JOB_DISPATCHER);
+ workJob.setCmd(VmWorkMigrateVolume.class.getName());
- workJob.setAccountId(callingAccount.getId());
- workJob.setUserId(callingUser.getId());
- workJob.setStep(VmWorkJobVO.Step.Starting);
- workJob.setVmType(VirtualMachine.Type.Instance);
- workJob.setVmInstanceId(vm.getId());
+ workJob.setAccountId(callingAccount.getId());
+ workJob.setUserId(callingUser.getId());
+ workJob.setStep(VmWorkJobVO.Step.Starting);
+ workJob.setVmType(VirtualMachine.Type.Instance);
+ workJob.setVmInstanceId(vm.getId());
- workJob.setRelated(AsyncJobExecutionContext.getOriginJobContextId());
+ workJob.setRelated(AsyncJobExecutionContext.getOriginJobId());
- // save work context info (there are some duplications)
- VmWorkMigrateVolume workInfo = new VmWorkMigrateVolume(callingUser.getId(), callingAccount.getId(), vm.getId(),
- VolumeApiServiceImpl.VM_WORK_JOB_HANDLER, volumeId, destPoolId, liveMigrate);
- workJob.setCmdInfo(VmWorkSerializer.serialize(workInfo));
+ // save work context info (there are some duplications)
+ VmWorkMigrateVolume workInfo = new VmWorkMigrateVolume(callingUser.getId(), callingAccount.getId(), vm.getId(),
+ VolumeApiServiceImpl.VM_WORK_JOB_HANDLER, volumeId, destPoolId, liveMigrate);
+ workJob.setCmdInfo(VmWorkSerializer.serialize(workInfo));
- _jobMgr.submitAsyncJob(workJob, VmWorkConstants.VM_WORK_QUEUE, vm.getId());
+ _jobMgr.submitAsyncJob(workJob, VmWorkConstants.VM_WORK_QUEUE, vm.getId());
- return new Object[] {workJob, new Long(workJob.getId())};
+ return new Object[] {workJob, new Long(workJob.getId())};
+ } finally {
+ _vmInstanceDao.unlockFromLockTable(String.valueOf(vm.getId()));
+ }
}
});
@@@ -2305,28 -2337,32 +2337,32 @@@
public Object[] doInTransaction(TransactionStatus status) {
VmWorkJobVO workJob = null;
- _vmInstanceDao.lockRow(vm.getId(), true);
+ _vmInstanceDao.lockInLockTable(String.valueOf(vm.getId()), Integer.MAX_VALUE);
+ try {
- workJob = new VmWorkJobVO(context.getContextId());
+ workJob = new VmWorkJobVO(context.getContextId());
- workJob.setDispatcher(VmWorkConstants.VM_WORK_JOB_DISPATCHER);
- workJob.setCmd(VmWorkTakeVolumeSnapshot.class.getName());
+ workJob.setDispatcher(VmWorkConstants.VM_WORK_JOB_DISPATCHER);
+ workJob.setCmd(VmWorkTakeVolumeSnapshot.class.getName());
- workJob.setAccountId(callingAccount.getId());
- workJob.setUserId(callingUser.getId());
- workJob.setStep(VmWorkJobVO.Step.Starting);
- workJob.setVmType(VirtualMachine.Type.Instance);
- workJob.setVmInstanceId(vm.getId());
+ workJob.setAccountId(callingAccount.getId());
+ workJob.setUserId(callingUser.getId());
+ workJob.setStep(VmWorkJobVO.Step.Starting);
+ workJob.setVmType(VirtualMachine.Type.Instance);
+ workJob.setVmInstanceId(vm.getId());
- workJob.setRelated(AsyncJobExecutionContext.getOriginJobContextId());
+ workJob.setRelated(AsyncJobExecutionContext.getOriginJobId());
- // save work context info (there are some duplications)
- VmWorkTakeVolumeSnapshot workInfo = new VmWorkTakeVolumeSnapshot(
- callingUser.getId(), accountId != null ? accountId : callingAccount.getId(), vm.getId(),
- VolumeApiServiceImpl.VM_WORK_JOB_HANDLER, volumeId, policyId, snapshotId, quiesceVm);
- workJob.setCmdInfo(VmWorkSerializer.serialize(workInfo));
+ // save work context info (there are some duplications)
+ VmWorkTakeVolumeSnapshot workInfo = new VmWorkTakeVolumeSnapshot(
+ callingUser.getId(), accountId != null ? accountId : callingAccount.getId(), vm.getId(),
+ VolumeApiServiceImpl.VM_WORK_JOB_HANDLER, volumeId, policyId, snapshotId, quiesceVm);
+ workJob.setCmdInfo(VmWorkSerializer.serialize(workInfo));
- _jobMgr.submitAsyncJob(workJob, VmWorkConstants.VM_WORK_QUEUE, vm.getId());
+ _jobMgr.submitAsyncJob(workJob, VmWorkConstants.VM_WORK_QUEUE, vm.getId());
- return new Object[] {workJob, new Long(workJob.getId())};
+ return new Object[] {workJob, new Long(workJob.getId())};
+ } finally {
+ _vmInstanceDao.unlockFromLockTable(String.valueOf(vm.getId()));
+ }
}
});
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/48e08fe6/server/src/com/cloud/template/HypervisorTemplateAdapter.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/48e08fe6/server/src/com/cloud/template/TemplateManagerImpl.java
----------------------------------------------------------------------
diff --cc server/src/com/cloud/template/TemplateManagerImpl.java
index f27fb74,7466670..34123cd
--- a/server/src/com/cloud/template/TemplateManagerImpl.java
+++ b/server/src/com/cloud/template/TemplateManagerImpl.java
@@@ -1744,17 -1753,12 +1778,12 @@@ public class TemplateManagerImpl extend
throw ex;
}
- // Don't allow to modify system template
- if (id == Long.valueOf(1)) {
- InvalidParameterValueException ex = new InvalidParameterValueException("Unable to update template/iso of specified id");
- ex.addProxyObject(String.valueOf(id), "templateId");
- throw ex;
- }
+ verifyTemplateId(id);
// do a permission check
- _accountMgr.checkAccess(account, AccessType.ModifyEntry, true, template);
+ _accountMgr.checkAccess(account, AccessType.OperateEntry, true, template);
if (cmd.isRoutingType() != null) {
- if (!_accountService.isRootAdmin(account.getType())) {
+ if (!_accountService.isRootAdmin(account.getId())) {
throw new PermissionDeniedException("Parameter isrouting can only be specified by a Root Admin, permission denied");
}
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/48e08fe6/server/src/com/cloud/vm/UserVmManager.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/48e08fe6/server/src/com/cloud/vm/UserVmManagerImpl.java
----------------------------------------------------------------------
diff --cc server/src/com/cloud/vm/UserVmManagerImpl.java
index 2957bac,9874dc3..ca734c2
--- a/server/src/com/cloud/vm/UserVmManagerImpl.java
+++ b/server/src/com/cloud/vm/UserVmManagerImpl.java
@@@ -34,6 -35,6 +35,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.ACLType;
import org.apache.cloudstack.acl.SecurityChecker.AccessType;
import org.apache.cloudstack.affinity.AffinityGroupService;
@@@ -79,9 -79,8 +82,6 @@@ import org.apache.cloudstack.framework.
import org.apache.cloudstack.managed.context.ManagedContextRunnable;
import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao;
import org.apache.cloudstack.storage.datastore.db.StoragePoolVO;
- import org.apache.cloudstack.storage.to.TemplateObjectTO;
--import org.apache.commons.codec.binary.Base64;
--import org.apache.log4j.Logger;
import com.cloud.agent.AgentManager;
import com.cloud.agent.api.Answer;
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/48e08fe6/server/src/com/cloud/vm/snapshot/VMSnapshotManagerImpl.java
----------------------------------------------------------------------
diff --cc server/src/com/cloud/vm/snapshot/VMSnapshotManagerImpl.java
index e9d10b8,9d7a952..37cdf86
--- a/server/src/com/cloud/vm/snapshot/VMSnapshotManagerImpl.java
+++ b/server/src/com/cloud/vm/snapshot/VMSnapshotManagerImpl.java
@@@ -865,27 -863,31 +865,31 @@@ public class VMSnapshotManagerImpl exte
public Object[] doInTransaction(TransactionStatus status) {
VmWorkJobVO workJob = null;
- _vmInstanceDao.lockRow(vm.getId(), true);
+ _vmInstanceDao.lockInLockTable(String.valueOf(vm.getId()), Integer.MAX_VALUE);
+ try {
- workJob = new VmWorkJobVO(context.getContextId());
+ workJob = new VmWorkJobVO(context.getContextId());
- workJob.setDispatcher(VmWorkConstants.VM_WORK_JOB_DISPATCHER);
- workJob.setCmd(VmWorkCreateVMSnapshot.class.getName());
+ workJob.setDispatcher(VmWorkConstants.VM_WORK_JOB_DISPATCHER);
+ workJob.setCmd(VmWorkCreateVMSnapshot.class.getName());
- workJob.setAccountId(callingAccount.getId());
- workJob.setUserId(callingUser.getId());
- workJob.setStep(VmWorkJobVO.Step.Starting);
- workJob.setVmType(VirtualMachine.Type.Instance);
- workJob.setVmInstanceId(vm.getId());
+ workJob.setAccountId(callingAccount.getId());
+ workJob.setUserId(callingUser.getId());
+ workJob.setStep(VmWorkJobVO.Step.Starting);
+ workJob.setVmType(VirtualMachine.Type.Instance);
+ workJob.setVmInstanceId(vm.getId());
- workJob.setRelated(AsyncJobExecutionContext.getOriginJobContextId());
+ workJob.setRelated(AsyncJobExecutionContext.getOriginJobId());
- // save work context info (there are some duplications)
- VmWorkCreateVMSnapshot workInfo = new VmWorkCreateVMSnapshot(callingUser.getId(), callingAccount.getId(), vm.getId(),
- VMSnapshotManagerImpl.VM_WORK_JOB_HANDLER, vmSnapshotId, quiesceVm);
- workJob.setCmdInfo(VmWorkSerializer.serialize(workInfo));
+ // save work context info (there are some duplications)
+ VmWorkCreateVMSnapshot workInfo = new VmWorkCreateVMSnapshot(callingUser.getId(), callingAccount.getId(), vm.getId(),
+ VMSnapshotManagerImpl.VM_WORK_JOB_HANDLER, vmSnapshotId, quiesceVm);
+ workJob.setCmdInfo(VmWorkSerializer.serialize(workInfo));
- _jobMgr.submitAsyncJob(workJob, VmWorkConstants.VM_WORK_QUEUE, vm.getId());
+ _jobMgr.submitAsyncJob(workJob, VmWorkConstants.VM_WORK_QUEUE, vm.getId());
- return new Object[] {workJob, new Long(workJob.getId())};
+ return new Object[] {workJob, new Long(workJob.getId())};
+ } finally {
+ _vmInstanceDao.unlockFromLockTable(String.valueOf(vm.getId()));
+ }
}
});
@@@ -909,27 -911,31 +913,31 @@@
public Object[] doInTransaction(TransactionStatus status) {
VmWorkJobVO workJob = null;
- _vmInstanceDao.lockRow(vm.getId(), true);
+ _vmInstanceDao.lockInLockTable(String.valueOf(vm.getId()), Integer.MAX_VALUE);
+ try {
- workJob = new VmWorkJobVO(context.getContextId());
+ workJob = new VmWorkJobVO(context.getContextId());
- workJob.setDispatcher(VmWorkConstants.VM_WORK_JOB_DISPATCHER);
- workJob.setCmd(VmWorkDeleteVMSnapshot.class.getName());
+ workJob.setDispatcher(VmWorkConstants.VM_WORK_JOB_DISPATCHER);
+ workJob.setCmd(VmWorkDeleteVMSnapshot.class.getName());
- workJob.setAccountId(callingAccount.getId());
- workJob.setUserId(callingUser.getId());
- workJob.setStep(VmWorkJobVO.Step.Starting);
- workJob.setVmType(VirtualMachine.Type.Instance);
- workJob.setVmInstanceId(vm.getId());
+ workJob.setAccountId(callingAccount.getId());
+ workJob.setUserId(callingUser.getId());
+ workJob.setStep(VmWorkJobVO.Step.Starting);
+ workJob.setVmType(VirtualMachine.Type.Instance);
+ workJob.setVmInstanceId(vm.getId());
- workJob.setRelated(AsyncJobExecutionContext.getOriginJobContextId());
+ workJob.setRelated(AsyncJobExecutionContext.getOriginJobId());
- // save work context info (there are some duplications)
- VmWorkDeleteVMSnapshot workInfo = new VmWorkDeleteVMSnapshot(callingUser.getId(), callingAccount.getId(), vm.getId(),
- VMSnapshotManagerImpl.VM_WORK_JOB_HANDLER, vmSnapshotId);
- workJob.setCmdInfo(VmWorkSerializer.serialize(workInfo));
+ // save work context info (there are some duplications)
+ VmWorkDeleteVMSnapshot workInfo = new VmWorkDeleteVMSnapshot(callingUser.getId(), callingAccount.getId(), vm.getId(),
+ VMSnapshotManagerImpl.VM_WORK_JOB_HANDLER, vmSnapshotId);
+ workJob.setCmdInfo(VmWorkSerializer.serialize(workInfo));
- _jobMgr.submitAsyncJob(workJob, VmWorkConstants.VM_WORK_QUEUE, vm.getId());
+ _jobMgr.submitAsyncJob(workJob, VmWorkConstants.VM_WORK_QUEUE, vm.getId());
- return new Object[] {workJob, new Long(workJob.getId())};
+ return new Object[] {workJob, new Long(workJob.getId())};
+ } finally {
+ _vmInstanceDao.unlockFromLockTable(String.valueOf(vm.getId()));
+ }
}
});
@@@ -953,27 -959,31 +961,31 @@@
public Object[] doInTransaction(TransactionStatus status) {
VmWorkJobVO workJob = null;
- _vmInstanceDao.lockRow(vm.getId(), true);
+ _vmInstanceDao.lockInLockTable(String.valueOf(vm.getId()), Integer.MAX_VALUE);
+ try {
- workJob = new VmWorkJobVO(context.getContextId());
+ workJob = new VmWorkJobVO(context.getContextId());
- workJob.setDispatcher(VmWorkConstants.VM_WORK_JOB_DISPATCHER);
- workJob.setCmd(VmWorkRevertToVMSnapshot.class.getName());
+ workJob.setDispatcher(VmWorkConstants.VM_WORK_JOB_DISPATCHER);
+ workJob.setCmd(VmWorkRevertToVMSnapshot.class.getName());
- workJob.setAccountId(callingAccount.getId());
- workJob.setUserId(callingUser.getId());
- workJob.setStep(VmWorkJobVO.Step.Starting);
- workJob.setVmType(VirtualMachine.Type.Instance);
- workJob.setVmInstanceId(vm.getId());
+ workJob.setAccountId(callingAccount.getId());
+ workJob.setUserId(callingUser.getId());
+ workJob.setStep(VmWorkJobVO.Step.Starting);
+ workJob.setVmType(VirtualMachine.Type.Instance);
+ workJob.setVmInstanceId(vm.getId());
- workJob.setRelated(AsyncJobExecutionContext.getOriginJobContextId());
+ workJob.setRelated(AsyncJobExecutionContext.getOriginJobId());
- // save work context info (there are some duplications)
- VmWorkRevertToVMSnapshot workInfo = new VmWorkRevertToVMSnapshot(callingUser.getId(), callingAccount.getId(), vm.getId(),
- VMSnapshotManagerImpl.VM_WORK_JOB_HANDLER, vmSnapshotId);
- workJob.setCmdInfo(VmWorkSerializer.serialize(workInfo));
+ // save work context info (there are some duplications)
+ VmWorkRevertToVMSnapshot workInfo = new VmWorkRevertToVMSnapshot(callingUser.getId(), callingAccount.getId(), vm.getId(),
+ VMSnapshotManagerImpl.VM_WORK_JOB_HANDLER, vmSnapshotId);
+ workJob.setCmdInfo(VmWorkSerializer.serialize(workInfo));
- _jobMgr.submitAsyncJob(workJob, VmWorkConstants.VM_WORK_QUEUE, vm.getId());
+ _jobMgr.submitAsyncJob(workJob, VmWorkConstants.VM_WORK_QUEUE, vm.getId());
- return new Object[] {workJob, new Long(workJob.getId())};
+ return new Object[] {workJob, new Long(workJob.getId())};
+ } finally {
+ _vmInstanceDao.unlockFromLockTable(String.valueOf(vm.getId()));
+ }
}
});
@@@ -997,27 -1007,31 +1009,31 @@@
public Object[] doInTransaction(TransactionStatus status) {
VmWorkJobVO workJob = null;
- _vmInstanceDao.lockRow(vm.getId(), true);
+ _vmInstanceDao.lockInLockTable(String.valueOf(vm.getId()), Integer.MAX_VALUE);
+ try {
- workJob = new VmWorkJobVO(context.getContextId());
+ workJob = new VmWorkJobVO(context.getContextId());
- workJob.setDispatcher(VmWorkConstants.VM_WORK_JOB_DISPATCHER);
- workJob.setCmd(VmWorkDeleteAllVMSnapshots.class.getName());
+ workJob.setDispatcher(VmWorkConstants.VM_WORK_JOB_DISPATCHER);
+ workJob.setCmd(VmWorkDeleteAllVMSnapshots.class.getName());
- workJob.setAccountId(callingAccount.getId());
- workJob.setUserId(callingUser.getId());
- workJob.setStep(VmWorkJobVO.Step.Starting);
- workJob.setVmType(VirtualMachine.Type.Instance);
- workJob.setVmInstanceId(vm.getId());
+ workJob.setAccountId(callingAccount.getId());
+ workJob.setUserId(callingUser.getId());
+ workJob.setStep(VmWorkJobVO.Step.Starting);
+ workJob.setVmType(VirtualMachine.Type.Instance);
+ workJob.setVmInstanceId(vm.getId());
- workJob.setRelated(AsyncJobExecutionContext.getOriginJobContextId());
+ workJob.setRelated(AsyncJobExecutionContext.getOriginJobId());
- // save work context info (there are some duplications)
- VmWorkDeleteAllVMSnapshots workInfo = new VmWorkDeleteAllVMSnapshots(callingUser.getId(), callingAccount.getId(), vm.getId(),
- VMSnapshotManagerImpl.VM_WORK_JOB_HANDLER, type);
- workJob.setCmdInfo(VmWorkSerializer.serialize(workInfo));
+ // save work context info (there are some duplications)
+ VmWorkDeleteAllVMSnapshots workInfo = new VmWorkDeleteAllVMSnapshots(callingUser.getId(), callingAccount.getId(), vm.getId(),
+ VMSnapshotManagerImpl.VM_WORK_JOB_HANDLER, type);
+ workJob.setCmdInfo(VmWorkSerializer.serialize(workInfo));
- _jobMgr.submitAsyncJob(workJob, VmWorkConstants.VM_WORK_QUEUE, vm.getId());
+ _jobMgr.submitAsyncJob(workJob, VmWorkConstants.VM_WORK_QUEUE, vm.getId());
- return new Object[] {workJob, new Long(workJob.getId())};
+ return new Object[] {workJob, new Long(workJob.getId())};
+ } finally {
+ _vmInstanceDao.unlockFromLockTable(String.valueOf(vm.getId()));
+ }
}
});
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/48e08fe6/server/src/org/apache/cloudstack/network/lb/ApplicationLoadBalancerManagerImpl.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/48e08fe6/services/pom.xml
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/48e08fe6/setup/db/db/schema-430to440.sql
----------------------------------------------------------------------
diff --cc setup/db/db/schema-430to440.sql
index 917a954,f755a08..52f6c67
--- a/setup/db/db/schema-430to440.sql
+++ b/setup/db/db/schema-430to440.sql
@@@ -122,9 -122,10 +122,10 @@@ CREATE VIEW `cloud`.`volume_view` A
volumes.attached,
volumes.removed,
volumes.pod_id,
- volumes.display_volume,
+ volumes.display_volume,
volumes.format,
- volumes.path,
+ volumes.path,
+ volumes.chain_info,
account.id account_id,
account.uuid account_uuid,
account.account_name account_name,
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/48e08fe6/tools/marvin/marvin/integration/lib/base.py
----------------------------------------------------------------------
diff --cc tools/marvin/marvin/integration/lib/base.py
index d281f7b,0a7ad94..4d968d1
--- a/tools/marvin/marvin/integration/lib/base.py
+++ b/tools/marvin/marvin/integration/lib/base.py
@@@ -3623,131 -3630,32 +3630,160 @@@ class Resources
cmd = updateResourceCount.updateResourceCountCmd()
[setattr(cmd, k, v) for k, v in kwargs.items()]
return(apiclient.updateResourceCount(cmd))
-
-
++
+ class NIC:
+ """NIC related API"""
+ def __init__(self, items):
+ self.__dict__.update(items)
+
+ @classmethod
+ def addIp(cls, apiclient, id, ipaddress=None):
+ """Add Ip (secondary) to NIC"""
+ cmd = addIpToNic.addIpToNicCmd()
+ cmd.nicid = id
+ if ipaddress:
+ cmd.ipaddress = ipaddress
+ return(apiclient.addIpToNic(cmd))
+
+ @classmethod
+ def removeIp(cls,apiclient,ipaddressid):
+ """Remove secondary Ip from NIC"""
+ cmd = removeIpFromNic.removeIpFromNicCmd()
+ cmd.id = ipaddressid
+ return(apiclient.addIpToNic(cmd))
+
+ @classmethod
+ def list(cls, apiclient, **kwargs):
+ """List NICs belonging to a virtual machine"""
+
+ cmd = listNics.listNicsCmd()
+ [setattr(cmd, k, v) for k, v in kwargs.items()]
+ return(apiclient.listNics(cmd))
++
+class IAMGroup:
+ def __init__(self, items):
+ self.__dict__.update(items)
+
+ @classmethod
+ def create(cls, apiclient, iam_grp, account=None, domainid=None):
+ cmd = createIAMGroup.createIAMGroupCmd()
+ cmd.name = iam_grp['name']
+ cmd.description = iam_grp['description']
+ if account:
+ cmd.account = account
+ if domainid:
+ cmd.domainid = domainid
+ return IAMGroup(apiclient.createIAMGroup(cmd).__dict__)
+
+ def update(self, apiclient):
+ pass
+
+ def delete(self, apiclient):
+ cmd = deleteIAMGroup.deleteIAMGroupCmd()
+ cmd.id = self.id
+ return apiclient.deleteIAMGroup(cmd)
+
+ @classmethod
+ def list(cls, apiclient, **kwargs):
+ cmd = listIAMGroups.listIAMGroupsCmd()
+ [setattr(cmd, k, v) for k, v in kwargs.items()]
+ return apiclient.listIAMGroupsCmd(cmd)
+
+ def addAccount(self, apiclient, accts):
+ """Add accounts to iam group"""
+ cmd = addAccountToIAMGroup.addAccountToIAMGroupCmd()
+ cmd.id = self.id
+ cmd.accounts = [str(acct.id) for acct in accts]
+ apiclient.addAccountToIAMGroup(cmd)
+ return
+
+ def removeAccount(self, apiclient, accts):
+ """ Remove accounts from iam group"""
+ cmd = removeAccountFromIAMGroup.removeAccountFromIAMGroupCmd()
+ cmd.id = self.id
+ cmd.accounts = [str(acct.id) for acct in accts]
+ apiclient.removeAccountFromIAMGroup(cmd)
+ return
+
+ def attachPolicy(self, apiclient, policies):
+ """Add policies to iam group"""
+ cmd = attachIAMPolicyToIAMGroup.attachIAMPolicyToIAMGroupCmd()
+ cmd.id = self.id
+ cmd.policies = [str(policy.id) for policy in policies]
+ apiclient.attachIAMPolicyToIAMGroup(cmd)
+ return
+
+ def detachPolicy(self, apiclient, policies):
+ """Remove policies from iam group"""
+ cmd = removeIAMPolicyFromIAMGroup.removeIAMPolicyFromIAMGroupCmd()
+ cmd.id = self.id
+ cmd.policies = [str(policy.id) for policy in policies]
+ apiclient.removeIAMPolicyFromIAMGroup(cmd)
+ return
+
+class IAMPolicy:
+ def __init__(self, items):
+ self.__dict__.update(items)
+
+ @classmethod
+ def create(cls, apiclient, iam_policy, account=None, domainid=None):
+ cmd = createIAMPolicy.createIAMPolicyCmd()
+ cmd.name = iam_policy['name']
+ cmd.description = iam_policy['description']
+ if account:
+ cmd.account = account
+ if domainid:
+ cmd.domainid = domainid
+ return IAMPolicy(apiclient.createIAMPolicy(cmd).__dict__)
+
+ def update(self, apiclient):
+ pass
+
+ def delete(self, apiclient):
+ cmd = deleteIAMPolicy.deleteIAMPolicyCmd()
+ cmd.id = self.id
+ return apiclient.deleteIAMPolicy(cmd)
+
+ @classmethod
+ def list(cls, apiclient, **kwargs):
+ cmd = listIAMPolicies.listIAMPoliciesCmd()
+ [setattr(cmd, k, v) for k, v in kwargs.items()]
+ return apiclient.listIAMPoliciesCmd(cmd)
+
+ def addPermission(self, apiclient, permission):
+ """Add permission to iam policy"""
+ cmd = addIAMPermissionToIAMPolicy.addIAMPermissionToIAMPolicyCmd()
+ cmd.id = self.id
+ cmd.action = permission['action']
+ cmd.entitytype = permission['entitytype']
+ cmd.scope = permission['scope']
+ cmd.scopeid = permission['scopeid']
+ apiclient.addIAMPermissionToIAMPolicy(cmd)
+ return
+
+ def removePermission(self, apiclient, permission):
+ """Remove permission from iam policy"""
+ cmd = removeIAMPermissionFromIAMPolicy.removeIAMPermissionFromIAMPolicyCmd()
+ cmd.id = self.id
+ cmd.action = permission['action']
+ cmd.entitytype = permission['entitytype']
+ cmd.scope = permission['scope']
+ cmd.scopeid = permission['scopeid']
+ apiclient.removeIAMPermissionFromIAMPolicy(cmd)
+ return
+
+ def attachAccount(self, apiclient, accts):
+ """Attach iam policy to accounts"""
+ cmd = attachIAMPolicyToAccount.attachIAMPolicyToAccountCmd()
+ cmd.id = self.id
+ cmd.accounts = [str(acct.id) for acct in accts]
+ apiclient.attachIAMPolicyToAccount(cmd)
+ return
+
+ def detachAccount(self, apiclient, accts):
+ """Detach iam policy from accounts"""
+ cmd = removeIAMPolicyFromAccount.removeIAMPolicyFromAccountCmd()
+ cmd.id = self.id
+ cmd.accounts = [str(acct.id) for acct in accts]
+ apiclient.removeIAMPolicyFromAccount(cmd)
- return
++ return