Commit 797ca565 authored by Bill Stoddard's avatar Bill Stoddard
Browse files

Performance: Add quick_handler hook. This hook is called at the

very beginning of the request processing before location_walk,
translate_name, etc.  This hook is useful for URI keyed content
caches like Mike Abbott's Quick Shortcut Cache.


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@88596 13f79535-47bb-0310-9956-ffa450edef68
parent c5cb9f15
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
Changes with Apache 2.0.16-dev
  *) Performance: Add quick_handler hook. This hook is called at the
     very beginning of the request processing before location_walk,
     translate_name, etc.  This hook is useful for URI keyed content
     caches like Mike Abbott's Quick Shortcut Cache.
     [Bill Stoddard]

  *) top_module global variable renamed to ap_top_module [Perl]

+10 −0
Original line number Diff line number Diff line
@@ -1002,6 +1002,16 @@ AP_DECLARE_HOOK(void,child_init,(apr_pool_t *pchild, server_rec *s))
 */
AP_DECLARE_HOOK(int,handler,(request_rec *r))

/**
 * Run the quick handler functions for each module. The quick_handler
 * is run before any other requests hooks are called (location_walk,
 * directory_walk, access checking, et. al.). This hook was added
 * to provide a quick way to serve content out of a URI keyed cache.
 * @param r The request_rec
 * @deffunc void ap_run_quick_handler(request_rec *r)
 */
AP_DECLARE_HOOK(int,quick_handler,(request_rec *r))

/**
 * Retrieve the optional functions for each module.
 * This is run immediately before the server starts. Optional functions should
+30 −1
Original line number Diff line number Diff line
@@ -391,7 +391,36 @@ static void check_pipeline_flush(request_rec *r)

void ap_process_request(request_rec *r)
{
    int access_status;

    /* Give quick handlers a shot at serving the request on the fast
     * path, bypassing all of the other Apache hooks. 
     *
     * This hook was added to enable serving files out of a URI keyed 
     * content cache ( e.g., Mike Abbott's Quick Shortcut Cache, 
     * described here: http://oss.sgi.com/projects/apache/mod_qsc.html )
     *
     * It may have other uses as well, such as routing requests directly to
     * content handlers that have the ability to grok HTTP and do their
     * own access checking, etc (e.g. servlet engines). 
     * 
     * Use this hook with extreme care and only if you know what you are 
     * doing.
     * 
     * Consider moving this hook to after the first location_walk in order
     * to enable the quick handler to make decisions based on config
     * directives in Location blocks.
     */
    access_status = ap_run_quick_handler(r);
    if (access_status == OK) {
        ap_finalize_request_protocol(r);
    }
    else if (access_status == DECLINED) {
        process_request_internal(r);
    }
    else {
        ap_die(access_status, r);
    }

    /*
     * We want to flush the last packet if this isn't a pipelining connection
+3 −0
Original line number Diff line number Diff line
@@ -111,6 +111,7 @@ APR_HOOK_STRUCT(
	       APR_HOOK_LINK(open_logs)
	       APR_HOOK_LINK(child_init)
	       APR_HOOK_LINK(handler)
               APR_HOOK_LINK(quick_handler)
	       APR_HOOK_LINK(optional_fn_retrieve)
)

@@ -130,6 +131,8 @@ AP_IMPLEMENT_HOOK_VOID(child_init,

AP_IMPLEMENT_HOOK_RUN_FIRST(int,handler,(request_rec *r),
			    (r),DECLINED)
AP_IMPLEMENT_HOOK_RUN_FIRST(int,quick_handler,(request_rec *r),
			    (r),DECLINED)

AP_IMPLEMENT_HOOK_VOID(optional_fn_retrieve,(void),())