Browse Source

[Feature] Improve maps checking frequency

tags/1.6.2
Vsevolod Stakhov 7 years ago
parent
commit
8c673af470
8 changed files with 36 additions and 17 deletions
  1. 4
    2
      src/controller.c
  2. 1
    1
      src/fuzzy_storage.c
  3. 24
    8
      src/libutil/map.c
  4. 2
    3
      src/libutil/map.h
  5. 2
    0
      src/libutil/map_private.h
  6. 1
    1
      src/lua_worker.c
  7. 1
    1
      src/rspamd_proxy.c
  8. 1
    1
      src/worker.c

+ 4
- 2
src/controller.c View File

@@ -3787,14 +3787,16 @@ start_controller_worker (struct rspamd_worker *worker)

rspamd_upstreams_library_config (worker->srv->cfg, worker->srv->cfg->ups_ctx,
ctx->ev_base, ctx->resolver->r);
/* Maps events */
rspamd_map_watch (worker->srv->cfg, ctx->ev_base, ctx->resolver);
rspamd_symbols_cache_start_refresh (worker->srv->cfg->cache, ctx->ev_base,
worker);
rspamd_stat_init (worker->srv->cfg, ctx->ev_base);

if (worker->index == 0) {
rspamd_worker_init_monitored (worker, ctx->ev_base, ctx->resolver);
rspamd_map_watch (worker->srv->cfg, ctx->ev_base, ctx->resolver, TRUE);
}
else {
rspamd_map_watch (worker->srv->cfg, ctx->ev_base, ctx->resolver, FALSE);
}

event_base_loop (ctx->ev_base, 0);

+ 1
- 1
src/fuzzy_storage.c View File

@@ -2833,7 +2833,7 @@ start_fuzzy (struct rspamd_worker *worker)
ctx->resolver = dns_resolver_init (worker->srv->logger,
ctx->ev_base,
worker->srv->cfg);
rspamd_map_watch (worker->srv->cfg, ctx->ev_base, ctx->resolver);
rspamd_map_watch (worker->srv->cfg, ctx->ev_base, ctx->resolver, 0);

/* Get peer pipe */
memset (&srv_cmd, 0, sizeof (srv_cmd));

+ 24
- 8
src/libutil/map.c View File

@@ -1061,8 +1061,10 @@ rspamd_map_read_cached (struct rspamd_map *map, struct rspamd_map_backend *bk,
* Async HTTP callback
*/
static void
rspamd_map_common_http_callback (struct rspamd_map *map, struct rspamd_map_backend *bk,
struct map_periodic_cbdata *periodic, gboolean check)
rspamd_map_common_http_callback (struct rspamd_map *map,
struct rspamd_map_backend *bk,
struct map_periodic_cbdata *periodic,
gboolean check)
{
struct http_map_data *data;
struct http_callback_data *cbd;
@@ -1080,9 +1082,15 @@ rspamd_map_common_http_callback (struct rspamd_map *map, struct rspamd_map_backe
rspamd_map_periodic_callback (-1, EV_TIMEOUT, periodic);
}
else {
/* Switch to the next backend */
periodic->cur_backend ++;
rspamd_map_periodic_callback (-1, EV_TIMEOUT, periodic);
if (map->active_http) {
/* Check even if there is a cached version */
goto check;
}
else {
/* Switch to the next backend */
periodic->cur_backend++;
rspamd_map_periodic_callback (-1, EV_TIMEOUT, periodic);
}
}

return;
@@ -1096,7 +1104,15 @@ rspamd_map_common_http_callback (struct rspamd_map *map, struct rspamd_map_backe
return;
}
}
else if (!map->active_http) {
/* Switch to the next backend */
periodic->cur_backend ++;
rspamd_map_periodic_callback (-1, EV_TIMEOUT, periodic);

return;
}

check:
cbd = g_slice_alloc0 (sizeof (struct http_callback_data));

cbd->ev_base = map->ev_base;
@@ -1384,9 +1400,8 @@ rspamd_map_periodic_callback (gint fd, short what, void *ud)

/* Start watching event for all maps */
void
rspamd_map_watch (struct rspamd_config *cfg,
struct event_base *ev_base,
struct rspamd_dns_resolver *resolver)
rspamd_map_watch (struct rspamd_config *cfg, struct event_base *ev_base,
struct rspamd_dns_resolver *resolver, gboolean active_http)
{
GList *cur = cfg->maps;
struct rspamd_map *map;
@@ -1396,6 +1411,7 @@ rspamd_map_watch (struct rspamd_config *cfg,
map = cur->data;
map->ev_base = ev_base;
map->r = resolver;
map->active_http = active_http;

rspamd_map_schedule_periodic (map, FALSE, TRUE, FALSE);


+ 2
- 3
src/libutil/map.h View File

@@ -69,9 +69,8 @@ struct rspamd_map* rspamd_map_add_from_ucl (struct rspamd_config *cfg,
/**
* Start watching of maps by adding events to libevent event loop
*/
void rspamd_map_watch (struct rspamd_config *cfg,
struct event_base *ev_base,
struct rspamd_dns_resolver *resolver);
void rspamd_map_watch (struct rspamd_config *cfg, struct event_base *ev_base,
struct rspamd_dns_resolver *resolver, gboolean active_http);

/**
* Remove all maps watched (remove events)

+ 2
- 0
src/libutil/map_private.h View File

@@ -81,6 +81,8 @@ struct rspamd_map {
gchar *description;
gchar *name;
guint32 id;
/* Should we check HTTP or just load cached data */
gboolean active_http;
struct timeval tv;
gdouble poll_timeout;
/* Shared lock for temporary disabling of map reading (e.g. when this map is written by UI) */

+ 1
- 1
src/lua_worker.c View File

@@ -393,7 +393,7 @@ start_lua_worker (struct rspamd_worker *worker)
}

/* Maps events */
rspamd_map_watch (worker->srv->cfg, ctx->ev_base, ctx->resolver);
rspamd_map_watch (worker->srv->cfg, ctx->ev_base, ctx->resolver, 0);

event_base_loop (ctx->ev_base, 0);
rspamd_worker_block_signals ();

+ 1
- 1
src/rspamd_proxy.c View File

@@ -2047,7 +2047,7 @@ start_rspamd_proxy (struct rspamd_worker *worker) {
ctx->ev_base,
worker->srv->cfg);
double_to_tv (ctx->timeout, &ctx->io_tv);
rspamd_map_watch (worker->srv->cfg, ctx->ev_base, ctx->resolver);
rspamd_map_watch (worker->srv->cfg, ctx->ev_base, ctx->resolver, 0);

rspamd_upstreams_library_config (worker->srv->cfg, ctx->cfg->ups_ctx,
ctx->ev_base, ctx->resolver->r);

+ 1
- 1
src/worker.c View File

@@ -679,7 +679,7 @@ start_worker (struct rspamd_worker *worker)
ctx->resolver = dns_resolver_init (worker->srv->logger,
ctx->ev_base,
worker->srv->cfg);
rspamd_map_watch (worker->srv->cfg, ctx->ev_base, ctx->resolver);
rspamd_map_watch (worker->srv->cfg, ctx->ev_base, ctx->resolver, 0);
rspamd_upstreams_library_config (worker->srv->cfg, ctx->cfg->ups_ctx,
ctx->ev_base, ctx->resolver->r);


Loading…
Cancel
Save