Module: sip-router Branch: master Commit: d80ea02f5d96477e1c6deca581500cfa4a24380e URL: http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=d80ea02f5d96477e1c6deca581500cfa4a24380e
Author: Daniel-Constantin Mierla <mico...@gmail.com> Committer: Daniel-Constantin Mierla <mico...@gmail.com> Date: Sun Mar 24 13:53:50 2013 +0100 usrloc: new option for db_mode - DB_READONLY (4) - location records are loaded only at startup - no write back to database, not even at shutdown - useful when registrations are replicated to another node that does the db storage at runtime - started from a patch by Marcus Hunger --- modules/usrloc/README | 51 +++++++++++++++++++--------------- modules/usrloc/doc/usrloc_admin.xml | 9 ++++++ modules/usrloc/ul_mod.c | 14 ++++++--- modules/usrloc/urecord.c | 1 + modules/usrloc/usrloc.h | 1 + 5 files changed, 48 insertions(+), 28 deletions(-) diff --git a/modules/usrloc/README b/modules/usrloc/README index 00ea649..68772fb 100644 --- a/modules/usrloc/README +++ b/modules/usrloc/README @@ -580,6 +580,11 @@ modparam("usrloc", "db_url", "dbdriver://username:password@dbhost/dbname") For example NAT pinging is a killer since during each ping cycle all nated contact are loaded from the DB; The lack of memory caching also disable the statistics exports. + * 4 - This uses database to load records at startup but uses only + memory during the runtime. Records are not written back at all, not + even at shutdown. Useful for scenarios when registrations are + replicated to a node that does the storage in database during + runtime. Warning @@ -740,7 +745,7 @@ modparam("usrloc", "xavp_contact", "ulattrs") 5.5. ul_add 5.6. ul_show_contact -5.1. ul_rm +5.1. ul_rm Deletes an entire AOR record (including its contacts). @@ -749,7 +754,7 @@ modparam("usrloc", "xavp_contact", "ulattrs") * AOR - user AOR in username[@domain] format (domain must be supplied only if use_domain option is on). -5.2. ul_rm_contact +5.2. ul_rm_contact Deletes a contact from an AOR record. @@ -759,7 +764,7 @@ modparam("usrloc", "xavp_contact", "ulattrs") only if use_domain option is on). * contact - exact contact to be removed -5.3. ul_dump +5.3. ul_dump Dumps the entire content of the USRLOC in memory cache @@ -768,11 +773,11 @@ modparam("usrloc", "xavp_contact", "ulattrs") "brief", a brief dump will be done (only AOR and contacts, with no other details) -5.4. ul_flush +5.4. ul_flush Triggers the flush of USRLOC memory cache into DB. -5.5. ul_add +5.5. ul_add Adds a new contact for an user AOR. @@ -788,7 +793,7 @@ modparam("usrloc", "xavp_contact", "ulattrs") * cflags - per branch flags of the contact * methods - mask with supported requests of the contact -5.6. ul_show_contact +5.6. ul_show_contact Dumps the contacts of an user AOR. @@ -802,14 +807,14 @@ modparam("usrloc", "xavp_contact", "ulattrs") 6.1. ul.dump 6.2. ul.lookup table AOR -6.1. ul.dump +6.1. ul.dump Dumps the content of the location table Parameters: * None. -6.2. ul.lookup table AOR +6.2. ul.lookup table AOR Looks up the contents of an AOR entry in the location table @@ -897,7 +902,7 @@ Chapter 2. Developer Guide 1.14. ul_register_ulcb(type ,callback, param) 1.15. ul_get_num_users() -1.1. ul_register_domain(name) +1.1. ul_register_domain(name) The function registers a new domain. Domain is just another name for table used in registrar. The function is called from fixups in @@ -912,7 +917,7 @@ Chapter 2. Developer Guide * const char* name - Name of the domain (also called table) to be registered. -1.2. ul_insert_urecord(domain, aor, rec) +1.2. ul_insert_urecord(domain, aor, rec) The function creates a new record structure and inserts it in the specified domain. The record is structure that contains all the @@ -927,7 +932,7 @@ Chapter 2. Developer Guide * urecord_t** rec - The newly created record structure. -1.3. ul_delete_urecord(domain, aor) +1.3. ul_delete_urecord(domain, aor) The function deletes all the contacts bound with the given Address Of Record. @@ -939,7 +944,7 @@ Chapter 2. Developer Guide * str* aor - Address of record (aka username) of the record, that should be deleted. -1.4. ul_get_urecord(domain, aor) +1.4. ul_get_urecord(domain, aor) The function returns pointer to record with given Address of Record. @@ -949,7 +954,7 @@ Chapter 2. Developer Guide * str* aor - Address of Record of request record. -1.5. ul_lock_udomain(domain) +1.5. ul_lock_udomain(domain) The function lock the specified domain, it means, that no other processes will be able to access during the time. This prevents race @@ -960,14 +965,14 @@ Chapter 2. Developer Guide Meaning of the parameters is as follows: * udomain_t* domain - Domain to be locked. -1.6. ul_unlock_udomain(domain) +1.6. ul_unlock_udomain(domain) Unlock the specified domain previously locked by ul_lock_udomain. Meaning of the parameters is as follows: * udomain_t* domain - Domain to be unlocked. -1.7. ul_release_urecord(record) +1.7. ul_release_urecord(record) Do some sanity checks - if all contacts have been removed, delete the entire record structure. @@ -975,7 +980,7 @@ Chapter 2. Developer Guide Meaning of the parameters is as follows: * urecord_t* record - Record to be released. -1.8. ul_insert_ucontact(record, contact, expires, q, callid, cseq, flags, +1.8. ul_insert_ucontact(record, contact, expires, q, callid, cseq, flags, cont, ua, sock) The function inserts a new contact in the given record with specified @@ -996,7 +1001,7 @@ cont, ua, sock) * struct socket_info *sock - socket on which the REGISTER message was received on. -1.9. ul_delete_ucontact (record, contact) +1.9. ul_delete_ucontact (record, contact) The function deletes given contact from record. @@ -1006,7 +1011,7 @@ cont, ua, sock) * ucontact_t* contact - Contact to be deleted. -1.10. ul_get_ucontact(record, contact) +1.10. ul_get_ucontact(record, contact) The function tries to find contact with given Contact URI and returns pointer to structure representing the contact. @@ -1016,7 +1021,7 @@ cont, ua, sock) * str_t* contact - URI of the request contact. -1.11. ul_get_all_ucontacts (buf, len, flags) +1.11. ul_get_all_ucontacts (buf, len, flags) The function retrieves all contacts of all registered users and returns them in the caller-supplied buffer. If the buffer is too small, the @@ -1037,7 +1042,7 @@ cont, ua, sock) * unsigned int flags - Flags that must be set. -1.12. ul_update_ucontact(contact, expires, q, callid, cseq, set, res, ua, +1.12. ul_update_ucontact(contact, expires, q, callid, cseq, set, res, ua, sock) The function updates contact with new values. @@ -1056,7 +1061,7 @@ sock) * struct socket_info *sock - socket on which the REGISTER message was received on. -1.13. ul_bind_ursloc( api ) +1.13. ul_bind_ursloc( api ) The function imports all functions that are exported by the USRLOC module. Overs for other modules which want to user the internal USRLOC @@ -1065,7 +1070,7 @@ sock) Meaning of the parameters is as follows: * usrloc_api_t* api - USRLOC API -1.14. ul_register_ulcb(type ,callback, param) +1.14. ul_register_ulcb(type ,callback, param) The function register with USRLOC a callback function to be called when some event occures inside USRLOC. @@ -1078,6 +1083,6 @@ sock) * void *param - some parameter to be passed to the callback each time when it is called. -1.15. ul_get_num_users() +1.15. ul_get_num_users() The function loops through all domains summing up the number of users. diff --git a/modules/usrloc/doc/usrloc_admin.xml b/modules/usrloc/doc/usrloc_admin.xml index 32d8baa..d38556d 100644 --- a/modules/usrloc/doc/usrloc_admin.xml +++ b/modules/usrloc/doc/usrloc_admin.xml @@ -588,6 +588,15 @@ modparam("usrloc", "db_url", "&exampledb;") caching also disable the statistics exports. </para> </listitem> + <listitem> + <para> + 4 - This uses database to load records at startup but uses only + memory during the runtime. Records are not written back at all, + not even at shutdown. Useful for scenarios when registrations are + replicated to a node that does the storage in database during + runtime. + </para> + </listitem> </itemizedlist> <warning> <para> diff --git a/modules/usrloc/ul_mod.c b/modules/usrloc/ul_mod.c index 307c887..6f13bf5 100644 --- a/modules/usrloc/ul_mod.c +++ b/modules/usrloc/ul_mod.c @@ -413,15 +413,19 @@ static int child_init(int _rank) return 0; case DB_ONLY: case WRITE_THROUGH: - /* we need connection from working SIP and TIMER and MAIN - * processes only */ + /* connect to db only from SIP workers, TIMER and MAIN processes */ if (_rank<=0 && _rank!=PROC_TIMER && _rank!=PROC_MAIN) return 0; break; case WRITE_BACK: - /* connect only from TIMER (for flush), from MAIN (for + /* connect to db only from TIMER (for flush), from MAIN (for * final flush() and from child 1 for preload */ - if (_rank!=PROC_TIMER && _rank!=PROC_MAIN && _rank!=1) + if (_rank!=PROC_TIMER && _rank!=PROC_MAIN && _rank!=PROC_SIPINIT) + return 0; + break; + case DB_READONLY: + /* connect to db only from child 1 for preload */ + if(_rank!=PROC_SIPINIT) return 0; break; } @@ -432,7 +436,7 @@ static int child_init(int _rank) return -1; } /* _rank==PROC_SIPINIT is used even when fork is disabled */ - if (_rank==PROC_SIPINIT && db_mode!= DB_ONLY) { + if (_rank==PROC_SIPINIT && db_mode!=DB_ONLY) { /* if cache is used, populate domains from DB */ for( ptr=root ; ptr ; ptr=ptr->next) { if (preload_udomain(ul_dbh, ptr->d) < 0) { diff --git a/modules/usrloc/urecord.c b/modules/usrloc/urecord.c index dd98450..bac5616 100644 --- a/modules/usrloc/urecord.c +++ b/modules/usrloc/urecord.c @@ -382,6 +382,7 @@ static inline void wb_timer(urecord_t* _r) void timer_urecord(urecord_t* _r) { switch(db_mode) { + case DB_READONLY: case NO_DB: nodb_timer(_r); break; /* use also the write_back timer routine to handle the failed diff --git a/modules/usrloc/usrloc.h b/modules/usrloc/usrloc.h index 8b96d90..3848d3a 100644 --- a/modules/usrloc/usrloc.h +++ b/modules/usrloc/usrloc.h @@ -40,6 +40,7 @@ #define WRITE_THROUGH 1 #define WRITE_BACK 2 #define DB_ONLY 3 +#define DB_READONLY 4 /*forward declaration necessary for udomain*/ _______________________________________________ sr-dev mailing list sr-dev@lists.sip-router.org http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-dev