Carl Lipo wrote:
> 
> I've just started having problems with asp state files for Apache::ASP
> 2.09 becoming corrupted during use. My application will work just fine but
> at somepoint the session asp state files get corrupted and only deleting
> them allows the application to continue working. Oddly, this occurs on two
> different servers so the problem does not appear to be machine specific.
> 
> The symptom of the problem is that application errors are returned
> from the asp code execution that look something like this:
> 
> Uncaught exception from user code:
>         Can't locate object method 'Quer' via package
> &quot;Apache::ASP::Request'; at (eval 263) <a href=#167>l
> ine 167</a>. 
>INAP::NEIS::_usr_local_applprod_infosource_apps_netcfg_viewNodes_htmxINL() called
> at /usr/local/lib/site_perl/Apache/
> ASP.pm line 1504
> 

Generally problems of this nature, where even perl data seems
to be corrupted, seem to be from buffer overrun type issues
that normally result in segfaults.  Looking at your config, 
I would suspect the culprit to be use of DB_File on your
StateDir, where /usr/local/etc/infosource/apps/netcfg/state-dir
may be mounted over NFS.  NFS typically does not support the 
flock() style locking that Apache::ASP uses to protect DB_File 
from corruption.  

If you are & must use NFS, don't use DB_File, use the default 
SDBM_File, which does not corrupt as easily.  If you need to 
get past the 1000 byte limit, then you might use 
MLDBM::Sync::SDBM_File which I developed just for this purpose.
I need to add config support for this still to Apache::ASP though.
If you can switch to a CIFS/or samba mounted file system, do 
this, as this supports flock() semantics.

If StateDir is mounted locally, then possibly there is a bug in 
Apache::ASP StateDB locking, but this is less likely the case
and we might look at other types of buffer overrun issues that
might corrupt perl data structures.  If your modperl httpd is compiled
DSO, compile it static, as I have seen no end of odd errors with
the DSO config from time to time.  

Also, DBD::Oracle and long values with CLOBs/BLOBs can create 
another type of buffer overrun, which is supposedly on OCI bug, 
though you didn't mention use of Oracle this is an odd bug that 
stung me recently.

If you give up on trying to find this bug, which seems to be 
related to StateDB corruption, you may create $Application & 
$Session objects with Apache::Session in the global.asa Script_OnStart, 
which would at least eliminate the StateDB issue.

-- Josh

_________________________________________________________________
Joshua Chamas                           Chamas Enterprises Inc.
NodeWorks >> free web link monitoring   Huntington Beach, CA  USA 
http://www.nodeworks.com                1-714-625-4051

Reply via email to