http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/e245efed/server/src/com/cloud/network/as/dao/AutoScaleVmGroupDaoImpl.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/network/as/dao/AutoScaleVmGroupDaoImpl.java b/server/src/com/cloud/network/as/dao/AutoScaleVmGroupDaoImpl.java new file mode 100644 index 0000000..80f2bee --- /dev/null +++ b/server/src/com/cloud/network/as/dao/AutoScaleVmGroupDaoImpl.java @@ -0,0 +1,62 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. +package com.cloud.network.as.dao; + +import java.util.List; + +import javax.ejb.Local; + +import com.cloud.network.as.AutoScaleVmGroupVO; +import com.cloud.utils.db.GenericDaoBase; +import com.cloud.utils.db.GenericSearchBuilder; +import com.cloud.utils.db.SearchCriteria; +import com.cloud.utils.db.SearchCriteria.Func; + +@Local(value = { AutoScaleVmGroupDao.class }) +public class AutoScaleVmGroupDaoImpl extends GenericDaoBase<AutoScaleVmGroupVO, Long> implements AutoScaleVmGroupDao { + + @Override + public List<AutoScaleVmGroupVO> listByAll(Long loadBalancerId, Long profileId) { + SearchCriteria<AutoScaleVmGroupVO> sc = createSearchCriteria(); + + if(loadBalancerId != null) + sc.addAnd("loadBalancerId", SearchCriteria.Op.EQ, loadBalancerId); + + if(profileId != null) + sc.addAnd("profileId", SearchCriteria.Op.EQ, profileId); + + return listBy(sc); + } + + @Override + public boolean isProfileInUse(long profileId) { + SearchCriteria<AutoScaleVmGroupVO> sc = createSearchCriteria(); + sc.addAnd("profileId", SearchCriteria.Op.EQ, profileId); + return findOneBy(sc) != null; + } + + @Override + public boolean isAutoScaleLoadBalancer(Long loadBalancerId) { + GenericSearchBuilder<AutoScaleVmGroupVO, Long> CountByAccount = createSearchBuilder(Long.class); + CountByAccount.select(null, Func.COUNT, null); + CountByAccount.and("loadBalancerId", CountByAccount.entity().getLoadBalancerId(), SearchCriteria.Op.EQ); + + SearchCriteria<Long> sc = CountByAccount.create(); + sc.setParameters("loadBalancerId", loadBalancerId); + return customSearch(sc, null).get(0) > 0; + } +}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/e245efed/server/src/com/cloud/network/as/dao/AutoScaleVmGroupPolicyMapDao.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/network/as/dao/AutoScaleVmGroupPolicyMapDao.java b/server/src/com/cloud/network/as/dao/AutoScaleVmGroupPolicyMapDao.java new file mode 100644 index 0000000..40a0776 --- /dev/null +++ b/server/src/com/cloud/network/as/dao/AutoScaleVmGroupPolicyMapDao.java @@ -0,0 +1,26 @@ +// Copyright 2012 Citrix Systems, Inc. Licensed under the +// Apache License, Version 2.0 (the "License"); you may not use this +// file except in compliance with the License. Citrix Systems, Inc. +// reserves all rights not expressly granted by the License. +// You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// Automatically generated by addcopyright.py at 04/03/2012 +package com.cloud.network.as.dao; + +import java.util.List; + +import com.cloud.network.as.AutoScaleVmGroupPolicyMapVO; +import com.cloud.utils.db.GenericDao; + +public interface AutoScaleVmGroupPolicyMapDao extends GenericDao<AutoScaleVmGroupPolicyMapVO, Long> { + boolean removeByGroupId(long vmGroupId); + boolean removeByGroupAndPolicies(long vmGroupId, List<Long> bakupPolicyIds); + List<AutoScaleVmGroupPolicyMapVO> listByVmGroupId(long vmGroupId); + List<AutoScaleVmGroupPolicyMapVO> listByPolicyId(long policyId); + public boolean isAutoScalePolicyInUse(long policyId); +} http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/e245efed/server/src/com/cloud/network/as/dao/AutoScaleVmGroupPolicyMapDaoImpl.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/network/as/dao/AutoScaleVmGroupPolicyMapDaoImpl.java b/server/src/com/cloud/network/as/dao/AutoScaleVmGroupPolicyMapDaoImpl.java new file mode 100644 index 0000000..c33a55f --- /dev/null +++ b/server/src/com/cloud/network/as/dao/AutoScaleVmGroupPolicyMapDaoImpl.java @@ -0,0 +1,74 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. +package com.cloud.network.as.dao; + +import java.util.List; + +import javax.ejb.Local; + +import com.cloud.network.as.AutoScaleVmGroupPolicyMapVO; +import com.cloud.utils.db.GenericDaoBase; +import com.cloud.utils.db.SearchBuilder; +import com.cloud.utils.db.SearchCriteria; +import com.cloud.utils.db.SearchCriteria.Op; + +@Local(value={AutoScaleVmGroupPolicyMapDao.class}) +public class AutoScaleVmGroupPolicyMapDaoImpl extends GenericDaoBase<AutoScaleVmGroupPolicyMapVO, Long> implements AutoScaleVmGroupPolicyMapDao { + + @Override + public boolean removeByGroupId(long vmGroupId) { + SearchCriteria<AutoScaleVmGroupPolicyMapVO> sc = createSearchCriteria(); + sc.addAnd("vmGroupId", SearchCriteria.Op.EQ, vmGroupId); + + return expunge(sc) > 0; + } + + @Override + public boolean removeByGroupAndPolicies(long vmGroupId, List<Long> policyIds) { + SearchBuilder<AutoScaleVmGroupPolicyMapVO> policySearch = createSearchBuilder(); + policySearch.and("vmGroupId", policySearch.entity().getVmGroupId(), Op.EQ); + policySearch.and("policyIds", policySearch.entity().getPolicyId(), Op.IN); + policySearch.done(); + SearchCriteria<AutoScaleVmGroupPolicyMapVO> sc = policySearch.create(); + sc.setParameters("vmGroupId", vmGroupId); + sc.setParameters("policyIds", policyIds); + return expunge(sc) > 0; + } + + @Override + public List<AutoScaleVmGroupPolicyMapVO> listByVmGroupId(long vmGroupId) { + SearchCriteria<AutoScaleVmGroupPolicyMapVO> sc = createSearchCriteria(); + sc.addAnd("vmGroupId", SearchCriteria.Op.EQ, vmGroupId); + return listBy(sc); + } + + @Override + public List<AutoScaleVmGroupPolicyMapVO> listByPolicyId(long policyId) { + SearchCriteria<AutoScaleVmGroupPolicyMapVO> sc = createSearchCriteria(); + sc.addAnd("policyId", SearchCriteria.Op.EQ, policyId); + + return listBy(sc); + } + + @Override + public boolean isAutoScalePolicyInUse(long policyId) { + SearchCriteria<AutoScaleVmGroupPolicyMapVO> sc = createSearchCriteria(); + sc.addAnd("policyId", SearchCriteria.Op.EQ, policyId); + return findOneBy(sc) != null; + } + +} http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/e245efed/server/src/com/cloud/network/as/dao/AutoScaleVmProfileDao.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/network/as/dao/AutoScaleVmProfileDao.java b/server/src/com/cloud/network/as/dao/AutoScaleVmProfileDao.java new file mode 100644 index 0000000..0803571 --- /dev/null +++ b/server/src/com/cloud/network/as/dao/AutoScaleVmProfileDao.java @@ -0,0 +1,23 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. +package com.cloud.network.as.dao; + +import com.cloud.network.as.AutoScaleVmProfileVO; +import com.cloud.utils.db.GenericDao; + +public interface AutoScaleVmProfileDao extends GenericDao<AutoScaleVmProfileVO, Long> { +} http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/e245efed/server/src/com/cloud/network/as/dao/AutoScaleVmProfileDaoImpl.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/network/as/dao/AutoScaleVmProfileDaoImpl.java b/server/src/com/cloud/network/as/dao/AutoScaleVmProfileDaoImpl.java new file mode 100644 index 0000000..12392c3 --- /dev/null +++ b/server/src/com/cloud/network/as/dao/AutoScaleVmProfileDaoImpl.java @@ -0,0 +1,26 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. +package com.cloud.network.as.dao; + +import javax.ejb.Local; + +import com.cloud.network.as.AutoScaleVmProfileVO; +import com.cloud.utils.db.GenericDaoBase; + +@Local(value = { AutoScaleVmProfileDao.class }) +public class AutoScaleVmProfileDaoImpl extends GenericDaoBase<AutoScaleVmProfileVO, Long> implements AutoScaleVmProfileDao { +} http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/e245efed/server/src/com/cloud/network/as/dao/ConditionDao.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/network/as/dao/ConditionDao.java b/server/src/com/cloud/network/as/dao/ConditionDao.java new file mode 100644 index 0000000..1ff4d20 --- /dev/null +++ b/server/src/com/cloud/network/as/dao/ConditionDao.java @@ -0,0 +1,27 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +package com.cloud.network.as.dao; + +import com.cloud.network.as.ConditionVO; +import com.cloud.utils.db.GenericDao; + +public interface ConditionDao extends GenericDao<ConditionVO, Long> { + + ConditionVO findByCounterId(long ctrId); + +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/e245efed/server/src/com/cloud/network/as/dao/ConditionDaoImpl.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/network/as/dao/ConditionDaoImpl.java b/server/src/com/cloud/network/as/dao/ConditionDaoImpl.java new file mode 100644 index 0000000..338fe19 --- /dev/null +++ b/server/src/com/cloud/network/as/dao/ConditionDaoImpl.java @@ -0,0 +1,46 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +package com.cloud.network.as.dao; + +import javax.ejb.Local; + +import com.cloud.network.as.ConditionVO; +import com.cloud.utils.db.GenericDaoBase; +import com.cloud.utils.db.SearchBuilder; +import com.cloud.utils.db.SearchCriteria; +import com.cloud.utils.db.SearchCriteria.Op; + +@Local(value = ConditionDao.class) +public class ConditionDaoImpl extends GenericDaoBase<ConditionVO, Long> implements ConditionDao { + final SearchBuilder<ConditionVO> AllFieldsSearch; + + protected ConditionDaoImpl() { + AllFieldsSearch = createSearchBuilder(); + AllFieldsSearch.and("id", AllFieldsSearch.entity().getId(), Op.EQ); + AllFieldsSearch.and("counterId", AllFieldsSearch.entity().getCounterid(), Op.EQ); + AllFieldsSearch.done(); + } + + @Override + public ConditionVO findByCounterId(long ctrId) { + // TODO - may consider indexing counterId field in db-schema + SearchCriteria<ConditionVO> sc = AllFieldsSearch.create(); + sc.setParameters("counterId", ctrId); + return findOneBy(sc); + } +} http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/e245efed/server/src/com/cloud/network/as/dao/CounterDao.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/network/as/dao/CounterDao.java b/server/src/com/cloud/network/as/dao/CounterDao.java new file mode 100644 index 0000000..dd9cf08 --- /dev/null +++ b/server/src/com/cloud/network/as/dao/CounterDao.java @@ -0,0 +1,29 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +package com.cloud.network.as.dao; + +import java.util.List; + +import com.cloud.network.as.CounterVO; +import com.cloud.utils.db.Filter; +import com.cloud.utils.db.GenericDao; + +public interface CounterDao extends GenericDao<CounterVO, Long> { + public List<CounterVO> listCounters(Long id, String name, String source, String keyword, Filter filter); + +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/e245efed/server/src/com/cloud/network/as/dao/CounterDaoImpl.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/network/as/dao/CounterDaoImpl.java b/server/src/com/cloud/network/as/dao/CounterDaoImpl.java new file mode 100644 index 0000000..a8cbfbc --- /dev/null +++ b/server/src/com/cloud/network/as/dao/CounterDaoImpl.java @@ -0,0 +1,67 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +package com.cloud.network.as.dao; + +import java.util.List; + +import javax.ejb.Local; + +import com.cloud.network.as.CounterVO; +import com.cloud.utils.db.Filter; +import com.cloud.utils.db.GenericDaoBase; +import com.cloud.utils.db.SearchBuilder; +import com.cloud.utils.db.SearchCriteria; +import com.cloud.utils.db.SearchCriteria.Op; + +@Local(value = CounterDao.class) +public class CounterDaoImpl extends GenericDaoBase<CounterVO, Long> implements CounterDao { + final SearchBuilder<CounterVO> AllFieldsSearch; + + protected CounterDaoImpl() { + AllFieldsSearch = createSearchBuilder(); + AllFieldsSearch.and("id", AllFieldsSearch.entity().getId(), Op.EQ); + AllFieldsSearch.and("name", AllFieldsSearch.entity().getName(), Op.LIKE); + AllFieldsSearch.and("source", AllFieldsSearch.entity().getSource(), Op.EQ); + AllFieldsSearch.done(); + } + + @Override + public List<CounterVO> listCounters(Long id, String name, String source, String keyword, Filter filter) { + SearchCriteria<CounterVO> sc = AllFieldsSearch.create(); + + if (keyword != null) { + SearchCriteria<CounterVO> ssc = createSearchCriteria(); + ssc.addOr("name", SearchCriteria.Op.LIKE, "%" + keyword + "%"); + sc.addAnd("name", SearchCriteria.Op.SC, ssc); + } + + if (name != null) { + sc.addAnd("name", SearchCriteria.Op.LIKE, "%" + name + "%"); + } + + if (id != null) { + sc.addAnd("id", SearchCriteria.Op.EQ, id); + } + + if (source != null) { + sc.addAnd("source", SearchCriteria.Op.EQ, source); + } + return listBy(sc, filter); + } + +} http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/e245efed/server/src/com/cloud/network/dao/LoadBalancerVMMapDao.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/network/dao/LoadBalancerVMMapDao.java b/server/src/com/cloud/network/dao/LoadBalancerVMMapDao.java index 24dcf45..f717344 100644 --- a/server/src/com/cloud/network/dao/LoadBalancerVMMapDao.java +++ b/server/src/com/cloud/network/dao/LoadBalancerVMMapDao.java @@ -28,5 +28,5 @@ public interface LoadBalancerVMMapDao extends GenericDao<LoadBalancerVMMapVO, Lo List<LoadBalancerVMMapVO> listByLoadBalancerId(long loadBalancerId); List<LoadBalancerVMMapVO> listByLoadBalancerId(long loadBalancerId, boolean revoke); LoadBalancerVMMapVO findByLoadBalancerIdAndVmId(long loadBalancerId, long instanceId); - + boolean isVmAttachedToLoadBalancer(long loadBalancerId); } http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/e245efed/server/src/com/cloud/network/dao/LoadBalancerVMMapDaoImpl.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/network/dao/LoadBalancerVMMapDaoImpl.java b/server/src/com/cloud/network/dao/LoadBalancerVMMapDaoImpl.java index ab0e3ab..b1a6dda 100644 --- a/server/src/com/cloud/network/dao/LoadBalancerVMMapDaoImpl.java +++ b/server/src/com/cloud/network/dao/LoadBalancerVMMapDaoImpl.java @@ -22,7 +22,9 @@ import javax.ejb.Local; import com.cloud.network.LoadBalancerVMMapVO; import com.cloud.utils.db.GenericDaoBase; +import com.cloud.utils.db.GenericSearchBuilder; import com.cloud.utils.db.SearchCriteria; +import com.cloud.utils.db.SearchCriteria.Func; @Local(value={LoadBalancerVMMapDao.class}) public class LoadBalancerVMMapDaoImpl extends GenericDaoBase<LoadBalancerVMMapVO, Long> implements LoadBalancerVMMapDao { @@ -71,7 +73,7 @@ public class LoadBalancerVMMapDaoImpl extends GenericDaoBase<LoadBalancerVMMapVO return listBy(sc); } - + @Override public LoadBalancerVMMapVO findByLoadBalancerIdAndVmId(long loadBalancerId, long instanceId) { SearchCriteria<LoadBalancerVMMapVO> sc = createSearchCriteria(); @@ -80,5 +82,14 @@ public class LoadBalancerVMMapDaoImpl extends GenericDaoBase<LoadBalancerVMMapVO return findOneBy(sc); } - + @Override + public boolean isVmAttachedToLoadBalancer(long loadBalancerId) { + GenericSearchBuilder<LoadBalancerVMMapVO, Long> CountByAccount = createSearchBuilder(Long.class); + CountByAccount.select(null, Func.COUNT, null); + CountByAccount.and("loadBalancerId", CountByAccount.entity().getLoadBalancerId(), SearchCriteria.Op.EQ); + + SearchCriteria<Long> sc = CountByAccount.create(); + sc.setParameters("loadBalancerId", loadBalancerId); + return customSearch(sc, null).get(0) > 0; + } } http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/e245efed/server/src/com/cloud/network/lb/LoadBalancingRulesManager.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/network/lb/LoadBalancingRulesManager.java b/server/src/com/cloud/network/lb/LoadBalancingRulesManager.java index d901663..ebe4e2a 100644 --- a/server/src/com/cloud/network/lb/LoadBalancingRulesManager.java +++ b/server/src/com/cloud/network/lb/LoadBalancingRulesManager.java @@ -28,21 +28,23 @@ import com.cloud.network.rules.LoadBalancer; import com.cloud.user.Account; public interface LoadBalancingRulesManager extends LoadBalancingRulesService { - + LoadBalancer createLoadBalancer(CreateLoadBalancerRuleCmd lb, boolean openFirewall) throws NetworkRuleConflictException; - + boolean removeAllLoadBalanacersForIp(long ipId, Account caller, long callerUserId); boolean removeAllLoadBalanacersForNetwork(long networkId, Account caller, long callerUserId); List<LbDestination> getExistingDestinations(long lbId); List<LbStickinessPolicy> getStickinessPolicies(long lbId); List<LbStickinessMethod> getStickinessMethods(long networkid); - + /** * Remove vm from all load balancers * @param vmId * @return true if removal is successful */ boolean removeVmFromLoadBalancers(long vmId); - + boolean applyLoadBalancersForNetwork(long networkId) throws ResourceUnavailableException; + String getLBCapability(long networkid, String capabilityName); + boolean configureLbAutoScaleVmGroup(long vmGroupid); } http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/e245efed/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java b/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java index cefde38..8671151 100755 --- a/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java +++ b/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java @@ -18,6 +18,7 @@ package com.cloud.network.lb; import java.security.InvalidParameterException; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collection; import java.util.HashMap; import java.util.HashSet; @@ -38,7 +39,10 @@ import com.cloud.api.commands.ListLoadBalancerRuleInstancesCmd; import com.cloud.api.commands.ListLoadBalancerRulesCmd; import com.cloud.api.commands.UpdateLoadBalancerRuleCmd; import com.cloud.api.response.ServiceResponse; +import com.cloud.configuration.Config; import com.cloud.configuration.ConfigurationManager; +import com.cloud.configuration.dao.ConfigurationDao; +import com.cloud.dc.dao.DataCenterDao; import com.cloud.dc.dao.VlanDao; import com.cloud.domain.dao.DomainDao; import com.cloud.event.ActionEvent; @@ -51,7 +55,6 @@ import com.cloud.exception.InvalidParameterValueException; import com.cloud.exception.NetworkRuleConflictException; import com.cloud.exception.PermissionDeniedException; import com.cloud.exception.ResourceUnavailableException; -import com.cloud.network.dao.NetworkServiceMapDao; import com.cloud.network.ExternalLoadBalancerUsageManager; import com.cloud.network.IPAddressVO; import com.cloud.network.IpAddress; @@ -64,6 +67,21 @@ import com.cloud.network.Network.Provider; import com.cloud.network.Network.Service; import com.cloud.network.NetworkManager; import com.cloud.network.NetworkVO; +import com.cloud.network.as.AutoScalePolicy; +import com.cloud.network.as.AutoScalePolicyConditionMapVO; +import com.cloud.network.as.AutoScaleVmGroup; +import com.cloud.network.as.AutoScaleVmGroupPolicyMapVO; +import com.cloud.network.as.AutoScaleVmGroupVO; +import com.cloud.network.as.AutoScaleVmProfile; +import com.cloud.network.as.Condition; +import com.cloud.network.as.Counter; +import com.cloud.network.as.dao.AutoScalePolicyConditionMapDao; +import com.cloud.network.as.dao.AutoScalePolicyDao; +import com.cloud.network.as.dao.AutoScaleVmGroupDao; +import com.cloud.network.as.dao.AutoScaleVmGroupPolicyMapDao; +import com.cloud.network.as.dao.AutoScaleVmProfileDao; +import com.cloud.network.as.dao.ConditionDao; +import com.cloud.network.as.dao.CounterDao; import com.cloud.network.dao.FirewallRulesCidrsDao; import com.cloud.network.dao.FirewallRulesDao; import com.cloud.network.dao.IPAddressDao; @@ -71,7 +89,11 @@ import com.cloud.network.dao.LBStickinessPolicyDao; import com.cloud.network.dao.LoadBalancerDao; import com.cloud.network.dao.LoadBalancerVMMapDao; import com.cloud.network.dao.NetworkDao; -import com.cloud.network.element.NetworkElement; +import com.cloud.network.dao.NetworkServiceMapDao; +import com.cloud.network.lb.LoadBalancingRule.LbAutoScalePolicy; +import com.cloud.network.lb.LoadBalancingRule.LbAutoScaleVmGroup; +import com.cloud.network.lb.LoadBalancingRule.LbAutoScaleVmProfile; +import com.cloud.network.lb.LoadBalancingRule.LbCondition; import com.cloud.network.lb.LoadBalancingRule.LbDestination; import com.cloud.network.lb.LoadBalancingRule.LbStickinessPolicy; import com.cloud.network.rules.FirewallManager; @@ -89,11 +111,14 @@ import com.cloud.projects.Project.ListProjectResourcesCriteria; import com.cloud.server.ResourceTag.TaggedResourceType; import com.cloud.tags.ResourceTagVO; import com.cloud.tags.dao.ResourceTagDao; +import com.cloud.template.TemplateManager; import com.cloud.user.Account; import com.cloud.user.AccountManager; import com.cloud.user.DomainService; +import com.cloud.user.User; import com.cloud.user.UserContext; import com.cloud.user.dao.AccountDao; +import com.cloud.user.dao.UserDao; import com.cloud.uservm.UserVm; import com.cloud.utils.Ternary; import com.cloud.utils.component.Inject; @@ -106,7 +131,6 @@ import com.cloud.utils.db.SearchCriteria; import com.cloud.utils.db.Transaction; import com.cloud.utils.exception.CloudRuntimeException; import com.cloud.utils.net.NetUtils; -import com.cloud.utils.AnnotationHelper; import com.cloud.vm.Nic; import com.cloud.vm.UserVmVO; import com.cloud.vm.VirtualMachine.State; @@ -162,13 +186,37 @@ public class LoadBalancingRulesManagerImpl<Type> implements LoadBalancingRulesMa @Inject ConfigurationManager _configMgr; @Inject + TemplateManager _templateMgr; + @Inject ExternalLoadBalancerUsageManager _externalLBUsageMgr; - @Inject + @Inject NetworkServiceMapDao _ntwkSrvcDao; @Inject ResourceTagDao _resourceTagDao; + @Inject + CounterDao _counterDao; + @Inject + ConditionDao _conditionDao; + @Inject + AutoScaleVmProfileDao _autoScaleVmProfileDao; + @Inject + AutoScalePolicyDao _autoScalePolicyDao; + @Inject + AutoScalePolicyConditionMapDao _autoScalePolicyConditionMapDao; + @Inject + AutoScaleVmGroupDao _autoScaleVmGroupDao; + @Inject + AutoScaleVmGroupPolicyMapDao _autoScaleVmGroupPolicyMapDao; + @Inject + ConfigurationDao _configDao; + @Inject + DataCenterDao _dcDao = null; + @Inject + UserDao _userDao; - private String getLBStickinessCapability(long networkid) { + // Will return a string. For LB Stickiness this will be a json, for autoscale this will be "," separated values + @Override + public String getLBCapability(long networkid, String capabilityName) { Map<Service, Map<Capability, String>> serviceCapabilitiesMap = _networkMgr.getNetworkCapabilities(networkid); if (serviceCapabilitiesMap != null) { for (Service service : serviceCapabilitiesMap.keySet()) { @@ -176,12 +224,11 @@ public class LoadBalancingRulesManagerImpl<Type> implements LoadBalancingRulesMa serviceResponse.setName(service.getName()); if ("Lb".equalsIgnoreCase(service.getName())) { Map<Capability, String> serviceCapabilities = serviceCapabilitiesMap - .get(service); + .get(service); if (serviceCapabilities != null) { for (Capability capability : serviceCapabilities .keySet()) { - if (Capability.SupportedStickinessMethods.getName() - .equals(capability.getName())) { + if (capabilityName.equals(capability.getName())) { return serviceCapabilities.get(capability); } } @@ -191,6 +238,113 @@ public class LoadBalancingRulesManagerImpl<Type> implements LoadBalancingRulesMa } return null; } + private LbAutoScaleVmGroup getLbAutoScaleVmGroup(AutoScaleVmGroup vmGroup) { + List<AutoScaleVmGroupPolicyMapVO> vmGroupPolicyMapList = _autoScaleVmGroupPolicyMapDao.listByVmGroupId(vmGroup.getId()); + List<LbAutoScalePolicy> autoScalePolicies = new ArrayList<LbAutoScalePolicy>(); + for (AutoScaleVmGroupPolicyMapVO vmGroupPolicyMap : vmGroupPolicyMapList) { + AutoScalePolicy autoScalePolicy = _autoScalePolicyDao.findById(vmGroupPolicyMap.getPolicyId()); + List<AutoScalePolicyConditionMapVO> autoScalePolicyConditionMapList = _autoScalePolicyConditionMapDao.listByAll(autoScalePolicy.getId(), null); + List<LbCondition> lbConditions = new ArrayList<LbCondition>(); + for (AutoScalePolicyConditionMapVO autoScalePolicyConditionMap : autoScalePolicyConditionMapList) { + Condition condition = _conditionDao.findById(autoScalePolicyConditionMap.getConditionId()); + Counter counter = _counterDao.findById(condition.getCounterid()); + lbConditions.add(new LbCondition(counter, condition)); + } + autoScalePolicies.add(new LbAutoScalePolicy(autoScalePolicy, lbConditions)); + } + AutoScaleVmProfile autoScaleVmProfile = _autoScaleVmProfileDao.findById(vmGroup.getProfileId()); + Long autoscaleUserId = autoScaleVmProfile.getAutoScaleUserId(); + User user = _userDao.findById(autoscaleUserId); + String apiKey = user.getApiKey(); + String secretKey = user.getSecretKey(); + String csUrl = _configDao.getValue(Config.EndpointeUrl.key()); + + if(apiKey == null) { + throw new InvalidParameterValueException("apiKey for user: " + user.getUsername() + " is empty. Please generate it"); + } + + if(secretKey == null) { + throw new InvalidParameterValueException("secretKey for user: " + user.getUsername() + " is empty. Please generate it"); + } + + if(csUrl == null || csUrl.contains("localhost")) { + throw new InvalidParameterValueException("Global setting endpointe.url has to be set to the Management Server's API end point"); + } + + LbAutoScaleVmProfile lbAutoScaleVmProfile = new LbAutoScaleVmProfile(autoScaleVmProfile, apiKey, secretKey, csUrl); + return new LbAutoScaleVmGroup(vmGroup, autoScalePolicies, lbAutoScaleVmProfile); + } + + private boolean applyAutoScaleConfig(LoadBalancerVO lb, LoadBalancingRule rule) throws ResourceUnavailableException { + if (!isRollBackAllowedForProvider(lb)) { + // this is for Netscalar type of devices. if their is failure the db entries will be rollbacked. + return false; + } + + List<LoadBalancingRule> rules = Arrays.asList(rule); + + if (!_networkMgr.applyRules(rules, false)) { + s_logger.debug("LB rules' autoscale config are not completely applied"); + return false; + } + + return true; + } + + @Override + @DB + public boolean configureLbAutoScaleVmGroup(long vmGroupid) { + AutoScaleVmGroupVO vmGroup = _autoScaleVmGroupDao.findById(vmGroupid); + boolean success = false; + + LoadBalancerVO loadBalancer = _lbDao.findById(vmGroup.getLoadBalancerId()); + + FirewallRule.State backupState = loadBalancer.getState(); + + if (vmGroup.getState().equals(AutoScaleVmGroup.State_New)) { + loadBalancer.setState(FirewallRule.State.Add); + _lbDao.persist(loadBalancer); + } + else if (loadBalancer.getState() == FirewallRule.State.Active && + vmGroup.getState().equals(AutoScaleVmGroup.State_Revoke)) { + loadBalancer.setState(FirewallRule.State.Add); + _lbDao.persist(loadBalancer); + } + + // LBTODO + try { + LbAutoScaleVmGroup lbAutoScaleVmGroup = getLbAutoScaleVmGroup(vmGroup); + LoadBalancingRule rule = new LoadBalancingRule(loadBalancer, null, null); + rule.setAutoScaleVmGroup(lbAutoScaleVmGroup); + success = applyAutoScaleConfig(loadBalancer, rule); + } catch (ResourceUnavailableException e) { + s_logger.warn("Unable to configure AutoScaleVmGroup to the lb rule: " + loadBalancer.getId() + " because resource is unavaliable:", e); + } finally { + if (!success) { + s_logger.warn("Failed to configure LB Auto Scale Vm Group with Id:" + vmGroupid); + if (isRollBackAllowedForProvider(loadBalancer)) { + loadBalancer.setState(backupState); + _lbDao.persist(loadBalancer); + s_logger.debug("LB Rollback rule id: " + loadBalancer.getId() + " lb state rolback while creating AutoscaleVmGroup"); + } + } + } + + if (success) { + if (vmGroup.getState().equals(AutoScaleVmGroup.State_New)) { + Transaction.currentTxn().start(); + loadBalancer.setState(FirewallRule.State.Active); + s_logger.debug("LB rule " + loadBalancer.getId() + " state is set to Active"); + _lbDao.persist(loadBalancer); + vmGroup.setState(AutoScaleVmGroup.State_Enabled); + _autoScaleVmGroupDao.persist(vmGroup); + s_logger.debug("LB Auto Scale Vm Group with Id: " + vmGroupid + " is set to Enabled state."); + Transaction.currentTxn().commit(); + } + s_logger.info("Successfully configured LB Autoscale Vm Group with Id: " + vmGroupid); + } + return success; + } private boolean genericValidator(CreateLBStickinessPolicyCmd cmd) throws InvalidParameterValueException { LoadBalancerVO loadBalancer = _lbDao.findById(cmd.getLbRuleId()); @@ -307,7 +461,7 @@ public class LoadBalancingRulesManagerImpl<Type> implements LoadBalancingRulesMa @ActionEvent(eventType = EventTypes.EVENT_LB_STICKINESSPOLICY_CREATE, eventDescription = "Apply Stickinesspolicy to load balancer ", async = true) public boolean applyLBStickinessPolicy(CreateLBStickinessPolicyCmd cmd) { boolean success = true; - + LoadBalancerVO loadBalancer = _lbDao.findById(cmd.getLbRuleId()); if (loadBalancer == null) { throw new InvalidParameterException("Invalid Load balancer Id:" + cmd.getLbRuleId()); @@ -335,7 +489,7 @@ public class LoadBalancingRulesManagerImpl<Type> implements LoadBalancingRulesMa @ActionEvent(eventType = EventTypes.EVENT_LB_STICKINESSPOLICY_DELETE, eventDescription = "revoking LB Stickiness policy ", async = true) public boolean deleteLBStickinessPolicy(long stickinessPolicyId, boolean apply) { boolean success = true; - + UserContext caller = UserContext.current(); LBStickinessPolicyVO stickinessPolicy = _lb2stickinesspoliciesDao.findById(stickinessPolicyId); @@ -361,7 +515,7 @@ public class LoadBalancingRulesManagerImpl<Type> implements LoadBalancingRulesMa stickinessPolicy.setRevoke(true); _lb2stickinesspoliciesDao.persist(stickinessPolicy); s_logger.debug("Set load balancer rule for revoke: rule id " + loadBalancerId + ", stickinesspolicyID " + stickinessPolicyId); - + try { if (!applyLoadBalancerConfig(loadBalancerId)) { s_logger.warn("Failed to remove load balancer rule id " + loadBalancerId + " for stickinesspolicyID " + stickinessPolicyId); @@ -383,7 +537,7 @@ public class LoadBalancingRulesManagerImpl<Type> implements LoadBalancingRulesMa } return success; - } + } private boolean isRollBackAllowedForProvider(LoadBalancerVO loadBalancer) { Network network = _networkDao.findById(loadBalancer.getNetworkId()); @@ -417,8 +571,8 @@ public class LoadBalancingRulesManagerImpl<Type> implements LoadBalancingRulesMa UserVm vm = _vmDao.findById(instanceId); if (vm == null || vm.getState() == State.Destroyed || vm.getState() == State.Expunging) { - InvalidParameterValueException ex = new InvalidParameterValueException("Invalid instance id specified"); - ex.addProxyObject(vm, instanceId, "instanceId"); + InvalidParameterValueException ex = new InvalidParameterValueException("Invalid instance id specified"); + ex.addProxyObject(vm, instanceId, "instanceId"); throw ex; } @@ -439,8 +593,8 @@ public class LoadBalancingRulesManagerImpl<Type> implements LoadBalancingRulesMa } if (nicInSameNetwork == null) { - InvalidParameterValueException ex = new InvalidParameterValueException("VM " + instanceId + " cannot be added because it doesn't belong in the same network."); - ex.addProxyObject(vm, instanceId, "instanceId"); + InvalidParameterValueException ex = new InvalidParameterValueException("VM " + instanceId + " cannot be added because it doesn't belong in the same network."); + ex.addProxyObject(vm, instanceId, "instanceId"); throw ex; } @@ -457,7 +611,11 @@ public class LoadBalancingRulesManagerImpl<Type> implements LoadBalancingRulesMa map = _lb2VmMapDao.persist(map); } txn.commit(); - + if (_autoScaleVmGroupDao.isAutoScaleLoadBalancer(loadBalancerId)) { + // Nothing needs to be done for an autoscaled loadbalancer, + // just persist and proceed. + return true; + } boolean success = false; FirewallRule.State backupState = loadBalancer.getState(); try { @@ -483,11 +641,11 @@ public class LoadBalancingRulesManagerImpl<Type> implements LoadBalancingRulesMa } s_logger.warn("Unable to apply the load balancer config because resource is unavaliable.", e); } - + if(!success){ - CloudRuntimeException ex = new CloudRuntimeException("Failed to add specified loadbalancerruleid for vms " + instanceIds); - ex.addProxyObject(loadBalancer, loadBalancerId, "loadBalancerId"); - // TBD: Also pack in the instanceIds in the exception using the right VO object or table name. + CloudRuntimeException ex = new CloudRuntimeException("Failed to add specified loadbalancerruleid for vms " + instanceIds); + ex.addProxyObject(loadBalancer, loadBalancerId, "loadBalancerId"); + // TBD: Also pack in the instanceIds in the exception using the right VO object or table name. throw ex; } @@ -523,23 +681,29 @@ public class LoadBalancingRulesManagerImpl<Type> implements LoadBalancingRulesMa s_logger.debug("Set load balancer rule for revoke: rule id " + loadBalancerId + ", vmId " + instanceId); } + if (_autoScaleVmGroupDao.isAutoScaleLoadBalancer(loadBalancerId)) { + // Nothing needs to be done for an autoscaled loadbalancer, + // just persist and proceed. + return true; + } + if (!applyLoadBalancerConfig(loadBalancerId)) { s_logger.warn("Failed to remove load balancer rule id " + loadBalancerId + " for vms " + instanceIds); CloudRuntimeException ex = new CloudRuntimeException("Failed to remove specified load balancer rule id for vms " + instanceIds); - ex.addProxyObject(loadBalancer, loadBalancerId, "loadBalancerId"); + ex.addProxyObject(loadBalancer, loadBalancerId, "loadBalancerId"); throw ex; } success = true; } catch (ResourceUnavailableException e) { if (rollBack && isRollBackAllowedForProvider(loadBalancer)) { - + for (long instanceId : instanceIds) { LoadBalancerVMMapVO map = _lb2VmMapDao.findByLoadBalancerIdAndVmId(loadBalancerId, instanceId); map.setRevoke(false); _lb2VmMapDao.persist(map); s_logger.debug("LB Rollback rule id: " + loadBalancerId + ",while removing vmId " + instanceId); } - + loadBalancer.setState(backupState); _lbDao.persist(loadBalancer); s_logger.debug("LB Rollback rule id: " + loadBalancerId + " while removing vm instances"); @@ -547,10 +711,10 @@ public class LoadBalancingRulesManagerImpl<Type> implements LoadBalancingRulesMa s_logger.warn("Unable to apply the load balancer config because resource is unavaliable.", e); } if(!success){ - CloudRuntimeException ex = new CloudRuntimeException("Failed to remove specified load balancer rule id for vms " + instanceIds); - ex.addProxyObject(loadBalancer, loadBalancerId, "loadBalancerId"); + CloudRuntimeException ex = new CloudRuntimeException("Failed to remove specified load balancer rule id for vms " + instanceIds); + ex.addProxyObject(loadBalancer, loadBalancerId, "loadBalancerId"); throw ex; - } + } return success; } @@ -617,7 +781,7 @@ public class LoadBalancingRulesManagerImpl<Type> implements LoadBalancingRulesMa boolean generateUsageEvent = false; boolean success = true; FirewallRule.State backupState = lb.getState(); - + txn.start(); if (lb.getState() == FirewallRule.State.Staged) { if (s_logger.isDebugEnabled()) { @@ -765,6 +929,7 @@ public class LoadBalancingRulesManagerImpl<Type> implements LoadBalancingRulesMa return result; } + @Override @DB public LoadBalancer createLoadBalancer(CreateLoadBalancerRuleCmd lb, boolean openFirewall) throws NetworkRuleConflictException { UserContext caller = UserContext.current(); @@ -777,12 +942,12 @@ public class LoadBalancingRulesManagerImpl<Type> implements LoadBalancingRulesMa Long networkId = ipAddr.getSourceNetworkId(); // make sure ip address exists if (ipAddr == null || !ipAddr.readyToUse()) { - InvalidParameterValueException ex = new InvalidParameterValueException("Unable to create load balancer rule, invalid IP address id specified"); - ex.addProxyObject(ipAddr, sourceIpId, "sourceIpId"); + InvalidParameterValueException ex = new InvalidParameterValueException("Unable to create load balancer rule, invalid IP address id specified"); + ex.addProxyObject(ipAddr, sourceIpId, "sourceIpId"); throw ex; } else if (ipAddr.isOneToOneNat()) { - InvalidParameterValueException ex = new InvalidParameterValueException("Unable to create load balancer rule; specified sourceip id has static nat enabled"); - ex.addProxyObject(ipAddr, sourceIpId, "sourceIpId"); + InvalidParameterValueException ex = new InvalidParameterValueException("Unable to create load balancer rule; specified sourceip id has static nat enabled"); + ex.addProxyObject(ipAddr, sourceIpId, "sourceIpId"); throw ex; } @@ -790,8 +955,8 @@ public class LoadBalancingRulesManagerImpl<Type> implements LoadBalancingRulesMa networkId = ipAddr.getAssociatedWithNetworkId(); if (networkId == null) { - InvalidParameterValueException ex = new InvalidParameterValueException("Unable to create load balancer rule ; specified sourceip id is not associated with any network"); - ex.addProxyObject(ipAddr, sourceIpId, "sourceIpId"); + InvalidParameterValueException ex = new InvalidParameterValueException("Unable to create load balancer rule ; specified sourceip id is not associated with any network"); + ex.addProxyObject(ipAddr, sourceIpId, "sourceIpId"); throw ex; } @@ -801,8 +966,8 @@ public class LoadBalancingRulesManagerImpl<Type> implements LoadBalancingRulesMa // verify that lb service is supported by the network if (!_networkMgr.areServicesSupportedInNetwork(network.getId(), Service.Lb)) { - InvalidParameterValueException ex = new InvalidParameterValueException("LB service is not supported in specified network id"); - ex.addProxyObject(network, networkId, "networkId"); + InvalidParameterValueException ex = new InvalidParameterValueException("LB service is not supported in specified network id"); + ex.addProxyObject(network, networkId, "networkId"); throw ex; } @@ -854,10 +1019,9 @@ public class LoadBalancingRulesManagerImpl<Type> implements LoadBalancingRulesMa public boolean applyLoadBalancerConfig(long lbRuleId) throws ResourceUnavailableException { LoadBalancerVO lb = _lbDao.findById(lbRuleId); List<LoadBalancerVO> lbs; - if (isRollBackAllowedForProvider(lb)) { + if (isRollBackAllowedForProvider(lb)) { // this is for Netscalar type of devices. if their is failure the db entries will be rollbacked. - lbs = new ArrayList<LoadBalancerVO>(1); - lbs.add(_lbDao.findById(lbRuleId)); + lbs = Arrays.asList(lb); } else { // get all rules in transition state lbs = _lbDao.listInTransitionStateByNetworkId(lb.getNetworkId()); @@ -1063,7 +1227,7 @@ public class LoadBalancingRulesManagerImpl<Type> implements LoadBalancingRulesMa String algorithm = cmd.getAlgorithm(); LoadBalancerVO lb = _lbDao.findById(lbRuleId); LoadBalancerVO lbBackup = _lbDao.findById(lbRuleId); - + if (lb == null) { throw new InvalidParameterValueException("Unable to find lb rule by id=" + lbRuleId); } @@ -1093,21 +1257,21 @@ public class LoadBalancingRulesManagerImpl<Type> implements LoadBalancingRulesMa applyLoadBalancerConfig(lbRuleId); } catch (ResourceUnavailableException e) { if (isRollBackAllowedForProvider(lb)) { - /* NOTE : We use lb object to update db instead of lbBackup object since db layer will fail to update if there is no change in the object. + /* NOTE : We use lb object to update db instead of lbBackup object since db layer will fail to update if there is no change in the object. */ if (lbBackup.getName() != null) { - lb.setName(lbBackup.getName()); + lb.setName(lbBackup.getName()); } if (lbBackup.getDescription() != null) { lb.setDescription(lbBackup.getDescription()); } if (lbBackup.getAlgorithm() != null){ - lb.setAlgorithm(lbBackup.getAlgorithm()); + lb.setAlgorithm(lbBackup.getAlgorithm()); } lb.setState(lbBackup.getState()); _lbDao.update(lb.getId(), lb); _lbDao.persist(lb); - + s_logger.debug("LB Rollback rule id: " + lbRuleId + " while updating LB rule."); } s_logger.warn("Unable to apply the load balancer config because resource is unavaliable.", e); @@ -1118,7 +1282,7 @@ public class LoadBalancingRulesManagerImpl<Type> implements LoadBalancingRulesMa if (!success) { throw new CloudRuntimeException("Failed to update load balancer rule: " + lbRuleId); } - + return lb; } @@ -1173,12 +1337,22 @@ public class LoadBalancingRulesManagerImpl<Type> implements LoadBalancingRulesMa return loadBalancerInstances; } + public List<String> getSupportedAutoScaleCounters(long networkid) + { + String capability = getLBCapability(networkid, Capability.AutoScaleCounters.getName()); + if (capability == null || capability.length() == 0) { + return null; + } + return Arrays.asList(capability.split(",")); + } + @Override public List<LbStickinessMethod> getStickinessMethods(long networkid) { - String capability = getLBStickinessCapability(networkid); - if (capability == null) + String capability = getLBCapability(networkid, Capability.SupportedStickinessMethods.getName()); + if (capability == null) { return null; + } Gson gson = new Gson(); java.lang.reflect.Type listType = new TypeToken<List<LbStickinessMethod>>() { }.getType(); @@ -1240,7 +1414,7 @@ public class LoadBalancingRulesManagerImpl<Type> implements LoadBalancingRulesMa ipSearch.and("zoneId", ipSearch.entity().getDataCenterId(), SearchCriteria.Op.EQ); sb.join("ipSearch", ipSearch, sb.entity().getSourceIpAddressId(), ipSearch.entity().getId(), JoinBuilder.JoinType.INNER); } - + if (tags != null && !tags.isEmpty()) { SearchBuilder<ResourceTagVO> tagSearch = _resourceTagDao.createSearchBuilder(); for (int count=0; count < tags.size(); count++) { @@ -1282,7 +1456,7 @@ public class LoadBalancingRulesManagerImpl<Type> implements LoadBalancingRulesMa if (zoneId != null) { sc.setJoinParameters("ipSearch", "zoneId", zoneId); } - + if (tags != null && !tags.isEmpty()) { int count = 0;
