[Xapian-tickets] [Xapian] #185: Deadlocks with apache mod_python and mod_wsgi

Xapian nobody at xapian.org
Sat Jul 19 06:35:11 BST 2008


#185: Deadlocks with apache mod_python and mod_wsgi
-----------------------------+----------------------------------------------
 Reporter:  richard          |        Owner:  richard 
     Type:  defect           |       Status:  assigned
 Priority:  normal           |    Milestone:          
Component:  Xapian-bindings  |      Version:  SVN HEAD
 Severity:  normal           |   Resolution:          
 Keywords:                   |    Blockedby:          
 Platform:  All              |     Blocking:          
-----------------------------+----------------------------------------------

Old description:

> = Summary of current known status =
>
> == mod_python ==
>
> Calling any Xapian methods or functions is likely to cause dead-lock
> unless you set the option {{{PythonInterpreter main_interpreter}}} in the
> Apache configuration section for all mod_python scripts which use Xapian.
>
> You may also need to use Python >= 2.4 (due to
> [http://issues.apache.org/jira/browse/MODPYTHON-217 problems with the
> APIs used in Python 2.3).
>
> Even with this fixed, calling from Xapian back to Python code won't work
> properly (this means that you can't subclass Xapian objects in Python).
> This is apparently an issue with mod_python.
>
> == mod_wsgi ==
>
> You'll need to set:
>
> {{{
> WSGIApplicationGroup %{GLOBAL}
> }}}
>
> For details see:
> http://code.google.com/p/modwsgi/wiki/ConfigurationDirectives#WSGIApplicationGroup
> and
> http://code.google.com/p/modwsgi/wiki/ApplicationIssues#Python_Simplified_GIL_State_API
>
> The mod_wsgi developers say this should be sufficient, and you should be
> able to subclass Xapian objects in Python.  If you encounter problems,
> please talk to us or the mod_wsgi developers so we can investigate.
>
> ---
>
> Originally reported on the mailing list:
> http://thread.gmane.org/gmane.comp.search.xapian.general/4486

New description:

 = Summary of current known status =

 == mod_python ==

 Calling any Xapian methods or functions is likely to cause dead-lock
 unless you set this option in the Apache configuration section for all
 mod_python scripts which use Xapian:

 {{{
 PythonInterpreter main_interpreter
 }}}

 You may also need to use Python >= 2.4 (due to
 [http://issues.apache.org/jira/browse/MODPYTHON-217 problems in Python 2.3
 with the APIs the code uses).

 Even with {{{main_interpreter}}} and Python >= 2.3, calling from Xapian's
 C++ code back to Python code won't work properly (this means that you
 can't subclass Xapian objects in Python).  This is apparently an issue
 with mod_python.

 == mod_wsgi ==

 You'll need to set:

 {{{
 WSGIApplicationGroup %{GLOBAL}
 }}}

 For details see:
 http://code.google.com/p/modwsgi/wiki/ConfigurationDirectives#WSGIApplicationGroup
 and
 http://code.google.com/p/modwsgi/wiki/ApplicationIssues#Python_Simplified_GIL_State_API

 The mod_wsgi developers say this should be sufficient, and you should be
 able to subclass Xapian objects in Python.  If you encounter problems,
 please talk to us or the mod_wsgi developers so we can investigate.

 ----

 Originally reported on the mailing list:
 http://thread.gmane.org/gmane.comp.search.xapian.general/4486

--

Comment(by olly):

 Well, MODPYTHON-217 clearly says '''At this stage it is believed this only
 occurs with Python 2.3 and shouldn't be a problem with later versions of
 Python''' and there are no comments added which contradict this.  Here
 '''this''' refers to deadlock when calling {{{PyGILState_Ensure()}}} in
 the way in which SWIG generated wrappers do.  Is that wrong?

 And in comment:23 you say '''Thus, the suggestion of setting interpreter
 as 'main_interpreter' when using mod_python would definitely not work and
 lock ups would be seen if callbacks into Python from C code are occurring.
 If people are suggesting that it is working, they can't be using that
 feature of Xapian or have not compiled the SWIG bindings with thread
 support.'''  I understood that to mean that provided you don't use Xapian
 features which call from C++ back to Python, you can use Xapian bindings
 with thread support (which they have unless you regenerate them yourself
 without {{{-threads}}}).

 So either I've misunderstood here, or I've expressed this badly in my
 summary.  I've tweaked the wording in a couple of places - notably
 '''problems in Python 2.3 with the APIs the code uses''' - is that better?

-- 
Ticket URL: <http://trac.xapian.org/ticket/185#comment:28>
Xapian <http://xapian.org/>
Xapian



More information about the Xapian-tickets mailing list