]> git.ipfire.org Git - thirdparty/apache/httpd.git/commitdiff
Merge r1629507, r1629652 from trunk:
authorJim Jagielski <jim@apache.org>
Mon, 27 Oct 2014 12:47:47 +0000 (12:47 +0000)
committerJim Jagielski <jim@apache.org>
Mon, 27 Oct 2014 12:47:47 +0000 (12:47 +0000)
mod_cache_socache: Add cache status to server-status.

The status_hook simply calls the status function of
socache, very much like mod_ssl does for the ssl
session cache.

Silence build warning about missing prototype.
Followup to r1629507.

Submitted by: rjung
Reviewed/backported by: jim

git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/2.4.x@1634527 13f79535-47bb-0310-9956-ffa450edef68

CHANGES
STATUS
modules/cache/mod_cache_socache.c

diff --git a/CHANGES b/CHANGES
index 6b1d9b5d4bc79cb964e414432521f941696a967f..326ffa85f548d68b32ce08deee7134b612f25d0b 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -2,6 +2,8 @@
 
 Changes with Apache 2.4.11
 
+  *) mod_cache_socache: Add cache status to server-status.  [Rainer Jung]
+
   *) event: Fix worker-listener deadlock in graceful restart.
      PR 56960.
 
diff --git a/STATUS b/STATUS
index e4ba2e3c7630527a0ed9631ba94ee48913e7a8a7..bf599cf79d21483117bf4814d766d7e7c00d19e4 100644 (file)
--- a/STATUS
+++ b/STATUS
@@ -102,15 +102,6 @@ RELEASE SHOWSTOPPERS:
 PATCHES ACCEPTED TO BACKPORT FROM TRUNK:
   [ start all new proposals below, under PATCHES PROPOSED. ]
 
-   * mod_cache_socache: Add cache status to server-status.
-     The status_hook simply calls the status function of
-     socache, very much like mod_ssl does for the ssl
-     session cache. 
-     trunk patch: http://svn.apache.org/r1629507
-     trunk patch: http://svn.apache.org/r1629652
-     2.4.x patch: trunk works modulo CHANGES
-     +1: rjung, covener, jim
-
    * mod_cache_socache: Change average object size
      hint from 32 bytes to 2048 bytes. 
      trunk patch: http://svn.apache.org/r1629508
index a138e6b8bf11ee44399b6951772a3fa66b201d7c..31f9f5e029f9a6a341f632d44159e5046ccc7fec 100644 (file)
@@ -22,6 +22,7 @@
 #include "http_config.h"
 #include "http_log.h"
 #include "http_core.h"
+#include "http_protocol.h"
 #include "ap_provider.h"
 #include "ap_socache.h"
 #include "util_filter.h"
@@ -30,6 +31,7 @@
 #include "util_mutex.h"
 
 #include "mod_cache.h"
+#include "mod_status.h"
 
 #include "cache_socache_common.h"
 
@@ -1375,6 +1377,56 @@ static apr_status_t destroy_cache(void *data)
     return APR_SUCCESS;
 }
 
+static int socache_status_hook(request_rec *r, int flags)
+{
+    apr_status_t status = APR_SUCCESS;
+    cache_socache_conf *conf = ap_get_module_config(r->server->module_config,
+                                                    &cache_socache_module);
+    if (!conf->provider || !conf->provider->socache_provider ||
+        !conf->provider->socache_instance) {
+        return DECLINED;
+    }
+
+    ap_rputs("<hr>\n"
+             "<table cellspacing=0 cellpadding=0>\n"
+             "<tr><td bgcolor=\"#000000\">\n"
+             "<b><font color=\"#ffffff\" face=\"Arial,Helvetica\">"
+             "mod_cache_socache Status:</font></b>\n"
+             "</td></tr>\n"
+             "<tr><td bgcolor=\"#ffffff\">\n", r);
+
+    if (socache_mutex) {
+        status = apr_global_mutex_lock(socache_mutex);
+        if (status != APR_SUCCESS) {
+            ap_log_rerror(APLOG_MARK, APLOG_ERR, status, r, APLOGNO(02816)
+                    "could not acquire lock for cache status");
+        }
+    }
+
+    if (status != APR_SUCCESS) {
+        ap_rputs("No cache status data available\n", r);
+    } else {
+        conf->provider->socache_provider->status(conf->provider->socache_instance,
+                                                 r, flags);
+    }
+
+    if (socache_mutex && status == APR_SUCCESS) {
+        status = apr_global_mutex_unlock(socache_mutex);
+        if (status != APR_SUCCESS) {
+            ap_log_rerror(APLOG_MARK, APLOG_ERR, status, r, APLOGNO(02817)
+                    "could not release lock for cache status");
+        }
+    }
+
+    ap_rputs("</td></tr>\n</table>\n", r);
+    return OK;
+}
+
+static void socache_status_register(apr_pool_t *p)
+{
+    APR_OPTIONAL_HOOK(ap, status_hook, socache_status_hook, NULL, NULL, APR_HOOK_MIDDLE);
+}
+
 static int socache_precfg(apr_pool_t *pconf, apr_pool_t *plog, apr_pool_t *ptmp)
 {
     apr_status_t rv = ap_mutex_register(pconf, cache_socache_id, NULL,
@@ -1384,6 +1436,10 @@ static int socache_precfg(apr_pool_t *pconf, apr_pool_t *plog, apr_pool_t *ptmp)
         "failed to register %s mutex", cache_socache_id);
         return 500; /* An HTTP status would be a misnomer! */
     }
+
+    /* Register to handle mod_status status page generation */
+    socache_status_register(pconf);
+
     return OK;
 }