You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by ji...@apache.org on 2009/12/18 15:09:41 UTC
svn commit: r892257 - in /httpd/httpd/branches/2.2.x: CHANGES STATUS
docs/manual/mod/mod_ldap.xml modules/ldap/util_ldap.c
modules/ldap/util_ldap_cache_mgr.c
Author: jim
Date: Fri Dec 18 14:09:40 2009
New Revision: 892257
URL: http://svn.apache.org/viewvc?rev=892257&view=rev
Log:
Merge r822458 from trunk:
Work around broken cache management in mod_ldap: If LDAPSharedCacheSize is too
small, try to free some memory by purging the cache and log a warning.
Also increase the default LDAPSharedCacheSize to 500000. This is a more
realistic size suitable for the default values of 1024 for LdapCacheEntries and
LdapOpCacheEntries.
PR: 46749
Submitted by: sf
Reviewed/backported by: jim
Modified:
httpd/httpd/branches/2.2.x/CHANGES
httpd/httpd/branches/2.2.x/STATUS
httpd/httpd/branches/2.2.x/docs/manual/mod/mod_ldap.xml
httpd/httpd/branches/2.2.x/modules/ldap/util_ldap.c
httpd/httpd/branches/2.2.x/modules/ldap/util_ldap_cache_mgr.c
Modified: httpd/httpd/branches/2.2.x/CHANGES
URL: http://svn.apache.org/viewvc/httpd/httpd/branches/2.2.x/CHANGES?rev=892257&r1=892256&r2=892257&view=diff
==============================================================================
--- httpd/httpd/branches/2.2.x/CHANGES [utf-8] (original)
+++ httpd/httpd/branches/2.2.x/CHANGES [utf-8] Fri Dec 18 14:09:40 2009
@@ -15,6 +15,12 @@
*) mod_charset_lite: Honor 'CharsetOptions NoImplicitAdd'.
[Eric Covener]
+ *) mod_ldap: If LDAPSharedCacheSize is too small, try harder to purge
+ some cache entries and log a warning. Also increase the default
+ LDAPSharedCacheSize to 500000. This is a more realistic size suitable
+ for the default values of 1024 for LdapCacheEntries/LdapOpCacheEntries.
+ PR 46749. [Stefan Fritsch]
+
*) mod_rewrite: Make sure that a hostname:port isn't fully qualified if
the request is a CONNECT request. PR 47928
[Bill Zajac <billz consultla.com>]
Modified: httpd/httpd/branches/2.2.x/STATUS
URL: http://svn.apache.org/viewvc/httpd/httpd/branches/2.2.x/STATUS?rev=892257&r1=892256&r2=892257&view=diff
==============================================================================
--- httpd/httpd/branches/2.2.x/STATUS (original)
+++ httpd/httpd/branches/2.2.x/STATUS Fri Dec 18 14:09:40 2009
@@ -87,15 +87,6 @@
PATCHES ACCEPTED TO BACKPORT FROM TRUNK:
[ start all new proposals below, under PATCHES PROPOSED. ]
- * mod_ldap: Work around broken cache management in mod_ldap:
- If LDAPSharedCacheSize is too small, try to free some memory by purging
- the cache and log a warning.
- Also increase the default LDAPSharedCacheSize to 500000.
- PR 46749.
- Trunk Patch: http://svn.apache.org/viewvc?rev=822458&view=rev
- 2.2.x Patch: trunk patch works with some offsets
- +1: sf, rpluem, rjung, jim
-
* mod_mime: Make RemoveType override the info from TypesConfig
PR 38330.
Trunk Patch: http://svn.apache.org/viewvc?rev=821298&view=rev
Modified: httpd/httpd/branches/2.2.x/docs/manual/mod/mod_ldap.xml
URL: http://svn.apache.org/viewvc/httpd/httpd/branches/2.2.x/docs/manual/mod/mod_ldap.xml?rev=892257&r1=892256&r2=892257&view=diff
==============================================================================
--- httpd/httpd/branches/2.2.x/docs/manual/mod/mod_ldap.xml (original)
+++ httpd/httpd/branches/2.2.x/docs/manual/mod/mod_ldap.xml Fri Dec 18 14:09:40 2009
@@ -67,7 +67,7 @@
# be loaded. Change the "yourdomain.example.com" to<br />
# match your domain.<br />
<br />
- LDAPSharedCacheSize 200000<br />
+ LDAPSharedCacheSize 500000<br />
LDAPCacheEntries 1024<br />
LDAPCacheTTL 600<br />
LDAPOpCacheEntries 1024<br />
@@ -385,12 +385,12 @@
<name>LDAPSharedCacheSize</name>
<description>Size in bytes of the shared-memory cache</description>
<syntax>LDAPSharedCacheSize <var>bytes</var></syntax>
-<default>LDAPSharedCacheSize 102400</default>
+<default>LDAPSharedCacheSize 500000</default>
<contextlist><context>server config</context></contextlist>
<usage>
<p>Specifies the number of bytes to allocate for the shared
- memory cache. The default is 100kb. If set to 0, shared memory
+ memory cache. The default is 500kb. If set to 0, shared memory
caching will not be used.</p>
</usage>
</directivesynopsis>
Modified: httpd/httpd/branches/2.2.x/modules/ldap/util_ldap.c
URL: http://svn.apache.org/viewvc/httpd/httpd/branches/2.2.x/modules/ldap/util_ldap.c?rev=892257&r1=892256&r2=892257&view=diff
==============================================================================
--- httpd/httpd/branches/2.2.x/modules/ldap/util_ldap.c (original)
+++ httpd/httpd/branches/2.2.x/modules/ldap/util_ldap.c Fri Dec 18 14:09:40 2009
@@ -1820,7 +1820,7 @@
apr_thread_mutex_create(&st->mutex, APR_THREAD_MUTEX_DEFAULT, st->pool);
#endif
- st->cache_bytes = 100000;
+ st->cache_bytes = 500000;
st->search_cache_ttl = 600000000;
st->search_cache_size = 1024;
st->compare_cache_ttl = 600000000;
Modified: httpd/httpd/branches/2.2.x/modules/ldap/util_ldap_cache_mgr.c
URL: http://svn.apache.org/viewvc/httpd/httpd/branches/2.2.x/modules/ldap/util_ldap_cache_mgr.c?rev=892257&r1=892256&r2=892257&view=diff
==============================================================================
--- httpd/httpd/branches/2.2.x/modules/ldap/util_ldap_cache_mgr.c (original)
+++ httpd/httpd/branches/2.2.x/modules/ldap/util_ldap_cache_mgr.c Fri Dec 18 14:09:40 2009
@@ -385,6 +385,7 @@
void *util_ald_cache_insert(util_ald_cache_t *cache, void *payload)
{
unsigned long hashval;
+ void *tmp_payload;
util_cache_node_t *node;
/* sanity check */
@@ -397,21 +398,68 @@
util_ald_cache_purge(cache);
if (cache->numentries >= cache->maxentries) {
/* if the purge was not effective, we leave now to avoid an overflow */
+ ap_log_error(APLOG_MARK, APLOG_ERR, 0, NULL,
+ "Purge of LDAP cache failed");
return NULL;
}
}
- /* should be safe to add an entry */
- if ((node = (util_cache_node_t *)util_ald_alloc(cache, sizeof(util_cache_node_t))) == NULL) {
- return NULL;
+ node = (util_cache_node_t *)util_ald_alloc(cache,
+ sizeof(util_cache_node_t));
+ if (node == NULL) {
+ /*
+ * XXX: The cache management should be rewritten to work
+ * properly when LDAPSharedCacheSize is too small.
+ */
+ ap_log_error(APLOG_MARK, APLOG_WARNING, 0, NULL,
+ "LDAPSharedCacheSize is too small. Increase it or "
+ "reduce LDAPCacheEntries/LDAPOpCacheEntries!");
+ if (cache->numentries < cache->fullmark) {
+ /*
+ * We have not even reached fullmark, trigger a complete purge.
+ * This is still better than not being able to add new entries
+ * at all.
+ */
+ cache->marktime = apr_time_now();
+ }
+ util_ald_cache_purge(cache);
+ node = (util_cache_node_t *)util_ald_alloc(cache,
+ sizeof(util_cache_node_t));
+ if (node == NULL) {
+ ap_log_error(APLOG_MARK, APLOG_ERR, 0, NULL,
+ "Could not allocate memory for LDAP cache entry");
+ return NULL;
+ }
}
/* Take a copy of the payload before proceeeding. */
- payload = (*cache->copy)(cache, payload);
- if (!payload) {
- util_ald_free(cache, node);
- return NULL;
+ tmp_payload = (*cache->copy)(cache, payload);
+ if (tmp_payload == NULL) {
+ /*
+ * XXX: The cache management should be rewritten to work
+ * properly when LDAPSharedCacheSize is too small.
+ */
+ ap_log_error(APLOG_MARK, APLOG_WARNING, 0, NULL,
+ "LDAPSharedCacheSize is too small. Increase it or "
+ "reduce LDAPCacheEntries/LDAPOpCacheEntries!");
+ if (cache->numentries < cache->fullmark) {
+ /*
+ * We have not even reached fullmark, trigger a complete purge.
+ * This is still better than not being able to add new entries
+ * at all.
+ */
+ cache->marktime = apr_time_now();
+ }
+ util_ald_cache_purge(cache);
+ tmp_payload = (*cache->copy)(cache, payload);
+ if (tmp_payload == NULL) {
+ ap_log_error(APLOG_MARK, APLOG_ERR, 0, NULL,
+ "Could not allocate memory for LDAP cache value");
+ util_ald_free(cache, node);
+ return NULL;
+ }
}
+ payload = tmp_payload;
/* populate the entry */
cache->inserts++;