[sr-dev] git:master: modules_k/rls: Updated module documentation and changed use of BEGIN/ COMMIT so it only happens in database only mode

Peter Dunkley peter.dunkley at crocodile-rcs.com
Fri Apr 20 17:12:34 CEST 2012


Module: sip-router
Branch: master
Commit: d5b8c4f9091646597341e0d8dc08e2c3930f713a
URL:    http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=d5b8c4f9091646597341e0d8dc08e2c3930f713a

Author: Peter Dunkley <peter.dunkley at crocodile-rcs.com>
Committer: Peter Dunkley <peter.dunkley at crocodile-rcs.com>
Date:   Fri Apr 20 16:11:48 2012 +0100

modules_k/rls: Updated module documentation and changed use of BEGIN/COMMIT so it only happens in database only mode

---

 modules_k/rls/README            |    9 +++++++++
 modules_k/rls/doc/rls_admin.xml |   11 +++++++++++
 modules_k/rls/notify.c          |   18 ++++++++++++------
 modules_k/rls/resource_notify.c |   18 ++++++++++++------
 4 files changed, 44 insertions(+), 12 deletions(-)

diff --git a/modules_k/rls/README b/modules_k/rls/README
index df3a879..40ebeae 100644
--- a/modules_k/rls/README
+++ b/modules_k/rls/README
@@ -259,6 +259,15 @@ modparam("rls", "xcap_db_url", "dbdriver://username:password@dbhost/dbname")
    in a database, allowing scalability at the expense of speed. Mode 1 is
    reserved.
 
+   The RLS modules uses SQL BEGIN/COMMIT statements around related sets of
+   database queries to make sure they are a single transaction when
+   database only mode is used. This means you should ensure that automatic
+   retries/reconnects are disabled for your database (for example, by
+   setting the retries parameter for db_mysql or db_postgres to 0). This
+   is needed because if the connection fails any unCOMMITed queries will
+   be automatically rolled back by the database. This means that automatic
+   retries could result in data inconsistencies.
+
    Default value is “0”
 
    Example 1.4. Set db_mode parameter
diff --git a/modules_k/rls/doc/rls_admin.xml b/modules_k/rls/doc/rls_admin.xml
index 0669b70..db03b9f 100644
--- a/modules_k/rls/doc/rls_admin.xml
+++ b/modules_k/rls/doc/rls_admin.xml
@@ -175,6 +175,17 @@ modparam("rls", "xcap_db_url", "&exampledb;")
 		Mode 1 is reserved.
 		</para>
 		<para>
+		The RLS modules uses SQL BEGIN/COMMIT statements around related
+		sets of database queries to make sure they are a single
+		transaction when database only mode is used.  This means you
+		should ensure that automatic retries/reconnects are disabled
+		for your database (for example, by setting the retries
+		parameter for db_mysql or db_postgres to 0).  This is needed
+		because if the connection fails any unCOMMITed queries will
+		be automatically rolled back by the database.  This means that
+		automatic retries could result in data inconsistencies.
+		</para>
+		<para>
 		<emphasis>	Default value is <quote>0</quote> 	
 		</emphasis>
 		</para>
diff --git a/modules_k/rls/notify.c b/modules_k/rls/notify.c
index 1836808..fbb7e17 100644
--- a/modules_k/rls/notify.c
+++ b/modules_k/rls/notify.c
@@ -128,10 +128,13 @@ int send_full_notify(subs_t* subs, xmlNodePtr rl_node, str* rl_uri,
 		goto error;
 	}
 
-	if (db_begin(&rlpres_dbf, rlpres_db) < 0)
+	if (dbmode == RLS_DB_ONLY)
 	{
-		LM_ERR("in BEGIN\n");
-		goto error;
+		if (db_begin(&rlpres_dbf, rlpres_db) < 0)
+		{
+			LM_ERR("in BEGIN\n");
+			goto error;
+		}
 	}
 
 	if(rlpres_dbf.query(rlpres_db, query_cols, 0, query_vals, result_cols,
@@ -263,10 +266,13 @@ int send_full_notify(subs_t* subs, xmlNodePtr rl_node, str* rl_uri,
 		goto error;
 	}
 
-	if (db_commit(&rlpres_dbf, rlpres_db) < 0)
+	if (dbmode == RLS_DB_ONLY)
 	{
-		LM_ERR("in COMMIT\n");
-		goto error;
+		if (db_commit(&rlpres_dbf, rlpres_db) < 0)
+		{
+			LM_ERR("in COMMIT\n");
+			goto error;
+		}
 	}
 
 	xmlFree(rlmi_cont->s);
diff --git a/modules_k/rls/resource_notify.c b/modules_k/rls/resource_notify.c
index 87ce806..910b098 100644
--- a/modules_k/rls/resource_notify.c
+++ b/modules_k/rls/resource_notify.c
@@ -1037,10 +1037,13 @@ static void timer_send_update_notifies(int round)
 		goto done;
 	}
 
-	if (db_begin(&rlpres_dbf, rlpres_db) < 0)
+	if (dbmode == RLS_DB_ONLY)
 	{
-		LM_ERR("in BEGIN\n");
-		goto error;
+		if (db_begin(&rlpres_dbf, rlpres_db) < 0)
+		{
+			LM_ERR("in BEGIN\n");
+			goto error;
+		}
 	}
 
 	if(rlpres_dbf.query(rlpres_db, query_cols, 0, query_vals, result_cols,
@@ -1060,10 +1063,13 @@ static void timer_send_update_notifies(int round)
 		goto error;
 	}
 
-	if (db_commit(&rlpres_dbf, rlpres_db) < 0)
+	if (dbmode == RLS_DB_ONLY)
 	{
-		LM_ERR("in COMMIT\n");
-		goto error;
+		if (db_commit(&rlpres_dbf, rlpres_db) < 0)
+		{
+			LM_ERR("in COMMIT\n");
+			goto error;
+		}
 	}
 
 	send_notifies(result, did_col, resource_uri_col, auth_state_col, reason_col,




More information about the sr-dev mailing list