[mod_python] mod_python, the ITK MPM and sessions

Graham Dumpleton grahamd at dscpl.com.au
Tue Nov 7 18:46:44 EST 2006


Graham Dumpleton wrote ..
> That is not the Python global interpreter lock. It is a mutex lock created
> using Apache for the purposes of mediating access to session stuff. Thus,
> you probably need to look into the lock mechanism of Apache and try
> and understand it. The issue may be the initial permissions used when
> mod_python initialises/acquires the locks. Specifically look around the
> call to apr_global_mutex_create() in init_mutexes() in src/mod_python.c
> source code.

Looking at:

  http://apr.apache.org/docs/apr/apr__global__mutex_8h-source.html

you might consider changing mod_python code such that instead of
passing APR_LOCK_DEFAULT to the call of apr_global_mutex_create() in
src/mod_python.c, change it some some other specific locking
mechanism rather than relying on APR to choose one for you.

In other words, try in turn:

 APR_LOCK_FCNTL
 APR_LOCK_FLOCK
 APR_LOCK_SYSVSEM
 APR_LOCK_POSIXSEM
 APR_LOCK_PROC_PTHREAD

and see if you can find one which will work across processes which are
running as different users.

Because you are specifying the mechanism, it may not be portable, but
may allow you to get it to work for your platform at least.

Please do tell us what the results are.

Graham

> Sam Morris wrote ..
> > I'm experimenting with the ITK MPM for Apache, available
> > from <http://home.samfundet.no/~sesse/mpm-itk/>. It is based on the
> > Prefork MPM; after a request is parsed, the process handling the
> > request changes user id to one specified in the config for the virtual
> > host.
> > 
> > I'm having trouble getting mod_python's session support to work. When
> > trying to create a new instance of Session, I get this message: 
> > 
> >  [warn] (13)Permission denied: Failed to acquire global mutex
> >  lock at index 6"
> > 
> > Strace says the following system call fails:
> > 
> >  semop(4227100, 0xb7ca6a30, 1)           = -1 EACCES (Permission denied)
> > 
> > and ipcs(1) says:
> > 
> >  ------ Semaphore Arrays --------
> >  0x00000000 4227100    www-data  600        1         
> > 
> > I assume this is because the child process (running as user test1) needs
> > access to the semaphore (for the Global Interpreter Lock?) living inside
> > a
> > process that is running as www-data. If this is the case, I guess there's
> > no way past this problem short of redesigning (mod_)python and/or
> > apache/ITK? :)
> > 
> > Here's the full traceback:
> > 
> > Mod_python error: "PythonHandler pytest"
> > 
> >  Traceback (most recent call last):
> >   File "/usr/lib/python2.4/site-packages/mod_python/apache.py", line
> 299,
> >     in HandlerDispatch
> >     result = object(req)
> >   File "/home/sam/pytest/pytest.py", line 8, in handler
> >     s = Session.Session (req)
> >   File "/usr/lib/python2.4/site-packages/mod_python/Session.py", line
> 735,
> >     in Session
> >     timeout=timeout, lock=lock)
> >   File "/usr/lib/python2.4/site-packages/mod_python/Session.py", line
> 337,
> >     in __init__
> >     timeout=timeout, lock=lock)
> >   File "/usr/lib/python2.4/site-packages/mod_python/Session.py", line
> 165,
> >     in __init__
> >     self.lock()
> >   File "/usr/lib/python2.4/site-packages/mod_python/Session.py", line
> 255,
> >     in lock
> >     _apache._global_lock(self._req.server, self._sid)
> >  ValueError: Failed to acquire global mutex lock
> > 
> > And my apache configuration:
> > 
> >  <VirtualHost *>
> >     DocumentRoot /var/www/
> >     AssignUserId test1 test1
> >     ServerName test1
> > 
> >     ErrorLog /var/log/apache2/error.log
> >     LogLevel warn
> >     CustomLog /var/log/apache2/access.log combined
> > 
> >     SetHandler mod_python
> >     PythonPath "['/home/sam/pytest'] + sys.path"
> >     PythonHandler pytest
> >     PythonOption session_directory /tmp
> >     PythonOption mutex_directory /tmp
> >     PythonDebug on
> >  </VirtualHost>
> > 
> > -- 
> > Sam Morris
> > http://robots.org.uk/
> > 
> > PGP key id 1024D/5EA01078
> > 3412 EA18 1277 354B 991B  C869 B219 7FDB 5EA0 1078
> > 
> > _______________________________________________
> > Mod_python mailing list
> > Mod_python at modpython.org
> > http://mailman.modpython.org/mailman/listinfo/mod_python
> _______________________________________________
> Mod_python mailing list
> Mod_python at modpython.org
> http://mailman.modpython.org/mailman/listinfo/mod_python


More information about the Mod_python mailing list