You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by pr...@apache.org on 2012/11/16 11:00:31 UTC
[15/50] git commit: Handling of errors during AutoScaleConfig in
NetScaler.
Handling of errors during AutoScaleConfig in NetScaler.
Project: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/commit/eec892df
Tree: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/tree/eec892df
Diff: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/diff/eec892df
Branch: refs/heads/master
Commit: eec892dfbc8b5db98c828f9d2850c591b2a262ec
Parents: d215589
Author: Vijay venkatachalam <vi...@citrix.com>
Authored: Thu Sep 20 14:15:40 2012 +0530
Committer: Vijay Venkatachalam <vi...@citrix.com>
Committed: Fri Nov 16 10:56:57 2012 +0530
----------------------------------------------------------------------
.../cloud/network/resource/NetscalerResource.java | 796 ++++++++-------
1 files changed, 420 insertions(+), 376 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/eec892df/plugins/network-elements/netscaler/src/com/cloud/network/resource/NetscalerResource.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/netscaler/src/com/cloud/network/resource/NetscalerResource.java b/plugins/network-elements/netscaler/src/com/cloud/network/resource/NetscalerResource.java
index cadf391..ee6af45 100644
--- a/plugins/network-elements/netscaler/src/com/cloud/network/resource/NetscalerResource.java
+++ b/plugins/network-elements/netscaler/src/com/cloud/network/resource/NetscalerResource.java
@@ -30,8 +30,15 @@ import com.citrix.netscaler.nitro.exception.nitro_exception;
import com.citrix.netscaler.nitro.resource.base.base_response;
import com.citrix.netscaler.nitro.resource.config.autoscale.autoscaleprofile;
import com.citrix.netscaler.nitro.resource.config.basic.server_service_binding;
+import com.citrix.netscaler.nitro.resource.config.basic.servicegroup;
+import com.citrix.netscaler.nitro.resource.config.lb.lbmetrictable;
+import com.citrix.netscaler.nitro.resource.config.lb.lbmetrictable_metric_binding;
+import com.citrix.netscaler.nitro.resource.config.lb.lbmonitor;
+import com.citrix.netscaler.nitro.resource.config.lb.lbmonitor_lbmetrictable_binding;
+import com.citrix.netscaler.nitro.resource.config.lb.lbmonitor_servicegroup_binding;
import com.citrix.netscaler.nitro.resource.config.lb.lbvserver;
import com.citrix.netscaler.nitro.resource.config.lb.lbvserver_service_binding;
+import com.citrix.netscaler.nitro.resource.config.lb.lbvserver_servicegroup_binding;
import com.citrix.netscaler.nitro.resource.config.network.Interface;
import com.citrix.netscaler.nitro.resource.config.network.inat;
import com.citrix.netscaler.nitro.resource.config.network.vlan;
@@ -40,6 +47,7 @@ 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.autoscale.*;
import com.citrix.netscaler.nitro.resource.stat.lb.lbvserver_stats;
import com.citrix.netscaler.nitro.service.nitro_service;
import com.citrix.netscaler.nitro.util.filtervalue;
@@ -1247,6 +1255,36 @@ public class NetscalerResource implements ServerResource {
}
}
+ private boolean isServiceGroupBoundToVirtualServer(String nsVirtualServerName, String serviceGroupName) throws ExecutionException {
+
+ lbvserver_servicegroup_binding vserver_servicegroup_binding = new lbvserver_servicegroup_binding();
+
+ try {
+ lbvserver_servicegroup_binding[] result = vserver_servicegroup_binding.get_filtered(_netscalerService, nsVirtualServerName, "servicegroupname:" + serviceGroupName);
+ if(result != null && result.length > 0){
+ return true;
+ }
+ } catch (Exception e) {
+ throw new ExecutionException("Failed to verify lb vserver " + nsVirtualServerName + "and servicegrop " + serviceGroupName + " binding exists due to " + e.getMessage());
+ }
+ return false;
+
+ }
+
+ private boolean nsServiceGroupExisits(String lbVServerName ) throws ExecutionException {
+ try {
+ return servicegroup.get(_netscalerService, lbVServerName) != null;
+ } catch (nitro_exception e) {
+ if (e.getErrorCode() == NitroError.NS_RESOURCE_NOT_EXISTS) {
+ return false; // service group does not exist
+ } else {
+ throw new ExecutionException(e.getMessage());
+ }
+ } catch (Exception e) {
+ throw new ExecutionException(e.getMessage());
+ }
+ }
+
private void deleteServersInGuestVlan(long vlanTag, String vlanSelfIp, String vlanNetmask) throws ExecutionException {
try {
com.citrix.netscaler.nitro.resource.config.basic.server[] serverList = com.citrix.netscaler.nitro.resource.config.basic.server.get(_netscalerService);
@@ -1430,7 +1468,7 @@ public class NetscalerResource implements ServerResource {
return autoScalePolicyTO.getAction().equals("scaledown");
}
- private void removeAutoScalePolicy(String timerName, String policyName) throws Exception {
+ 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();
@@ -1440,8 +1478,8 @@ public class NetscalerResource implements ServerResource {
timer_policy_binding.set_global("DEFAULT");
timer_policy_binding.delete(_netscalerService, timer_policy_binding);
} catch (Exception e) {
- // Ignore Exception
- throw e;
+ // Ignore Exception on cleanup
+ if(!isCleanUp) throw e;
}
// Removing Timer policy
@@ -1451,8 +1489,8 @@ public class NetscalerResource implements ServerResource {
timerPolicy.set_name(policyName);
timerPolicy.delete(_netscalerService, timerPolicy);
} catch (Exception e) {
- // Ignore Exception
- throw e;
+ // Ignore Exception on cleanup
+ if(!isCleanUp) throw e;
}
}
@@ -1465,42 +1503,23 @@ public class NetscalerResource implements ServerResource {
String nsVirtualServerName = generateNSVirtualServerName(srcIp, srcPort);
String serviceGroupName = generateAutoScaleServiceGroupName(srcIp, srcPort);
- disableAutoScaleConfig(loadBalancerTO);
+ disableAutoScaleConfig(loadBalancerTO, false);
- // UnBind autoscale service group
- // unbind lb vserver lb lb_autoscaleGroup
- com.citrix.netscaler.nitro.resource.config.lb.lbvserver_servicegroup_binding vserver_servicegroup_binding = new com.citrix.netscaler.nitro.resource.config.lb.lbvserver_servicegroup_binding();
- try {
+ if(isServiceGroupBoundToVirtualServer(nsVirtualServerName, serviceGroupName)) {
+ // UnBind autoscale service group
+ // unbind lb vserver lb lb_autoscaleGroup
+ lbvserver_servicegroup_binding vserver_servicegroup_binding = new lbvserver_servicegroup_binding();
vserver_servicegroup_binding.set_name(nsVirtualServerName);
vserver_servicegroup_binding.set_servicegroupname(serviceGroupName);
vserver_servicegroup_binding.delete(_netscalerService, vserver_servicegroup_binding);
- } catch (Exception e) {
- // Ignore Exception
- throw e;
}
- // Remove autoscale service group
- com.citrix.netscaler.nitro.resource.config.basic.servicegroup serviceGroup = new com.citrix.netscaler.nitro.resource.config.basic.servicegroup();
- try {
+ if(nsServiceGroupExisits(serviceGroupName)) {
+ // Remove autoscale service group
+ com.citrix.netscaler.nitro.resource.config.basic.servicegroup serviceGroup = new com.citrix.netscaler.nitro.resource.config.basic.servicegroup();
serviceGroup.set_servicegroupname(serviceGroupName);
serviceGroup.delete(_netscalerService, serviceGroup);
- } catch (Exception e) {
- // Ignore Exception
- throw e;
- }
-
- // // Set min and max autoscale members to zero
- // com.citrix.netscaler.nitro.resource.config.lb.lbvserver lbvserver = new
- // com.citrix.netscaler.nitro.resource.config.lb.lbvserver();
- // try {
- // lbvserver.set_name(nsVirtualServerName);
- // lbvserver.set_minautoscalemembers(0);
- // lbvserver.set_maxautoscalemembers(0);
- // lbvserver.update(_netscalerService, lbvserver);
- // } catch (Exception e) {
- // // Ignore Exception
- // throw e;
- // }
+ }
removeLBVirtualServer(nsVirtualServerName);
@@ -1508,7 +1527,7 @@ public class NetscalerResource implements ServerResource {
}
@SuppressWarnings("static-access")
- private synchronized boolean disableAutoScaleConfig(LoadBalancerTO loadBalancerTO) throws Exception {
+ private synchronized boolean disableAutoScaleConfig(LoadBalancerTO loadBalancerTO, boolean isCleanUp) throws Exception {
String srcIp = loadBalancerTO.getSrcIp();
int srcPort = loadBalancerTO.getSrcPort();
@@ -1522,108 +1541,119 @@ public class NetscalerResource implements ServerResource {
String serviceGroupName = generateAutoScaleServiceGroupName(srcIp, srcPort);
AutoScaleVmGroupTO vmGroupTO = loadBalancerTO.getAutoScaleVmGroupTO();
List<AutoScalePolicyTO> policies = vmGroupTO.getPolicies();
-
- /* Delete min/max member policies */
String minMemberPolicyName = generateAutoScaleMinPolicyName(srcIp, srcPort);
+ String maxMemberPolicyName = generateAutoScaleMaxPolicyName(srcIp, srcPort);
- removeAutoScalePolicy(timerName, minMemberPolicyName);
+ try {
- String maxMemberPolicyName = generateAutoScaleMaxPolicyName(srcIp, srcPort);
- removeAutoScalePolicy(timerName, maxMemberPolicyName);
-
- boolean isSnmp = false;
- /* Create Counters */
- for (AutoScalePolicyTO autoScalePolicyTO : policies) {
- List<ConditionTO> conditions = autoScalePolicyTO.getConditions();
- for (ConditionTO conditionTO : conditions) {
- CounterTO counterTO = conditionTO.getCounter();
- if(counterTO.getSource().equals("snmp")) {
- isSnmp = true;
- break;
- }
- }
- String policyId = Long.toString(autoScalePolicyTO.getId());
- String policyName = generateAutoScalePolicyName(srcIp, srcPort,policyId);
+ /* Delete min/max member policies */
- // Removing Timer policy
- removeAutoScalePolicy(timerName, policyName);
- }
+ removeAutoScalePolicy(timerName, minMemberPolicyName, isCleanUp);
- /* Delete AutoScale Config */
- // Delete AutoScale ScaleDown action
- com.citrix.netscaler.nitro.resource.config.autoscale.autoscaleaction scaleDownAction = new com.citrix.netscaler.nitro.resource.config.autoscale.autoscaleaction();
- try {
- scaleDownAction.set_name(scaleDownActionName);
- scaleDownAction.delete(_netscalerService, scaleDownAction);
- } catch (Exception e) {
- // Ignore Exception
- throw e;
- }
+ removeAutoScalePolicy(timerName, maxMemberPolicyName, isCleanUp);
- // Delete AutoScale ScaleUp action
- com.citrix.netscaler.nitro.resource.config.autoscale.autoscaleaction scaleUpAction = new com.citrix.netscaler.nitro.resource.config.autoscale.autoscaleaction();
- try {
- scaleUpAction.set_name(scaleUpActionName);
- scaleUpAction.delete(_netscalerService, scaleUpAction);
- } catch (Exception e) {
- // Ignore Exception
- throw e;
- }
+ boolean isSnmp = false;
+ /* Create Counters */
+ for (AutoScalePolicyTO autoScalePolicyTO : policies) {
+ List<ConditionTO> conditions = autoScalePolicyTO.getConditions();
+ for (ConditionTO conditionTO : conditions) {
+ CounterTO counterTO = conditionTO.getCounter();
+ if(counterTO.getSource().equals("snmp")) {
+ isSnmp = true;
+ break;
+ }
+ }
+ String policyId = Long.toString(autoScalePolicyTO.getId());
+ String policyName = generateAutoScalePolicyName(srcIp, srcPort,policyId);
- // Delete Timer
- com.citrix.netscaler.nitro.resource.config.timer.timertrigger timer = new com.citrix.netscaler.nitro.resource.config.timer.timertrigger();
- try {
- timer.set_name(timerName);
- timer.delete(_netscalerService, timer);
- } catch (Exception e) {
- // Ignore Exception
- throw e;
- }
+ // Removing Timer policy
+ removeAutoScalePolicy(timerName, policyName, isCleanUp);
+ }
- // Delete AutoScale Profile
- com.citrix.netscaler.nitro.resource.config.autoscale.autoscaleprofile autoscaleProfile = new com.citrix.netscaler.nitro.resource.config.autoscale.autoscaleprofile();
- try {
- autoscaleProfile.set_name(profileName);
- autoscaleProfile.delete(_netscalerService, autoscaleProfile);
- } catch (Exception e) {
- // Ignore Exception
- throw e;
- }
+ /* Delete AutoScale Config */
+ // Delete AutoScale ScaleDown action
+ com.citrix.netscaler.nitro.resource.config.autoscale.autoscaleaction scaleDownAction = new com.citrix.netscaler.nitro.resource.config.autoscale.autoscaleaction();
+ try {
+ scaleDownAction.set_name(scaleDownActionName);
+ scaleDownAction.delete(_netscalerService, scaleDownAction);
+ } catch (Exception e) {
+ // Ignore Exception on cleanup
+ if(!isCleanUp) throw e;
+ }
- if(isSnmp) {
- com.citrix.netscaler.nitro.resource.config.lb.lbmonitor_servicegroup_binding monitor_servicegroup_binding = new com.citrix.netscaler.nitro.resource.config.lb.lbmonitor_servicegroup_binding();
+ // Delete AutoScale ScaleUp action
+ com.citrix.netscaler.nitro.resource.config.autoscale.autoscaleaction scaleUpAction = new com.citrix.netscaler.nitro.resource.config.autoscale.autoscaleaction();
try {
- monitor_servicegroup_binding.set_monitorname(monitorName);
- monitor_servicegroup_binding.set_servicegroupname(serviceGroupName);
- monitor_servicegroup_binding.delete(_netscalerService, monitor_servicegroup_binding);
+ scaleUpAction.set_name(scaleUpActionName);
+ scaleUpAction.delete(_netscalerService, scaleUpAction);
} catch (Exception e) {
- // Ignore Exception
- throw e;
+ // Ignore Exception on cleanup
+ if(!isCleanUp) throw e;
}
- // Delete Monitor
- // rm lb monitor lb_metric_table_mon
- com.citrix.netscaler.nitro.resource.config.lb.lbmonitor monitor = new com.citrix.netscaler.nitro.resource.config.lb.lbmonitor();
+ // Delete Timer
+ com.citrix.netscaler.nitro.resource.config.timer.timertrigger timer = new com.citrix.netscaler.nitro.resource.config.timer.timertrigger();
try {
- monitor.set_monitorname(monitorName);
- monitor.set_type("LOAD");
- monitor.delete(_netscalerService, monitor);
+ timer.set_name(timerName);
+ timer.delete(_netscalerService, timer);
} catch (Exception e) {
- // Ignore Exception
- throw e;
+ // Ignore Exception on cleanup
+ if(!isCleanUp) throw e;
}
- // Delete Metric Table
- com.citrix.netscaler.nitro.resource.config.lb.lbmetrictable metricTable = new com.citrix.netscaler.nitro.resource.config.lb.lbmetrictable();
+ // Delete AutoScale Profile
+ com.citrix.netscaler.nitro.resource.config.autoscale.autoscaleprofile autoscaleProfile = new com.citrix.netscaler.nitro.resource.config.autoscale.autoscaleprofile();
try {
- metricTable.set_metrictable(mtName);
- metricTable.delete(_netscalerService, metricTable);
+ autoscaleProfile.set_name(profileName);
+ autoscaleProfile.delete(_netscalerService, autoscaleProfile);
} catch (Exception e) {
- // Ignore Exception
- throw e;
+ // Ignore Exception on cleanup
+ if(!isCleanUp) throw e;
}
- }
+ if(isSnmp) {
+ com.citrix.netscaler.nitro.resource.config.lb.lbmonitor_servicegroup_binding monitor_servicegroup_binding = new com.citrix.netscaler.nitro.resource.config.lb.lbmonitor_servicegroup_binding();
+ try {
+ monitor_servicegroup_binding.set_monitorname(monitorName);
+ monitor_servicegroup_binding.set_servicegroupname(serviceGroupName);
+ monitor_servicegroup_binding.delete(_netscalerService, monitor_servicegroup_binding);
+ } catch (Exception e) {
+ // Ignore Exception on cleanup
+ if(!isCleanUp) throw e;
+ }
+
+ // Delete Monitor
+ // rm lb monitor lb_metric_table_mon
+ com.citrix.netscaler.nitro.resource.config.lb.lbmonitor monitor = new com.citrix.netscaler.nitro.resource.config.lb.lbmonitor();
+ try {
+ monitor.set_monitorname(monitorName);
+ monitor.set_type("LOAD");
+ monitor.delete(_netscalerService, monitor);
+ } catch (Exception e) {
+ // Ignore Exception on cleanup
+ if(!isCleanUp) throw e;
+ }
+
+ // Delete Metric Table
+ com.citrix.netscaler.nitro.resource.config.lb.lbmetrictable metricTable = new com.citrix.netscaler.nitro.resource.config.lb.lbmetrictable();
+ try {
+ metricTable.set_metrictable(mtName);
+ metricTable.delete(_netscalerService, metricTable);
+ } catch (Exception e) {
+ // Ignore Exception on cleanup
+ if(!isCleanUp) throw e;
+ }
+ }
+ } catch (Exception ex) {
+ if(!isCleanUp) {
+ // Normal course, exception has occurred
+ enableAutoScaleConfig(loadBalancerTO, true);
+ throw ex;
+ } else {
+ // Programming error
+ throw ex;
+ }
+ }
return true;
}
@@ -1637,46 +1667,48 @@ public class NetscalerResource implements ServerResource {
String lbAlgorithm = loadBalancerTO.getAlgorithm();
String nsVirtualServerName = generateNSVirtualServerName(srcIp, srcPort);
AutoScaleVmGroupTO vmGroupTO = loadBalancerTO.getAutoScaleVmGroupTO();
- addLBVirtualServer(nsVirtualServerName, srcIp, srcPort, lbAlgorithm, lbProtocol, loadBalancerTO.getStickinessPolicies(), vmGroupTO);
if (s_logger.isDebugEnabled()) {
s_logger.debug("Created load balancing virtual server " + nsVirtualServerName + " on the Netscaler device");
}
+ addLBVirtualServer(nsVirtualServerName, srcIp, srcPort, lbAlgorithm, lbProtocol, loadBalancerTO.getStickinessPolicies(), vmGroupTO);
String serviceGroupName = generateAutoScaleServiceGroupName(srcIp, srcPort);
- // add servicegroup lb_autoscaleGroup -autoscale POLICY -memberPort 80
- com.citrix.netscaler.nitro.resource.config.basic.servicegroup serviceGroup = new com.citrix.netscaler.nitro.resource.config.basic.servicegroup();
- int memberPort = vmGroupTO.getMemberPort();
- try {
- serviceGroup.set_servicegroupname(serviceGroupName);
- serviceGroup.set_servicetype(lbProtocol);
- serviceGroup.set_autoscale("POLICY"); // TODO: Values not displayed in API
- serviceGroup.set_memberport(memberPort);
- serviceGroup.add(_netscalerService, serviceGroup);
- } catch (Exception e) {
- // Ignore Exception
- throw e;
+ if(!nsServiceGroupExisits(serviceGroupName)) {
+ // add servicegroup lb_autoscaleGroup -autoscale POLICY -memberPort 80
+ int memberPort = vmGroupTO.getMemberPort();
+ try {
+ servicegroup serviceGroup = new servicegroup();
+ serviceGroup.set_servicegroupname(serviceGroupName);
+ serviceGroup.set_servicetype(lbProtocol);
+ serviceGroup.set_autoscale("POLICY");
+ serviceGroup.set_memberport(memberPort);
+ serviceGroup.add(_netscalerService, serviceGroup);
+ } catch (Exception e) {
+ throw e;
+ }
}
- // Bind autoscale service group
- // bind lb vserver lb lb_autoscaleGroup
- com.citrix.netscaler.nitro.resource.config.lb.lbvserver_servicegroup_binding vserver_servicegroup_binding = new com.citrix.netscaler.nitro.resource.config.lb.lbvserver_servicegroup_binding();
+ if(!isServiceGroupBoundToVirtualServer(nsVirtualServerName, serviceGroupName)) {
+ // Bind autoscale service group
+ // bind lb vserver lb lb_autoscaleGroup
+ lbvserver_servicegroup_binding vserver_servicegroup_binding = new lbvserver_servicegroup_binding();
- try {
- vserver_servicegroup_binding.set_name(nsVirtualServerName);
- vserver_servicegroup_binding.set_servicegroupname(serviceGroupName);
- vserver_servicegroup_binding.add(_netscalerService, vserver_servicegroup_binding);
- } catch (Exception e) {
- // Ignore Exception
- throw e;
+ try {
+ vserver_servicegroup_binding.set_name(nsVirtualServerName);
+ vserver_servicegroup_binding.set_servicegroupname(serviceGroupName);
+ vserver_servicegroup_binding.add(_netscalerService, vserver_servicegroup_binding);
+ } catch (Exception e) {
+ throw e;
+ }
}
// Create the autoscale config
- enableAutoScaleConfig(loadBalancerTO);
+ enableAutoScaleConfig(loadBalancerTO, false);
return true;
}
@SuppressWarnings("static-access")
- private synchronized boolean enableAutoScaleConfig(LoadBalancerTO loadBalancerTO) throws Exception {
+ private synchronized boolean enableAutoScaleConfig(LoadBalancerTO loadBalancerTO, boolean isCleanUp) throws Exception {
String srcIp = loadBalancerTO.getSrcIp();
int srcPort = loadBalancerTO.getSrcPort();
@@ -1696,278 +1728,288 @@ public class NetscalerResource implements ServerResource {
String snmpCommunity = profileTO.getSnmpCommunity();
long cur_prirotiy = 1;
+ try
+ {
+ // Set min and max autoscale members;
+ // add lb vserver lb http 10.102.31.100 80 -minAutoscaleMinMembers 3 -maxAutoscaleMembers 10
+ int minAutoScaleMembers = vmGroupTO.getMinMembers();
+ int maxAutoScaleMembers = vmGroupTO.getMaxMembers();
+ lbvserver vserver = new lbvserver();
+ try {
+ vserver.set_name(nsVirtualServerName);
+ vserver.set_minautoscalemembers(minAutoScaleMembers);
+ vserver.set_maxautoscalemembers(maxAutoScaleMembers);
+ vserver.update(_netscalerService, vserver);
+ } catch (Exception e) {
+ // Ignore Exception on cleanup
+ if(!isCleanUp) throw e;
+ }
- // Set min and max autoscale members;
- // add lb vserver lb http 10.102.31.100 80 -minAutoscaleMinMembers 3 -maxAutoscaleMembers 10
- int minAutoScaleMembers = vmGroupTO.getMinMembers();
- int maxAutoScaleMembers = vmGroupTO.getMaxMembers();
- com.citrix.netscaler.nitro.resource.config.lb.lbvserver lbvserver = new com.citrix.netscaler.nitro.resource.config.lb.lbvserver();
- try {
- lbvserver.set_name(nsVirtualServerName);
- lbvserver.set_minautoscalemembers(minAutoScaleMembers);
- lbvserver.set_maxautoscalemembers(maxAutoScaleMembers);
- lbvserver.update(_netscalerService, lbvserver);
- } catch (Exception e) {
- // Ignore Exception
- throw e;
- }
-
- /* AutoScale Config */
- // Add AutoScale Profile
- // add autoscale profile lb_asprofile CLOUDSTACK -url -http:// 10.102.31.34:8080/client/api- -apiKey abcdef
- // -sharedSecret xyzabc
- String apiKey = profileTO.getAutoScaleUserApiKey();
- String secretKey = profileTO.getAutoScaleUserSecretKey();
- String url = profileTO.getCloudStackApiUrl();
-
- com.citrix.netscaler.nitro.resource.config.autoscale.autoscaleprofile autoscaleProfile = new com.citrix.netscaler.nitro.resource.config.autoscale.autoscaleprofile();
- try {
- autoscaleProfile.set_name(profileName);
- autoscaleProfile.set_type("CLOUDSTACK");
- autoscaleProfile.set_apikey(apiKey);
- autoscaleProfile.set_sharedsecret(secretKey);
- autoscaleProfile.set_url(url);
- autoscaleProfile.add(_netscalerService, autoscaleProfile);
- } catch (Exception e) {
- // Ignore Exception
-
- throw e;
- }
+ /* AutoScale Config */
+ // Add AutoScale Profile
+ // add autoscale profile lb_asprofile CLOUDSTACK -url -http:// 10.102.31.34:8080/client/api- -apiKey abcdef
+ // -sharedSecret xyzabc
+ String apiKey = profileTO.getAutoScaleUserApiKey();
+ String secretKey = profileTO.getAutoScaleUserSecretKey();
+ String url = profileTO.getCloudStackApiUrl();
- // Add Timer
- com.citrix.netscaler.nitro.resource.config.timer.timertrigger timer = new com.citrix.netscaler.nitro.resource.config.timer.timertrigger();
- try {
- timer.set_name(timerName);
- timer.set_interval(interval);
- timer.add(_netscalerService, timer);
- } catch (Exception e) {
- // Ignore Exception
- throw e;
- }
+ com.citrix.netscaler.nitro.resource.config.autoscale.autoscaleprofile autoscaleProfile = new com.citrix.netscaler.nitro.resource.config.autoscale.autoscaleprofile();
+ try {
+ autoscaleProfile.set_name(profileName);
+ autoscaleProfile.set_type("CLOUDSTACK");
+ autoscaleProfile.set_apikey(apiKey);
+ autoscaleProfile.set_sharedsecret(secretKey);
+ autoscaleProfile.set_url(url);
+ autoscaleProfile.add(_netscalerService, autoscaleProfile);
+ } catch (Exception e) {
+ // Ignore Exception on cleanup
+ if(!isCleanUp) throw e;
+ }
- // AutoScale Actions
- Integer scaleUpQuietTime = null;
- Integer scaleDownQuietTime = null;
- for (AutoScalePolicyTO autoScalePolicyTO : policies) {
- if(scaleUpQuietTime == null) {
- if(isScaleUpPolicy(autoScalePolicyTO)) {
- scaleUpQuietTime = autoScalePolicyTO.getQuietTime();
- if(scaleDownQuietTime != null) {
- break;
+ // Add Timer
+ com.citrix.netscaler.nitro.resource.config.timer.timertrigger timer = new com.citrix.netscaler.nitro.resource.config.timer.timertrigger();
+ try {
+ timer.set_name(timerName);
+ timer.set_interval(interval);
+ timer.add(_netscalerService, timer);
+ } catch (Exception e) {
+ // Ignore Exception on cleanup
+ if(!isCleanUp) throw e;
+ }
+
+ // AutoScale Actions
+ Integer scaleUpQuietTime = null;
+ Integer scaleDownQuietTime = null;
+ for (AutoScalePolicyTO autoScalePolicyTO : policies) {
+ if(scaleUpQuietTime == null) {
+ if(isScaleUpPolicy(autoScalePolicyTO)) {
+ scaleUpQuietTime = autoScalePolicyTO.getQuietTime();
+ if(scaleDownQuietTime != null) {
+ break;
+ }
}
}
- }
- if(scaleDownQuietTime == null) {
- if(isScaleDownPolicy(autoScalePolicyTO)) {
- scaleDownQuietTime = autoScalePolicyTO.getQuietTime();
- if(scaleUpQuietTime != null) {
- break;
+ if(scaleDownQuietTime == null) {
+ if(isScaleDownPolicy(autoScalePolicyTO)) {
+ scaleDownQuietTime = autoScalePolicyTO.getQuietTime();
+ if(scaleUpQuietTime != null) {
+ break;
+ }
}
}
}
- }
- // Add AutoScale ScaleUp action
- // add autoscale action lb_scaleUpAction provision -vserver lb -profilename lb_asprofile -params
- // -lbruleid=1234&command=deployvm&zoneid=10&templateid=5&serviceofferingid=3- -quiettime 300
- com.citrix.netscaler.nitro.resource.config.autoscale.autoscaleaction scaleUpAction = new com.citrix.netscaler.nitro.resource.config.autoscale.autoscaleaction();
- try {
- scaleUpAction.set_name(scaleUpActionName);
- scaleUpAction.set_type("SCALE_UP"); // TODO: will this be called provision?
- scaleUpAction.set_vserver(nsVirtualServerName); // Actions Vserver, the one that is autoscaled, with CS
- // now both are same. Not exposed in API.
- scaleUpAction.set_profilename(profileName);
- scaleUpAction.set_quiettime(scaleUpQuietTime);
- String scaleUpParameters = "command=deployVirtualMachine" + "&" +
- ApiConstants.ZONE_ID + "=" + profileTO.getZoneId()+ "&" +
- ApiConstants.SERVICE_OFFERING_ID + "=" + profileTO.getServiceOfferingId()+ "&" +
- ApiConstants.TEMPLATE_ID + "=" + profileTO.getTemplateId()+ "&" +
- ((profileTO.getOtherDeployParams() == null)? "" : (profileTO.getOtherDeployParams() + "&")) +
- "lbruleid=" + loadBalancerTO.getId();
- scaleUpAction.set_parameters(scaleUpParameters);
- scaleUpAction.add(_netscalerService, scaleUpAction);
- } catch (Exception e) {
- // Ignore Exception
- throw e;
- }
+ // Add AutoScale ScaleUp action
+ // add autoscale action lb_scaleUpAction provision -vserver lb -profilename lb_asprofile -params
+ // -lbruleid=1234&command=deployvm&zoneid=10&templateid=5&serviceofferingid=3- -quiettime 300
+ com.citrix.netscaler.nitro.resource.config.autoscale.autoscaleaction scaleUpAction = new com.citrix.netscaler.nitro.resource.config.autoscale.autoscaleaction();
+ try {
+ scaleUpAction.set_name(scaleUpActionName);
+ scaleUpAction.set_type("SCALE_UP"); // TODO: will this be called provision?
+ scaleUpAction.set_vserver(nsVirtualServerName); // Actions Vserver, the one that is autoscaled, with CS
+ // now both are same. Not exposed in API.
+ scaleUpAction.set_profilename(profileName);
+ scaleUpAction.set_quiettime(scaleUpQuietTime);
+ String scaleUpParameters = "command=deployVirtualMachine" + "&" +
+ ApiConstants.ZONE_ID + "=" + profileTO.getZoneId()+ "&" +
+ ApiConstants.SERVICE_OFFERING_ID + "=" + profileTO.getServiceOfferingId()+ "&" +
+ ApiConstants.TEMPLATE_ID + "=" + profileTO.getTemplateId()+ "&" +
+ ((profileTO.getOtherDeployParams() == null)? "" : (profileTO.getOtherDeployParams() + "&")) +
+ "lbruleid=" + loadBalancerTO.getId();
+ scaleUpAction.set_parameters(scaleUpParameters);
+ scaleUpAction.add(_netscalerService, scaleUpAction);
+ } catch (Exception e) {
+ // Ignore Exception on cleanup
+ if(!isCleanUp) throw e;
+ }
- com.citrix.netscaler.nitro.resource.config.autoscale.autoscaleaction scaleDownAction = new com.citrix.netscaler.nitro.resource.config.autoscale.autoscaleaction();
- Integer destroyVmGracePeriod = profileTO.getDestroyVmGraceperiod();
- try {
- scaleDownAction.set_name(scaleDownActionName);
- scaleDownAction.set_type("SCALE_DOWN"); // TODO: will this be called de-provision?
- scaleDownAction.set_vserver(nsVirtualServerName); // TODO: no global option as of now through Nitro.
- // Testing cannot be done.
- scaleDownAction.set_profilename(profileName);
- scaleDownAction.set_quiettime(scaleDownQuietTime);
- String scaleDownParameters = "command=destroyVirtualMachine" + "&" +
- "lbruleid=" + loadBalancerTO.getId();
- scaleDownAction.set_parameters(scaleDownParameters);
- scaleDownAction.set_vmdestroygraceperiod(destroyVmGracePeriod);
- scaleDownAction.add(_netscalerService, scaleDownAction);
- } catch (Exception e) {
- // Ignore Exception
- throw e;
- }
+ com.citrix.netscaler.nitro.resource.config.autoscale.autoscaleaction scaleDownAction = new com.citrix.netscaler.nitro.resource.config.autoscale.autoscaleaction();
+ Integer destroyVmGracePeriod = profileTO.getDestroyVmGraceperiod();
+ try {
+ scaleDownAction.set_name(scaleDownActionName);
+ scaleDownAction.set_type("SCALE_DOWN"); // TODO: will this be called de-provision?
+ scaleDownAction.set_vserver(nsVirtualServerName); // TODO: no global option as of now through Nitro.
+ // Testing cannot be done.
+ scaleDownAction.set_profilename(profileName);
+ scaleDownAction.set_quiettime(scaleDownQuietTime);
+ String scaleDownParameters = "command=destroyVirtualMachine" + "&" +
+ "lbruleid=" + loadBalancerTO.getId();
+ scaleDownAction.set_parameters(scaleDownParameters);
+ scaleDownAction.set_vmdestroygraceperiod(destroyVmGracePeriod);
+ scaleDownAction.add(_netscalerService, scaleDownAction);
+ } catch (Exception e) {
+ // Ignore Exception on cleanup
+ if(!isCleanUp) throw e;
+ }
+
+ /* Create min member policy */
+ String minMemberPolicyName = generateAutoScaleMinPolicyName(srcIp, srcPort);
+ String minMemberPolicyExp = "SYS.VSERVER(\"" + nsVirtualServerName + "\").ACTIVESERVICES.LT(SYS.VSERVER(\"" + nsVirtualServerName + "\").MINAUTOSCALEMEMBERS)";
+ addAutoScalePolicy(timerName, minMemberPolicyName, cur_prirotiy++, minMemberPolicyExp, scaleUpActionName,
+ interval, interval, isCleanUp);
+
+ /* Create max member policy */
+ String maxMemberPolicyName = generateAutoScaleMaxPolicyName(srcIp, srcPort);
+ String maxMemberPolicyExp = "SYS.VSERVER(\"" + nsVirtualServerName + "\").ACTIVESERVICES.GT(SYS.VSERVER(\"" + nsVirtualServerName + "\").MAXAUTOSCALEMEMBERS)";
+ addAutoScalePolicy(timerName, maxMemberPolicyName, cur_prirotiy++, maxMemberPolicyExp, scaleDownActionName,
+ interval, interval, isCleanUp);
+
+ /* Create Counters */
+ HashMap<String, Integer> snmpMetrics = new HashMap<String, Integer>();
+ for (AutoScalePolicyTO autoScalePolicyTO : policies) {
+ List<ConditionTO> conditions = autoScalePolicyTO.getConditions();
+ String policyExpression = "";
+ int snmpCounterNumber = 0;
+ for (ConditionTO conditionTO : conditions) {
+ CounterTO counterTO = conditionTO.getCounter();
+ String counterName = counterTO.getName();
+ String operator = conditionTO.getRelationalOperator();
+ long threshold = conditionTO.getThreshold();
+
+ StringBuilder conditionExpression = new StringBuilder();
+ Formatter formatter = new Formatter(conditionExpression, Locale.US);
+
+ if(counterTO.getSource().equals("snmp"))
+ {
+ counterName = generateSnmpMetricName(counterName);
+ if(snmpMetrics.size() == 0) {
+ // Create Metric Table
+ //add lb metricTable lb_metric_table
+ lbmetrictable metricTable = new lbmetrictable();
+ try {
+ metricTable.set_metrictable(mtName);
+ metricTable.add(_netscalerService, metricTable);
+ } catch (Exception e) {
+ // Ignore Exception on cleanup
+ if(!isCleanUp) throw e;
+ }
- /* Create min member policy */
- String minMemberPolicyName = generateAutoScaleMinPolicyName(srcIp, srcPort);
- String minMemberPolicyExp = "SYS.VSERVER(\"" + nsVirtualServerName + "\").ACTIVESERVICES.LT(SYS.VSERVER(\"" + nsVirtualServerName + "\").MINAUTOSCALEMEMBERS)";
- addAutoScalePolicy(timerName, minMemberPolicyName, cur_prirotiy++, minMemberPolicyExp, scaleUpActionName,
- interval, interval);
+ // Create Monitor
+ // add lb monitor lb_metric_table_mon LOAD -destPort 161 -snmpCommunity public -metricTable
+ // lb_metric_table -interval <policy_interval == 80% >
+ lbmonitor monitor = new lbmonitor();
+ try {
+ monitor.set_monitorname(monitorName);
+ monitor.set_type("LOAD");
+ monitor.set_destport(snmpPort);
+ monitor.set_snmpcommunity(snmpCommunity);
+ monitor.set_metrictable(mtName);
+ monitor.set_interval((int)(interval * 0.8));
+ monitor.add(_netscalerService, monitor);
+ } catch (Exception e) {
+ // Ignore Exception on cleanup
+ if(!isCleanUp) throw e;
+ }
- /* Create max member policy */
- String maxMemberPolicyName = generateAutoScaleMaxPolicyName(srcIp, srcPort);
- String maxMemberPolicyExp = "SYS.VSERVER(\"" + nsVirtualServerName + "\").ACTIVESERVICES.GT(SYS.VSERVER(\"" + nsVirtualServerName + "\").MAXAUTOSCALEMEMBERS)";
- addAutoScalePolicy(timerName, maxMemberPolicyName, cur_prirotiy++, maxMemberPolicyExp, scaleDownActionName,
- interval, interval);
-
- /* Create Counters */
- HashMap<String, Integer> snmpMetrics = new HashMap<String, Integer>();
- for (AutoScalePolicyTO autoScalePolicyTO : policies) {
- List<ConditionTO> conditions = autoScalePolicyTO.getConditions();
- String policyExpression = "";
- int snmpCounterNumber = 0;
- for (ConditionTO conditionTO : conditions) {
- CounterTO counterTO = conditionTO.getCounter();
- String counterName = counterTO.getName();
- String operator = conditionTO.getRelationalOperator();
- long threshold = conditionTO.getThreshold();
-
- StringBuilder conditionExpression = new StringBuilder();
- Formatter formatter = new Formatter(conditionExpression, Locale.US);
-
- if(counterTO.getSource().equals("snmp"))
- {
- counterName = generateSnmpMetricName(counterName);
- if(snmpMetrics.size() == 0) {
- // Create Metric Table
- //add lb metricTable lb_metric_table
- com.citrix.netscaler.nitro.resource.config.lb.lbmetrictable metricTable = new com.citrix.netscaler.nitro.resource.config.lb.lbmetrictable();
- try {
- metricTable.set_metrictable(mtName);
- metricTable.add(_netscalerService, metricTable);
- } catch (Exception e) {
- // Ignore Exception
- throw e;
+ // Bind servicegroup to monitor. TODO: This will change later to bind Monitor to ServiceGroup.
+ // bind lb monitor lb_metric_table_mon lb_autoscaleGroup -passive
+ lbmonitor_servicegroup_binding monitor_servicegroup_binding = new lbmonitor_servicegroup_binding();
+ try {
+ monitor_servicegroup_binding.set_monitorname(monitorName);
+ monitor_servicegroup_binding.set_servicegroupname(serviceGroupName);
+ monitor_servicegroup_binding.set_passive(true); // Mark the monitor to do only collect
+ // metrics, basically use it for autoscaling purpose only.
+ monitor_servicegroup_binding.add(_netscalerService, monitor_servicegroup_binding);
+ } catch (Exception e) {
+ // Ignore Exception on cleanup
+ if(!isCleanUp) throw e;
+ }
}
- // Create Monitor
- // add lb monitor lb_metric_table_mon LOAD -destPort 161 -snmpCommunity public -metricTable
- // lb_metric_table -interval <policy_interval == 80% >
- com.citrix.netscaler.nitro.resource.config.lb.lbmonitor monitor = new com.citrix.netscaler.nitro.resource.config.lb.lbmonitor();
- try {
- monitor.set_monitorname(monitorName);
- monitor.set_type("LOAD");
- monitor.set_destport(snmpPort);
- monitor.set_snmpcommunity(snmpCommunity);
- monitor.set_metrictable(mtName);
- monitor.set_interval((int)(interval * 0.8));
- monitor.add(_netscalerService, monitor);
- } catch (Exception e) {
- // Ignore Exception
- throw e;
+ boolean newMetric = !snmpMetrics.containsKey(counterName);
+ if(newMetric) {
+ snmpMetrics.put(counterName, snmpCounterNumber++);
}
- // Bind servicegroup to monitor. TODO: This will change later to bind Monitor to ServiceGroup.
- // bind lb monitor lb_metric_table_mon lb_autoscaleGroup -passive
- com.citrix.netscaler.nitro.resource.config.lb.lbmonitor_servicegroup_binding monitor_servicegroup_binding = new com.citrix.netscaler.nitro.resource.config.lb.lbmonitor_servicegroup_binding();
- try {
- monitor_servicegroup_binding.set_monitorname(monitorName);
- monitor_servicegroup_binding.set_servicegroupname(serviceGroupName);
- monitor_servicegroup_binding.set_passive(true); // Mark the monitor to do only collect
- // metrics, basically use it for autoscaling purpose only.
- monitor_servicegroup_binding.add(_netscalerService, monitor_servicegroup_binding);
- } catch (Exception e) {
- // Ignore Exception
- throw e;
- }
- }
+ if(newMetric)
+ {
+ // bind lb metricTable lb_metric_table mem 1.3.6.1.4.1.2021.11.9.0
+ String counterOid = counterTO.getValue();
+ lbmetrictable_metric_binding metrictable_metric_binding = new lbmetrictable_metric_binding();
+ try {
+ metrictable_metric_binding.set_metrictable(mtName);
+ metrictable_metric_binding.set_metric(counterName);
+ metrictable_metric_binding.set_Snmpoid(counterOid);
+ metrictable_metric_binding.add(_netscalerService, metrictable_metric_binding);
+ } catch (Exception e) {
+ // Ignore Exception on cleanup
+ if(!isCleanUp) throw e;
+ }
- boolean newMetric = !snmpMetrics.containsKey(counterName);
- if(newMetric) {
- snmpMetrics.put(counterName, snmpCounterNumber++);
+ // bind lb monitor lb_metric_table_mon -metric cpu -metricThreshold 1
+ lbmonitor_lbmetrictable_binding monitor_metrictable_binding = new lbmonitor_lbmetrictable_binding();
+ try {
+ monitor_metrictable_binding.set_monitorname(monitorName);
+ monitor_metrictable_binding.set_metric(counterName);
+ monitor_metrictable_binding.set_metricthreshold(1); // 1 is a dummy threshold
+ monitor_metrictable_binding.add(_netscalerService, monitor_metrictable_binding);
+ } catch (Exception e) {
+ // Ignore Exception on cleanup
+ if(!isCleanUp) throw e;
+ }
+ }
+ // SYS.VSERVER("abcd").SNMP_TABLE(0).AVERAGE_VALUE.GT(80)
+ int counterIndex = snmpMetrics.get(counterName); // TODO: temporary fix. later on counter name will be added as a param to SNMP_TABLE.
+ formatter.format("SYS.VSERVER(\"%s\").SNMP_TABLE(%d).AVERAGE_VALUE.%s(%d)",nsVirtualServerName, counterIndex, operator, threshold);
}
-
- if(newMetric)
+ else if (counterTO.getSource().equals("netscaler"))
{
- // bind lb metricTable lb_metric_table mem 1.3.6.1.4.1.2021.11.9.0
- String counterOid = counterTO.getValue();
- com.citrix.netscaler.nitro.resource.config.lb.lbmetrictable_metric_binding metrictable_metric_binding = new com.citrix.netscaler.nitro.resource.config.lb.lbmetrictable_metric_binding();
- try {
- metrictable_metric_binding.set_metrictable(mtName);
- metrictable_metric_binding.set_metric(counterName);
- metrictable_metric_binding.set_Snmpoid(counterOid);
- metrictable_metric_binding.add(_netscalerService, metrictable_metric_binding);
- } catch (Exception e) {
- // Ignore Exception
- throw e;
- }
-
- // bind lb monitor lb_metric_table_mon -metric cpu -metricThreshold 1
- com.citrix.netscaler.nitro.resource.config.lb.lbmonitor_lbmetrictable_binding monitor_metrictable_binding = new com.citrix.netscaler.nitro.resource.config.lb.lbmonitor_lbmetrictable_binding();
- try {
- monitor_metrictable_binding.set_monitorname(monitorName);
- monitor_metrictable_binding.set_metric(counterName);
- monitor_metrictable_binding.set_metricthreshold(1); // 1 is a dummy threshold
- monitor_metrictable_binding.add(_netscalerService, monitor_metrictable_binding);
- } catch (Exception e) {
- // Ignore Exception
- throw e;
- }
+ //SYS.VSERVER("abcd").RESPTIME.GT(10)
+ formatter.format("SYS.VSERVER(\"%s\").%s.%s(%d)",nsVirtualServerName, counterTO.getValue(), operator, threshold);
}
- // SYS.VSERVER("abcd").SNMP_TABLE(0).AVERAGE_VALUE.GT(80)
- int counterIndex = snmpMetrics.get(counterName); // TODO: temporary fix. later on counter name will be added as a param to SNMP_TABLE.
- formatter.format("SYS.VSERVER(\"%s\").SNMP_TABLE(%d).AVERAGE_VALUE.%s(%d)",nsVirtualServerName, counterIndex, operator, threshold);
- }
- else if (counterTO.getSource().equals("netscaler"))
- {
- //SYS.VSERVER("abcd").RESPTIME.GT(10)
- formatter.format("SYS.VSERVER(\"%s\").%s.%s(%d)",nsVirtualServerName, counterTO.getValue(), operator, threshold);
+ if(policyExpression.length() != 0) {
+ policyExpression += " && ";
+ }
+ policyExpression += conditionExpression;
}
- if(policyExpression.length() != 0) {
- policyExpression += " && ";
+ policyExpression = "(" + policyExpression + ")";
+
+ String policyId = Long.toString(autoScalePolicyTO.getId());
+ String policyName = generateAutoScalePolicyName(srcIp, srcPort, policyId);
+ String action = null;
+ if(isScaleUpPolicy(autoScalePolicyTO)) {
+ action = scaleUpActionName;
+ String scaleUpCondition = "SYS.VSERVER(\"" + nsVirtualServerName + "\").ACTIVESERVICES.LT(SYS.VSERVER(\"" + nsVirtualServerName + "\").MAXAUTOSCALEMEMBERS)";
+ policyExpression = scaleUpCondition + " && " + policyExpression;
+ } else {
+ action = scaleDownActionName;
+ String scaleDownCondition = "SYS.VSERVER(\"" + nsVirtualServerName + "\").ACTIVESERVICES.GT(SYS.VSERVER(\"" + nsVirtualServerName + "\").MINAUTOSCALEMEMBERS)";
+ policyExpression = scaleDownCondition + " && " + policyExpression;
}
- policyExpression += conditionExpression;
+
+ addAutoScalePolicy(timerName, policyName, cur_prirotiy++, policyExpression, action,
+ autoScalePolicyTO.getDuration(), interval, isCleanUp);
+
}
- policyExpression = "(" + policyExpression + ")";
+ } catch (Exception ex) {
+ if(!isCleanUp) {
+ // Normal course, exception has occurred
+ disableAutoScaleConfig(loadBalancerTO, true);
+ throw ex;
- String policyId = Long.toString(autoScalePolicyTO.getId());
- String policyName = generateAutoScalePolicyName(srcIp, srcPort, policyId);
- String action = null;
- if(isScaleUpPolicy(autoScalePolicyTO)) {
- action = scaleUpActionName;
- String scaleUpCondition = "SYS.VSERVER(\"" + nsVirtualServerName + "\").ACTIVESERVICES.LT(SYS.VSERVER(\"" + nsVirtualServerName + "\").MAXAUTOSCALEMEMBERS)";
- policyExpression = scaleUpCondition + " && " + policyExpression;
} else {
- action = scaleDownActionName;
- String scaleDownCondition = "SYS.VSERVER(\"" + nsVirtualServerName + "\").ACTIVESERVICES.GT(SYS.VSERVER(\"" + nsVirtualServerName + "\").MINAUTOSCALEMEMBERS)";
- policyExpression = scaleDownCondition + " && " + policyExpression;
+ // Programming error. Exception should never be thrown afterall.
+ throw ex;
}
-
- addAutoScalePolicy(timerName, policyName, cur_prirotiy++, policyExpression, action,
- autoScalePolicyTO.getDuration(), interval);
-
}
return true;
}
-
private synchronized void addAutoScalePolicy(String timerName,String policyName, long priority, String policyExpression, String action,
- int duration, int interval) throws Exception {
+ int duration, int interval, boolean isCleanUp) throws Exception {
// 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
- com.citrix.netscaler.nitro.resource.config.timer.timerpolicy timerPolicy = new com.citrix.netscaler.nitro.resource.config.timer.timerpolicy();
+ timerpolicy timerPolicy = new timerpolicy();
try {
timerPolicy.set_name(policyName);
timerPolicy.set_action(action);
timerPolicy.set_rule(policyExpression);
timerPolicy.add(_netscalerService, timerPolicy);
} catch (Exception e) {
- // Ignore Exception
- throw e;
+ // Ignore Exception on cleanup
+ if(!isCleanUp) throw e;
}
// bind timer policy
@@ -1975,7 +2017,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
- com.citrix.netscaler.nitro.resource.config.timer.timertrigger_timerpolicy_binding timer_policy_binding = new com.citrix.netscaler.nitro.resource.config.timer.timertrigger_timerpolicy_binding();
+ timertrigger_timerpolicy_binding timer_policy_binding = new timertrigger_timerpolicy_binding();
int sampleSize = duration/interval;
try {
timer_policy_binding.set_name(timerName);
@@ -1988,10 +2030,11 @@ public class NetscalerResource implements ServerResource {
timer_policy_binding.set_priority(priority);
timer_policy_binding.add(_netscalerService, timer_policy_binding);
} catch (Exception e) {
- // Ignore Exception
- throw e;
+ // Ignore Exception on cleanup
+ if(!isCleanUp) throw e;
}
}
+
public synchronized void applyAutoScaleConfig(LoadBalancerTO loadBalancer) throws Exception, ExecutionException {
AutoScaleVmGroupTO vmGroupTO = loadBalancer.getAutoScaleVmGroupTO();
@@ -2007,11 +2050,11 @@ public class NetscalerResource implements ServerResource {
}
else if(vmGroupTO.getState().equals("enabled")) {
assert !loadBalancer.isRevoked();
- enableAutoScaleConfig(loadBalancer);
+ enableAutoScaleConfig(loadBalancer, false);
}
else if(vmGroupTO.getState().equals("disabled")) {
assert !loadBalancer.isRevoked();
- disableAutoScaleConfig(loadBalancer);
+ disableAutoScaleConfig(loadBalancer, false);
} else {
///// This should never happen
throw new ExecutionException("Unknown vmGroup State :" + vmGroupTO.getState());
@@ -2115,6 +2158,7 @@ public class NetscalerResource implements ServerResource {
private String generateNSServiceName(String ip, long port) {
return genObjectName("Cloud-Service", ip, port);
}
+
private String generateAutoScaleServiceGroupName(String srcIp, long srcPort) {
return genObjectName("Cloud-AutoScaleServiceGroup", srcIp, srcPort);
}