Skip to content

Commit cc525a3

Browse files
committed
modify iteration for CallID and UserBased algo
1 parent a6dc98b commit cc525a3

File tree

2 files changed

+50
-44
lines changed

2 files changed

+50
-44
lines changed

jar/src/main/java/org/mobicents/tools/sip/balancer/CallIDAffinityBalancerAlgorithm.java

+25-22
Original file line numberDiff line numberDiff line change
@@ -280,30 +280,33 @@ protected synchronized Node nextAvailableNode(Boolean isIpV6) {
280280
ipv4It = currIt;
281281
}
282282
Entry<KeySip, Node> pair = null;
283-
while(currIt.hasNext())
283+
int count = invocationContext.sipNodeMap(isIpV6).size();
284+
while(count>0)
284285
{
285-
pair = currIt.next();
286-
if(invocationContext.sipNodeMap(isIpV6).containsKey(pair.getKey())
287-
&&!invocationContext.sipNodeMap(isIpV6).get(pair.getKey()).isGracefulShutdown()
288-
&&!invocationContext.sipNodeMap(isIpV6).get(pair.getKey()).isBad())
289-
return pair.getValue();
290-
}
291-
currIt = invocationContext.sipNodeMap(isIpV6).entrySet().iterator();
292-
if(isIpV6)
293-
ipv6It = currIt;
294-
else
295-
ipv4It = currIt;
296-
if(currIt.hasNext())
297-
{
298-
pair = currIt.next();
299-
if(!invocationContext.sipNodeMap(isIpV6).get(pair.getKey()).isGracefulShutdown()
300-
&&!invocationContext.sipNodeMap(isIpV6).get(pair.getKey()).isBad())
301-
return pair.getValue();
302-
else
303-
return null;
286+
while(currIt.hasNext() && count > 0)
287+
{
288+
pair = currIt.next();
289+
if(invocationContext.sipNodeMap(isIpV6).containsKey(pair.getKey())
290+
&&!invocationContext.sipNodeMap(isIpV6).get(pair.getKey()).isGracefulShutdown()
291+
&&!invocationContext.sipNodeMap(isIpV6).get(pair.getKey()).isBad())
292+
{
293+
return pair.getValue();
294+
}
295+
else
296+
{
297+
count--;
298+
}
299+
}
300+
301+
if(!currIt.hasNext())
302+
currIt = invocationContext.sipNodeMap(isIpV6).entrySet().iterator();
303+
304+
if(isIpV6)
305+
ipv6It = currIt;
306+
else
307+
ipv4It = currIt;
304308
}
305-
else
306-
return null;
309+
return null;
307310
}
308311

309312
protected synchronized Node leastBusyTargetNode(Node deadNode) {

jar/src/main/java/org/mobicents/tools/sip/balancer/UserBasedAlgorithm.java

+25-22
Original file line numberDiff line numberDiff line change
@@ -312,30 +312,33 @@ protected synchronized Node nextAvailableNode(Boolean isIpV6) {
312312
ipv4It = currIt;
313313
}
314314
Entry<KeySip, Node> pair = null;
315-
while(currIt.hasNext())
315+
int count = invocationContext.sipNodeMap(isIpV6).size();
316+
while(count>0)
316317
{
317-
pair = currIt.next();
318-
if(invocationContext.sipNodeMap(isIpV6).containsKey(pair.getKey())
319-
&&!invocationContext.sipNodeMap(isIpV6).get(pair.getKey()).isGracefulShutdown()
320-
&&!invocationContext.sipNodeMap(isIpV6).get(pair.getKey()).isBad())
321-
return pair.getValue();
322-
}
323-
currIt = invocationContext.sipNodeMap(isIpV6).entrySet().iterator();
324-
if(isIpV6)
325-
ipv6It = currIt;
326-
else
327-
ipv4It = currIt;
328-
if(currIt.hasNext())
329-
{
330-
pair = currIt.next();
331-
if(!invocationContext.sipNodeMap(isIpV6).get(pair.getKey()).isGracefulShutdown()
332-
&&!invocationContext.sipNodeMap(isIpV6).get(pair.getKey()).isBad())
333-
return pair.getValue();
318+
while(currIt.hasNext() && count > 0)
319+
{
320+
pair = currIt.next();
321+
if(invocationContext.sipNodeMap(isIpV6).containsKey(pair.getKey())
322+
&&!invocationContext.sipNodeMap(isIpV6).get(pair.getKey()).isGracefulShutdown()
323+
&&!invocationContext.sipNodeMap(isIpV6).get(pair.getKey()).isBad())
324+
{
325+
return pair.getValue();
326+
}
327+
else
328+
{
329+
count--;
330+
}
331+
}
332+
333+
if(!currIt.hasNext())
334+
currIt = invocationContext.sipNodeMap(isIpV6).entrySet().iterator();
335+
336+
if(isIpV6)
337+
ipv6It = currIt;
334338
else
335-
return null;
339+
ipv4It = currIt;
336340
}
337-
else
338-
return null;
341+
return null;
339342
}
340343

341344
protected synchronized Node leastBusyTargetNode(Node deadNode) {
@@ -488,4 +491,4 @@ synchronized public void groupedFailover(Node oldNode, Node newNode) {
488491
}
489492
}
490493

491-
}
494+
}

0 commit comments

Comments
 (0)