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

Daniel-Constantin Mierla miconda at gmail.com
Mon Sep 8 14:11:54 CEST 2014


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
> 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/9b7e266c/attachment.html>


More information about the sr-dev mailing list