return err;
}
- st->compare_cache_ttl = atol(ttl) * 1000000;
+ st->compare_cache_ttl = atol(ttl) * APR_USEC_PER_SEC;
ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, cmd->server, APLOGNO(01301)
"ldap cache: Setting operation cache TTL to %ld microseconds.",
#endif
st->cache_bytes = 500000;
- st->search_cache_ttl = 600000000;
+ st->search_cache_ttl = 600 * APR_USEC_PER_SEC; /* 10 minutes */
st->search_cache_size = 1024;
- st->compare_cache_ttl = 600000000;
+ st->compare_cache_ttl = 600 * APR_USEC_PER_SEC; /* 10 minutes */
st->compare_cache_size = 1024;
st->connections = NULL;
st->ssl_supported = 0;
unsigned long numentries; /* Current number of cache entries */
unsigned long fullmark; /* Used to keep track of when cache becomes 3/4 full */
apr_time_t marktime; /* Time that the cache became 3/4 full */
+ unsigned long ttl; /* Time to live for items in cache */
unsigned long (*hash)(void *); /* Func to hash the payload */
int (*compare)(void *, void *); /* Func to compare two payloads */
void * (*copy)(util_ald_cache_t *cache, void *); /* Func to alloc mem and copy payload to new mem */
util_url_node_t *util_ald_create_caches(util_ldap_state_t *s, const char *url);
util_ald_cache_t *util_ald_create_cache(util_ldap_state_t *st,
long cache_size,
+ long cache_ttl,
unsigned long (*hashfunc)(void *),
int (*comparefunc)(void *, void *),
void * (*copyfunc)(util_ald_cache_t *cache, void *),
{
unsigned long i;
util_cache_node_t *p, *q, **pp;
- apr_time_t t;
+ apr_time_t now;
if (!cache)
return;
- cache->last_purge = apr_time_now();
+ now = cache->last_purge = apr_time_now();
cache->npurged = 0;
cache->numpurges++;
+ /* If the marktime is farther back than TTL from now,
+ move the marktime forward to include additional expired entries.
+ */
+ if (now - cache->ttl > cache->marktime) {
+ cache->marktime = now - cache->ttl;
+ }
+
for (i=0; i < cache->size; ++i) {
pp = cache->nodes + i;
p = *pp;
}
}
- t = apr_time_now();
+ now = apr_time_now();
cache->avg_purgetime =
- ((t - cache->last_purge) + (cache->avg_purgetime * (cache->numpurges-1))) /
+ ((now - cache->last_purge) + (cache->avg_purgetime * (cache->numpurges-1))) /
cache->numpurges;
}
/* create the three caches */
search_cache = util_ald_create_cache(st,
st->search_cache_size,
+ st->search_cache_ttl,
util_ldap_search_node_hash,
util_ldap_search_node_compare,
util_ldap_search_node_copy,
util_ldap_search_node_display);
compare_cache = util_ald_create_cache(st,
st->compare_cache_size,
+ st->compare_cache_ttl,
util_ldap_compare_node_hash,
util_ldap_compare_node_compare,
util_ldap_compare_node_copy,
util_ldap_compare_node_display);
dn_compare_cache = util_ald_create_cache(st,
st->compare_cache_size,
+ st->compare_cache_ttl,
util_ldap_dn_compare_node_hash,
util_ldap_dn_compare_node_compare,
util_ldap_dn_compare_node_copy,
util_ald_cache_t *util_ald_create_cache(util_ldap_state_t *st,
long cache_size,
+ long cache_ttl,
unsigned long (*hashfunc)(void *),
int (*comparefunc)(void *, void *),
void * (*copyfunc)(util_ald_cache_t *cache, void *),
cache->free = freefunc;
cache->display = displayfunc;
+
cache->fullmark = cache->maxentries / 4 * 3;
cache->marktime = 0;
+ cache->ttl = cache_ttl;
cache->avg_purgetime = 0.0;
cache->numpurges = 0;
cache->last_purge = 0;
"<td bgcolor='#ffffff'><font size='-1' face='Arial,Helvetica' color='#000000'><b>%ld</b></font></td>"
"</tr>\n"
"<tr>\n"
+ "<td bgcolor='#000000'><font size='-1' face='Arial,Helvetica' color='#ffffff'><b>TTL (sec):</b></font></td>"
+ "<td bgcolor='#ffffff'><font size='-1' face='Arial,Helvetica' color='#000000'><b>%ld</b></font></td>"
+ "</tr>\n"
+ "<tr>\n"
"<td bgcolor='#000000'><font size='-1' face='Arial,Helvetica' color='#ffffff'><b>Full Mark:</b></font></td>"
"<td bgcolor='#ffffff'><font size='-1' face='Arial,Helvetica' color='#000000'><b>%ld</b></font></td>"
"</tr>\n"
util_ldap_cache->size,
util_ldap_cache->maxentries,
util_ldap_cache->numentries,
+ util_ldap_cache->ttl / APR_USEC_PER_SEC,
util_ldap_cache->fullmark,
date_str);
"<td><font size='-1' face='Arial,Helvetica' color='#ffffff'><b>Size</b></font></td>"
"<td><font size='-1' face='Arial,Helvetica' color='#ffffff'><b>Max Entries</b></font></td>"
"<td><font size='-1' face='Arial,Helvetica' color='#ffffff'><b># Entries</b></font></td>"
+ "<td><font size='-1' face='Arial,Helvetica' color='#ffffff'><b>TTL (sec)</b></font></td>"
"<td><font size='-1' face='Arial,Helvetica' color='#ffffff'><b>Full Mark</b></font></td>"
"<td><font size='-1' face='Arial,Helvetica' color='#ffffff'><b>Full Mark Time</b></font></td>"
"</tr>\n", r