Browse Source

Remove statfile invalidation.

tags/0.9.0
Vsevolod Stakhov 9 years ago
parent
commit
8969605e58
1 changed files with 0 additions and 81 deletions
  1. 0
    81
      src/libstat/backends/mmaped_file.c

+ 0
- 81
src/libstat/backends/mmaped_file.c View File

@@ -107,8 +107,6 @@ typedef struct {
GHashTable *files; /**< hash table of opened files indexed by name */
rspamd_mempool_t *pool; /**< memory pool object */
rspamd_mempool_mutex_t *lock; /**< mutex */
struct event *invalidate_event; /**< event for pool invalidation */
struct timeval invalidate_tv;
gboolean mlock_ok; /**< whether it is possible to use mlock (2) to avoid statfiles unloading */
} rspamd_mmaped_file_ctx;

@@ -803,85 +801,6 @@ rspamd_mmaped_file_get_total (rspamd_mmaped_file_t *file)
return header->total_blocks;
}

static void
rspamd_mmaped_file_invalidate_cb (gint fd, short what, void *ud)
{
rspamd_mmaped_file_ctx *pool = ud;
GHashTableIter it;
gpointer k, v;
rspamd_mmaped_file_t *f;

g_hash_table_iter_init (&it, pool->files);
while (g_hash_table_iter_next (&it, &k, &v)) {
f = (rspamd_mmaped_file_t *)v;
msync (f->map, f->len, MS_ASYNC);
}

msg_info ("invalidating statfiles");
}


void
rspamd_mmaped_file_invalidate (rspamd_mmaped_file_ctx *pool,
time_t seconds,
time_t jitter)
{
gboolean pending;


if (pool->invalidate_event != NULL) {
pending = evtimer_pending (pool->invalidate_event, NULL);
if (pending) {
/* Replan event */
pool->invalidate_tv.tv_sec = seconds +
g_random_int_range (0, jitter);
pool->invalidate_tv.tv_usec = 0;
evtimer_add (pool->invalidate_event, &pool->invalidate_tv);
}
}
else {
pool->invalidate_event =
rspamd_mempool_alloc (pool->pool, sizeof (struct event));
pool->invalidate_tv.tv_sec = seconds + g_random_int_range (0, jitter);
pool->invalidate_tv.tv_usec = 0;
evtimer_set (pool->invalidate_event,
rspamd_mmaped_file_invalidate_cb,
pool);
evtimer_add (pool->invalidate_event, &pool->invalidate_tv);
msg_info ("invalidate of statfile pool is planned in %d seconds",
(gint)pool->invalidate_tv.tv_sec);
}
}



void
rspamd_mmaped_file_lock_all (rspamd_mmaped_file_ctx *pool)
{
gint i;
GHashTableIter it;
gpointer k, v;
rspamd_mmaped_file_t *f;


if (pool->mlock_ok) {
g_hash_table_iter_init (&it, pool->files);
while (g_hash_table_iter_next (&it, &k, &v)) {
f = (rspamd_mmaped_file_t *)v;
if (mlock (f->map, f->len) == -1) {
msg_warn (
"mlock of statfile failed, maybe you need to "
"increase RLIMIT_MEMLOCK limit for a process: %s",
strerror (errno));
pool->mlock_ok = FALSE;
return;
}
}
}
/* Do not try to lock if mlock failed */
}


gpointer
rspamd_mmaped_file_init (struct rspamd_config *cfg)
{

Loading…
Cancel
Save