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

Luis Azedo luis.azedo at factorlusitano.com
Mon Sep 8 16:41:04 CEST 2014


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> wrote:

> Send sr-dev mailing list submissions to
>         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
>
> You can reach the person managing the list at
>         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>
> To: Luis Azedo <luis.azedo at factorlusitano.com>
> Cc: "Kamailio \(SER\) - Development Mailing List"
>         <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>
> 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>>
> > 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>> 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>>
> >>             To: "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 process
> >>             Message-ID:
> >>
> >>             <
> CALoGXNWvHhCAO91Tfa0w8W3eYQRvfV7Qkgte7dBnD+ciNr_Kpg at mail.gmail.com
> >>             <mailto:
> CALoGXNWvHhCAO91Tfa0w8W3eYQRvfV7Qkgte7dBnD%2BciNr_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>>
> >>             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>
> >>             >
> 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>
> >>             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>
> >>         http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-dev
> >
> >         --
> >         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
> >
> >
> >
>
> --
> 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/6da7f048/attachment.html
> >
>
> ------------------------------
>
> _______________________________________________
> sr-dev mailing list
> 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
> **************************************
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.sip-router.org/pipermail/sr-dev/attachments/20140908/ca437c52/attachment-0001.html>


More information about the sr-dev mailing list