<html>
  <head>
    <meta content="text/html; charset=ISO-8859-1"
      http-equiv="Content-Type">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    Hello,<br>
    <br>
    since it came back in the spotlight, I think the non-pooling flag
    should not be exposed to the config. The admin has usually no
    knowledge of modules' internals to know it has to configure with a
    new connection -- it should be only inside the module.<br>
    <br>
    Then, is BEGIN/COMMIT/ROLLBACK a standard everywhere across DB/SQL
    servers? Even if in SQL, the DB api is not only for them. I seems to
    be that these new functions should be better part of DB api and
    implemented inside the db modules. That allows also for temporarily
    disabling of reconnect when needed, Eventually, other DB (non-SQL)
    connectors can have custom implementation.<br>
    <br>
    Cheers,<br>
    Daniel<br>
    <br>
    On 4/20/12 4:56 PM, Peter Dunkley wrote:
    <blockquote cite="mid:1334933807.2745.27.camel@pd-laptop-linux"
      type="cite">
      <meta http-equiv="Content-Type" content="text/html;
        charset=ISO-8859-1">
      <meta name="GENERATOR" content="GtkHTML/4.2.3">
      I'll update the RLS documentation to make that clear.<br>
      <br>
      As for the second item... The non-pooling stuff is still done with
      a '*' at the start of the DB URL.&nbsp; 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.&nbsp; 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.<br>
      <br>
      I think I'll leave those DB changes to someone a bit more familiar
      with the modules <img src="cid:part1.02090103.00010708@gmail.com"
        alt=":-)" align="middle" border="0"><br>
      <br>
      Thanks,<br>
      <br>
      Peter<br>
      <br>
      On Fri, 2012-04-20 at 16:24 +0200, Klaus Darilion wrote:
      <blockquote type="CITE">
        <pre>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:
&gt; Module: sip-router
&gt; Branch: master
&gt; Commit: f71bdc3cbdf5acdf243217778e4159f2e6ab341d
&gt; URL:    <a moz-do-not-send="true" href="http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=f71bdc3cbdf5acdf243217778e4159f2e6ab341d">http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=f71bdc3cbdf5acdf243217778e4159f2e6ab341d</a>
&gt;
&gt; Author: Peter Dunkley&lt;<a moz-do-not-send="true" href="mailto:peter.dunkley@crocodile-rcs.com">peter.dunkley@crocodile-rcs.com</a>&gt;
&gt; Committer: Peter Dunkley&lt;<a moz-do-not-send="true" href="mailto:peter.dunkley@crocodile-rcs.com">peter.dunkley@crocodile-rcs.com</a>&gt;
&gt; Date:   Fri Apr 20 14:00:22 2012 +0100
&gt;
&gt; modules_k/rls: Used db_begin() and db_commit() around blocks of related DB queries and updates
&gt;
&gt; - This makes these related sets of DB queries a single transaction.  As Klaus
&gt;    pointed out this if you don't do this you can get inconsistencies when using
&gt;    multiple presence servers.
&gt;
&gt; ---
&gt;
&gt;   modules_k/rls/notify.c          |   12 ++++++++++++
&gt;   modules_k/rls/resource_notify.c |   24 ++++++++++++++++++++++++
&gt;   modules_k/rls/rls_db.c          |   21 +++++++++++++++++++++
&gt;   3 files changed, 57 insertions(+), 0 deletions(-)
&gt;
&gt; diff --git a/modules_k/rls/notify.c b/modules_k/rls/notify.c
&gt; index 082fbfa..1836808 100644
&gt; --- a/modules_k/rls/notify.c
&gt; +++ b/modules_k/rls/notify.c
&gt; @@ -128,6 +128,12 @@ int send_full_notify(subs_t* subs, xmlNodePtr rl_node, str* rl_uri,
&gt;                   goto error;
&gt;           }
&gt;
&gt; +        if (db_begin(&amp;rlpres_dbf, rlpres_db)&lt;  0)
&gt; +        {
&gt; +                LM_ERR("in BEGIN\n");
&gt; +                goto error;
&gt; +        }
&gt; +
&gt;           if(rlpres_dbf.query(rlpres_db, query_cols, 0, query_vals, result_cols,
&gt;                                           1, n_result_cols,&amp;str_resource_uri_col,&amp;result )&lt;  0)
&gt;           {
&gt; @@ -257,6 +263,12 @@ int send_full_notify(subs_t* subs, xmlNodePtr rl_node, str* rl_uri,
&gt;                   goto error;
&gt;           }
&gt;
&gt; +        if (db_commit(&amp;rlpres_dbf, rlpres_db)&lt;  0)
&gt; +        {
&gt; +                LM_ERR("in COMMIT\n");
&gt; +                goto error;
&gt; +        }
&gt; +
&gt;           xmlFree(rlmi_cont-&gt;s);
&gt;           pkg_free(rlmi_cont);
&gt;
&gt; diff --git a/modules_k/rls/resource_notify.c b/modules_k/rls/resource_notify.c
&gt; index 29e0b11..87ce806 100644
&gt; --- a/modules_k/rls/resource_notify.c
&gt; +++ b/modules_k/rls/resource_notify.c
&gt; @@ -893,6 +893,12 @@ static void timer_send_full_state_notifies(int round)
&gt;                   goto done;
&gt;           }
&gt;
&gt; +        if (db_begin(&amp;rls_dbf, rls_db)&lt;  0)
&gt; +        {
&gt; +                LM_ERR("in BEGIN\n");
&gt; +                goto done;
&gt; +        }
&gt; +
&gt;           /* Step 1: Find rls_watchers that require full-state notification */
&gt;           if (rls_dbf.query(rls_db, query_cols, 0, query_vals, result_cols,
&gt;                                   1, n_result_cols, 0,&amp;result)&lt;  0)
&gt; @@ -912,6 +918,12 @@ static void timer_send_full_state_notifies(int round)
&gt;                   goto done;
&gt;           }
&gt;
&gt; +        if (db_commit(&amp;rls_dbf, rls_db)&lt;  0)
&gt; +        {
&gt; +                LM_ERR("in COMMIT\n");
&gt; +                goto done;
&gt; +        }
&gt; +
&gt;           /* Step 3: Full-state notify each watcher we found */
&gt;           rows = RES_ROWS(result);
&gt;           for (i = 0; i&lt;  RES_ROW_N(result); i++)
&gt; @@ -1025,6 +1037,12 @@ static void timer_send_update_notifies(int round)
&gt;                   goto done;
&gt;           }
&gt;
&gt; +        if (db_begin(&amp;rlpres_dbf, rlpres_db)&lt;  0)
&gt; +        {
&gt; +                LM_ERR("in BEGIN\n");
&gt; +                goto error;
&gt; +        }
&gt; +
&gt;           if(rlpres_dbf.query(rlpres_db, query_cols, 0, query_vals, result_cols,
&gt;                                           1, n_result_cols,&amp;str_rlsubs_did_col,&amp;result)&lt;  0)
&gt;           {
&gt; @@ -1042,6 +1060,12 @@ static void timer_send_update_notifies(int round)
&gt;                   goto error;
&gt;           }
&gt;
&gt; +        if (db_commit(&amp;rlpres_dbf, rlpres_db)&lt;  0)
&gt; +        {
&gt; +                LM_ERR("in COMMIT\n");
&gt; +                goto error;
&gt; +        }
&gt; +
&gt;           send_notifies(result, did_col, resource_uri_col, auth_state_col, reason_col,
&gt;                     pres_state_col, content_type_col);
&gt;   error:
&gt; diff --git a/modules_k/rls/rls_db.c b/modules_k/rls/rls_db.c
&gt; index 6a00c21..46bda91 100644
&gt; --- a/modules_k/rls/rls_db.c
&gt; +++ b/modules_k/rls/rls_db.c
&gt; @@ -124,6 +124,7 @@ int delete_expired_subs_rlsdb( void )
&gt;           int i;
&gt;           subs_t subs;
&gt;           str rlsubs_did = {0, 0};
&gt; +        int transaction_started = 0;
&gt;
&gt;           if(rls_db == NULL)
&gt;           {
&gt; @@ -148,6 +149,13 @@ int delete_expired_subs_rlsdb( void )
&gt;           result_cols[r_to_tag_col=n_result_cols++] =&amp;str_to_tag_col;
&gt;           result_cols[r_from_tag_col=n_result_cols++] =&amp;str_from_tag_col;
&gt;
&gt; +        if (db_begin(&amp;rls_dbf, rls_db)&lt;  0)
&gt; +        {
&gt; +                LM_ERR("in BEGIN\n");
&gt; +                goto error;
&gt; +        }
&gt; +        transaction_started = 1;
&gt; +
&gt;           if(rls_dbf.query(rls_db, query_cols, query_ops, query_vals, result_cols,
&gt;                                   n_query_cols, n_result_cols, 0,&amp;result )&lt;  0)
&gt;           {
&gt; @@ -213,12 +221,25 @@ int delete_expired_subs_rlsdb( void )
&gt;                   pkg_free(rlsubs_did.s);
&gt;           }
&gt;
&gt; +        if (db_commit(&amp;rls_dbf, rls_db)&lt;  0)
&gt; +        {
&gt; +                LM_ERR("in COMMIT\n");
&gt; +                goto error;
&gt; +        }
&gt; +
&gt;           if(result) rls_dbf.free_result(rls_db, result);
&gt;           return 1;
&gt;
&gt;   error:
&gt;           if (result) rls_dbf.free_result(rls_db, result);
&gt;           if (rlsubs_did.s) pkg_free(rlsubs_did.s);
&gt; +
&gt; +        if (transaction_started)
&gt; +        {
&gt; +                if (db_commit(&amp;rls_dbf, rls_db)&lt;  0)
&gt; +                        LM_ERR("in COMMIT\n");
&gt; +        }
&gt; +
&gt;           return -1;
&gt;   }
&gt;
&gt;
&gt;
&gt; _______________________________________________
&gt; sr-dev mailing list
&gt; <a moz-do-not-send="true" href="mailto:sr-dev@lists.sip-router.org">sr-dev@lists.sip-router.org</a>
&gt; <a moz-do-not-send="true" href="http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-dev">http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-dev</a>
</pre>
      </blockquote>
      <br>
      <table cellpadding="0" cellspacing="0" width="100%">
        <tbody>
          <tr>
            <td>
              <pre>-- 
Peter Dunkley
Technical Director
Crocodile RCS Ltd
</pre>
            </td>
          </tr>
        </tbody>
      </table>
      <br>
      <fieldset class="mimeAttachmentHeader"></fieldset>
      <br>
      <pre wrap="">_______________________________________________
sr-dev mailing list
<a class="moz-txt-link-abbreviated" href="mailto:sr-dev@lists.sip-router.org">sr-dev@lists.sip-router.org</a>
<a class="moz-txt-link-freetext" href="http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-dev">http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-dev</a>
</pre>
    </blockquote>
    <br>
    <pre class="moz-signature" cols="72">-- 
Daniel-Constantin Mierla
Kamailio Advanced Training, April 23-26, 2012, Berlin, Germany
<a class="moz-txt-link-freetext" href="http://www.asipto.com/index.php/kamailio-advanced-training/">http://www.asipto.com/index.php/kamailio-advanced-training/</a></pre>
  </body>
</html>