httpd-cvs mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From jaillet...@apache.org
Subject svn commit: r1696105 - in /httpd/httpd/trunk: CHANGES docs/manual/mod/mod_socache_memcache.xml modules/cache/mod_socache_memcache.c
Date Sat, 15 Aug 2015 22:05:09 GMT
Author: jailletc36
Date: Sat Aug 15 22:05:08 2015
New Revision: 1696105

URL: http://svn.apache.org/r1696105
Log:
With the current implementation, it is likely to connect/close a socket with the memcache
server for each command sent.
The root cause is a too small idle timeout (600 microseconds).

Add a new directive, 'MemcacheConnTTL',  to control this idle connection timeout with the
memcache server(s).
Change the default value from 600 usec (!) to 15 sec as per Yann suggestion.

I've limited accepted values from 1 to 1800 seconds (half an hour) because internaly, the
value passed to 'apr_memcache_server_create' is still in mirco-seconds.

PR 58091

Modified:
    httpd/httpd/trunk/CHANGES
    httpd/httpd/trunk/docs/manual/mod/mod_socache_memcache.xml
    httpd/httpd/trunk/modules/cache/mod_socache_memcache.c

Modified: httpd/httpd/trunk/CHANGES
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/CHANGES?rev=1696105&r1=1696104&r2=1696105&view=diff
==============================================================================
--- httpd/httpd/trunk/CHANGES [utf-8] (original)
+++ httpd/httpd/trunk/CHANGES [utf-8] Sat Aug 15 22:05:08 2015
@@ -1,6 +1,11 @@
                                                          -*- coding: utf-8 -*-
 Changes with Apache 2.5.0
 
+  *) mod_socache_memcache: Add the 'MemcacheConnTTL' directive to control how 
+     long to keep idle connections with the memcache server(s).
+     Change default value from 600 usec (!) to 15 sec. PR 58091
+     [Christophe Jaillet]
+
   *) mod_dir: Prevent the internal identifier "httpd/unix-directory" from
      appearing as a Content-Type response header when requests for a directory
      are rewritten by mod_rewrite. [Eric Covener]

Modified: httpd/httpd/trunk/docs/manual/mod/mod_socache_memcache.xml
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/docs/manual/mod/mod_socache_memcache.xml?rev=1696105&r1=1696104&r2=1696105&view=diff
==============================================================================
--- httpd/httpd/trunk/docs/manual/mod/mod_socache_memcache.xml (original)
+++ httpd/httpd/trunk/docs/manual/mod/mod_socache_memcache.xml Sat Aug 15 22:05:08 2015
@@ -52,4 +52,25 @@
 
 </summary>
 
+<directivesynopsis>
+<name>MemcacheConnTTL</name>
+<description>Keepalive time for idle connections</description>
+<syntax>MemcacheConnTTL <em>seconds</em></syntax>
+<default>MemcacheConnTTL 15</default>
+<contextlist>
+<context>server config</context>
+<context>virtual host</context>
+</contextlist>
+
+<usage>
+
+    <p>Set the time, in seconds, to keep idle connections with the memcache
+    server(s) alive (threaded platforms only).</p>
+    
+    <p>Valid values for <directive>MemcacheConnTTL</directive> are integers
+    from 1 to 1800. That is to say, up to half an hour.</p>
+
+</usage>
+</directivesynopsis>
+
 </modulesynopsis>

Modified: httpd/httpd/trunk/modules/cache/mod_socache_memcache.c
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/modules/cache/mod_socache_memcache.c?rev=1696105&r1=1696104&r2=1696105&view=diff
==============================================================================
--- httpd/httpd/trunk/modules/cache/mod_socache_memcache.c (original)
+++ httpd/httpd/trunk/modules/cache/mod_socache_memcache.c Sat Aug 15 22:05:08 2015
@@ -51,9 +51,15 @@
 #endif
 
 #ifndef MC_DEFAULT_SERVER_TTL
-#define MC_DEFAULT_SERVER_TTL 600
+#define MC_DEFAULT_SERVER_TTL (15*1000*1000)        /* 15 seconds */
 #endif
 
+module AP_MODULE_DECLARE_DATA socache_memcache_module;
+
+typedef struct {
+    unsigned int ttl;
+} socache_mc_svr_cfg;
+
 struct ap_socache_instance_t {
     const char *servers;
     apr_memcache_t *mc;
@@ -90,6 +96,9 @@ static apr_status_t socache_mc_init(ap_s
     char *split;
     char *tok;
 
+    socache_mc_svr_cfg *sconf = ap_get_module_config(s->module_config,
+                                                     &socache_memcache_module);
+
     ap_mpm_query(AP_MPMQ_HARD_LIMIT_THREADS, &thread_limit);
 
     /* Find all the servers in the first run to get a total count */
@@ -140,7 +149,7 @@ static apr_status_t socache_mc_init(ap_s
                                         MC_DEFAULT_SERVER_MIN,
                                         MC_DEFAULT_SERVER_SMAX,
                                         thread_limit,
-                                        MC_DEFAULT_SERVER_TTL,
+                                        sconf->ttl,
                                         &st);
         if (rv != APR_SUCCESS) {
             ap_log_error(APLOG_MARK, APLOG_CRIT, rv, s, APLOGNO(00788)
@@ -310,6 +319,35 @@ static const ap_socache_provider_t socac
 
 #endif /* HAVE_APU_MEMCACHE */
 
+static void *create_server_config(apr_pool_t *p, server_rec *s)
+{
+    socache_mc_svr_cfg *sconf = apr_pcalloc(p, sizeof(socache_mc_svr_cfg));
+    
+    sconf->ttl = MC_DEFAULT_SERVER_TTL;
+
+    return sconf;
+}
+
+static const char *socache_mc_set_ttl(cmd_parms *cmd, void *dummy,
+                                      const char *arg)
+{
+    socache_mc_svr_cfg *sconf = ap_get_module_config(cmd->server->module_config,
+                                                     &socache_memcache_module);
+    int i;
+
+    i = atoi(arg);
+
+    if ((i < 1) || (i > 1800)) {
+        return apr_pstrcat(cmd->pool, cmd->cmd->name,
+                           " must be a number between 1 and 1800.", NULL);
+    }
+
+    /* apr_memcache_server_create needs a ttl in usec. */
+    sconf->ttl = i * 1000 * 1000;
+
+    return NULL;
+}
+
 static void register_hooks(apr_pool_t *p)
 {
 #ifdef HAVE_APU_MEMCACHE
@@ -319,8 +357,18 @@ static void register_hooks(apr_pool_t *p
 #endif
 }
 
+static const command_rec socache_memcache_cmds[] = {
+    AP_INIT_TAKE1("MemcacheConnTTL", socache_mc_set_ttl, NULL, RSRC_CONF,
+                  "TTL used for the connection with the memcache server(s), in seconds"),
+    { NULL }
+};
+
 AP_DECLARE_MODULE(socache_memcache) = {
     STANDARD20_MODULE_STUFF,
-    NULL, NULL, NULL, NULL, NULL,
-    register_hooks
+    NULL,                     /* create per-dir    config structures */
+    NULL,                     /* merge  per-dir    config structures */
+    create_server_config,     /* create per-server config structures */
+    NULL,                     /* merge  per-server config structures */
+    socache_memcache_cmds,    /* table of config file commands       */
+    register_hooks            /* register hooks                      */
 };



Mime
View raw message