[sr-dev] accessing database from a child forked proces

Daniel-Constantin Mierla miconda at gmail.com
Mon Sep 8 16:55:23 CEST 2014


Hello,

I assume (well, I initially developer db_text, but db api came from 
other developers and I was inspired from other db module, most like to 
be mysql) it follows a pattern from all (most) of db connector modules. 
I think that one of the goals was to be able to free previous result if 
there is a new query on the same connection, in case someone forgot to 
free the result, to avoid leaks, considering that the result variables 
are typically local in the function.

So, at this moment I would postpone its adoption if it is not fixing 
anything anymore, until we can get the time to look overall db api and 
connectors. You should add it to the tracker, not to forget about it.

Cheers,
Daniel

On 08/09/14 16:41, Luis Azedo wrote:
> Hi Daniel,
>
> well, i think its not needed but wouldn't we all benefit from it ? 
> binding the internal structure to the result instead of connection?
>
> Thanks
>
>
> On Mon, Sep 8, 2014 at 3:37 PM, <sr-dev-request at lists.sip-router.org 
> <mailto:sr-dev-request at lists.sip-router.org>> wrote:
>
>     Send sr-dev mailing list submissions to
>     sr-dev at lists.sip-router.org <mailto:sr-dev at lists.sip-router.org>
>
>     To subscribe or unsubscribe via the World Wide Web, visit
>     http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-dev
>     or, via email, send a message with subject or body 'help' to
>     sr-dev-request at lists.sip-router.org
>     <mailto:sr-dev-request at lists.sip-router.org>
>
>     You can reach the person managing the list at
>     sr-dev-owner at lists.sip-router.org
>     <mailto:sr-dev-owner at lists.sip-router.org>
>
>     When replying, please edit your Subject line so it is more specific
>     than "Re: Contents of sr-dev digest..."
>
>
>     Today's Topics:
>
>        1. Re: accessing database from a child forked proces
>           (Daniel-Constantin Mierla)
>
>
>     ----------------------------------------------------------------------
>
>     Message: 1
>     Date: Mon, 08 Sep 2014 16:37:21 +0200
>     From: Daniel-Constantin Mierla <miconda at gmail.com
>     <mailto:miconda at gmail.com>>
>     To: Luis Azedo <luis.azedo at factorlusitano.com
>     <mailto:luis.azedo at factorlusitano.com>>
>     Cc: "Kamailio \(SER\) - Development Mailing List"
>             <sr-dev at lists.sip-router.org
>     <mailto:sr-dev at lists.sip-router.org>>
>     Subject: Re: [sr-dev] accessing database from a child forked proces
>     Message-ID: <540DBF21.8070802 at gmail.com
>     <mailto:540DBF21.8070802 at gmail.com>>
>     Content-Type: text/plain; charset="utf-8"; Format="flowed"
>
>     Hello,
>
>     On 08/09/14 15:29, Luis Azedo wrote:
>     > Hi Daniel,
>     >
>     > all problems solved with presence! i was not running child_init  and
>     > now there is no need for the proposed patch to presence.
>     ok. Given this, would the db_text patch still be required, as there
>     should be no database connection sharing?
>
>     Cheers,
>     Daniel
>     >
>     > Thank you
>     >
>     >
>     >
>     > On Mon, Sep 8, 2014 at 2:13 PM, Luis Azedo
>     > <luis.azedo at factorlusitano.com
>     <mailto:luis.azedo at factorlusitano.com>
>     <mailto:luis.azedo at factorlusitano.com
>     <mailto:luis.azedo at factorlusitano.com>>>
>     > wrote:
>     >
>     >     Hi Daniel,
>     >
>     >     this is the way we are creating the child processes (1
>     manager and
>     >     n workers)
>     >     the problem is with the workers.
>     >     the worker will call a event-route and in the script config
>     we try
>     >     to call pres_refresh_watchers and that's where we get the
>     pa_db =
>     >     NULL.
>     >
>     >     as i understand from your email, if we change
>     PROC_NOCHLDINIT and
>     >     let the child_init execute for the forked process then it will
>     >     also execute child_init in other modules ? it makes sense.
>     >
>     >     going to try this.
>     >
>     >
>     >     static int mod_child_init(int rank)
>     >     {
>     >     int pid;
>     >     int i;
>     >
>     >     fire_init_event(rank);
>     >
>     >     if (rank==PROC_MAIN) {
>     >     pid=fork_process(PROC_NOCHLDINIT, "AMQP Manager", 1);
>     >     if (pid<0)
>     >     return -1; /* error */
>     >     if(pid==0){
>     >     kz_amqp_manager_loop(0);
>     >     }
>     >     else {
>     >     for(i=0; i < dbk_consumer_processes; i++) {
>     >     pid=fork_process(PROC_NOCHLDINIT, "AMQP Consumer", 1);
>     >     if (pid<0)
>     >     return -1; /* error */
>     >     if(pid==0){
>     >     mod_consumer_proc(i+1);
>     >     }
>     >     }
>     >     }
>     >     }
>     >
>     >     return 0;
>     >     }
>     >
>     >
>     >
>     >     On Mon, Sep 8, 2014 at 1:11 PM, Daniel-Constantin Mierla
>     >     <miconda at gmail.com <mailto:miconda at gmail.com>
>     <mailto:miconda at gmail.com <mailto:miconda at gmail.com>>> wrote:
>     >
>     >         Hello,
>     >
>     >         the database connection should not be shared beween
>     processes,
>     >         because it can bring unexpected results in may places.
>     >
>     >         Right now, the rule is to have one connection per process,
>     >         shared by all modules in that process.
>     >
>     >         To achieve that, at mod_init each module opens database
>     >         connection and closes it before ending the function. Then in
>     >         child_init() the connection is opened again. Another module
>     >         that will have to open in child_init() will get the same
>     >         connection now.
>     >
>     >         When you create a new process, you tell the type of
>     child and
>     >         based on that child_init() from the other modules are
>     executed.
>     >
>     >         What is the function do you use for creating a new process?
>     >         Maybe you can paste it here exactly how you do it and I can
>     >         see if something can be done.
>     >
>     >         Cheers,
>     >         Daniel
>     >
>     >
>     >         On 03/09/14 12:09, Luis Azedo wrote:
>     >>         Hi Jason,
>     >>
>     >>         thanks for the reply.
>     >>
>     >>         the last 2 statements in presence module mod_init close the
>     >>         connection and set pa_db to NULL. when my module main
>     process
>     >>         forks the extra processes the pa_db in presence is NULL, so
>     >>         when it calls pres_refresh_watchers it fails because
>     pa_db is
>     >>         NULL.
>     >>         i commented these last statements in presence mod_init
>     and i
>     >>         got it to work.
>     >>
>     >>         // pa_dbf.close(pa_db);
>     >>         // pa_db = NULL;
>     >>
>     >>         does this have any implications on how the module works
>     ? is
>     >>         it ok to merge this change ?
>     >>
>     >>         Thank you
>     >>
>     >>
>     >>
>     >>
>      ----------------------------------------------------------------------
>     >>
>     >>             Message: 1
>     >>             Date: Sun, 31 Aug 2014 09:40:49 +0200
>     >>             From: Jason Penton <jason.penton at gmail.com
>     <mailto:jason.penton at gmail.com>
>     >>             <mailto:jason.penton at gmail.com
>     <mailto:jason.penton at gmail.com>>>
>     >>             To: "Kamailio (SER) - Development Mailing List"
>     >>                     <sr-dev at lists.sip-router.org
>     <mailto:sr-dev at lists.sip-router.org>
>     >>             <mailto:sr-dev at lists.sip-router.org
>     <mailto:sr-dev at lists.sip-router.org>>>
>     >>             Subject: Re: [sr-dev] accessing database from a child
>     >>             forked process
>     >>             Message-ID:
>     >>
>     >>           
>      <CALoGXNWvHhCAO91Tfa0w8W3eYQRvfV7Qkgte7dBnD+ciNr_Kpg at mail.gmail.com
>     <mailto:CALoGXNWvHhCAO91Tfa0w8W3eYQRvfV7Qkgte7dBnD%2BciNr_Kpg at mail.gmail.com>
>     >>           
>      <mailto:CALoGXNWvHhCAO91Tfa0w8W3eYQRvfV7Qkgte7dBnD%2BciNr_Kpg at mail.gmail.com
>     <mailto:CALoGXNWvHhCAO91Tfa0w8W3eYQRvfV7Qkgte7dBnD%252BciNr_Kpg at mail.gmail.com>>>
>     >>             Content-Type: text/plain; charset="utf-8"
>     >>
>     >>             To confirm exactly what processes are being used, maybe
>     >>             check the log file
>     >>             and take note of process id at each log event. For
>     >>             example you could check
>     >>             the process id of the messages showing you the
>     connection
>     >>             is null. Then run
>     >>             kamcmd ps to show the process list with a
>     description of
>     >>             each Kamailio
>     >>             process. That will probably point you in the correct
>     >>             direction.
>     >>
>     >>             Cheers
>     >>             Jason
>     >>
>     >>
>     >>             On Fri, Aug 29, 2014 at 3:53 PM, Luis Azedo
>     >>             <luis.azedo at factorlusitano.com
>     <mailto:luis.azedo at factorlusitano.com>
>     >>             <mailto:luis.azedo at factorlusitano.com
>     <mailto:luis.azedo at factorlusitano.com>>>
>     >>             wrote:
>     >>
>     >>             > Hi,
>     >>             >
>     >>             > i have a module that creates 1 extra process where it
>     >>             processes stuff in a
>     >>             > loop.
>     >>             > on some condition i fire a route_event with a fakemsg
>     >>             and its up to the
>     >>             > user of the module to take action, it tries to work
>     >>             like dispatcher module
>     >>             > or htable (mod-init) events.
>     >>             >
>     >>             > the problem that i have is that, if i call some
>     >>             function on some module
>     >>             > that performs a database action, the connection
>     is null
>     >>             when it calls
>     >>             > use_table.
>     >>             >
>     >>             > in this case i'm making this call
>     >>             > event_route[my_module:my_event]
>     >>             > {
>     >>             >  $var(my_uri) = <<result of some operations>>;
>     >>             > pres_refresh_watchers("$var(my_uri)", "dialog", 1);
>     >>             > }
>     >>             > presence module makes the call to use_table but this
>     >>             call fails because
>     >>             > the connection is null. presence module is
>     working fine
>     >>             besides this.
>     >>             >
>     >>             > if i make this call inside
>     >>             event_route[dispatcher:dst-up] it works.
>     >>             >
>     >>             > i think that dispatcher fires the event inside a
>     >>             callback from a
>     >>             > registered timer, so, i think (may be wrong) that it
>     >>             comes from a different
>     >>             > process ?
>     >>             >
>     >>             > i wonder if i'm missing something from child_init ?
>     >>             need to register
>     >>             > something ?
>     >>             >
>     >>             > thanks for your help.
>     >>             >
>     >>             >
>     >>             >
>     >>             >
>     >>             >
>     >>             >
>     >>             > _______________________________________________
>     >>             > sr-dev mailing list
>     >>             > sr-dev at lists.sip-router.org
>     <mailto:sr-dev at lists.sip-router.org>
>     >>             <mailto:sr-dev at lists.sip-router.org
>     <mailto:sr-dev at lists.sip-router.org>>
>     >>             >
>     http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-dev
>     >>             >
>     >>             >
>     >>             -------------- next part --------------
>     >>             An HTML attachment was scrubbed...
>     >>             URL:
>     >>           
>      <http://lists.sip-router.org/pipermail/sr-dev/attachments/20140831/9fba51e4/attachment-0001.html>
>     >>
>     >>             ------------------------------
>     >>
>     >>  _______________________________________________
>     >>             sr-dev mailing list
>     >> sr-dev at lists.sip-router.org <mailto:sr-dev at lists.sip-router.org>
>     >>             <mailto:sr-dev at lists.sip-router.org
>     <mailto:sr-dev at lists.sip-router.org>>
>     >> http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-dev
>     >>
>     >>
>     >>             End of sr-dev Digest, Vol 70, Issue 71
>     >>  **************************************
>     >>
>     >>
>     >>
>     >>
>     >>  _______________________________________________
>     >>         sr-dev mailing list
>     >> sr-dev at lists.sip-router.org
>     <mailto:sr-dev at lists.sip-router.org>
>     <mailto:sr-dev at lists.sip-router.org
>     <mailto:sr-dev at lists.sip-router.org>>
>     >> http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-dev
>     >
>     >         --
>     >         Daniel-Constantin Mierla
>     > http://twitter.com/#!/miconda <http://twitter.com/#%21/miconda>
>     <http://twitter.com/#%21/miconda> -http://www.linkedin.com/in/miconda
>     >         Next Kamailio Advanced Trainings 2014 -http://www.asipto.com
>     >         Sep 22-25, Berlin, Germany
>     >
>     >
>     >
>
>     --
>     Daniel-Constantin Mierla
>     http://twitter.com/#!/miconda <http://twitter.com/#%21/miconda> -
>     http://www.linkedin.com/in/miconda
>     Next Kamailio Advanced Trainings 2014 - http://www.asipto.com
>     Sep 22-25, Berlin, Germany
>
>     -------------- next part --------------
>     An HTML attachment was scrubbed...
>     URL:
>     <http://lists.sip-router.org/pipermail/sr-dev/attachments/20140908/6da7f048/attachment.html>
>
>     ------------------------------
>
>     _______________________________________________
>     sr-dev mailing list
>     sr-dev at lists.sip-router.org <mailto:sr-dev at lists.sip-router.org>
>     http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-dev
>
>
>     End of sr-dev Digest, Vol 71, Issue 24
>     **************************************
>
>
>
>
> _______________________________________________
> sr-dev mailing list
> sr-dev at lists.sip-router.org
> http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-dev

-- 
Daniel-Constantin Mierla
http://twitter.com/#!/miconda - http://www.linkedin.com/in/miconda
Next Kamailio Advanced Trainings 2014 - http://www.asipto.com
Sep 22-25, Berlin, Germany

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.sip-router.org/pipermail/sr-dev/attachments/20140908/cbb1ab49/attachment-0001.html>


More information about the sr-dev mailing list