Thanks Philip,
Your advice is very helpful.
I wonder whether you could help with another question ?
As a follow up to my post earlier today (same scenario):
I have a package that performs the following:
It is used to dynamically require a particular .pm (from a directory of
100s) and call a generic method (common to all the .pms in the directory)
Which .pm package it requires is based on user input.
--Code snippet--
#Create package name and file name
my $packageName = $packageSchema . $packageId;
my $packageFileName = $packageName . ".pm";
#Attempt to 'require' the file
eval{require $packageFileName} or print "package does not exist";
#Attempt to execute the method call
my $execString = "$packageName" . "::" .
"GenericMethod('$methodArguments')";
my $resultString = eval $execString;
--Code snippet--
Each .pm file that is dynamically 'required' has a .so counterpart (the .pm
was generated by SWIG and is used to bootstrap the shared object)
you can guess whats coming next... running this under Mod_perl with 8
'StartServers', if i perform 8 requests with a particular $packageFileName
and then attempt a different $packageFileName, Mod_perl will tell me that
the package does not exist, because the 8 child processes all have a
compiled version using the first $packageFileName that i specified and
'required'.
I appreciate that this is exactly what Mod_perl is supposed to do, but has
anyone overcome this or any similar problems (conditionally 'requiring' code
in Mod_perl), and could you offer me any advice?
Once again, Very grateful for any advice you may have!
Regards
Ben
-----Original Message-----
From: Philip M. Gollucci [mailto:[EMAIL PROTECTED]
Sent: 31 August 2006 09:44
To: [EMAIL PROTECTED]
Cc: [email protected]
Subject: Re: Reloading .so files and .pm files
Ben Wilder wrote:
> Question:
> What with the nature of the statistics I need to call from the compiled
> shared objects, I am recompiling the .so files about twice a day (as
> situations change). I need to update the .so files and their corresponding
> .pm module files.
>
> Does anyone have any suggestions as to how I could expire the old ones the
> Mod_perl processes would be using get Mod_perl to pick up the newly
updated
> .so and .pm files?
>
> I would have a directory of roughly 100 .so files and their corresponding
> .pm files (generated by SWIG) that would be dynamically 'required' by
> calling scripts, about half of these 100 shared objects would be
recompiled
> about twice a day!
>
> Any thoughts much appreciated!
It should be -- reloading the .pm file if it boostraps the XS component
normally should suffice
For 2.x:
PerlModule Apache2::Reload
PerlInitHandler Apache2::Reload
PerlSetVar ReloadAll Off
PerlSetVar ReloadModules "X::*"
#PerlSetVAr ReloadDebug On
X is the top-level package namespace for where your .pm files are.
If you have multiple directories that works too.
http://perl.apache.org/docs/2.0/user/coding/coding.html#Auto_Reloading_Modif
ied_Modules_with_Apache2__Reload
IF your builds are croned or even not, you could aways fire off a graceful
restart -- 2x a day isn't bad.
You're likely loosing a lot of memory "requiring" the modules at run-time
anyway, so its probably good you restart twice
a day -- unless you preload all of them at startup.
--
------------------------------------------------------------------------
Philip M. Gollucci ([EMAIL PROTECTED]) 323.219.4708
Consultant / http://p6m7g8.net/Resume/resume.shtml
Senior Software Engineer - TicketMaster - http://ticketmaster.com
1024D/A79997FA F357 0FDD 2301 6296 690F 6A47 D55A 7172 A799 97F
"In all that I've done wrong I know I must have done something right to
deserve a hug every morning and butterfly kisses at night."
__ ___ ___ ____ __
/ |/ /_ __/ __/ __ \/ /
/ /|_/ / // /\ \/ /_/ / /__
/_/ /_/\_, /___/\___\_\___/
<___/