Hello,
We are working to improve the rtpengine module node selection mechanism.
Right now, the selection is stateless, and assumes that rtpengine
machines don't often break.
Our idea is to maintain a "callid(key)<->node(value)" global shared hash
table with a global lock. When the "offer" comes, a new entry is
inserted in the hash table. When subsequent commands come (e.g.
"answer", "delete") the lookup is done and the specific node is
selected. When the "delete" comes, the entry is freed from the
hashtable. We've already implemented most of the rtpengine hash table API.
The question is, if _no_ "delete" comes, how to eventually free the old
entries? The idea is to introduce a modparam for a hastable entry
timeout and:
1: create a separate process that looks into the hashtable and does
the cleanup
or
2: every time an insert/remove/lookup in the table is done, on the
way of doing the action, check also for expired entries and free them.
(this will free only the expired entries in the list at
index=hash(callid) but will prevent the hash table growing too big)
What do you think about the whole hashtable idea? And how about the
expired entries deletion?
Do you have any other advices/proposals?
Best Regards,
1&1 Team
Show replies by date