mirror of
https://github.com/apache/httpd.git
synced 2025-08-07 04:02:58 +03:00
mod_ldap: Make LDAPSharedCacheSize 0 create a non-shared-memory cache per
process as opposed to disabling caching completely. This allows to use the non-shared-memory cache as a workaround for the shared memory cache not being available during graceful restarts PR: 48958 git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1096577 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
5
CHANGES
5
CHANGES
@@ -2,6 +2,11 @@
|
|||||||
|
|
||||||
Changes with Apache 2.3.12
|
Changes with Apache 2.3.12
|
||||||
|
|
||||||
|
*) mod_ldap: Make LDAPSharedCacheSize 0 create a non-shared-memory cache per
|
||||||
|
process as opposed to disabling caching completely. This allows to use
|
||||||
|
the non-shared-memory cache as a workaround for the shared memory cache
|
||||||
|
not being available during graceful restarts. PR 48958. [Stefan Fritsch]
|
||||||
|
|
||||||
*) Add new ap_reserve_module_slots/ap_reserve_module_slots_directive API,
|
*) Add new ap_reserve_module_slots/ap_reserve_module_slots_directive API,
|
||||||
necessary if a module (like mod_perl) registers additional modules late
|
necessary if a module (like mod_perl) registers additional modules late
|
||||||
in the startup phase. [Stefan Fritsch]
|
in the startup phase. [Stefan Fritsch]
|
||||||
|
@@ -423,7 +423,8 @@ by other LDAP modules</description>
|
|||||||
<usage>
|
<usage>
|
||||||
<p>Specifies the number of bytes to allocate for the shared
|
<p>Specifies the number of bytes to allocate for the shared
|
||||||
memory cache. The default is 500kb. If set to 0, shared memory
|
memory cache. The default is 500kb. If set to 0, shared memory
|
||||||
caching will not be used.</p>
|
caching will not be used and every HTTPD process will create its
|
||||||
|
own cache.</p>
|
||||||
</usage>
|
</usage>
|
||||||
</directivesynopsis>
|
</directivesynopsis>
|
||||||
|
|
||||||
|
@@ -2728,9 +2728,12 @@ static int util_ldap_post_config(apr_pool_t *p, apr_pool_t *plog,
|
|||||||
if (ap_state_query(AP_SQ_MAIN_STATE) == AP_SQ_MS_CREATE_PRE_CONFIG) {
|
if (ap_state_query(AP_SQ_MAIN_STATE) == AP_SQ_MS_CREATE_PRE_CONFIG) {
|
||||||
|
|
||||||
#if APR_HAS_SHARED_MEMORY
|
#if APR_HAS_SHARED_MEMORY
|
||||||
/* If the cache file already exists then delete it. Otherwise we are
|
/*
|
||||||
* going to run into problems creating the shared memory. */
|
* If we are using shared memory caching and the cache file already
|
||||||
if (st->cache_file) {
|
* exists then delete it. Otherwise we are going to run into problems
|
||||||
|
* creating the shared memory.
|
||||||
|
*/
|
||||||
|
if (st->cache_file && st->cache_bytes > 0) {
|
||||||
char *lck_file = apr_pstrcat(ptemp, st->cache_file, ".lck",
|
char *lck_file = apr_pstrcat(ptemp, st->cache_file, ".lck",
|
||||||
NULL);
|
NULL);
|
||||||
apr_file_remove(lck_file, ptemp);
|
apr_file_remove(lck_file, ptemp);
|
||||||
@@ -2740,10 +2743,10 @@ static int util_ldap_post_config(apr_pool_t *p, apr_pool_t *plog,
|
|||||||
}
|
}
|
||||||
|
|
||||||
#if APR_HAS_SHARED_MEMORY
|
#if APR_HAS_SHARED_MEMORY
|
||||||
/* initializing cache if shared memory size is not zero and we already
|
/*
|
||||||
* don't have shm address
|
* initializing cache if we don't already have a shm address
|
||||||
*/
|
*/
|
||||||
if (!st->cache_shm && st->cache_bytes > 0) {
|
if (!st->cache_shm) {
|
||||||
#endif
|
#endif
|
||||||
result = util_ldap_cache_init(p, st);
|
result = util_ldap_cache_init(p, st);
|
||||||
if (result != APR_SUCCESS) {
|
if (result != APR_SUCCESS) {
|
||||||
@@ -2865,7 +2868,7 @@ static const command_rec util_ldap_cmds[] = {
|
|||||||
AP_INIT_TAKE1("LDAPSharedCacheSize", util_ldap_set_cache_bytes,
|
AP_INIT_TAKE1("LDAPSharedCacheSize", util_ldap_set_cache_bytes,
|
||||||
NULL, RSRC_CONF,
|
NULL, RSRC_CONF,
|
||||||
"Set the size of the shared memory cache (in bytes). Use "
|
"Set the size of the shared memory cache (in bytes). Use "
|
||||||
"0 to disable the shared memory cache. (default: 100000)"),
|
"0 to disable the shared memory cache. (default: 500000)"),
|
||||||
|
|
||||||
AP_INIT_TAKE1("LDAPSharedCacheFile", util_ldap_set_cache_file,
|
AP_INIT_TAKE1("LDAPSharedCacheFile", util_ldap_set_cache_file,
|
||||||
NULL, RSRC_CONF,
|
NULL, RSRC_CONF,
|
||||||
|
@@ -420,27 +420,29 @@ apr_status_t util_ldap_cache_init(apr_pool_t *pool, util_ldap_state_t *st)
|
|||||||
apr_status_t result;
|
apr_status_t result;
|
||||||
apr_size_t size;
|
apr_size_t size;
|
||||||
|
|
||||||
if (st->cache_file) {
|
if (st->cache_bytes > 0) {
|
||||||
/* Remove any existing shm segment with this name. */
|
if (st->cache_file) {
|
||||||
apr_shm_remove(st->cache_file, st->pool);
|
/* Remove any existing shm segment with this name. */
|
||||||
}
|
apr_shm_remove(st->cache_file, st->pool);
|
||||||
|
}
|
||||||
|
|
||||||
size = APR_ALIGN_DEFAULT(st->cache_bytes);
|
size = APR_ALIGN_DEFAULT(st->cache_bytes);
|
||||||
|
|
||||||
result = apr_shm_create(&st->cache_shm, size, st->cache_file, st->pool);
|
result = apr_shm_create(&st->cache_shm, size, st->cache_file, st->pool);
|
||||||
if (result != APR_SUCCESS) {
|
if (result != APR_SUCCESS) {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Determine the usable size of the shm segment. */
|
/* Determine the usable size of the shm segment. */
|
||||||
size = apr_shm_size_get(st->cache_shm);
|
size = apr_shm_size_get(st->cache_shm);
|
||||||
|
|
||||||
/* This will create a rmm "handler" to get into the shared memory area */
|
/* This will create a rmm "handler" to get into the shared memory area */
|
||||||
result = apr_rmm_init(&st->cache_rmm, NULL,
|
result = apr_rmm_init(&st->cache_rmm, NULL,
|
||||||
apr_shm_baseaddr_get(st->cache_shm), size,
|
apr_shm_baseaddr_get(st->cache_shm), size,
|
||||||
st->pool);
|
st->pool);
|
||||||
if (result != APR_SUCCESS) {
|
if (result != APR_SUCCESS) {
|
||||||
return result;
|
return result;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@@ -331,16 +331,19 @@ util_ald_cache_t *util_ald_create_cache(util_ldap_state_t *st,
|
|||||||
{
|
{
|
||||||
util_ald_cache_t *cache;
|
util_ald_cache_t *cache;
|
||||||
unsigned long i;
|
unsigned long i;
|
||||||
|
#if APR_HAS_SHARED_MEMORY
|
||||||
|
apr_rmm_off_t block;
|
||||||
|
#endif
|
||||||
|
|
||||||
if (cache_size <= 0)
|
if (cache_size <= 0)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
#if APR_HAS_SHARED_MEMORY
|
#if APR_HAS_SHARED_MEMORY
|
||||||
if (!st->cache_rmm) {
|
if (!st->cache_rmm) {
|
||||||
return NULL;
|
cache = (util_ald_cache_t *)calloc(sizeof(util_ald_cache_t), 1);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
apr_rmm_off_t block = apr_rmm_calloc(st->cache_rmm, sizeof(util_ald_cache_t));
|
block = apr_rmm_calloc(st->cache_rmm, sizeof(util_ald_cache_t));
|
||||||
cache = block ? (util_ald_cache_t *)apr_rmm_addr_get(st->cache_rmm, block) : NULL;
|
cache = block ? (util_ald_cache_t *)apr_rmm_addr_get(st->cache_rmm, block) : NULL;
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
@@ -363,6 +366,14 @@ util_ald_cache_t *util_ald_create_cache(util_ldap_state_t *st,
|
|||||||
cache->nodes = (util_cache_node_t **)util_ald_alloc(cache, cache->size * sizeof(util_cache_node_t *));
|
cache->nodes = (util_cache_node_t **)util_ald_alloc(cache, cache->size * sizeof(util_cache_node_t *));
|
||||||
if (!cache->nodes) {
|
if (!cache->nodes) {
|
||||||
util_ald_free(cache, cache);
|
util_ald_free(cache, cache);
|
||||||
|
#if APR_HAS_SHARED_MEMORY
|
||||||
|
if (!st->cache_rmm)
|
||||||
|
free(cache);
|
||||||
|
else
|
||||||
|
apr_rmm_free(st->cache_rmm, block);
|
||||||
|
#else
|
||||||
|
free(cache);
|
||||||
|
#endif
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user