[sr-dev] git:master: modules_k/rls: Used db_begin() and db_commit() around blocks of related DB queries and updates

Peter Dunkley peter.dunkley at crocodile-rcs.com
Fri Apr 20 16:56:47 CEST 2012


I'll update the RLS documentation to make that clear.

As for the second item... The non-pooling stuff is still done with a '*'
at the start of the DB URL.  The DB stuff doesn't use the standard
Kamailio URI parser so making DB pooling a proper parameter is not as
simple as I'd hoped it'd be.  Also, the parameter stuff would be in
lib/srdb1 whereas the retries parameter is in the DB modules themselves
(modules/db_mysql and modules/db_postgres), so I am not sure disabling
automatic reconnect on a per connection basis will be that simple to
add.

I think I'll leave those DB changes to someone a bit more familiar with
the modules :-)

Thanks,

Peter

On Fri, 2012-04-20 at 16:24 +0200, Klaus Darilion wrote:

> Now you should mention that auto reconnect must be disabled otherwise 
> reconnect during transactions will cause inconsistencies.
> 
> Probably it would be cool if automatically reconnect would be configured 
> with the db_url (just as the non-pooling parameter)
> 
> regards
> Klaus
> 
> On 20.04.2012 15:02, Peter Dunkley wrote:
> > Module: sip-router
> > Branch: master
> > Commit: f71bdc3cbdf5acdf243217778e4159f2e6ab341d
> > URL:    http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=f71bdc3cbdf5acdf243217778e4159f2e6ab341d
> >
> > Author: Peter Dunkley<peter.dunkley at crocodile-rcs.com>
> > Committer: Peter Dunkley<peter.dunkley at crocodile-rcs.com>
> > Date:   Fri Apr 20 14:00:22 2012 +0100
> >
> > modules_k/rls: Used db_begin() and db_commit() around blocks of related DB queries and updates
> >
> > - This makes these related sets of DB queries a single transaction.  As Klaus
> >    pointed out this if you don't do this you can get inconsistencies when using
> >    multiple presence servers.
> >
> > ---
> >
> >   modules_k/rls/notify.c          |   12 ++++++++++++
> >   modules_k/rls/resource_notify.c |   24 ++++++++++++++++++++++++
> >   modules_k/rls/rls_db.c          |   21 +++++++++++++++++++++
> >   3 files changed, 57 insertions(+), 0 deletions(-)
> >
> > diff --git a/modules_k/rls/notify.c b/modules_k/rls/notify.c
> > index 082fbfa..1836808 100644
> > --- a/modules_k/rls/notify.c
> > +++ b/modules_k/rls/notify.c
> > @@ -128,6 +128,12 @@ int send_full_notify(subs_t* subs, xmlNodePtr rl_node, str* rl_uri,
> >   		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,
> >   					1, n_result_cols,&str_resource_uri_col,&result )<  0)
> >   	{
> > @@ -257,6 +263,12 @@ int send_full_notify(subs_t* subs, xmlNodePtr rl_node, str* rl_uri,
> >   		goto error;
> >   	}
> >
> > +	if (db_commit(&rlpres_dbf, rlpres_db)<  0)
> > +	{
> > +		LM_ERR("in COMMIT\n");
> > +		goto error;
> > +	}
> > +
> >   	xmlFree(rlmi_cont->s);
> >   	pkg_free(rlmi_cont);
> >
> > diff --git a/modules_k/rls/resource_notify.c b/modules_k/rls/resource_notify.c
> > index 29e0b11..87ce806 100644
> > --- a/modules_k/rls/resource_notify.c
> > +++ b/modules_k/rls/resource_notify.c
> > @@ -893,6 +893,12 @@ static void timer_send_full_state_notifies(int round)
> >   		goto done;
> >   	}
> >
> > +	if (db_begin(&rls_dbf, rls_db)<  0)
> > +	{
> > +		LM_ERR("in BEGIN\n");
> > +		goto done;
> > +	}
> > +
> >   	/* Step 1: Find rls_watchers that require full-state notification */
> >   	if (rls_dbf.query(rls_db, query_cols, 0, query_vals, result_cols,
> >   				1, n_result_cols, 0,&result)<  0)
> > @@ -912,6 +918,12 @@ static void timer_send_full_state_notifies(int round)
> >   		goto done;
> >   	}
> >
> > +	if (db_commit(&rls_dbf, rls_db)<  0)
> > +	{
> > +		LM_ERR("in COMMIT\n");
> > +		goto done;
> > +	}
> > +
> >   	/* Step 3: Full-state notify each watcher we found */
> >   	rows = RES_ROWS(result);
> >   	for (i = 0; i<  RES_ROW_N(result); i++)
> > @@ -1025,6 +1037,12 @@ static void timer_send_update_notifies(int round)
> >   		goto done;
> >   	}
> >
> > +	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,
> >   					1, n_result_cols,&str_rlsubs_did_col,&result)<  0)
> >   	{
> > @@ -1042,6 +1060,12 @@ static void timer_send_update_notifies(int round)
> >   		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,
> >                     pres_state_col, content_type_col);
> >   error:
> > diff --git a/modules_k/rls/rls_db.c b/modules_k/rls/rls_db.c
> > index 6a00c21..46bda91 100644
> > --- a/modules_k/rls/rls_db.c
> > +++ b/modules_k/rls/rls_db.c
> > @@ -124,6 +124,7 @@ int delete_expired_subs_rlsdb( void )
> >   	int i;
> >   	subs_t subs;
> >   	str rlsubs_did = {0, 0};
> > +	int transaction_started = 0;
> >
> >   	if(rls_db == NULL)
> >   	{
> > @@ -148,6 +149,13 @@ int delete_expired_subs_rlsdb( void )
> >   	result_cols[r_to_tag_col=n_result_cols++] =&str_to_tag_col;
> >   	result_cols[r_from_tag_col=n_result_cols++] =&str_from_tag_col;
> >
> > +	if (db_begin(&rls_dbf, rls_db)<  0)
> > +	{
> > +		LM_ERR("in BEGIN\n");
> > +		goto error;
> > +	}
> > +	transaction_started = 1;
> > +
> >   	if(rls_dbf.query(rls_db, query_cols, query_ops, query_vals, result_cols,
> >   				n_query_cols, n_result_cols, 0,&result )<  0)
> >   	{
> > @@ -213,12 +221,25 @@ int delete_expired_subs_rlsdb( void )
> >   		pkg_free(rlsubs_did.s);
> >   	}
> >
> > +	if (db_commit(&rls_dbf, rls_db)<  0)
> > +	{
> > +		LM_ERR("in COMMIT\n");
> > +		goto error;
> > +	}
> > +
> >   	if(result) rls_dbf.free_result(rls_db, result);
> >   	return 1;
> >
> >   error:
> >   	if (result) rls_dbf.free_result(rls_db, result);
> >   	if (rlsubs_did.s) pkg_free(rlsubs_did.s);
> > +
> > +	if (transaction_started)
> > +	{
> > +		if (db_commit(&rls_dbf, rls_db)<  0)
> > +			LM_ERR("in COMMIT\n");
> > +	}
> > +
> >   	return -1;
> >   }
> >
> >
> >
> > _______________________________________________
> > sr-dev mailing list
> > sr-dev at lists.sip-router.org
> > http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-dev


-- 
Peter Dunkley
Technical Director
Crocodile RCS Ltd
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.sip-router.org/pipermail/sr-dev/attachments/20120420/50ef6292/attachment.htm>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: face-smile.png
Type: image/png
Size: 1057 bytes
Desc: not available
URL: <http://lists.sip-router.org/pipermail/sr-dev/attachments/20120420/50ef6292/attachment.png>


More information about the sr-dev mailing list