]> source.dussan.org Git - rspamd.git/commitdiff
[Feature] Execute on_load scripts with ev_base ready
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Mon, 17 Oct 2016 16:01:59 +0000 (17:01 +0100)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Mon, 17 Oct 2016 16:02:45 +0000 (17:02 +0100)
12 files changed:
src/controller.c
src/fuzzy_storage.c
src/hs_helper.c
src/libserver/cfg_utils.c
src/libserver/worker_util.c
src/libserver/worker_util.h
src/log_helper.c
src/lua/lua_common.c
src/lua/lua_common.h
src/lua_worker.c
src/rspamd_proxy.c
src/worker.c

index ba6ee75617f142ce4c93d13d7115c4f6a92b3b45..4a1df5aff21f98f5483e50d282f61254f5fcc3d6 100644 (file)
@@ -2977,7 +2977,8 @@ start_controller_worker (struct rspamd_worker *worker)
 
        ctx->ev_base = rspamd_prepare_worker (worker,
                        "controller",
-                       rspamd_controller_accept_socket);
+                       rspamd_controller_accept_socket,
+                       TRUE);
        msec_to_tv (ctx->timeout, &ctx->io_tv);
 
        ctx->start_time = time (NULL);
index feac6e11b1ad2c493846c4c195f10edcfde07bc3..7ee22c38cc1ada0c44f7a00ebe95d81f1b169b57 100644 (file)
@@ -2252,7 +2252,8 @@ start_fuzzy (struct rspamd_worker *worker)
 
        ctx->ev_base = rspamd_prepare_worker (worker,
                        "fuzzy",
-                       NULL);
+                       NULL,
+                       FALSE);
        ctx->peer_fd = -1;
        ctx->worker = worker;
        double_to_tv (ctx->master_timeout, &ctx->master_io_tv);
index 2d391936272667b20e24579b70d24e3660d13350..90abdf0be3e8ace5a1e7c4f2dde915131c802504 100644 (file)
@@ -278,7 +278,8 @@ start_hs_helper (struct rspamd_worker *worker)
 
        ctx->ev_base = rspamd_prepare_worker (worker,
                        "hs_helper",
-                       NULL);
+                       NULL,
+                       FALSE);
 
        if (!rspamd_rs_compile (ctx, worker, FALSE)) {
                /* Tell main not to respawn more workers */
index a50986c8090fc057990a97d906735b09f3b97d8c..f5cf5d2326d37558098b2acff17918947f415aa9 100644 (file)
@@ -642,8 +642,6 @@ rspamd_config_post_load (struct rspamd_config *cfg,
        struct timespec ts;
 #endif
        struct metric *def_metric;
-       struct rspamd_config_post_load_script *sc;
-       struct rspamd_config **pcfg;
        gboolean ret = TRUE;
 
 #ifdef HAVE_CLOCK_GETTIME
@@ -750,22 +748,6 @@ rspamd_config_post_load (struct rspamd_config *cfg,
                rspamd_config_libs (cfg->libs_ctx, cfg);
        }
 
-       /* Execute post load scripts */
-       LL_FOREACH (cfg->on_load, sc) {
-               lua_rawgeti (cfg->lua_state, LUA_REGISTRYINDEX, sc->cbref);
-               pcfg = lua_newuserdata (cfg->lua_state, sizeof (*pcfg));
-               *pcfg = cfg;
-               rspamd_lua_setclass (cfg->lua_state, "rspamd{config}", -1);
-
-               if (lua_pcall (cfg->lua_state, 1, 0, 0) != 0) {
-                       msg_err_config ("error executing post load code: %s",
-                                       lua_tostring (cfg->lua_state, -1));
-                       lua_pop (cfg->lua_state, 1);
-
-                       return FALSE;
-               }
-       }
-
        /* Validate cache */
        if (opts & RSPAMD_CONFIG_INIT_VALIDATE) {
                return rspamd_symbols_cache_validate (cfg->cache, cfg, FALSE) && ret;
index 80fec531ca44a4cfcac780de1640fbfc274a48b3..056177e1cc830e8e23c27abadb5f560a60de0304 100644 (file)
@@ -257,7 +257,7 @@ rspamd_worker_init_signals (struct rspamd_worker *worker, struct event_base *bas
 
 struct event_base *
 rspamd_prepare_worker (struct rspamd_worker *worker, const char *name,
-       void (*accept_handler)(int, short, void *))
+       void (*accept_handler)(int, short, void *), gboolean load_lua)
 {
        struct event_base *ev_base;
        struct event *accept_events;
@@ -301,6 +301,12 @@ rspamd_prepare_worker (struct rspamd_worker *worker, const char *name,
                }
        }
 
+       if (load_lua) {
+               struct rspamd_config *cfg = worker->srv->cfg;
+
+               rspamd_lua_run_postloads (cfg->lua_state, cfg, ev_base);
+       }
+
        return ev_base;
 }
 
index 9d129f140e9ff41525483df42b5f222e00c39f35..63a18a4fe381b83e0fa9234de0c87bd5b489c959 100644 (file)
@@ -40,7 +40,7 @@ struct rspamd_worker_signal_handler;
  */
 struct event_base *
 rspamd_prepare_worker (struct rspamd_worker *worker, const char *name,
-       void (*accept_handler)(int, short, void *));
+       void (*accept_handler)(int, short, void *), gboolean load_lua);
 
 /**
  * Set special signal handler for a worker
index 995420a41f71838754458412c9c82b9663a9806d..96075ea4780fbd48276dfd3a5657041a621f95ff 100644 (file)
@@ -177,7 +177,8 @@ start_log_helper (struct rspamd_worker *worker)
 
        ctx->ev_base = rspamd_prepare_worker (worker,
                        "log_helper",
-                       NULL);
+                       NULL,
+                       TRUE);
        ctx->cfg = worker->srv->cfg;
        ctx->scripts = worker->cf->scripts;
        ctx->L = ctx->cfg->lua_state;
index 0b19f49aeed3b749617712025f9392241446d10d..efe4f45cfc4aa07a1dc304bb20a37cd8d5f9dcf0 100644 (file)
@@ -16,6 +16,7 @@
 #include "lua_common.h"
 #include "lua/global_functions.lua.h"
 #include "lptree.h"
+#include "utlist.h"
 
 /* Lua module init function */
 #define MODULE_INIT_FUNC "module_init"
@@ -1136,3 +1137,34 @@ lua_check_ev_base (lua_State * L, gint pos)
        luaL_argcheck (L, ud != NULL, pos, "'event_base' expected");
        return ud ? *((struct event_base **)ud) : NULL;
 }
+
+gboolean
+rspamd_lua_run_postloads (lua_State *L, struct rspamd_config *cfg,
+               struct event_base *ev_base)
+{
+       struct rspamd_config_post_load_script *sc;
+       struct rspamd_config **pcfg;
+       struct event_base **pev_base;
+
+       /* Execute post load scripts */
+       LL_FOREACH (cfg->on_load, sc) {
+               lua_rawgeti (cfg->lua_state, LUA_REGISTRYINDEX, sc->cbref);
+               pcfg = lua_newuserdata (cfg->lua_state, sizeof (*pcfg));
+               *pcfg = cfg;
+               rspamd_lua_setclass (cfg->lua_state, "rspamd{config}", -1);
+
+               pev_base = lua_newuserdata (cfg->lua_state, sizeof (*pev_base));
+               *pev_base = ev_base;
+               rspamd_lua_setclass (cfg->lua_state, "rspamd{ev_base}", -1);
+
+               if (lua_pcall (cfg->lua_state, 2, 0, 0) != 0) {
+                       msg_err_config ("error executing post load code: %s",
+                                       lua_tostring (cfg->lua_state, -1));
+                       lua_pop (cfg->lua_state, 1);
+
+                       return FALSE;
+               }
+       }
+
+       return TRUE;
+}
index de69654143bd862435f46a0655d7d52af0f108b4..ae037632829e05df4aa08121909d638df0a0207d 100644 (file)
@@ -364,5 +364,14 @@ void lua_call_finish_script (lua_State *L, struct
                rspamd_config_post_load_script *sc,
                struct rspamd_task *task);
 
+/**
+ * Run post-load operations
+ * @param L
+ * @param cfg
+ * @param ev_base
+ */
+gboolean rspamd_lua_run_postloads (lua_State *L, struct rspamd_config *cfg,
+               struct event_base *ev_base);
+
 #endif /* WITH_LUA */
 #endif /* RSPAMD_LUA_H */
index b74b8d42222143afa2ee8c12615906d7d701bf2c..63086670a37f8684afc368acaef737ad174ef241 100644 (file)
@@ -350,7 +350,8 @@ start_lua_worker (struct rspamd_worker *worker)
 
        ctx->ev_base = rspamd_prepare_worker (worker,
                        "lua_worker",
-                       lua_accept_socket);
+                       lua_accept_socket,
+                       TRUE);
 
        L = worker->srv->cfg->lua_state;
        ctx->L = L;
index 151d1b7314d1ed872f4994e3e37e0a05dd1a9572..0b5a5607b33473c6be054e6a84a405045ff427e2 100644 (file)
@@ -1445,7 +1445,8 @@ start_rspamd_proxy (struct rspamd_worker *worker)
        struct timeval rot_tv;
 
        ctx->ev_base = rspamd_prepare_worker (worker, "rspamd_proxy",
-                       proxy_accept_socket);
+                       proxy_accept_socket,
+                       TRUE);
 
        ctx->resolver = dns_resolver_init (worker->srv->logger,
                        ctx->ev_base,
index 0e16922f39755ad4e236d58f07ab0016572ac4be..03ada9ab31b11eeb257ee0a69502780221411318 100644 (file)
@@ -576,7 +576,7 @@ start_worker (struct rspamd_worker *worker)
        struct rspamd_worker_ctx *ctx = worker->ctx;
        struct rspamd_worker_log_pipe *lp, *ltmp;
 
-       ctx->ev_base = rspamd_prepare_worker (worker, "normal", accept_socket);
+       ctx->ev_base = rspamd_prepare_worker (worker, "normal", accept_socket, TRUE);
        msec_to_tv (ctx->timeout, &ctx->io_tv);
        rspamd_symbols_cache_start_refresh (worker->srv->cfg->cache, ctx->ev_base);