diff --git a/api/src/com/cloud/event/EventTypes.java b/api/src/com/cloud/event/EventTypes.java index 611de42ccf5..250a5e1c9ea 100755 --- a/api/src/com/cloud/event/EventTypes.java +++ b/api/src/com/cloud/event/EventTypes.java @@ -301,5 +301,5 @@ public class EventTypes { public static final String EVENT_AUTOSCALEVMGROUP_DELETE = "AUTOSCALEVMGROUP.DELETE"; public static final String EVENT_AUTOSCALEVMGROUP_UPDATE = "AUTOSCALEVMGROUP.UPDATE"; public static final String EVENT_AUTOSCALEVMGROUP_ENABLE = "AUTOSCALEVMGROUP.ENABLE"; - public static final String EVENT_AUTOSCALEVMGROUP_DISABLE = "AUTOSCALEVMGROUP.DIABLE"; + public static final String EVENT_AUTOSCALEVMGROUP_DISABLE = "AUTOSCALEVMGROUP.DISABLE"; } diff --git a/core/src/com/cloud/network/resource/NetscalerResource.java b/core/src/com/cloud/network/resource/NetscalerResource.java index c6448d13c88..f8ae5247349 100644 --- a/core/src/com/cloud/network/resource/NetscalerResource.java +++ b/core/src/com/cloud/network/resource/NetscalerResource.java @@ -42,8 +42,8 @@ import com.citrix.netscaler.nitro.resource.config.network.vlan_nsip_binding; import com.citrix.netscaler.nitro.resource.config.ns.nsconfig; import com.citrix.netscaler.nitro.resource.config.ns.nshardware; import com.citrix.netscaler.nitro.resource.config.ns.nsip; -import com.citrix.netscaler.nitro.resource.config.timer.timerpolicy; -import com.citrix.netscaler.nitro.resource.config.timer.timertrigger_timerpolicy_binding; +import com.citrix.netscaler.nitro.resource.config.ns.nstimer; +import com.citrix.netscaler.nitro.resource.config.ns.nstimer_autoscalepolicy_binding; import com.citrix.netscaler.nitro.resource.config.autoscale.*; import com.citrix.netscaler.nitro.resource.stat.lb.lbvserver_stats; import com.citrix.netscaler.nitro.service.nitro_service; @@ -238,7 +238,7 @@ public class NetscalerResource implements ServerResource { if (!_isSdx) { _netscalerService = new com.citrix.netscaler.nitro.service.nitro_service(_ip, "https"); _netscalerService.set_credential(_username, _password); - // _netscalerService.set_timeout(_timeout); + _netscalerService.set_timeout(_timeout); apiCallResult = _netscalerService.login(); if (apiCallResult.errorcode != 0) { throw new ExecutionException ("Failed to log in to Netscaler device at " + _ip + " due to error " + apiCallResult.errorcode + " and message " + apiCallResult.message); @@ -701,7 +701,7 @@ public class NetscalerResource implements ServerResource { try { nitro_service _netscalerService = new nitro_service(cmd.getLoadBalancerIP(), "https"); _netscalerService.set_credential(username, password); - // _netscalerService.set_timeout(_timeout); + _netscalerService.set_timeout(_timeout); apiCallResult = _netscalerService.login(); if (apiCallResult.errorcode == 0) { nsServiceUp = true; @@ -1367,15 +1367,15 @@ public class NetscalerResource implements ServerResource { boolean vserverExisis = false; lbvserver vserver = getVirtualServerIfExisits(virtualServerName); - if (vserver == null) { - vserver = new lbvserver(); - } else { + if (vserver != null) { if (!vserver.get_servicetype().equalsIgnoreCase(protocol)) { throw new ExecutionException("Can not update virtual server:" + virtualServerName + " as current protocol:" + vserver.get_servicetype() + " of virtual server is different from the " + " intended protocol:" + protocol); } vserverExisis = true; } + // Use new vserver always for configuration + vserver = new lbvserver(); vserver.set_name(virtualServerName); vserver.set_ipv46(publicIp); vserver.set_port(publicPort); @@ -1419,16 +1419,8 @@ public class NetscalerResource implements ServerResource { // set session persistence timeout vserver.set_timeout(timeout); } else { - if (vserver.get_persistencetype() != null) { - // delete the LB stickyness policy - vserver.set_persistencetype("NONE"); - } - } - if(vmGroupTO != null) { - vserver.set_mysqlcharacterset(null); - vserver.set_mysqlprotocolversion(null); - vserver.set_mysqlservercapabilities(null); - vserver.set_mysqlserverversion(null); + // delete the LB stickyness policy + vserver.set_persistencetype("NONE"); } @@ -1557,7 +1549,9 @@ public class NetscalerResource implements ServerResource { String nsVirtualServerName = generateNSVirtualServerName(srcIp, srcPort); String serviceGroupName = generateAutoScaleServiceGroupName(srcIp, srcPort); - disableAutoScaleConfig(loadBalancerTO, false); + if(loadBalancerTO.getAutoScaleVmGroupTO().getState().equals("enabled")) { + disableAutoScaleConfig(loadBalancerTO, false); + } if(isServiceGroupBoundToVirtualServer(nsVirtualServerName, serviceGroupName)) { // UnBind autoscale service group @@ -1648,7 +1642,7 @@ public class NetscalerResource implements ServerResource { } // Add Timer - com.citrix.netscaler.nitro.resource.config.timer.timertrigger timer = new com.citrix.netscaler.nitro.resource.config.timer.timertrigger(); + nstimer timer = new nstimer(); try { timer.set_name(timerName); timer.set_interval(interval); @@ -1945,7 +1939,7 @@ public class NetscalerResource implements ServerResource { } // Delete Timer - com.citrix.netscaler.nitro.resource.config.timer.timertrigger timer = new com.citrix.netscaler.nitro.resource.config.timer.timertrigger(); + nstimer timer = new nstimer(); try { timer.set_name(timerName); timer.delete(_netscalerService, timer); @@ -2017,7 +2011,7 @@ public class NetscalerResource implements ServerResource { // Adding a autoscale policy // add timer policy lb_policy_scaleUp_cpu_mem -rule - (SYS.CUR_VSERVER.METRIC_TABLE(cpu).AVG_VAL.GT(80)- // -action lb_scaleUpAction - timerpolicy timerPolicy = new timerpolicy(); + autoscalepolicy timerPolicy = new autoscalepolicy(); try { timerPolicy.set_name(policyName); timerPolicy.set_action(action); @@ -2033,7 +2027,7 @@ public class NetscalerResource implements ServerResource { // bind timer trigger lb_astimer -policyName lb_policy_scaleUp -vserver lb -priority 1 -samplesize 5 // TODO: later bind to lbvserver. bind timer trigger lb_astimer -policyName lb_policy_scaleUp -vserver lb -priority 1 -samplesize 5 // -thresholdsize 5 - timertrigger_timerpolicy_binding timer_policy_binding = new timertrigger_timerpolicy_binding(); + nstimer_autoscalepolicy_binding timer_policy_binding = new nstimer_autoscalepolicy_binding(); int sampleSize = duration/interval; try { timer_policy_binding.set_name(timerName); @@ -2053,7 +2047,7 @@ public class NetscalerResource implements ServerResource { private void removeAutoScalePolicy(String timerName, String policyName, boolean isCleanUp) throws Exception { // unbind timer policy // unbbind timer trigger lb_astimer -policyName lb_policy_scaleUp - com.citrix.netscaler.nitro.resource.config.timer.timertrigger_timerpolicy_binding timer_policy_binding = new com.citrix.netscaler.nitro.resource.config.timer.timertrigger_timerpolicy_binding(); + nstimer_autoscalepolicy_binding timer_policy_binding = new nstimer_autoscalepolicy_binding(); try { timer_policy_binding.set_name(timerName); timer_policy_binding.set_policyname(policyName); @@ -2066,7 +2060,7 @@ public class NetscalerResource implements ServerResource { // Removing Timer policy // rm timer policy lb_policy_scaleUp_cpu_mem - com.citrix.netscaler.nitro.resource.config.timer.timerpolicy timerPolicy = new com.citrix.netscaler.nitro.resource.config.timer.timerpolicy(); + autoscalepolicy timerPolicy = new autoscalepolicy(); try { timerPolicy.set_name(policyName); timerPolicy.delete(_netscalerService, timerPolicy); @@ -2278,8 +2272,4 @@ public class NetscalerResource implements ServerResource { public void disconnected() { return; } - - - - } diff --git a/deps/cloud-netscaler.jar b/deps/cloud-netscaler.jar index 3097b787885..475ff638440 100755 Binary files a/deps/cloud-netscaler.jar and b/deps/cloud-netscaler.jar differ diff --git a/scripts/vm/hypervisor/xenserver/vmops b/scripts/vm/hypervisor/xenserver/vmops index 7025622dc99..d089e46b9f1 100755 --- a/scripts/vm/hypervisor/xenserver/vmops +++ b/scripts/vm/hypervisor/xenserver/vmops @@ -250,7 +250,7 @@ def setLinkLocalIP(session, args): except: return 'can not cat network.conf' - if result.lower() == "bridge": + if result.lower().strip() == "bridge": try: cmd = ["brctl", "addbr", brName] txt = util.pread2(cmd) diff --git a/server/src/com/cloud/network/as/AutoScaleManagerImpl.java b/server/src/com/cloud/network/as/AutoScaleManagerImpl.java index d0ea5c321b0..efff14e7d96 100644 --- a/server/src/com/cloud/network/as/AutoScaleManagerImpl.java +++ b/server/src/com/cloud/network/as/AutoScaleManagerImpl.java @@ -719,14 +719,15 @@ public class AutoScaleManagerImpl implements AutoScaleService, Manager { return vmGroup.getLoadBalancerId() != null; } - public boolean configureAutoScaleVmGroup(long vmGroupid) { + private boolean configureAutoScaleVmGroup(long vmGroupid) throws InvalidParameterValueException { AutoScaleVmGroup vmGroup = _autoScaleVmGroupDao.findById(vmGroupid); if (isLoadBalancerBasedAutoScaleVmGroup(vmGroup)) { try { return _lbRulesMgr.configureLbAutoScaleVmGroup(vmGroupid); - } catch (RuntimeException re) { - s_logger.warn("Exception during configureLbAutoScaleVmGrouop in lb rules manager", re); + } catch (Exception e) { + s_logger.warn("Exception during configureLbAutoScaleVmGroup in lb rules manager", e); + return false; } } diff --git a/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java b/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java index 8e7f4489e7e..00aa9f757ef 100755 --- a/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java +++ b/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java @@ -216,6 +216,7 @@ public class LoadBalancingRulesManagerImpl implements LoadBalancingRulesMa @Inject VpcManager _vpcMgr; + // Will return a string. For LB Stickiness this will be a json, for autoscale this will be "," separated values @Override public String getLBCapability(long networkid, String capabilityName) { @@ -226,7 +227,7 @@ public class LoadBalancingRulesManagerImpl implements LoadBalancingRulesMa serviceResponse.setName(service.getName()); if ("Lb".equalsIgnoreCase(service.getName())) { Map serviceCapabilities = serviceCapabilitiesMap - .get(service); + .get(service); if (serviceCapabilities != null) { for (Capability capability : serviceCapabilities .keySet()) { @@ -278,7 +279,12 @@ public class LoadBalancingRulesManagerImpl implements LoadBalancingRulesMa return new LbAutoScaleVmGroup(vmGroup, autoScalePolicies, lbAutoScaleVmProfile); } - private boolean applyAutoScaleConfig(LoadBalancerVO lb, LoadBalancingRule rule) throws ResourceUnavailableException { + private boolean applyAutoScaleConfig(LoadBalancerVO lb, AutoScaleVmGroupVO vmGroup) throws ResourceUnavailableException { + LbAutoScaleVmGroup lbAutoScaleVmGroup = getLbAutoScaleVmGroup(vmGroup); + /* Regular config like destinations need not be packed for applying autoscale config as of today.*/ + LoadBalancingRule rule = new LoadBalancingRule(lb, null, null); + rule.setAutoScaleVmGroup(lbAutoScaleVmGroup); + if (!isRollBackAllowedForProvider(lb)) { // this is for Netscalar type of devices. if their is failure the db entries will be rollbacked. return false; @@ -314,12 +320,8 @@ public class LoadBalancingRulesManagerImpl implements LoadBalancingRulesMa _lbDao.persist(loadBalancer); } - // LBTODO try { - LbAutoScaleVmGroup lbAutoScaleVmGroup = getLbAutoScaleVmGroup(vmGroup); - LoadBalancingRule rule = new LoadBalancingRule(loadBalancer, null, null); - rule.setAutoScaleVmGroup(lbAutoScaleVmGroup); - success = applyAutoScaleConfig(loadBalancer, rule); + success = applyAutoScaleConfig(loadBalancer, vmGroup); } catch (ResourceUnavailableException e) { s_logger.warn("Unable to configure AutoScaleVmGroup to the lb rule: " + loadBalancer.getId() + " because resource is unavaliable:", e); } finally { @@ -839,9 +841,18 @@ public class LoadBalancingRulesManagerImpl implements LoadBalancingRulesMa if (apply) { try { - if (!applyLoadBalancerConfig(loadBalancerId)) { - s_logger.warn("Unable to apply the load balancer config"); - return false; + if (_autoScaleVmGroupDao.isAutoScaleLoadBalancer(loadBalancerId)) { + // Get the associated VmGroup + AutoScaleVmGroupVO vmGroup = _autoScaleVmGroupDao.listByAll(loadBalancerId, null).get(0); + if (!applyAutoScaleConfig(lb, vmGroup)) { + s_logger.warn("Unable to apply the autoscale config"); + return false; + } + } else { + if (!applyLoadBalancerConfig(loadBalancerId)) { + s_logger.warn("Unable to apply the load balancer config"); + return false; + } } } catch (ResourceUnavailableException e) { if (rollBack && isRollBackAllowedForProvider(lb)) { @@ -925,7 +936,7 @@ public class LoadBalancingRulesManagerImpl implements LoadBalancingRulesMa try { if (ipVO.getAssociatedWithNetworkId() == null) { boolean assignToVpcNtwk = network.getVpcId() != null - && ipVO.getVpcId() != null && ipVO.getVpcId().longValue() == network.getVpcId(); + && ipVO.getVpcId() != null && ipVO.getVpcId().longValue() == network.getVpcId(); if (assignToVpcNtwk) { // set networkId just for verification purposes _networkMgr.checkIpForService(ipVO, Service.Lb, lb.getNetworkId()); diff --git a/server/src/com/cloud/storage/StorageManagerImpl.java b/server/src/com/cloud/storage/StorageManagerImpl.java index 31ec7ec1607..7df4802feda 100755 --- a/server/src/com/cloud/storage/StorageManagerImpl.java +++ b/server/src/com/cloud/storage/StorageManagerImpl.java @@ -639,6 +639,9 @@ public class StorageManagerImpl implements StorageManager, Manager, ClusterManag Pair volumeDetails = createVolumeFromSnapshot(volume, snapshot); if (volumeDetails != null) { createdVolume = volumeDetails.first(); + UsageEventVO usageEvent = new UsageEventVO(EventTypes.EVENT_VOLUME_CREATE, createdVolume.getAccountId(), createdVolume.getDataCenterId(), createdVolume.getId(), createdVolume.getName(), + createdVolume.getDiskOfferingId(), null, createdVolume.getSize()); + _usageEventDao.persist(usageEvent); } return createdVolume; } @@ -1993,8 +1996,11 @@ public class StorageManagerImpl implements StorageManager, Manager, ClusterManag volume.setDomainId((caller == null) ? Domain.ROOT_DOMAIN : caller.getDomainId()); volume = _volsDao.persist(volume); - UsageEventVO usageEvent = new UsageEventVO(EventTypes.EVENT_VOLUME_CREATE, volume.getAccountId(), volume.getDataCenterId(), volume.getId(), volume.getName(), diskOfferingId, null, size); - _usageEventDao.persist(usageEvent); + if(cmd.getSnapshotId() == null){ + //for volume created from snapshot, create usage event after volume creation + UsageEventVO usageEvent = new UsageEventVO(EventTypes.EVENT_VOLUME_CREATE, volume.getAccountId(), volume.getDataCenterId(), volume.getId(), volume.getName(), diskOfferingId, null, size); + _usageEventDao.persist(usageEvent); + } UserContext.current().setEventDetails("Volume Id: " + volume.getId()); @@ -3220,7 +3226,8 @@ public class StorageManagerImpl implements StorageManager, Manager, ClusterManag if (s_logger.isDebugEnabled()) { s_logger.debug("Mismatch in storage pool " + assignedPool + " assigned by deploymentPlanner and the one associated with volume " + vol); } - if (vm.getServiceOffering().getUseLocalStorage()) + DiskOfferingVO diskOffering = _diskOfferingDao.findById(vol.getDiskOfferingId()); + if (diskOffering.getUseLocalStorage()) { if (s_logger.isDebugEnabled()) { s_logger.debug("Local volume " + vol + " will be recreated on storage pool " + assignedPool + " assigned by deploymentPlanner"); @@ -3231,10 +3238,12 @@ public class StorageManagerImpl implements StorageManager, Manager, ClusterManag s_logger.debug("Shared volume " + vol + " will be migrated on storage pool " + assignedPool + " assigned by deploymentPlanner"); } try { - Volume migratedVol = migrateVolume(vol.getId(), assignedPool.getId()); - vm.addDisk(new VolumeTO(migratedVol, assignedPool)); + List volumesToMigrate = new ArrayList(); + volumesToMigrate.add(vol); + migrateVolumes(volumesToMigrate, assignedPool); + vm.addDisk(new VolumeTO(vol, assignedPool)); } catch (ConcurrentOperationException e) { - throw new StorageUnavailableException("Volume migration failed for " + vol, Volume.class, vol.getId()); + throw new CloudRuntimeException("Migration of volume " + vol + " to storage pool " + assignedPool + " failed", e); } } } else {