mirror of https://github.com/apache/cloudstack.git
CLOUDSTACK-3345: createLBStickinessPolicy replaces old stickiness policy if exists
This commit is contained in:
parent
ac438a6d1d
commit
f93c51e2bd
|
|
@ -503,8 +503,8 @@ public class LoadBalancingRulesManagerImpl<Type> extends ManagerBase implements
|
|||
/* Validation : check for the multiple policies to the rule id */
|
||||
List<LBStickinessPolicyVO> stickinessPolicies = _lb2stickinesspoliciesDao.listByLoadBalancerId(
|
||||
cmd.getLbRuleId(), false);
|
||||
if (stickinessPolicies.size() > 0) {
|
||||
throw new InvalidParameterValueException("Failed to create Stickiness policy: Already policy attached "
|
||||
if (stickinessPolicies.size() > 1) {
|
||||
throw new InvalidParameterValueException("Failed to create Stickiness policy: Already two policies attached "
|
||||
+ cmd.getLbRuleId());
|
||||
}
|
||||
return true;
|
||||
|
|
@ -651,14 +651,25 @@ public class LoadBalancingRulesManagerImpl<Type> extends ManagerBase implements
|
|||
@ActionEvent(eventType = EventTypes.EVENT_LB_STICKINESSPOLICY_CREATE, eventDescription = "Apply Stickinesspolicy to load balancer ", async = true)
|
||||
public boolean applyLBStickinessPolicy(CreateLBStickinessPolicyCmd cmd) {
|
||||
boolean success = true;
|
||||
FirewallRule.State backupState = null;
|
||||
long oldStickinessPolicyId = 0;
|
||||
|
||||
LoadBalancerVO loadBalancer = _lbDao.findById(cmd.getLbRuleId());
|
||||
if (loadBalancer == null) {
|
||||
throw new InvalidParameterException("Invalid Load balancer Id:" + cmd.getLbRuleId());
|
||||
}
|
||||
FirewallRule.State backupState = loadBalancer.getState();
|
||||
loadBalancer.setState(FirewallRule.State.Add);
|
||||
_lbDao.persist(loadBalancer);
|
||||
List<LBStickinessPolicyVO> stickinessPolicies = _lb2stickinesspoliciesDao.listByLoadBalancerId(cmd.getLbRuleId(), false);
|
||||
for (LBStickinessPolicyVO stickinessPolicy: stickinessPolicies) {
|
||||
if (stickinessPolicy.getId() == cmd.getEntityId()) {
|
||||
backupState = loadBalancer.getState();
|
||||
loadBalancer.setState(FirewallRule.State.Add);
|
||||
_lbDao.persist(loadBalancer);
|
||||
} else {
|
||||
oldStickinessPolicyId = stickinessPolicy.getId();
|
||||
stickinessPolicy.setRevoke(true);
|
||||
_lb2stickinesspoliciesDao.persist(stickinessPolicy);
|
||||
}
|
||||
}
|
||||
try {
|
||||
applyLoadBalancerConfig(cmd.getLbRuleId());
|
||||
} catch (ResourceUnavailableException e) {
|
||||
|
|
@ -667,10 +678,25 @@ public class LoadBalancingRulesManagerImpl<Type> extends ManagerBase implements
|
|||
if (isRollBackAllowedForProvider(loadBalancer)) {
|
||||
loadBalancer.setState(backupState);
|
||||
_lbDao.persist(loadBalancer);
|
||||
deleteLBStickinessPolicy(cmd.getEntityId(), false);
|
||||
s_logger.debug("LB Rollback rule id: " + loadBalancer.getId()
|
||||
+ " lb state rolback while creating sticky policy");
|
||||
} else {
|
||||
deleteLBStickinessPolicy(cmd.getEntityId(), false);
|
||||
if (oldStickinessPolicyId != 0) {
|
||||
LBStickinessPolicyVO stickinessPolicy = _lb2stickinesspoliciesDao.findById(oldStickinessPolicyId);
|
||||
stickinessPolicy.setRevoke(false);
|
||||
_lb2stickinesspoliciesDao.persist(stickinessPolicy);
|
||||
try {
|
||||
if (backupState.equals(FirewallRule.State.Active))
|
||||
applyLoadBalancerConfig(cmd.getLbRuleId());
|
||||
} catch (ResourceUnavailableException e1) {
|
||||
} finally {
|
||||
loadBalancer.setState(backupState);
|
||||
_lbDao.persist(loadBalancer);
|
||||
}
|
||||
}
|
||||
}
|
||||
deleteLBStickinessPolicy(cmd.getEntityId(), false);
|
||||
success = false;
|
||||
}
|
||||
|
||||
|
|
@ -759,7 +785,7 @@ public class LoadBalancingRulesManagerImpl<Type> extends ManagerBase implements
|
|||
success = false;
|
||||
}
|
||||
} else {
|
||||
_lb2stickinesspoliciesDao.remove(stickinessPolicy.getLoadBalancerId());
|
||||
_lb2stickinesspoliciesDao.expunge(stickinessPolicyId);
|
||||
}
|
||||
return success;
|
||||
}
|
||||
|
|
@ -1690,7 +1716,7 @@ public class LoadBalancingRulesManagerImpl<Type> extends ManagerBase implements
|
|||
@Override
|
||||
public List<LbStickinessPolicy> getStickinessPolicies(long lbId) {
|
||||
List<LbStickinessPolicy> stickinessPolicies = new ArrayList<LbStickinessPolicy>();
|
||||
List<LBStickinessPolicyVO> sDbpolicies = _lb2stickinesspoliciesDao.listByLoadBalancerId(lbId);
|
||||
List<LBStickinessPolicyVO> sDbpolicies = _lb2stickinesspoliciesDao.listByLoadBalancerId(lbId, false);
|
||||
|
||||
for (LBStickinessPolicyVO sDbPolicy : sDbpolicies) {
|
||||
LbStickinessPolicy sPolicy = new LbStickinessPolicy(sDbPolicy.getMethodName(), sDbPolicy.getParams(),
|
||||
|
|
|
|||
|
|
@ -259,6 +259,32 @@
|
|||
}
|
||||
});
|
||||
},
|
||||
delete: function(stickyRuleID, complete, error) {
|
||||
$.ajax({
|
||||
url: createURL('deleteLBStickinessPolicy'),
|
||||
data: {
|
||||
id: stickyRuleID
|
||||
},
|
||||
success: function(json) {
|
||||
cloudStack.ui.notifications.add(
|
||||
{
|
||||
desc: 'Remove previous LB sticky rule',
|
||||
section: 'Network',
|
||||
poll: pollAsyncJobResult,
|
||||
_custom: {
|
||||
jobId: json.deleteLBstickinessrruleresponse.jobid
|
||||
}
|
||||
},
|
||||
complete, {},
|
||||
error, {}
|
||||
);
|
||||
},
|
||||
error: function(json) {
|
||||
complete();
|
||||
cloudStack.dialog.notice({ message: parseXMLHttpResponse(json) });
|
||||
}
|
||||
});
|
||||
},
|
||||
recreate: function(stickyRuleID, lbRuleID, data, complete, error) {
|
||||
var addStickyPolicy = function() {
|
||||
cloudStack.lbStickyPolicy.actions.add(
|
||||
|
|
@ -270,43 +296,10 @@
|
|||
};
|
||||
|
||||
// Delete existing rule
|
||||
if (stickyRuleID) {
|
||||
$.ajax({
|
||||
url: createURL('deleteLBStickinessPolicy'),
|
||||
data: {
|
||||
id: stickyRuleID
|
||||
},
|
||||
success: function(json) {
|
||||
cloudStack.ui.notifications.add(
|
||||
{
|
||||
desc: 'Remove previous LB sticky rule',
|
||||
section: 'Network',
|
||||
poll: pollAsyncJobResult,
|
||||
_custom: {
|
||||
jobId: json.deleteLBstickinessrruleresponse.jobid
|
||||
}
|
||||
},
|
||||
function() {
|
||||
if (data.methodname != 'None') {
|
||||
addStickyPolicy();
|
||||
} else {
|
||||
complete();
|
||||
}
|
||||
}, {},
|
||||
error, {}
|
||||
);
|
||||
},
|
||||
error: function(json) {
|
||||
cloudStack.dialog.notice({
|
||||
message: parseXMLHttpResponse(json)
|
||||
});
|
||||
error();
|
||||
}
|
||||
});
|
||||
} else if (data.methodname != 'None') {
|
||||
if (data.methodname != 'None') {
|
||||
addStickyPolicy();
|
||||
} else {
|
||||
complete();
|
||||
cloudStack.lbStickyPolicy.actions.delete(stickyRuleID, complete, error);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue