X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fsamples%2Floadbalancer%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fsamples%2Floadbalancer%2Fpolicies%2FRoundRobinLBPolicy.java;h=c8687883e7e08cc0711a4d53a34762471fe06bb0;hb=refs%2Fchanges%2F47%2F447%2F2;hp=f1011dddc5fdf6f054db30603b1f60b0a7a35a50;hpb=bf9ead90c2584be7c6bafff0a49aec3db62f54da;p=controller.git diff --git a/opendaylight/samples/loadbalancer/src/main/java/org/opendaylight/controller/samples/loadbalancer/policies/RoundRobinLBPolicy.java b/opendaylight/samples/loadbalancer/src/main/java/org/opendaylight/controller/samples/loadbalancer/policies/RoundRobinLBPolicy.java index f1011dddc5..c8687883e7 100644 --- a/opendaylight/samples/loadbalancer/src/main/java/org/opendaylight/controller/samples/loadbalancer/policies/RoundRobinLBPolicy.java +++ b/opendaylight/samples/loadbalancer/src/main/java/org/opendaylight/controller/samples/loadbalancer/policies/RoundRobinLBPolicy.java @@ -23,23 +23,23 @@ import org.slf4j.LoggerFactory; * */ public class RoundRobinLBPolicy implements ILoadBalancingPolicy{ - + /* * Logger instance */ private static final Logger rrLogger = LoggerFactory.getLogger(RoundRobinLBPolicy.class); - + /* - * Reference to the configuration manager. This reference is passed from load balancer + * Reference to the configuration manager. This reference is passed from load balancer * class. */ private ConfigManager cmgr; - + /* * Mapping between the client and the pool member that serves all traffic for that client. */ private HashMap clientMemberMap; - + /* * Maintains the next pool member counter for the VIPs. * More than one VIP can be attached to one pool, so each VIP @@ -47,34 +47,34 @@ public class RoundRobinLBPolicy implements ILoadBalancingPolicy{ * the same pool. */ private HashMap nextItemFromPool; - + @SuppressWarnings("unused") private RoundRobinLBPolicy(){} - + public RoundRobinLBPolicy(ConfigManager cmgr){ this.cmgr = cmgr; this.clientMemberMap = new HashMap(); this.nextItemFromPool = new HashMap(); } - + @Override public String getPoolMemberForClient(Client source, VIP dest){ - + rrLogger.info("Received traffic from client : {} for VIP : {} ",source, dest); - + syncWithLoadBalancerData(); - + PoolMember pm= null; - + if(this.clientMemberMap.containsKey(source)){ - + pm= this.clientMemberMap.get(source); rrLogger.info("Client {} had sent traffic before,new traffic will be routed to the same pool member {}",source,pm); }else{ - + Pool pool = null; if(nextItemFromPool.containsKey(dest)){ - + int memberNum = nextItemFromPool.get(dest).intValue(); rrLogger.debug("Packet is from new client for VIP {}",dest); pool = this.cmgr.getPool(dest.getPoolName()); @@ -82,19 +82,19 @@ public class RoundRobinLBPolicy implements ILoadBalancingPolicy{ this.clientMemberMap.put(source, pm ); rrLogger.info("New client's packet will be directed to pool member {}",pm); memberNum++; - + if(memberNum > pool.getAllMembers().size()-1){ memberNum = 0; } rrLogger.debug("Next pool member for new client of VIP is set to {}",pool.getAllMembers().get(memberNum)); - + this.nextItemFromPool.put(dest, new Integer(memberNum)); }else{ rrLogger.debug("Network traffic for VIP : {} has appeared first time from client {}",dest,source); pool = this.cmgr.getPool(dest.getPoolName()); pm = pool.getAllMembers().get(0); this.clientMemberMap.put(source, pm); - + rrLogger.info("Network traffic from client {} will be directed to pool member {}",pm); this.nextItemFromPool.put(dest, new Integer(1)); rrLogger.debug("Next pool member for new client of VIP is set to {}",pool.getAllMembers().get(1)); @@ -102,7 +102,7 @@ public class RoundRobinLBPolicy implements ILoadBalancingPolicy{ } return pm.getIp(); } - + /* * This method does the clean up. Whenever a new client packet arrives with a given VIP, * this method checks the current configuration to see if any pool members have been deleted and @@ -111,43 +111,43 @@ public class RoundRobinLBPolicy implements ILoadBalancingPolicy{ private void syncWithLoadBalancerData(){ rrLogger.debug("[Client - PoolMember] table before cleanup : {}",this.clientMemberMap.toString()); ArrayList removeClient = new ArrayList(); - + if(this.clientMemberMap.size() != 0){ for(Client client : this.clientMemberMap.keySet()){ if(!this.cmgr.memberExists(this.clientMemberMap.get(client).getName(), this.clientMemberMap.get(client).getPoolName())){ - + removeClient.add(client); } } } - + for(Client client : removeClient){ this.clientMemberMap.remove(client); - + rrLogger.debug("Removed client : {} ",client); } rrLogger.debug("[Client - PoolMember] table after cleanup : {}",this.clientMemberMap.toString()); - + rrLogger.debug("[VIP- NextMember] table before cleanup : {}",this.nextItemFromPool.toString()); - + ArrayList resetVIPPoolMemberCount= new ArrayList(); - + if(this.nextItemFromPool.size() != 0){ - + for(VIP vip:this.nextItemFromPool.keySet()){ if(this.nextItemFromPool.get(vip).intValue() > this.cmgr.getPool(vip.getPoolName()).getAllMembers().size()-1){ - + resetVIPPoolMemberCount.add(vip); } } } - + for(VIP vip:resetVIPPoolMemberCount){ rrLogger.debug("VIP next pool member counter reset to 0"); this.nextItemFromPool.put(vip, new Integer(0)); } - + rrLogger.debug("[VIP- NextMember] table after cleanup : {}",this.nextItemFromPool.toString()); } }