I never said there was a bug. I don't think it is a bug. For me a bug is 
something wrong in the code, so the application does not behave as it is 
expected. In this case the code is right. It does what it is expected to do. 
Problem is, I think the expected behavior is a bad behavior. Maybe the original 
developer did not think carefully about this. There is very little use on real 
life scenarios, unless all destinations have plenty of free resources, so they 
can process double or triple load. Maybe the guy would say "yeah, it's a good 
improvement! Let's do it in a backward compatible way!"

Please, take a look at issue #2361. if, instead of Calls, those were CAPS, so 
every destination processes 1000CAPS.  What if those nodes can't process 2000 
CAPS? For instance they are capable of processing 1500CAPS. When one 
destination fails, the next will receive 2000 CAPS. But it can't. Currently 
Kamailio can't solve that scenario. Wouldn't it be better that every 
destination now processes 1200 CAPS? 

That was the point I wanted to discuss. A better distribution. If everything is 
normal. Every destination receives, more or less, same amount of calls (it's 
just hash, not fair distribution). If some destinations fail, the calls they 
were supposed to receive are better distributed over the remaining 
destinations, but respecting the hash : same hash, same destination.

If servers active change between INVITE and other messages, I don't think there 
is a stateless way to solve it. The current implementation also fails. First, 
for what I saw in the code, the list contains all destinations, not just those 
active. Once hashid is obtained, modulo #total destination is applied, and then 
state of destination is checked. If it's not active, next is selected. if next 
is active, INVITE is sent to it.

What if, when CANCEL is received, the original destination was again active? 
Hashid is obtained, modulo #total, server is active, CANCEL is sent to wrong 
server. As I said, I don't think there is a fully stateless way to solve it. 
kamailio should memorize original destination, or  something complex, beyond 
the scope of a simple hash.

I did care about continuing service. OK, if a server goes down and later goes 
up, it will cause some calls to fail, with current implementation and also 
mine. But, service should continue. It would be a high availability platform, 
that can continue providing service to new calls, but failing on transient 
ones. And with a better distribution.

I did not want to add a new feature. I wanted to improve existing ones.  The 
hash algorithms can be improved, as any part of the code may eventually be 
improved.

_Now, if I wanted to implement it your way, in a new algorithm, I have no idea 
about how could I get inside function ds_manage_routes() the value to be used 
as a hash.  You said, for instance, $var(dshash) = $ci . How can I get the 
content of dshash inside that function?_

-- 
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/kamailio/kamailio/pull/2363#issuecomment-649088481
_______________________________________________
Kamailio (SER) - Development Mailing List
sr-dev@lists.kamailio.org
https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-dev

Reply via email to