test_class.declarator: s_logger = LoggerFactory.getLogger(GlobalLoadBalancingRulesServiceImplTest.class)
test_class.modifier: private static final
test_class.original_string: private static final Logger s_logger = LoggerFactory.getLogger(GlobalLoadBalancingRulesServiceImplTest.class);
test_class.type: Logger
test_class.var_name: s_logger
test_class.file: server/src/test/java/org/apache/cloudstack/region/gslb/GlobalLoadBalancingRulesServiceImplTest.java
test_class.identifier: GlobalLoadBalancingRulesServiceImplTest
test_class.superclass: extends TestCase
test_case.body: @Test
      public void testRemoveFromGlobalLoadBalancerRule() throws Exception {
  
          s_logger.info("Running tests for RemoveFromGlobalLoadBalancerRule() service API");
  
          /*
           * TEST 1: given valid gslb rule id, valid lb rule id and is assigned to given gslb rule id
           * then RemoveFromGlobalLoadBalancerRule service API should succeed
           */
          runRemoveFromGlobalLoadBalancerRuleTest();
  
          /*
           * TEST 2: given valid gslb rule id, valid lb rule id but NOT assigned to given gslb rule id
           * then RemoveFromGlobalLoadBalancerRule service API should fail
           */
          runRemoveFromGlobalLoadBalancerRuleTestUnassignedLb();
  
          /*
           * TEST 3: given valid gslb rule id, INVALID lb rule id then RemoveFromGlobalLoadBalancerRule
           * service API should fail
           */
          runRemoveFromGlobalLoadBalancerRuleTestInvalidLb();
      }
test_case.class_method_signature: GlobalLoadBalancingRulesServiceImplTest.testRemoveFromGlobalLoadBalancerRule()
test_case.full_signature: @Test public void testRemoveFromGlobalLoadBalancerRule()
test_case.identifier: testRemoveFromGlobalLoadBalancerRule
test_case.invocations: info runRemoveFromGlobalLoadBalancerRuleTest runRemoveFromGlobalLoadBalancerRuleTestUnassignedLb runRemoveFromGlobalLoadBalancerRuleTestInvalidLb
test_case.modifiers: @Test public
test_case.parameters: ()
test_case.return: void
test_case.signature: void testRemoveFromGlobalLoadBalancerRule()
focal_class.declarator: s_logger = LoggerFactory.getLogger(GlobalLoadBalancingRulesServiceImpl.class)
focal_class.modifier: private static final
focal_class.original_string: private static final Logger s_logger = LoggerFactory.getLogger(GlobalLoadBalancingRulesServiceImpl.class);
focal_class.type: Logger
focal_class.var_name: s_logger
focal_class.declarator: _accountMgr
focal_class.modifier: @Inject
focal_class.original_string: @Inject
      AccountManager _accountMgr;
focal_class.type: AccountManager
focal_class.var_name: _accountMgr
focal_class.declarator: _gslbRuleDao
focal_class.modifier: @Inject
focal_class.original_string: @Inject
      GlobalLoadBalancerRuleDao _gslbRuleDao;
focal_class.type: GlobalLoadBalancerRuleDao
focal_class.var_name: _gslbRuleDao
focal_class.declarator: _gslbLbMapDao
focal_class.modifier: @Inject
focal_class.original_string: @Inject
      GlobalLoadBalancerLbRuleMapDao _gslbLbMapDao;
focal_class.type: GlobalLoadBalancerLbRuleMapDao
focal_class.var_name: _gslbLbMapDao
focal_class.declarator: _regionDao
focal_class.modifier: @Inject
focal_class.original_string: @Inject
      RegionDao _regionDao;
focal_class.type: RegionDao
focal_class.var_name: _regionDao
focal_class.declarator: _rulesMgr
focal_class.modifier: @Inject
focal_class.original_string: @Inject
      RulesManager _rulesMgr;
focal_class.type: RulesManager
focal_class.var_name: _rulesMgr
focal_class.declarator: _lbDao
focal_class.modifier: @Inject
focal_class.original_string: @Inject
      LoadBalancerDao _lbDao;
focal_class.type: LoadBalancerDao
focal_class.var_name: _lbDao
focal_class.declarator: _networkDao
focal_class.modifier: @Inject
focal_class.original_string: @Inject
      NetworkDao _networkDao;
focal_class.type: NetworkDao
focal_class.var_name: _networkDao
focal_class.declarator: _globalConfigDao
focal_class.modifier: @Inject
focal_class.original_string: @Inject
      ConfigurationDao _globalConfigDao;
focal_class.type: ConfigurationDao
focal_class.var_name: _globalConfigDao
focal_class.declarator: _ipAddressDao
focal_class.modifier: @Inject
focal_class.original_string: @Inject
      IPAddressDao _ipAddressDao;
focal_class.type: IPAddressDao
focal_class.var_name: _ipAddressDao
focal_class.declarator: _agentMgr
focal_class.modifier: @Inject
focal_class.original_string: @Inject
      AgentManager _agentMgr;
focal_class.type: AgentManager
focal_class.var_name: _agentMgr
focal_class.declarator: _gslbProviders
focal_class.modifier: protected
focal_class.original_string: protected List<GslbServiceProvider> _gslbProviders;
focal_class.type: List<GslbServiceProvider>
focal_class.var_name: _gslbProviders
focal_class.file: server/src/main/java/org/apache/cloudstack/region/gslb/GlobalLoadBalancingRulesServiceImpl.java
focal_class.identifier: GlobalLoadBalancingRulesServiceImpl
focal_class.interfaces: implements GlobalLoadBalancingRulesService
focal_class.class_method_signature: GlobalLoadBalancingRulesServiceImpl.setGslbServiceProviders(List<GslbServiceProvider> providers)
focal_class.full_signature: public void setGslbServiceProviders(List<GslbServiceProvider> providers)
focal_class.identifier: setGslbServiceProviders
focal_class.modifiers: public
focal_class.parameters: (List<GslbServiceProvider> providers)
focal_class.return: void
focal_class.signature: void setGslbServiceProviders(List<GslbServiceProvider> providers)
focal_class.class_method_signature: GlobalLoadBalancingRulesServiceImpl.createGlobalLoadBalancerRule(CreateGlobalLoadBalancerRuleCmd newRule)
focal_class.full_signature: @Override @DB @ActionEvent(eventType = EventTypes.EVENT_GLOBAL_LOAD_BALANCER_CREATE, eventDescription = "creating global load " + "balancer rule", create = true) public GlobalLoadBalancerRule createGlobalLoadBalancerRule(CreateGlobalLoadBalancerRuleCmd newRule)
focal_class.identifier: createGlobalLoadBalancerRule
focal_class.modifiers: @Override @DB @ActionEvent(eventType = EventTypes.EVENT_GLOBAL_LOAD_BALANCER_CREATE, eventDescription = "creating global load " + "balancer rule", create = true) public
focal_class.parameters: (CreateGlobalLoadBalancerRuleCmd newRule)
focal_class.return: GlobalLoadBalancerRule
focal_class.signature: GlobalLoadBalancerRule createGlobalLoadBalancerRule(CreateGlobalLoadBalancerRuleCmd newRule)
focal_class.class_method_signature: GlobalLoadBalancingRulesServiceImpl.assignToGlobalLoadBalancerRule(AssignToGlobalLoadBalancerRuleCmd assignToGslbCmd)
focal_class.full_signature: @Override @DB @ActionEvent(eventType = EventTypes.EVENT_ASSIGN_TO_GLOBAL_LOAD_BALANCER_RULE, eventDescription = "Assigning a load balancer rule to global load balancer rule", async = true) public boolean assignToGlobalLoadBalancerRule(AssignToGlobalLoadBalancerRuleCmd assignToGslbCmd)
focal_class.identifier: assignToGlobalLoadBalancerRule
focal_class.modifiers: @Override @DB @ActionEvent(eventType = EventTypes.EVENT_ASSIGN_TO_GLOBAL_LOAD_BALANCER_RULE, eventDescription = "Assigning a load balancer rule to global load balancer rule", async = true) public
focal_class.parameters: (AssignToGlobalLoadBalancerRuleCmd assignToGslbCmd)
focal_class.return: boolean
focal_class.signature: boolean assignToGlobalLoadBalancerRule(AssignToGlobalLoadBalancerRuleCmd assignToGslbCmd)
focal_class.class_method_signature: GlobalLoadBalancingRulesServiceImpl.removeFromGlobalLoadBalancerRule(RemoveFromGlobalLoadBalancerRuleCmd removeFromGslbCmd)
focal_class.full_signature: @Override @DB @ActionEvent(eventType = EventTypes.EVENT_REMOVE_FROM_GLOBAL_LOAD_BALANCER_RULE, eventDescription = "Removing a load balancer rule to be part of global load balancer rule") public boolean removeFromGlobalLoadBalancerRule(RemoveFromGlobalLoadBalancerRuleCmd removeFromGslbCmd)
focal_class.identifier: removeFromGlobalLoadBalancerRule
focal_class.modifiers: @Override @DB @ActionEvent(eventType = EventTypes.EVENT_REMOVE_FROM_GLOBAL_LOAD_BALANCER_RULE, eventDescription = "Removing a load balancer rule to be part of global load balancer rule") public
focal_class.parameters: (RemoveFromGlobalLoadBalancerRuleCmd removeFromGslbCmd)
focal_class.return: boolean
focal_class.signature: boolean removeFromGlobalLoadBalancerRule(RemoveFromGlobalLoadBalancerRuleCmd removeFromGslbCmd)
focal_class.class_method_signature: GlobalLoadBalancingRulesServiceImpl.deleteGlobalLoadBalancerRule(DeleteGlobalLoadBalancerRuleCmd deleteGslbCmd)
focal_class.full_signature: @Override @ActionEvent(eventType = EventTypes.EVENT_GLOBAL_LOAD_BALANCER_DELETE, eventDescription = "Delete global load balancer rule") public boolean deleteGlobalLoadBalancerRule(DeleteGlobalLoadBalancerRuleCmd deleteGslbCmd)
focal_class.identifier: deleteGlobalLoadBalancerRule
focal_class.modifiers: @Override @ActionEvent(eventType = EventTypes.EVENT_GLOBAL_LOAD_BALANCER_DELETE, eventDescription = "Delete global load balancer rule") public
focal_class.parameters: (DeleteGlobalLoadBalancerRuleCmd deleteGslbCmd)
focal_class.return: boolean
focal_class.signature: boolean deleteGlobalLoadBalancerRule(DeleteGlobalLoadBalancerRuleCmd deleteGslbCmd)
focal_class.class_method_signature: GlobalLoadBalancingRulesServiceImpl.revokeGslbRule(final long gslbRuleId, Account caller)
focal_class.full_signature: @DB private void revokeGslbRule(final long gslbRuleId, Account caller)
focal_class.identifier: revokeGslbRule
focal_class.modifiers: @DB private
focal_class.parameters: (final long gslbRuleId, Account caller)
focal_class.return: void
focal_class.signature: void revokeGslbRule(final long gslbRuleId, Account caller)
focal_class.class_method_signature: GlobalLoadBalancingRulesServiceImpl.updateGlobalLoadBalancerRule(UpdateGlobalLoadBalancerRuleCmd updateGslbCmd)
focal_class.full_signature: @Override public GlobalLoadBalancerRule updateGlobalLoadBalancerRule(UpdateGlobalLoadBalancerRuleCmd updateGslbCmd)
focal_class.identifier: updateGlobalLoadBalancerRule
focal_class.modifiers: @Override public
focal_class.parameters: (UpdateGlobalLoadBalancerRuleCmd updateGslbCmd)
focal_class.return: GlobalLoadBalancerRule
focal_class.signature: GlobalLoadBalancerRule updateGlobalLoadBalancerRule(UpdateGlobalLoadBalancerRuleCmd updateGslbCmd)
focal_class.class_method_signature: GlobalLoadBalancingRulesServiceImpl.listGlobalLoadBalancerRule(ListGlobalLoadBalancerRuleCmd listGslbCmd)
focal_class.full_signature: @Override public List<GlobalLoadBalancerRule> listGlobalLoadBalancerRule(ListGlobalLoadBalancerRuleCmd listGslbCmd)
focal_class.identifier: listGlobalLoadBalancerRule
focal_class.modifiers: @Override public
focal_class.parameters: (ListGlobalLoadBalancerRuleCmd listGslbCmd)
focal_class.return: List<GlobalLoadBalancerRule>
focal_class.signature: List<GlobalLoadBalancerRule> listGlobalLoadBalancerRule(ListGlobalLoadBalancerRuleCmd listGslbCmd)
focal_class.class_method_signature: GlobalLoadBalancingRulesServiceImpl.listSiteLoadBalancers(long gslbRuleId)
focal_class.full_signature: @Override public List<LoadBalancer> listSiteLoadBalancers(long gslbRuleId)
focal_class.identifier: listSiteLoadBalancers
focal_class.modifiers: @Override public
focal_class.parameters: (long gslbRuleId)
focal_class.return: List<LoadBalancer>
focal_class.signature: List<LoadBalancer> listSiteLoadBalancers(long gslbRuleId)
focal_class.class_method_signature: GlobalLoadBalancingRulesServiceImpl.applyGlobalLoadBalancerRuleConfig(long gslbRuleId, boolean revoke)
focal_class.full_signature: private boolean applyGlobalLoadBalancerRuleConfig(long gslbRuleId, boolean revoke)
focal_class.identifier: applyGlobalLoadBalancerRuleConfig
focal_class.modifiers: private
focal_class.parameters: (long gslbRuleId, boolean revoke)
focal_class.return: boolean
focal_class.signature: boolean applyGlobalLoadBalancerRuleConfig(long gslbRuleId, boolean revoke)
focal_class.class_method_signature: GlobalLoadBalancingRulesServiceImpl.revokeAllGslbRulesForAccount(com.cloud.user.Account caller, long accountId)
focal_class.full_signature: @Override public boolean revokeAllGslbRulesForAccount(com.cloud.user.Account caller, long accountId)
focal_class.identifier: revokeAllGslbRulesForAccount
focal_class.modifiers: @Override public
focal_class.parameters: (com.cloud.user.Account caller, long accountId)
focal_class.return: boolean
focal_class.signature: boolean revokeAllGslbRulesForAccount(com.cloud.user.Account caller, long accountId)
focal_class.class_method_signature: GlobalLoadBalancingRulesServiceImpl.checkGslbServiceEnabledInZone(long zoneId, long physicalNetworkId)
focal_class.full_signature: private boolean checkGslbServiceEnabledInZone(long zoneId, long physicalNetworkId)
focal_class.identifier: checkGslbServiceEnabledInZone
focal_class.modifiers: private
focal_class.parameters: (long zoneId, long physicalNetworkId)
focal_class.return: boolean
focal_class.signature: boolean checkGslbServiceEnabledInZone(long zoneId, long physicalNetworkId)
focal_class.class_method_signature: GlobalLoadBalancingRulesServiceImpl.lookupGslbServiceProvider()
focal_class.full_signature: protected GslbServiceProvider lookupGslbServiceProvider()
focal_class.identifier: lookupGslbServiceProvider
focal_class.modifiers: protected
focal_class.parameters: ()
focal_class.return: GslbServiceProvider
focal_class.signature: GslbServiceProvider lookupGslbServiceProvider()
focal_class.class_method_signature: GlobalLoadBalancingRulesServiceImpl.findById(long gslbRuleId)
focal_class.full_signature: @Override public GlobalLoadBalancerRule findById(long gslbRuleId)
focal_class.identifier: findById
focal_class.modifiers: @Override public
focal_class.parameters: (long gslbRuleId)
focal_class.return: GlobalLoadBalancerRule
focal_class.signature: GlobalLoadBalancerRule findById(long gslbRuleId)
focal_method.body: @Override
      @DB
      @ActionEvent(eventType = EventTypes.EVENT_REMOVE_FROM_GLOBAL_LOAD_BALANCER_RULE,
                   eventDescription = "Removing a load balancer rule to be part of global load balancer rule")
      public boolean removeFromGlobalLoadBalancerRule(RemoveFromGlobalLoadBalancerRuleCmd removeFromGslbCmd) {
  
          CallContext ctx = CallContext.current();
          Account caller = ctx.getCallingAccount();
  
          final long gslbRuleId = removeFromGslbCmd.getGlobalLoadBalancerRuleId();
          final GlobalLoadBalancerRuleVO gslbRule = _gslbRuleDao.findById(gslbRuleId);
          if (gslbRule == null) {
              throw new InvalidParameterValueException("Invalid global load balancer rule id: " + gslbRuleId);
          }
  
          _accountMgr.checkAccess(caller, SecurityChecker.AccessType.OperateEntry, true, gslbRule);
  
          if (gslbRule.getState() == GlobalLoadBalancerRule.State.Revoke) {
              throw new InvalidParameterValueException("global load balancer rule id: " + gslbRuleId + " is already in revoked state");
          }
  
          final List<Long> lbRuleIdsToremove = removeFromGslbCmd.getLoadBalancerRulesIds();
          if (lbRuleIdsToremove == null || lbRuleIdsToremove.isEmpty()) {
              throw new InvalidParameterValueException("empty list of load balancer rule Ids specified to be un-assigned" + " to global load balancer rule");
          }
  
          // get the active list of LB rule id's that are assigned currently to GSLB rule and corresponding zone id's
          List<Long> oldLbRuleIds = new ArrayList<Long>();
          List<Long> oldZones = new ArrayList<Long>();
  
          List<GlobalLoadBalancerLbRuleMapVO> gslbLbMapVos = _gslbLbMapDao.listByGslbRuleId(gslbRuleId);
          if (gslbLbMapVos == null) {
              throw new InvalidParameterValueException(" There are no load balancer rules that are assigned to global " + " load balancer rule id: " + gslbRule.getUuid() +
                  " that are available for deletion");
          }
  
          for (Long lbRuleId : lbRuleIdsToremove) {
              LoadBalancerVO loadBalancer = _lbDao.findById(lbRuleId);
              if (loadBalancer == null) {
                  throw new InvalidParameterValueException("Specified load balancer rule ID does not exist.");
              }
  
              _accountMgr.checkAccess(caller, null, true, loadBalancer);
          }
  
          for (GlobalLoadBalancerLbRuleMapVO gslbLbMapVo : gslbLbMapVos) {
              LoadBalancerVO loadBalancer = _lbDao.findById(gslbLbMapVo.getLoadBalancerId());
              Network network = _networkDao.findById(loadBalancer.getNetworkId());
              oldLbRuleIds.add(gslbLbMapVo.getLoadBalancerId());
              oldZones.add(network.getDataCenterId());
          }
  
          for (Long lbRuleId : lbRuleIdsToremove) {
              LoadBalancerVO loadBalancer = _lbDao.findById(lbRuleId);
              if (oldLbRuleIds != null && !oldLbRuleIds.contains(loadBalancer.getId())) {
                  throw new InvalidParameterValueException("Load balancer ID " + loadBalancer.getUuid() + " is not assigned" + " to global load balancer rule: " +
                      gslbRule.getUuid());
              }
          }
  
          Transaction.execute(new TransactionCallbackNoReturn() {
              @Override
              public void doInTransactionWithoutResult(TransactionStatus status) {
                  // update the mapping of gslb rule to Lb rule, to revoke state
                  for (Long lbRuleId : lbRuleIdsToremove) {
                      GlobalLoadBalancerLbRuleMapVO removeGslbLbMap = _gslbLbMapDao.findByGslbRuleIdAndLbRuleId(gslbRuleId, lbRuleId);
                      removeGslbLbMap.setRevoke(true);
                      _gslbLbMapDao.update(removeGslbLbMap.getId(), removeGslbLbMap);
                  }
  
                  // mark the gslb rule state as add
                  if (gslbRule.getState() == GlobalLoadBalancerRule.State.Staged) {
                      gslbRule.setState(GlobalLoadBalancerRule.State.Add);
                      _gslbRuleDao.update(gslbRule.getId(), gslbRule);
                  }
  
              }
          });
  
          boolean success = false;
          try {
              s_logger.debug("Attempting to configure global load balancer rule configuration on the gslb service providers ");
  
              // apply the gslb rule on to the back end gslb service providers
              if (!applyGlobalLoadBalancerRuleConfig(gslbRuleId, false)) {
                  s_logger.warn("Failed to remove load balancer rules " + lbRuleIdsToremove + " from global load balancer rule id " + gslbRuleId);
                  CloudRuntimeException ex = new CloudRuntimeException("Failed to remove load balancer rule ids from GSLB rule ");
                  throw ex;
              }
  
              Transaction.execute(new TransactionCallbackNoReturn() {
                  @Override
                  public void doInTransactionWithoutResult(TransactionStatus status) {
                      // remove the mappings of gslb rule to Lb rule that are in revoked state
                      for (Long lbRuleId : lbRuleIdsToremove) {
                          GlobalLoadBalancerLbRuleMapVO removeGslbLbMap = _gslbLbMapDao.findByGslbRuleIdAndLbRuleId(gslbRuleId, lbRuleId);
                          _gslbLbMapDao.remove(removeGslbLbMap.getId());
                      }
  
                      // on success set state back to Active
                      gslbRule.setState(GlobalLoadBalancerRule.State.Active);
                      _gslbRuleDao.update(gslbRule.getId(), gslbRule);
  
                  }
              });
  
              success = true;
          } catch (ResourceUnavailableException e) {
              throw new CloudRuntimeException("Failed to update removed load balancer details from gloabal load balancer");
          }
  
          return success;
      }
focal_method.class_method_signature: GlobalLoadBalancingRulesServiceImpl.removeFromGlobalLoadBalancerRule(RemoveFromGlobalLoadBalancerRuleCmd removeFromGslbCmd)
focal_method.full_signature: @Override @DB @ActionEvent(eventType = EventTypes.EVENT_REMOVE_FROM_GLOBAL_LOAD_BALANCER_RULE, eventDescription = "Removing a load balancer rule to be part of global load balancer rule") public boolean removeFromGlobalLoadBalancerRule(RemoveFromGlobalLoadBalancerRuleCmd removeFromGslbCmd)
focal_method.identifier: removeFromGlobalLoadBalancerRule
focal_method.invocations: current getCallingAccount getGlobalLoadBalancerRuleId findById checkAccess getState getLoadBalancerRulesIds isEmpty listByGslbRuleId getUuid findById checkAccess findById getLoadBalancerId findById getNetworkId add getLoadBalancerId add getDataCenterId findById contains getId getUuid getUuid execute findByGslbRuleIdAndLbRuleId setRevoke update getId getState setState update getId debug applyGlobalLoadBalancerRuleConfig warn execute findByGslbRuleIdAndLbRuleId remove getId setState update getId
focal_method.modifiers: @Override @DB @ActionEvent(eventType = EventTypes.EVENT_REMOVE_FROM_GLOBAL_LOAD_BALANCER_RULE, eventDescription = "Removing a load balancer rule to be part of global load balancer rule") public
focal_method.parameters: (RemoveFromGlobalLoadBalancerRuleCmd removeFromGslbCmd)
focal_method.return: boolean
focal_method.signature: boolean removeFromGlobalLoadBalancerRule(RemoveFromGlobalLoadBalancerRuleCmd removeFromGslbCmd)