@Override public String getEventDescription() { return "creating a load balancer stickiness policy: " + getLBStickinessPolicyName(); }
@Override public Long getSyncObjId() { LoadBalancer lb = _lbService.findById(getLbRuleId()); if (lb == null) { throw new InvalidParameterValueException("Unable to find load balancer rule " + getLbRuleId() + " to create stickiness rule"); } return lb.getNetworkId(); } }
LoadBalancerVO loadBalancer = _lbDao.findById(cmd.getLbRuleId()); if (loadBalancer == null) { throw new InvalidParameterValueException("Failed: LB rule id: " + cmd.getLbRuleId() + " not present "); throw new InvalidParameterValueException("Failed: LB rule id: " + cmd.getLbRuleId() + " is in deleting state: "); throw new InvalidParameterValueException("Failed to create Stickiness policy: Validation Failed " + cmd.getLbRuleId()); new LBStickinessPolicyVO(loadBalancer.getId(), cmd.getLBStickinessPolicyName(), cmd.getStickinessMethodName(), cmd.getparamList(), cmd.getDescription()); List<LbStickinessPolicy> policyList = new ArrayList<LbStickinessPolicy>(); policyList.add(new LbStickinessPolicy(cmd.getStickinessMethodName(), lbpolicy.getParams())); Ip sourceIp = getSourceIp(loadBalancer); LoadBalancingRule lbRule = new LoadBalancingRule(loadBalancer, getExistingDestinations(lbpolicy.getId()), policyList, null, sourceIp, null, loadBalancer.getLbProtocol()); if (!validateLbRule(lbRule)) { throw new InvalidParameterValueException("Failed to create Stickiness policy: Validation Failed " + cmd.getLbRuleId()); new LBStickinessPolicyVO(loadBalancer.getId(), cmd.getLBStickinessPolicyName(), cmd.getStickinessMethodName(), cmd.getparamList(), cmd.getDescription()); Boolean forDisplay = cmd.getDisplay(); if (forDisplay != null) { policy.setDisplay(forDisplay);
@Override public void execute() throws ResourceAllocationException, ResourceUnavailableException { StickinessPolicy policy = null; boolean success = false; try { CallContext.current().setEventDetails("Rule Id: " + getEntityId()); success = _lbService.applyLBStickinessPolicy(this); if (success) { // State might be different after the rule is applied, so get new object here policy = _entityMgr.findById(StickinessPolicy.class, getEntityId()); LoadBalancer lb = _lbService.findById(policy.getLoadBalancerId()); LBStickinessResponse spResponse = _responseGenerator.createLBStickinessPolicyResponse(policy, lb); setResponseObject(spResponse); spResponse.setResponseName(getCommandName()); } } finally { if (!success || (policy == null)) { throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to create stickiness policy"); } } }
private boolean genericValidator(CreateLBStickinessPolicyCmd cmd) throws InvalidParameterValueException { LoadBalancerVO loadBalancer = _lbDao.findById(cmd.getLbRuleId()); throw new InvalidParameterValueException("Failed: No Stickiness method available for LB rule:" + cmd.getLbRuleId()); if (method.getMethodName().equalsIgnoreCase(cmd.getStickinessMethodName())) { methodMatch = true; Map apiParamList = cmd.getparamList(); List<LbStickinessMethodParam> methodParamList = method.getParamList(); Map<String, String> tempParamList = new HashMap<String, String>(); throw new InvalidParameterValueException("Failed to match Stickiness method name for LB rule:" + cmd.getLbRuleId()); List<LBStickinessPolicyVO> stickinessPolicies = _lb2stickinesspoliciesDao.listByLoadBalancerId(cmd.getLbRuleId(), false); if (stickinessPolicies.size() > 1) { throw new InvalidParameterValueException("Failed to create Stickiness policy: Already two policies attached " + cmd.getLbRuleId());
LoadBalancerVO loadBalancer = _lbDao.findById(cmd.getLbRuleId()); if (loadBalancer == null) { throw new InvalidParameterException("Invalid Load balancer Id:" + cmd.getLbRuleId()); 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); applyLoadBalancerConfig(cmd.getLbRuleId()); } catch (ResourceUnavailableException e) { s_logger.warn("Unable to apply Stickiness policy to the lb rule: " + cmd.getLbRuleId() + " because resource is unavaliable:", e); 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); try { if (backupState.equals(FirewallRule.State.Active)) applyLoadBalancerConfig(cmd.getLbRuleId()); } catch (ResourceUnavailableException e1) { s_logger.info("[ignored] applying load balancer config.", e1);
@Override public void create() { try { StickinessPolicy result = _lbService.createLBStickinessPolicy(this); this.setEntityId(result.getId()); this.setEntityUuid(result.getUuid()); } catch (NetworkRuleConflictException e) { s_logger.warn("Exception: ", e); throw new ServerApiException(ApiErrorCode.NETWORK_RULE_CONFLICT_ERROR, e.getMessage()); } }