You are viewing a plain text version of this content. The canonical link for it is here.
Posted to rivet-dev@tcl.apache.org by Massimo Manghi <mx...@apache.org> on 2014/08/21 01:37:07 UTC

experimental module development status

Hi guys

I did more commits to the experimental module and I think it's time to 
report about it.

First of all if you want to participate in the process of development 
and testing you're welcome.

To build this module just add to your ./configure arguments also the switch

--with-rivet-core=experimental

then run the build process in the usual way

the build process will result in the creation of a mod_rivet.so module 
along with 3 different bridges:

  -- rivet_prefork_mpm.so: for the prefork MPM
  -- rivet_worker_mpm.so and rivet_aprthreads_mpm.so for the threaded 
'worker' MPM

The 2 threaded bridges implement 2 alternate approaches to thread 
handling, the first creating its own pool of threads controlling Tcl 
interpreters and the latter simply exploiting the ability of APR threads 
to create private storage and to have it cleaned up by a callback when a 
thread exits. This feature was exploited to create Tcl interpreters in a 
lazy way within Apache controlled threads, thus getting around the 
problem of the lack of a thread exit callback in Apache

The good news is that the module works well with the prefork MPM  (thus 
reproducing the behavior of the current stable module).

The downside is that threaded bridges are not fully functional yet.

Even though the threaded bridges don't fail in an obvious way they 
miserably fail within Tcl_EvalObjEx when the workload soars and the 
concurrency level grows.

I will work on this (George Petasis is giving me some help). In the 
meanwhile threaded bridges can be made working anyway, at the cost of 
performance loss, passing to configure also the switch

--enable-requests-serialization

which is meant to improve single thread debugging by serializing threads 
execution, but it also prevents process crashes or other Tcl internal 
errors.

  To try a certain bridge you have to select the shared library by 
defining the environmental variable RIVET_BRIDGE_MPM before starting 
Apache. The env variable must have the full path to the bridge module 
you want to use

e.g.

RIVET_MPM_BRIDGE="<path-to-rivet-bridge>/rivet_worker_mpm.so";export 
RIVET_MPM_BRIDGE

  -- Massimo



---------------------------------------------------------------------
To unsubscribe, e-mail: rivet-dev-unsubscribe@tcl.apache.org
For additional commands, e-mail: rivet-dev-help@tcl.apache.org