Hi,

Just tested the case , see below tables:

mysql> select * from dr_gateways;
+----+-------+------+----------------+-------+------------+-------+------------+-------+--------+-------------+
| id | gwid | type | address | strip | pri_prefix | attrs | probe_mode | state | socket | description |
+----+-------+------+----------------+-------+------------+-------+------------+-------+--------+-------------+
| 1 | one | 0 | 127.0.0.1:5070 | 0 | NULL | NULL | 0 | 0 | NULL | | | 2 | two | 0 | 127.0.0.1:5080 | 0 | NULL | NULL | 0 | 0 | NULL | | | 3 | three | 0 | 127.0.0.1:5090 | 0 | NULL | NULL | 0 | 0 | NULL | |
+----+-------+------+----------------+-------+------------+-------+------------+-------+--------+-------------+
3 rows in set (0.00 sec)

mysql> select * from dr_carriers;
+----+-----------+---------------+-------+-------+-------+-------------+
| id | carrierid | gwlist        | flags | state | attrs | description |
+----+-----------+---------------+-------+-------+-------+-------------+
|  1 | cr1       | one=50,two=50 |     3 |     0 | |             |
+----+-----------+---------------+-------+-------+-------+-------------+
1 row in set (0.00 sec)

mysql> select * from dr_rules;
+--------+---------+--------+---------+----------+---------+------------+-------+-------------+
| ruleid | groupid | prefix | timerec | priority | routeid | gwlist | attrs | description |
+--------+---------+--------+---------+----------+---------+------------+-------+-------------+
| 1 | 1 | | | 0 | NULL | #cr1,three | NULL | |
+--------+---------+--------+---------+----------+---------+------------+-------+-------------+
1 row in set (0.00 sec)



And it works, I get in log (for an xlog("GW IDs are : $(avp(dr_gw)[*]) \n"); after do_routing("1") ) :

"GW IDs are      : two, three "
   or
"GW IDs are      : one, three "

Keep in mind is a probabilistic dispersion (not a rigorous round robin), so running 2-3 times may not be relevant. Do a larger set of tests (like 10 or so).

Regards,

Bogdan-Andrei Iancu
OpenSIPS Founder and Developer
http://www.opensips-solutions.com

On 23.07.2014 18:37, Kneeoh wrote:
I thought that would work too. But if I put (dr_carriers table) 
gwlist:gw1=50,gw2=50 flags:3 it Always picks gw1. I want it to alternate 
between gw1 and gw2

Ultimately I'm trying to do something like: dr_rules: gwlist: #cr1=50,#cr2=50 
lets say it picks cr1, then go to the dr_carriers table where it will pick ONE 
of the carrier gateways based on weight, if that gateway fails or times out use 
the next carrier cr2, not the next gateway for cr1


On Wednesday, July 23, 2014 10:07 AM, Bogdan-Andrei Iancu <[email protected]> 
wrote:
Hi,

Actually you can combine the flags and use 0x03 - ordering by weights
and use only first. Just give it a try.

Regards,

Bogdan-Andrei Iancu
OpenSIPS Founder and Developer
http://www.opensips-solutions.com




On 23.07.2014 03:29, Kneeoh wrote:
It would be great if you could combine the binary Flags for dr_carrier routing:

flags : 0x1 - use weight for sorting the list and not definition order; 0x2 - 
use only the first gateway from the carrier (depending on the sorting); 0x4 - 
disable the usage of this carrier

such that where 1+2 = 3 the gateways are first sorted by weight then returns 
only the top result for each carrier. This would allow for equitable 
distribution between carrier gateways. This way gw1=100,gw2=100 would have a 
roughly equal chance of being picked (if enabled=true). At present it either 
cycles through all carrier gateways OR when the binary flag is set to 2, it 
picks the first gateway ONLY, ALL THE TIME.


_______________________________________________
Users mailing list
[email protected]
http://lists.opensips.org/cgi-bin/mailman/listinfo/users


_______________________________________________
Users mailing list
[email protected]
http://lists.opensips.org/cgi-bin/mailman/listinfo/users

Reply via email to