@Override
  @DB
  @ActionEvent(
      eventType = EventTypes.EVENT_LOAD_BALANCER_CREATE,
      eventDescription = "creating load balancer")
  public LoadBalancer createLoadBalancerRule(CreateLoadBalancerRuleCmd lb, boolean openFirewall)
      throws NetworkRuleConflictException, InsufficientAddressCapacityException {
    UserContext caller = UserContext.current();

    int defPortStart = lb.getDefaultPortStart();
    int defPortEnd = lb.getDefaultPortEnd();

    if (!NetUtils.isValidPort(defPortEnd)) {
      throw new InvalidParameterValueException("privatePort is an invalid value: " + defPortEnd);
    }
    if (defPortStart > defPortEnd) {
      throw new InvalidParameterValueException(
          "private port range is invalid: " + defPortStart + "-" + defPortEnd);
    }
    if ((lb.getAlgorithm() == null) || !NetUtils.isValidAlgorithm(lb.getAlgorithm())) {
      throw new InvalidParameterValueException("Invalid algorithm: " + lb.getAlgorithm());
    }

    LoadBalancer result = _elbMgr.handleCreateLoadBalancerRule(lb, caller.getCaller());
    if (result == null) {
      result = createLoadBalancer(lb, openFirewall);
    }
    return result;
  }