On 6/18/06, Ruediger Pluem <[EMAIL PROTECTED]> wrote:


On 06/18/2006 04:03 PM, Jeff Trawick wrote:
>> > On 06/17/2006 08:57 AM, Alexander Lazic wrote:
>> > > On Sam 17.06.2006 00:54, Ruediger Pluem wrote:
>> > >> From my current point of view the answer is: No, this is not
>> possible
>> > >> out of the box.
>> > >> It may be possible if you modify the hook macros.
>
>
> yep
>
> Getting inside these macros is what enables diagnostic features such as
>
> a) mod_status display of where a request is being held up

But this feature is not in our codebase, right? Is it a patch to the macros
+ an additional module that hooks itself into the status_hook? Just curious.

not in our code base

what I do is replace stuff like

 ap_run_handler (a macro)

with

 foo_run_handler (a function)

which will check ap_extended_status; if off, it will just "return
ap_run_handler";
otherwise, it essentially has the macro expansion, but it has the
following logic around the module call:

 worker_score->module_index = handler_modindexes[n];
 rv = pHook[n].dummy(r);
 if (rv != DECLINED) {
   worker_score->module_index = 0;
   apr_table_set(r->subprocess_env,
                       REQUEST_ENVVAR,
                       apr_psprintf(r->pool,
                               "(%s/%d/handler)",
                               modnames[handler_modindexes[n]],
                               rv);
   return rv;
 }

If we reach the end without a module handling it:
 worker_score->module_index = 0;
 return DECLINED;

At initialization, the handler_modindexes function is built to
correspond to the hook_array.

Meanwhile, mod_status and a few other diagnostic modules know how to
turn a module index into a module name.

I put this problem determination aid in four hook calls which have
proven interesting w.r.t. third-party modules: handler, access
checker, check user id, log transaction.  I didn't care about any
performance difference between a hook macro in mainline vs. call to a
function which checks ap_extended_status and then invokes the macro.
I did check the CPU usage difference between ExtendedStatus on and
ExtendedStatus off after adding this logic.  It is still in the
neighborhood of a 1-2% increase, which is well worth it.

--/--

[EMAIL PROTECTED] or [EMAIL PROTECTED]

Implementation wise, what we are using is not a simple function call
or two which could be cleanly inserted into the apr-util hook macro
expansion.  The problem determination aid is dependent on

* the data structures behind the hook macros
* the Apache module index, which needs to be stored in those data
structures or in a parallel data structure so that it can be accessed
efficiently while walking through the hook array
* the worker_score

If httpd *developers* are interested, we should decide what type of
processing is acceptable/required first and worry about whether it can
be fitted into apr second.  As I recall from the last discussion of
this perhaps 15 months ago, most all of the interest was from web
admin lurkers, and there was insufficient developer interest anyway.

Reply via email to